diff --git a/.clang-format b/.clang-format index 3838b6b1f..64ab822b6 100644 --- a/.clang-format +++ b/.clang-format @@ -30,7 +30,7 @@ BraceWrapping: BeforeCatch: false BeforeElse: false IndentBraces: false -BreakBeforeBinaryOperators: None +BreakBeforeBinaryOperators: NonAssignment BreakBeforeBraces: Custom BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: true diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 4f937513c..89c3bb2eb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -94,7 +94,7 @@ The Branch Strategy is based on [git-flow-lite](http://nvie.com/posts/a-successf * **master** – points to the latest public release * **develop** – points to the development of the next release, contains tested and reviewed code * **feature/**[name] – points to a branch with a new feature, one which is candidate for merge into develop (subject to rebase) -* **hotfix/**[id]-[description] – points to a branch with a fix for a particular issue ID +* **hotfix/**[name] – points to a branch with a fix for a particular issue ID ### Git commit messages @@ -103,14 +103,16 @@ The Branch Strategy is based on [git-flow-lite](http://nvie.com/posts/a-successf * Use the imperative mood ("Move cursor to…" not "Moves cursor to…") * Limit the first line to 72 characters or less * Reference issues and pull requests liberally -* If your pull request fixes an existing issue, add "…, resolves #ISSUENUMBER" to your main commit -* When only changing documentation, include `[ci skip]` in the commit description +* If your pull request fixes an existing issue, add "Fixes #ISSUENUMBER" to your pull request description ### Coding styleguide -This project follows the [Qt Coding Style](https://wiki.qt.io/Qt_Coding_Style). All submissions are expected to follow this style. +The coding style of the project is enforced using llvm's `clang-format` formatting tool. A thorough description +of the coding style can be found in the `.clang-format` file, but the main conventions are presented here. -In particular, code must stick to the following rules: +Formatting can be performed automatically by calling `make format` from the `build/` directory. + +Note that [formatting can be disabled on a piece of code](https://clang.llvm.org/docs/ClangFormatStyleOptions.html#disabling-formatting-on-a-piece-of-code) if manual formatting is deemed more readable. #### Naming convention `lowerCamelCase` @@ -122,15 +124,67 @@ For names made of multiple concatenated words, the first letter of the whole is For **C++ files** (*.cpp .h*): 4 spaces For **Qt-UI files** (*.ui*): 2 spaces -#### Pointers +#### Includes +```c +// Class includes +#include "MyWidget.h" +#include "ui_MyWidget.h" + +// Application includes +#include "core/Config.h" +#include "core/FilePath.h" + +// Global includes +#include +#include +``` + +#### Classes +```c +// Note: order is important, stay organized! +class MyWidget : public QWidget +{ + Q_OBJECT + +public: + explicit MyWidget(QWidget* parent); + ~MyWidget() override; + +signals: + void alert(); + +public slots: + void processEvent(Event* event); + +private slots: + void myEvent(Event* event); + +private: + const QScopedPointer m_ui; + int m_counter; +}; + +// Note: alignment of variable initialization +MyWidget::MyWidget(QWidget* parent) + : QWidget(parent) + , m_ui(new Ui::MyWidget()) +{ + +} +``` + +#### Pointers / References ```c int* count; +const QString& string; ``` #### Braces ```c if (condition) { doSomething(); +} else { + doSomethingElse(); } void ExampleClass::exampleFunction() @@ -141,15 +195,18 @@ void ExampleClass::exampleFunction() #### Switch statement ```c +// Note: avoid declaring variables in a switch statement switch (a) { case 1: doSomething(); break; -default: +// Note: use braces if necessary +default: { doSomethingElse(); break; } +} ``` #### Member variables diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index cf8b88f10..000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,40 +0,0 @@ - - -## Expected Behavior - - - -## Current Behavior - - - -## Possible Solution - - - -## Steps to Reproduce (for bugs) - - -1. -2. -3. -4. - -## Context - - - -## Debug Info - -KeePassXC - VERSION -Revision: REVISION - -Libraries: -- LIBS - -Operating system: OS -CPU architecture: ARCH -Kernel: KERNEL - -Enabled extensions: -- EXTENSIONS diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 000000000..4b6d16c6c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,49 @@ +--- +name: Bug Report +about: provide information about a problem +title: +labels: bug +assignees: '' + +--- + +[TIP]: # ( Provide a general summary of the issue in the title above ^^ ) +[TIP]: # ( DO NOT include screenshots of your actual database! ) + +## Expected Behavior +[NOTE]: # ( Tell us what you expected to happen ) + + +## Current Behavior +[NOTE]: # ( Tell us what actually happens ) + + +## Possible Solution +[NOTE]: # ( Not required, but suggest a fix/reason for the bug ) + + +## Steps to Reproduce +[NOTE]: # ( Provide a link to a live example, or an unambiguous set of steps to ) +[NOTE]: # ( reproduce this bug. Include code to reproduce, if relevant ) +1. +2. +3. + +## Context +[NOTE]: # ( How has this issue affected you? What unique circumstances do you have? ) + + +## Debug Info +[NOTE]: # ( Paste debug info from Help → About here ) +KeePassXC - VERSION +Revision: REVISION + +Libraries: +- LIBS + +Operating system: OS +CPU architecture: ARCH +Kernel: KERNEL + +Enabled extensions: +- EXTENSIONS diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 000000000..90c28c42b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,26 @@ +--- +name: Feature Request +about: tell us about a new capability you want to see +title: +labels: new feature +assignees: '' + +--- + +[TIP]: # ( Provide a general summary of the feature in the title above ^^ ) +[TIP]: # ( DO NOT include screenshots of your actual database! ) + +## Summary +[NOTE]: # ( Provide a brief overview of what the new feature is all about ) + + +## Desired Behavior +[NOTE]: # ( Tell us how the new feature should work, be specific ) + + +## Possible Solution +[NOTE]: # ( Not required, but suggest ideas on how to implement the addition or change ) + + +## Context +[NOTE]: # ( Why does this feature matter to you? What unique circumstances do you have? ) diff --git a/.github/ISSUE_TEMPLATE/release-preview-bug-report.md b/.github/ISSUE_TEMPLATE/release-preview-bug-report.md new file mode 100644 index 000000000..25b720168 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/release-preview-bug-report.md @@ -0,0 +1,49 @@ +--- +name: Release Preview Bug report +about: report a bug with a release preview (eg, 2.4.0-beta1) +title: "[PRE-RELEASE] " +labels: PRE-RELEASE BUG +assignees: droidmonkey + +--- + +[TIP]: # ( Provide a general summary of the issue in the title above ^^ ) +[TIP]: # ( DO NOT include screenshots of your actual database! ) + +## Expected Behavior +[NOTE]: # ( Tell us what you expected to happen ) + + +## Current Behavior +[NOTE]: # ( Tell us what actually happens ) + + +## Possible Solution +[NOTE]: # ( Not required, but suggest a fix/reason for the bug ) + + +## Steps to Reproduce +[NOTE]: # ( Provide a link to a live example, or an unambiguous set of steps to ) +[NOTE]: # ( reproduce this bug. Include code to reproduce, if relevant ) +1. +2. +3. + +## Context +[NOTE]: # ( How has this issue affected you? What unique circumstances do you have? ) + + +## Debug Info +[NOTE]: # ( Paste debug info from Help → About here ) +KeePassXC - VERSION +Revision: REVISION + +Libraries: +- LIBS + +Operating system: OS +CPU architecture: ARCH +Kernel: KERNEL + +Enabled extensions: +- EXTENSIONS diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b9852f3c9..89b548554 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,34 +1,36 @@ - +[TIP]: # ( Provide a general summary of your changes in the title above ^^ ) -## Description - - -## Motivation and context - - - -## How has this been tested? - - - - -## Screenshots (if appropriate): - -## Types of changes - - +## Type of change +[NOTE]: # ( Please remove all lines which don't apply. ) - ✅ Bug fix (non-breaking change which fixes an issue) +- ✅ Refactor (significant modification to existing code) - ✅ New feature (non-breaking change which adds functionality) - ✅ Breaking change (fix or feature that would cause existing functionality to change) +- ✅ Documentation (non-code change) + +## Description and Context +[NOTE]: # ( Describe your changes in detail, why is this change required? ) +[NOTE]: # ( Describe the context of your change. Explain large code modifications. ) +[NOTE]: # ( If it fixes an open issue, please add "Fixes #XXX" as necessary ) + + +## Screenshots +[TIP]: # ( Do not include screenshots of your actual database! ) + + +## Testing strategy +[NOTE]: # ( Please describe in detail how you tested your changes. ) +[TIP]: # ( We expect new code to be covered by unit tests and documented with doc blocks! ) + ## Checklist: - - - - +[NOTE]: # ( Please go over all the following points. ) +[NOTE]: # ( Again, remove any lines which don't apply. ) +[NOTE]: # ( Pull Requests that don't fulfill all [REQUIRED] requisites are likely ) +[NOTE]: # ( to be sent back to you for correction or will be rejected. ) - ✅ I have read the **CONTRIBUTING** document. **[REQUIRED]** - ✅ My code follows the code style of this project. **[REQUIRED]** - ✅ All new and existing tests passed. **[REQUIRED]** - ✅ I have compiled and verified my code with `-DWITH_ASAN=ON`. **[REQUIRED]** -- ✅ My change requires a change to the documentation and I have updated it accordingly. +- ✅ My change requires a change to the documentation, and I have updated it accordingly. - ✅ I have added tests to cover my changes. diff --git a/.gitignore b/.gitignore index 903910a37..d02b6cacd 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,13 @@ release*/ .DS_Store .version +desktop.ini \.scannerwork/ + +/snap/.snapcraft/ +/parts/ +/stage/ +/prime/ +/*.snap +/*_source.tar.bz2 + diff --git a/.tx/config b/.tx/config index 3fcd5b969..2092a4bb5 100644 --- a/.tx/config +++ b/.tx/config @@ -1,7 +1,7 @@ [main] host = https://www.transifex.com -[keepassxc.keepassx_ents] +[keepassxc.keepassxc] source_file = share/translations/keepassx_en.ts file_filter = share/translations/keepassx_.ts source_lang = en diff --git a/AppImage-Recipe.sh b/AppImage-Recipe.sh deleted file mode 100755 index 9975f4939..000000000 --- a/AppImage-Recipe.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env bash -# -# KeePassXC AppImage Recipe -# Copyright (C) 2017-2018 KeePassXC team -# -# This program 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 2 or (at your option) -# version 3 of the License. -# -# This program 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 this program. If not, see . - -if [ "$1" == "" ] || [ "$2" == "" ]; then - echo "Usage: $(basename $0) APP_NAME RELEASE_VERSION" >&2 - exit 1 -fi - -if [ -f CHANGELOG ]; then - echo "This recipe must not be run from the sources root." >&2 - exit 1 -fi - -if [ ! -d ../bin-release ]; then - echo "../bin-release does not exist." >&2 - exit 1 -fi - -APP="$1" -LOWERAPP="$(echo "$APP" | tr '[:upper:]' '[:lower:]')" -VERSION="$2" -export ARCH=x86_64 - -mkdir -p $APP.AppDir -wget -q https://github.com/AppImage/AppImages/raw/master/functions.sh -O ./functions.sh -. ./functions.sh - -LIB_DIR=./usr/lib -if [ -d ./usr/lib/x86_64-linux-gnu ]; then - LIB_DIR=./usr/lib/x86_64-linux-gnu -elif [ -d ./usr/lib/i386-linux-gnu ]; then - LIB_DIR=./usr/lib/i386-linux-gnu -elif [ -d ./usr/lib64 ]; then - LIB_DIR=./usr/lib64 -fi - -cd $APP.AppDir -cp -a ../../bin-release/* . -cp -a ./usr/local/* ./usr -rm -R ./usr/local -rmdir ./opt 2> /dev/null - -# bundle Qt platform plugins and themes -QXCB_PLUGIN="$(find /usr/lib* -name 'libqxcb.so' 2> /dev/null)" -if [ "$QXCB_PLUGIN" == "" ]; then - QXCB_PLUGIN="$(find /opt/qt*/plugins -name 'libqxcb.so' 2> /dev/null)" -fi -QT_PLUGIN_PATH="$(dirname $(dirname $QXCB_PLUGIN))" -mkdir -p ".${QT_PLUGIN_PATH}/platforms" -cp -a "$QXCB_PLUGIN" ".${QT_PLUGIN_PATH}/platforms/" -cp -a "${QT_PLUGIN_PATH}/platforminputcontexts/" ".${QT_PLUGIN_PATH}/platforminputcontexts/" -cp -a "${QT_PLUGIN_PATH}/imageformats/" ".${QT_PLUGIN_PATH}/imageformats/" - -get_apprun -copy_deps - -# protect our libgpg-error from being deleted -mv ./opt/keepassxc-libs/lib/x86_64-linux-gnu/libgpg-error.so.0 ./protected.so -delete_blacklisted -mv ./protected.so ./opt/keepassxc-libs/lib/x86_64-linux-gnu/libgpg-error.so.0 - -get_desktop -get_icon -cat << EOF > ./usr/bin/keepassxc_env -#!/usr/bin/env bash -export LD_LIBRARY_PATH="..$(dirname ${QT_PLUGIN_PATH})/lib:\${LD_LIBRARY_PATH}" -export LD_LIBRARY_PATH="../opt/keepassxc-libs/lib/x86_64-linux-gnu:\${LD_LIBRARY_PATH}" - -export QT_PLUGIN_PATH="..${QT_PLUGIN_PATH}:\${KPXC_QT_PLUGIN_PATH}" - -# unset XDG_DATA_DIRS to make tray icon work in Ubuntu Unity -# see https://github.com/AppImage/AppImageKit/issues/351 -unset XDG_DATA_DIRS - -if [ "\${1}" == "cli" ]; then - shift - exec keepassxc-cli "\$@" -elif [ "\${1}" == "proxy" ]; then - shift - exec keepassxc-proxy "\$@" -elif [ -v CHROME_WRAPPER ] || [ -v MOZ_LAUNCHED_CHILD ]; then - exec keepassxc-proxy "\$@" -else - exec keepassxc "\$@" -fi -EOF -chmod +x ./usr/bin/keepassxc_env -sed -i 's/Exec=keepassxc/Exec=keepassxc_env/' org.${LOWERAPP}.${APP}.desktop -get_desktopintegration "org.${LOWERAPP}.${APP}" - -cd .. - -GLIBC_NEEDED=$(glibc_needed) -NO_GLIBC_VERSION=true - -generate_type2_appimage -u "gh-releases-zsync|keepassxreboot|keepassxc|latest|KeePassXC-*-${ARCH}.AppImage.zsync" - -mv ../out/*.AppImage* ../ -rm -rf ../out diff --git a/CHANGELOG b/CHANGELOG index 20545c443..4f9943abe 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,35 @@ +2.4.0 (2019-03-19) +========================= + +- New Database Wizard [#1952] +- Advanced Search [#1797] +- Automatic update checker [#2648] +- KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739] +- Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439] +- Remove KeePassHttp support [#1752] +- CLI: output info to stderr for easier scripting [#2558] +- CLI: Add --quiet option [#2507] +- CLI: Add create command [#2540] +- CLI: Add recursive listing of entries [#2345] +- CLI: Fix stdin/stdout encoding on Windows [#2425] +- SSH Agent: Support OpenSSH for Windows [#1994] +- macOS: TouchID Quick Unlock [#1851] +- macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583] +- Linux: Prevent Klipper from storing secrets in clipboard [#1969] +- Linux: Use polling based file watching for NFS [#2171] +- Linux: Enable use of browser plugin in Snap build [#2802] +- TOTP QR Code Generator [#1167] +- High-DPI Scaling for 4k screens [#2404] +- Make keyboard shortcuts more consistent [#2431] +- Warn user if deleting referenced entries [#1744] +- Allow toolbar to be hidden and repositioned [#1819, #2357] +- Increase max allowed database timeout to 12 hours [#2173] +- Password generator uses existing password length by default [#2318] +- Improve alert message box button labels [#2376] +- Show message when a database merge makes no changes [#2551] +- Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790] +- Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731] + 2.3.4 (2018-08-21) ========================= diff --git a/CMakeLists.txt b/CMakeLists.txt index 70f14795c..658548f70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2017 KeePassXC Team +# Copyright (C) 2018 KeePassXC Team # Copyright (C) 2010 Felix Geyer # # This program is free software: you can redistribute it and/or modify @@ -19,9 +19,9 @@ cmake_minimum_required(VERSION 3.1.0) project(KeePassXC) if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING - "Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel." - FORCE) + set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel." + FORCE) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) @@ -45,70 +45,92 @@ set(WITH_XC_ALL OFF CACHE BOOLEAN "Build in all available plugins") option(WITH_XC_AUTOTYPE "Include Auto-Type." ON) option(WITH_XC_NETWORKING "Include networking code (e.g. for downlading website icons)." OFF) option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF) -option(WITH_XC_HTTP "Include KeePassHTTP-compatible browser integration (deprecated, implies WITH_NETWORKING)." OFF) option(WITH_XC_YUBIKEY "Include YubiKey support." OFF) option(WITH_XC_SSHAGENT "Include SSH agent support." OFF) - -if(WITH_XC_HTTP) - message(WARNING "KeePassHTTP support has been deprecated and will be removed in a future version. Please use WITH_XC_BROWSER instead!\n" - "For enabling / disabling network access code, WITH_XC_HTTP has been replaced by WITH_XC_NETWORKING.") - set(WITH_XC_NETWORKING ON CACHE BOOL "Include networking code (e.g. for downlading website icons)." FORCE) +option(WITH_XC_KEESHARE "Sharing integration with KeeShare" OFF) +option(WITH_XC_KEESHARE_SECURE "Sharing integration with secured KeeShare containers" OFF) +if(APPLE) + option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF) endif() if(WITH_XC_ALL) - # Enable all options - set(WITH_XC_AUTOTYPE ON) - set(WITH_XC_NETWORKING ON) - set(WITH_XC_BROWSER ON) - set(WITH_XC_HTTP ON) # Deprecated - set(WITH_XC_YUBIKEY ON) - set(WITH_XC_SSHAGENT ON) + # Enable all options + set(WITH_XC_AUTOTYPE ON) + set(WITH_XC_NETWORKING ON) + set(WITH_XC_BROWSER ON) + set(WITH_XC_YUBIKEY ON) + set(WITH_XC_SSHAGENT ON) + set(WITH_XC_KEESHARE ON) + if(APPLE) + set(WITH_XC_TOUCHID ON) + endif() endif() -# Process ui files automatically from source files -set(CMAKE_AUTOUIC ON) +if(WITH_XC_KEESHARE_SECURE) + set(WITH_XC_KEESHARE ON) +endif() + +if(WITH_XC_SSHAGENT OR WITH_XC_KEESHARE) + set(WITH_XC_CRYPTO_SSH ON) +else() + set(WITH_XC_CRYPTO_SSH OFF) +endif() set(KEEPASSXC_VERSION_MAJOR "2") -set(KEEPASSXC_VERSION_MINOR "3") -set(KEEPASSXC_VERSION_PATCH "4") +set(KEEPASSXC_VERSION_MINOR "4") +set(KEEPASSXC_VERSION_PATCH "0") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots") set_property(CACHE KEEPASSXC_BUILD_TYPE PROPERTY STRINGS Snapshot Release PreRelease) +# Retrieve git HEAD revision hash +set(GIT_HEAD_OVERRIDE "" CACHE STRING "Manually set the Git HEAD hash when missing (eg, when no .git folder exists)") +execute_process(COMMAND git rev-parse --short=7 HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_HEAD + ERROR_QUIET) +string(STRIP "${GIT_HEAD}" GIT_HEAD) +if(GIT_HEAD STREQUAL "") + string(SUBSTRING "${GIT_HEAD_OVERRIDE}" 0 7 GIT_HEAD) +endif() +message(STATUS "Found Git HEAD Revision: ${GIT_HEAD}\n") + # Check if on a tag, if so build as a release execute_process(COMMAND git tag --points-at HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_TAG) + OUTPUT_VARIABLE GIT_TAG + ERROR_QUIET) if(GIT_TAG) - set(OVERRIDE_VERSION ${GIT_TAG}) + string(STRIP "${GIT_TAG}" GIT_TAG) + set(OVERRIDE_VERSION ${GIT_TAG}) elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version) - file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) + file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) endif() string(REGEX REPLACE "(\r?\n)+" "" OVERRIDE_VERSION "${OVERRIDE_VERSION}") if(OVERRIDE_VERSION) - if(OVERRIDE_VERSION MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$") - set(KEEPASSXC_BUILD_TYPE PreRelease) - set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) - elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$") - set(KEEPASSXC_BUILD_TYPE Release) - set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) - endif() + if(OVERRIDE_VERSION MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$") + set(KEEPASSXC_BUILD_TYPE PreRelease) + set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) + elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$") + set(KEEPASSXC_BUILD_TYPE Release) + set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) + endif() endif() if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease" AND NOT OVERRIDE_VERSION) - set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview") + set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview") elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot") - set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") + set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") endif() if(KEEPASSXC_BUILD_TYPE STREQUAL "Release") - set(KEEPASSXC_BUILD_TYPE_RELEASE ON) + set(KEEPASSXC_BUILD_TYPE_RELEASE ON) elseif(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease") - set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON) + set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON) else() - set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON) + set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON) endif() message(STATUS "Setting up build for KeePassXC v${KEEPASSXC_VERSION}\n") @@ -118,46 +140,46 @@ set(KEEPASSXC_DIST ON) set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution Type") set_property(CACHE KEEPASSXC_DIST_TYPE PROPERTY STRINGS Snap AppImage Other) if(KEEPASSXC_DIST_TYPE STREQUAL "Snap") - set(KEEPASSXC_DIST_SNAP ON) + set(KEEPASSXC_DIST_SNAP ON) elseif(KEEPASSXC_DIST_TYPE STREQUAL "AppImage") - set(KEEPASSXC_DIST_APPIMAGE ON) + set(KEEPASSXC_DIST_APPIMAGE ON) elseif(KEEPASSXC_DIST_TYPE STREQUAL "Other") - unset(KEEPASSXC_DIST) + unset(KEEPASSXC_DIST) endif() if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") - set(IS_32BIT TRUE) + set(IS_32BIT TRUE) endif() if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_COMPILER_IS_CLANG 1) + set(CMAKE_COMPILER_IS_CLANG 1) endif() if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_COMPILER_IS_CLANGXX 1) + set(CMAKE_COMPILER_IS_CLANGXX 1) endif() macro(add_gcc_compiler_cxxflags FLAGS) - if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") - endif() + if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") + endif() endmacro(add_gcc_compiler_cxxflags) macro(add_gcc_compiler_cflags FLAGS) - if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") - endif() + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") + endif() endmacro(add_gcc_compiler_cflags) macro(add_gcc_compiler_flags FLAGS) - add_gcc_compiler_cxxflags("${FLAGS}") - add_gcc_compiler_cflags("${FLAGS}") + add_gcc_compiler_cxxflags("${FLAGS}") + add_gcc_compiler_cflags("${FLAGS}") endmacro(add_gcc_compiler_flags) add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII) if(WITH_APP_BUNDLE) - add_definitions(-DWITH_APP_BUNDLE) + add_definitions(-DWITH_APP_BUNDLE) endif() add_gcc_compiler_flags("-fno-common") @@ -167,7 +189,7 @@ add_gcc_compiler_flags("-fvisibility=hidden") add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden") if(CMAKE_BUILD_TYPE STREQUAL "Debug") - add_gcc_compiler_flags("-Werror") + add_gcc_compiler_flags("-Werror") endif() if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.999) OR CMAKE_COMPILER_IS_CLANGXX) @@ -181,152 +203,159 @@ add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virt add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings") if(WITH_ASAN) - if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)) - message(FATAL_ERROR "WITH_ASAN is only supported on Linux / macOS at the moment.") - endif() - - add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN") - - if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)) - add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN") + if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)) + message(FATAL_ERROR "WITH_ASAN is only supported on Linux / macOS at the moment.") + endif() + + add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN") + + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)) + add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN") + endif() endif() - endif() endif() string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) -if (CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)") - add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") +if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)") + add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") endif() check_c_compiler_flag("-Werror=format-security -Werror=implicit-function-declaration" WERROR_C_AVAILABLE) check_cxx_compiler_flag("-Werror=format-security" WERROR_CXX_AVAILABLE) if(WERROR_C_AVAILABLE AND WERROR_CXX_AVAILABLE) - add_gcc_compiler_flags("-Werror=format-security") - add_gcc_compiler_cflags("-Werror=implicit-function-declaration") + add_gcc_compiler_flags("-Werror=format-security") + add_gcc_compiler_cflags("-Werror=implicit-function-declaration") endif() if(CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align") - - if(WITH_COVERAGE) - # Include code coverage, use with -DCMAKE_BUILD_TYPE=Coverage - include(CodeCoverage) - setup_target_for_coverage(kp_coverage "make test" coverage) - endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align") endif() if(CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - if (CMAKE_COMPILER_IS_CLANGXX) - add_gcc_compiler_flags("-Qunused-arguments") - endif() - add_gcc_compiler_flags("-pie -fPIE") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now") + if(CMAKE_COMPILER_IS_CLANGXX) + add_gcc_compiler_flags("-Qunused-arguments") + endif() + add_gcc_compiler_flags("-pie -fPIE") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now") endif() add_gcc_compiler_cflags("-std=c99") add_gcc_compiler_cxxflags("-std=c++11") if(APPLE) - add_gcc_compiler_cxxflags("-stdlib=libc++") + add_gcc_compiler_cxxflags("-stdlib=libc++") endif() if(WITH_DEV_BUILD) - add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED) + add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED) endif() if(MINGW) - set(CMAKE_RC_COMPILER_INIT windres) - enable_language(RC) - set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") - if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) - # Enable DEP and ASLR - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") - # Enable high entropy ASLR for 64-bit builds - if(NOT IS_32BIT) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--high-entropy-va") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va") + set(CMAKE_RC_COMPILER_INIT windres) + enable_language(RC) + set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") + if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) + # Enable DEP and ASLR + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") + # Enable high entropy ASLR for 64-bit builds + if(NOT IS_32BIT) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--high-entropy-va") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va") + endif() endif() - endif() endif() if(APPLE AND WITH_APP_BUNDLE OR MINGW) - set(PROGNAME KeePassXC) + set(PROGNAME KeePassXC) else() - set(PROGNAME keepassxc) -endif() - -if(APPLE AND WITH_APP_BUNDLE AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local") - set(CMAKE_INSTALL_PREFIX "/Applications") - set(CMAKE_INSTALL_MANDIR "/usr/local/share/man") + set(PROGNAME keepassxc) endif() if(MINGW) - set(CLI_INSTALL_DIR ".") - set(PROXY_INSTALL_DIR ".") - set(BIN_INSTALL_DIR ".") - set(PLUGIN_INSTALL_DIR ".") - set(DATA_INSTALL_DIR "share") + set(CLI_INSTALL_DIR ".") + set(PROXY_INSTALL_DIR ".") + set(BIN_INSTALL_DIR ".") + set(PLUGIN_INSTALL_DIR ".") + set(DATA_INSTALL_DIR "share") elseif(APPLE AND WITH_APP_BUNDLE) - set(CLI_INSTALL_DIR "/usr/local/bin") - set(PROXY_INSTALL_DIR "/usr/local/bin") - set(BIN_INSTALL_DIR ".") - set(PLUGIN_INSTALL_DIR "${PROGNAME}.app/Contents/PlugIns") - set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources") + set(CMAKE_INSTALL_MANDIR "${PROGNAME}.app/Contents/Resources/man") + set(CLI_INSTALL_DIR "${PROGNAME}.app/Contents/MacOS") + set(PROXY_INSTALL_DIR "${PROGNAME}.app/Contents/MacOS") + set(BIN_INSTALL_DIR "${PROGNAME}.app/Contents/MacOS") + set(PLUGIN_INSTALL_DIR "${PROGNAME}.app/Contents/PlugIns") + set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources") else() - include(GNUInstallDirs) + include(GNUInstallDirs) - set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") - set(PROXY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") - set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") - set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc") - set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc") + set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") + set(PROXY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") + set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") + set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc") + set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc") endif() if(WITH_TESTS) - enable_testing() + enable_testing() endif(WITH_TESTS) +if(WITH_COVERAGE) + # Include code coverage, use with -DCMAKE_BUILD_TYPE=Debug + include(CodeCoverage) + set(COVERAGE_GCOVR_EXCLUDES + "\\(.+/\\)?tests/.\\*" + ".\\*/moc_\\[^/\\]+\\.cpp" + ".\\*/ui_\\[^/\\]+\\.h" + "\\(.+/\\)?zxcvbn/.\\*") + append_coverage_compiler_flags() + setup_target_for_coverage_gcovr_html( + NAME coverage + EXECUTABLE $(MAKE) && $(MAKE) test + ) +endif() + +include(CLangFormat) + +set(QT_COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools) if(UNIX AND NOT APPLE) - find_package(Qt5 COMPONENTS Core Network Concurrent Widgets Test LinguistTools DBus REQUIRED) + find_package(Qt5 COMPONENTS ${QT_COMPONENTS} DBus REQUIRED) elseif(APPLE) - find_package(Qt5 COMPONENTS Core Network Concurrent Widgets Test LinguistTools REQUIRED - HINTS /usr/local/Cellar/qt/*/lib/cmake ENV PATH - ) - find_package(Qt5 COMPONENTS MacExtras - HINTS /usr/local/Cellar/qt/*/lib/cmake ENV PATH - ) + find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH) + find_package(Qt5 COMPONENTS MacExtras HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH) else() - find_package(Qt5 COMPONENTS Core Network Concurrent Widgets Test LinguistTools REQUIRED) + find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) endif() if(Qt5Core_VERSION VERSION_LESS "5.2.0") - message(FATAL_ERROR "Qt version 5.2.0 or higher is required") + message(FATAL_ERROR "Qt version 5.2.0 or higher is required") endif() get_filename_component(Qt5_PREFIX ${Qt5_DIR}/../../.. REALPATH) +# Process moc automatically set(CMAKE_AUTOMOC ON) +# Process .ui files automatically set(CMAKE_AUTOUIC ON) +# Process .qrc files automatically set(CMAKE_AUTORCC ON) if(APPLE) - set(CMAKE_MACOSX_RPATH TRUE) - find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) - if(NOT MACDEPLOYQT_EXE) - message(FATAL_ERROR "macdeployqt is required to build in macOS") - else() - message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}") - endif() + set(CMAKE_MACOSX_RPATH TRUE) + find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) + if(NOT MACDEPLOYQT_EXE) + message(FATAL_ERROR "macdeployqt is required to build in macOS") + else() + message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}") + endif() endif() # Debian sets the the build type to None for package builds. @@ -336,28 +365,43 @@ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG) find_package(LibGPGError REQUIRED) find_package(Gcrypt 1.7.0 REQUIRED) find_package(Argon2 REQUIRED) - find_package(ZLIB REQUIRED) +find_package(QREncode REQUIRED) set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR}) if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0") - message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format") + message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format") +endif() + +include_directories(SYSTEM ${ARGON2_INCLUDE_DIR}) + +# Optional +if(WITH_XC_KEESHARE) + set(WITH_XC_KEESHARE_INSECURE ON) + if(WITH_XC_KEESHARE_SECURE) + # ZLIB is needed and already required + find_package(QuaZip REQUIRED) + include_directories(SYSTEM ${QUAZIP_INCLUDE_DIR}) + endif() +else() + set(WITH_XC_KEESHARE_INSECURE OFF) + set(WITH_XC_KEESHARE_SECURE OFF) endif() # Optional if(WITH_XC_YUBIKEY) - find_package(YubiKey REQUIRED) + find_package(YubiKey REQUIRED) - include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS}) + include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS}) endif() if(UNIX) - check_cxx_source_compiles("#include + check_cxx_source_compiles("#include int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }" - HAVE_PR_SET_DUMPABLE) + HAVE_PR_SET_DUMPABLE) - check_cxx_source_compiles("#include + check_cxx_source_compiles("#include int main() { struct rlimit limit; limit.rlim_cur = 0; @@ -366,12 +410,12 @@ if(UNIX) return 0; }" HAVE_RLIMIT_CORE) - if(APPLE) - check_cxx_source_compiles("#include + if(APPLE) + check_cxx_source_compiles("#include #include int main() { ptrace(PT_DENY_ATTACH, 0, 0, 0); return 0; }" - HAVE_PT_DENY_ATTACH) - endif() + HAVE_PT_DENY_ATTACH) + endif() endif() include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) @@ -381,14 +425,14 @@ include(FeatureSummary) add_subdirectory(src) add_subdirectory(share) if(WITH_TESTS) - add_subdirectory(tests) + add_subdirectory(tests) endif(WITH_TESTS) if(PRINT_SUMMARY) - # This will print ENABLED, REQUIRED and DISABLED - feature_summary(WHAT ALL) + # This will print ENABLED, REQUIRED and DISABLED + feature_summary(WHAT ALL) else() - # This will only print ENABLED and DISABLED feature - feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") - feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") + # This will only print ENABLED and DISABLED feature + feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") + feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") endif() diff --git a/COPYING b/COPYING index 195650551..b3eddd766 100644 --- a/COPYING +++ b/COPYING @@ -56,15 +56,15 @@ Copyright: 2015 halex2005 License: MIT Files: share/icons/application/*/apps/keepassxc.png - share/icons/application/scalable/apps/keepassxc.svgz + share/icons/application/scalable/apps/keepassxc.svg share/icons/application/*/apps/keepassxc-dark.png - share/icons/application/scalable/apps/keepassxc-dark.svgz + share/icons/application/scalable/apps/keepassxc-dark.svg share/icons/application/*/apps/keepassxc-locked.png - share/icons/application/scalable/apps/keepassxc-locked.svgz + share/icons/application/scalable/apps/keepassxc-locked.svg share/icons/application/*/apps/keepassxc-unlocked.png - share/icons/application/scalable/apps/keepassxc-unlocked.svgz + share/icons/application/scalable/apps/keepassxc-unlocked.svg share/icons/application/*/mimetypes/application-x-keepassxc.png - share/icons/application/scalable/mimetypes/application-x-keepassxc.svgz + share/icons/application/scalable/mimetypes/application-x-keepassxc.svg Copyright: 2016, Lorenzo Stella License: LGPL-2 @@ -151,6 +151,12 @@ Copyright: 2003-2004, David Vignoni License: LGPL-2.1 Comment: based on Nuvola icon theme +Files: share/icons/application/*/actions/favicon-download.png +Copyright: 2003-2004, David Vignoni + 2018, Kyle Kneitinger +License: LGPL-2.1 +Comment: based on Nuvola icon theme + Files: share/icons/application/*/actions/application-exit.png share/icons/application/*/actions/chronometer.png share/icons/application/*/actions/configure.png @@ -181,7 +187,7 @@ Files: share/icons/application/*/actions/application-exit.png share/icons/application/*/status/dialog-information.png share/icons/application/*/status/dialog-warning.png share/icons/application/*/status/security-high.png - share/icons/svg/*.svgz + share/icons/svg/*.svg Copyright: 2007, Nuno Pinheiro 2007, David Vignoni 2007, David Miller @@ -226,10 +232,6 @@ Files: src/zxcvbn/zxcvbn.* Copyright: 2015-2017, Tony Evans License: MIT -Files: src/http/qhttp/* -Copyright: 2014, Amir Zamani -License: MIT - Files: src/gui/KMessageWidget.h src/gui/KMessageWidget.cpp Copyright: 2011 Aurélien Gâteau diff --git a/Dockerfile b/Dockerfile index cee347e69..33bdea6a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,17 +16,18 @@ FROM ubuntu:14.04 -ENV REBUILD_COUNTER=8 +ENV REBUILD_COUNTER=10 -ENV QT5_VERSION=59 -ENV QT5_PPA_VERSION=${QT5_VERSION}4 +ENV QT5_VERSION=qt510 +ENV QT5_PPA_VERSION=qt-5.10.1 +ENV TERM=xterm-256color RUN set -x \ && apt-get update -y \ && apt-get -y install software-properties-common RUN set -x \ - && add-apt-repository ppa:beineri/opt-qt${QT5_PPA_VERSION}-trusty \ + && add-apt-repository ppa:beineri/opt-${QT5_PPA_VERSION}-trusty \ && add-apt-repository ppa:phoerious/keepassxc RUN set -x \ @@ -37,39 +38,55 @@ RUN set -x \ RUN set -x \ && apt-get install -y \ cmake3 \ + curl \ g++ \ git \ libgcrypt20-18-dev \ libargon2-0-dev \ libsodium-dev \ libcurl-no-gcrypt-dev \ - qt${QT5_VERSION}base \ - qt${QT5_VERSION}tools \ - qt${QT5_VERSION}x11extras \ - qt${QT5_VERSION}translations \ - qt${QT5_VERSION}imageformats \ + ${QT5_VERSION}base \ + ${QT5_VERSION}tools \ + ${QT5_VERSION}x11extras \ + ${QT5_VERSION}translations \ + ${QT5_VERSION}imageformats \ + ${QT5_VERSION}svg \ zlib1g-dev \ libxi-dev \ libxtst-dev \ + # ubuntu:14.04 has no quazip (it's optional) + # libquazip5-dev \ mesa-common-dev \ libyubikey-dev \ - libykpers-1-dev + libykpers-1-dev \ + libqrencode-dev \ + xclip \ + xvfb -ENV CMAKE_PREFIX_PATH="/opt/qt${QT5_VERSION}/lib/cmake" +ENV PATH="/opt/${QT5_VERSION}/bin:${PATH}" +ENV CMAKE_PREFIX_PATH="/opt/${QT5_VERSION}/lib/cmake" ENV CMAKE_INCLUDE_PATH="/opt/keepassxc-libs/include" ENV CMAKE_LIBRARY_PATH="/opt/keepassxc-libs/lib/x86_64-linux-gnu" ENV CPATH="${CMAKE_INCLUDE_PATH}" -ENV LD_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}:/opt/qt${QT5_VERSION}/lib" +ENV LD_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}:/opt/${QT5_VERSION}/lib" RUN set -x \ - && echo "/opt/qt${QT5_VERSION}/lib" > /etc/ld.so.conf.d/qt${QT5_VERSION}.conf \ + && echo "/opt/${QT5_VERSION}/lib" > /etc/ld.so.conf.d/${QT5_VERSION}.conf \ && echo "/opt/keepassxc-libs/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/keepassxc.conf # AppImage dependencies RUN set -x \ && apt-get install -y \ - libfuse2 \ - wget + curl \ + libfuse2 + +RUN set -x \ + && curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > /usr/bin/linuxdeploy \ + && curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > /usr/bin/linuxdeploy-plugin-qt \ + && curl -L "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > /usr/bin/appimagetool \ + && chmod +x /usr/bin/linuxdeploy \ + && chmod +x /usr/bin/linuxdeploy-plugin-qt \ + && chmod +x /usr/bin/appimagetool RUN set -x \ && apt-get autoremove --purge \ diff --git a/INSTALL.md b/INSTALL.md index a581d1ac7..d3927536f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -28,7 +28,6 @@ The following libraries are required: * libsodium (>= 1.0.12, optional for KeePassXC-Browser support) * libargon2 - Prepare the Building Environment ================================ @@ -60,13 +59,19 @@ To update the project from within the project's folder, you can run the followin git pull ``` +For a stable build, it is recommended to checkout the master branch. + +```bash +git checkout master +``` + Navigate to the directory where you have downloaded KeePassXC and type these commands: ``` cd directory-where-sources-live mkdir build cd build -cmake -DWITH_TESTS=OFF ...and other options - see below... +cmake -DWITH_XC_ALL=ON .. make ``` @@ -90,15 +95,20 @@ These steps place the compiled KeePassXC binary inside the `./build/src/` direct ``` -DWITH_XC_AUTOTYPE=[ON|OFF] Enable/Disable Auto-Type (default: ON) - -DWITH_XC_HTTP=[ON|OFF] Enable/Disable KeePassHTTP and custom icon downloads (default: OFF) -DWITH_XC_YUBIKEY=[ON|OFF] Enable/Disable YubiKey HMAC-SHA1 authentication support (default: OFF) -DWITH_XC_BROWSER=[ON|OFF] Enable/Disable KeePassXC-Browser extension support (default: OFF) - + -DWITH_XC_NETWORKING=[ON|OFF] Enable/Disable Networking support (favicon download) (default: OFF) + -DWITH_XC_SSHAGENT=[ON|OFF] Enable/Disable SSHAgent support (default: OFF) + -DWITH_XC_KEESHARE=[ON|OFF] Enable/Disable KeeShare group syncronization extension (default: OFF) + -DWITH_XC_TOUCHID=[ON|OFF] (macOS Only) Enable/Disable Touch ID unlock (default:OFF) + -DWITH_XC_ALL=[ON|OFF] Enable/Disable compiling all plugins above (default: OFF) + -DWITH_XC_KEESHARE_SECURE=[ON|OFF] Enable/Disable KeeShare secure containers, requires libquazip5 (default: OFF) -DWITH_TESTS=[ON|OFF] Enable/Disable building of unit tests (default: ON) -DWITH_GUI_TESTS=[ON|OFF] Enable/Disable building of GUI tests (default: OFF) -DWITH_DEV_BUILD=[ON|OFF] Enable/Disable deprecated method warnings (default: OFF) -DWITH_ASAN=[ON|OFF] Enable/Disable address sanitizer checks (Linux / macOS only) (default: OFF) -DWITH_COVERAGE=[ON|OFF] Enable/Disable coverage tests (GCC only) (default: OFF) + -DWITH_APP_BUNDLE=[ON|OFF] Enable Application Bundle for macOS (default: ON) ``` * If you are on MacOS you must add this parameter to **Cmake**, with the Qt version you have installed
`-DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.2/lib/cmake/` diff --git a/README.md b/README.md index b09a5d208..608dfd363 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # KeePassXC -[![TeamCity Build Status](https://ci.keepassxc.org/app/rest/builds/buildType:\(id:KeepassXC_TeamCityCi\)/statusIcon?guest=1)](https://ci.keepassxc.org/viewType.html?buildTypeId=KeepassXC_TeamCityCi&guest=1) [![Coverage Status](https://coveralls.io/repos/github/keepassxreboot/keepassxc/badge.svg)](https://coveralls.io/github/keepassxreboot/keepassxc) +[![TeamCity Build Status](https://ci.keepassxc.org/app/rest/builds/buildType:\(project:KeepassXC\)/statusIcon)](https://ci.keepassxc.org/?guest=1) [![codecov](https://codecov.io/gh/keepassxreboot/keepassxc/branch/develop/graph/badge.svg)](https://codecov.io/gh/keepassxreboot/keepassxc) ## About KeePassXC [KeePassXC](https://keepassxc.org) is a cross-platform community fork of @@ -29,11 +29,8 @@ so please check out your distribution's package list to see if KeePassXC is avai - Using website favicons as entry icons - Merging of databases - Automatic reload when the database changed on disk -- Browser integration with KeePassHTTP-Connector for -[Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepasshttp-connector/) and -[Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepasshttp-connector/dafgdjggglmmknipkhngniifhplpcldb), and -[passafari](https://github.com/mmichaa/passafari.safariextension/) in Safari. [[See note about KeePassHTTP]](#Note_about_KeePassHTTP) - Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk) +- Synchronize passwords using KeeShare. See [Using Sharing](./docs/QUICKSTART.md#using-sharing) for more details. - Many bug fixes For a full list of features and changes, read the [CHANGELOG](CHANGELOG) document. @@ -54,15 +51,6 @@ You can of course also directly contribute your own code. We are happy to accept Please read the [CONTRIBUTING document](.github/CONTRIBUTING.md) for further information. -### Note about KeePassHTTP -The KeePassHTTP protocol is not a highly secure protocol. -It has a certain flaw which could allow an attacker to decrypt your passwords -should they manage to impersonate the web browser extension from a remote address. - -(See [here](https://github.com/pfn/keepasshttp/issues/258) and [here](https://github.com/keepassxreboot/keepassxc/issues/147)). +## License -To minimize the risk, KeePassXC strictly limits communication between itself -and the browser plugin to your local computer (localhost). -This makes your passwords quite safe, -but as with all open source software, use it at your own risk! +GPL-2 or GPL-3 diff --git a/ci/snapcraft/Dockerfile b/ci/snapcraft/Dockerfile deleted file mode 100644 index 37b3742dd..000000000 --- a/ci/snapcraft/Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -# KeePassXC Linux Release Build Dockerfile -# Copyright (C) 2017-2018 KeePassXC team -# -# This program 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 2 or (at your option) -# version 3 of the License. -# -# This program 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 this program. If not, see . - -FROM snapcore/snapcraft - -ENV REBUILD_COUNTER=1 - -ENV QT5_VERSION=510 -ENV QT5_PPA_VERSION=5.10.1 - -RUN set -x \ - && apt update -y \ - && apt -y install software-properties-common - -RUN set -x \ - && add-apt-repository ppa:phoerious/keepassxc - -RUN set -x \ - && apt update -y \ - && apt-get -y --no-install-recommends install \ - build-essential \ - cmake \ - libgcrypt20-18-dev \ - libargon2-0-dev \ - libsodium-dev \ - qtbase5-dev \ - qttools5-dev \ - qttools5-dev-tools \ - zlib1g-dev \ - libyubikey-dev \ - libykpers-1-dev \ - libxi-dev \ - libxtst-dev \ - xvfb - -RUN set -x \ - && apt-get autoremove --purge - diff --git a/ci/trusty/Dockerfile b/ci/trusty/Dockerfile index d10c609a0..79e054efe 100644 --- a/ci/trusty/Dockerfile +++ b/ci/trusty/Dockerfile @@ -18,53 +18,75 @@ FROM ubuntu:14.04 -ENV REBUILD_COUNTER=4 +ENV REBUILD_COUNTER=5 -ENV QT5_VERSION=53 +ENV QT5_VERSION=qt53 ENV QT5_PPA_VERSION=${QT5_VERSION}2 +ENV TERM=xterm-256color RUN set -x \ && apt-get update -y \ && apt-get -y install software-properties-common RUN set -x \ - && add-apt-repository ppa:beineri/opt-qt${QT5_PPA_VERSION}-trusty \ + && add-apt-repository ppa:beineri/opt-${QT5_PPA_VERSION}-trusty \ && add-apt-repository ppa:phoerious/keepassxc RUN set -x \ && apt-get -y update \ && apt-get -y --no-install-recommends install \ - build-essential \ - clang-3.6 \ - libclang-common-3.6-dev \ - clang-format-3.6 \ - cmake3 \ - make \ - libgcrypt20-18-dev \ - libargon2-0-dev \ - libsodium-dev \ - libcurl-no-gcrypt-dev \ - qt${QT5_VERSION}base \ - qt${QT5_VERSION}tools \ - qt${QT5_VERSION}x11extras \ - qt${QT5_VERSION}translations \ - zlib1g-dev \ - libyubikey-dev \ - libykpers-1-dev \ - libxi-dev \ - libxtst-dev \ - xvfb + build-essential \ + clang-3.6 \ + libclang-common-3.6-dev \ + clang-format-3.6 \ + llvm-3.6 \ + cmake3 \ + make \ + libgcrypt20-18-dev \ + libargon2-0-dev \ + libsodium-dev \ + libcurl-no-gcrypt-dev \ + ${QT5_VERSION}base \ + ${QT5_VERSION}tools \ + ${QT5_VERSION}x11extras \ + ${QT5_VERSION}translations \ + ${QT5_VERSION}svg \ + zlib1g-dev \ + libyubikey-dev \ + libykpers-1-dev \ + # ubuntu:14.04 has no quazip (it's optional) + # libquazip5-dev \ + libxi-dev \ + libxtst-dev \ + libqrencode-dev \ + xclip \ + xvfb -ENV CMAKE_PREFIX_PATH="/opt/qt${QT5_VERSION}/lib/cmake" +ENV PATH="/opt/${QT5_VERSION}/bin:${PATH}" +ENV CMAKE_PREFIX_PATH="/opt/${QT5_VERSION}/lib/cmake" ENV CMAKE_INCLUDE_PATH="/opt/keepassxc-libs/include" ENV CMAKE_LIBRARY_PATH="/opt/keepassxc-libs/lib/x86_64-linux-gnu" ENV CPATH="${CMAKE_INCLUDE_PATH}" -ENV LD_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}:/opt/qt${QT5_VERSION}/lib" +ENV LD_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}:/opt/${QT5_VERSION}/lib" RUN set -x \ - && echo "/opt/qt${QT5_VERSION}/lib" > /etc/ld.so.conf.d/qt${QT5_VERSION}.conf \ + && echo "/opt/${QT5_VERSION}/lib" > /etc/ld.so.conf.d/${QT5_VERSION}.conf \ && echo "/opt/keepassxc-libs/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/keepassxc.conf +# AppImage dependencies +RUN set -x \ + && apt-get install -y \ + curl \ + libfuse2 + +RUN set -x \ + && curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > /usr/bin/linuxdeploy \ + && curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > /usr/bin/linuxdeploy-plugin-qt \ + && curl -L "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > /usr/bin/appimagetool \ + && chmod +x /usr/bin/linuxdeploy \ + && chmod +x /usr/bin/linuxdeploy-plugin-qt \ + && chmod +x /usr/bin/appimagetool + RUN set -x \ && apt-get autoremove --purge \ && rm -rf /var/lib/apt/lists/* diff --git a/cmake/CLangFormat.cmake b/cmake/CLangFormat.cmake new file mode 100644 index 000000000..70169ed72 --- /dev/null +++ b/cmake/CLangFormat.cmake @@ -0,0 +1,64 @@ +# Copyright (C) 2017 KeePassXC Team +# +# This program 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 2 or (at your option) +# version 3 of the License. +# +# This program 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 this program. If not, see . + +set(EXCLUDED_DIRS + # third-party directories + src/zxcvbn/ + # objective-c directories + src/touchid/ + src/autotype/mac/ + src/gui/macutils/) + +set(EXCLUDED_FILES + # third-party files + streams/qtiocompressor.cpp + streams/qtiocompressor.h + gui/KMessageWidget.h + gui/KMessageWidget.cpp + gui/MainWindowAdaptor.h + gui/MainWindowAdaptor.cpp + crypto/ssh/bcrypt_pbkdf.cpp + crypto/ssh/blf.h + crypto/ssh/blowfish.c + tests/modeltest.cpp + tests/modeltest.h + # objective-c files + core/ScreenLockListenerMac.h + core/ScreenLockListenerMac.cpp) + +file(GLOB_RECURSE ALL_SOURCE_FILES RELATIVE ${CMAKE_SOURCE_DIR} src/*.cpp src/*.h tests/*.cpp tests/*.h) +foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) + foreach(EXCLUDED_DIR ${EXCLUDED_DIRS}) + string(FIND ${SOURCE_FILE} ${EXCLUDED_DIR} SOURCE_FILE_EXCLUDED) + if(NOT ${SOURCE_FILE_EXCLUDED} EQUAL -1) + list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE}) + endif() + endforeach() + foreach(EXCLUDED_FILE ${EXCLUDED_FILES}) + if(${SOURCE_FILE} MATCHES ".*${EXCLUDED_FILE}$") + list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE}) + endif() + endforeach() +endforeach() + +add_custom_target(format) +foreach(SOURCE_FILE ${ALL_SOURCE_FILES}) + add_custom_command( + TARGET format + PRE_BUILD + COMMAND echo Formatting ${SOURCE_FILE} + COMMAND clang-format -style=file -i \"${SOURCE_FILE}\" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) +endforeach() diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake index d10f79723..d10791745 100644 --- a/cmake/CodeCoverage.cmake +++ b/cmake/CodeCoverage.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2012 - 2015, Lars Bilke +# Copyright (c) 2012 - 2017, Lars Bilke # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, @@ -26,7 +26,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# +# CHANGES: # # 2012-01-31, Lars Bilke # - Enable Code Coverage @@ -35,167 +35,269 @@ # - Added support for Clang. # - Some additional usage instructions. # +# 2016-02-03, Lars Bilke +# - Refactored functions to use named parameters +# +# 2017-06-02, Lars Bilke +# - Merged with modified version from github.com/ufz/ogs +# +# # USAGE: - -# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here: -# http://stackoverflow.com/a/22404544/80480 # # 1. Copy this file into your cmake modules path. # # 2. Add the following line to your CMakeLists.txt: -# INCLUDE(CodeCoverage) +# include(CodeCoverage) # -# 3. Set compiler flags to turn off optimization and enable coverage: -# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") -# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") +# 3. Append necessary compiler flags: +# APPEND_COVERAGE_COMPILER_FLAGS() # -# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target -# which runs your test executable and produces a lcov code coverage report: +# 4. If you need to exclude additional directories from the report, specify them +# using the COVERAGE_LCOV_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE_LCOV. # Example: -# SETUP_TARGET_FOR_COVERAGE( -# my_coverage_target # Name for custom target. -# test_driver # Name of the test driver executable that runs the tests. -# # NOTE! This should always have a ZERO as exit code -# # otherwise the coverage generation will not complete. -# coverage # Name of output directory. -# ) +# set(COVERAGE_LCOV_EXCLUDES 'dir1/*' 'dir2/*') # -# 4. Build a Debug build: -# cmake -DCMAKE_BUILD_TYPE=Debug .. -# make -# make my_coverage_target +# 5. Use the functions described below to create a custom make target which +# runs your test executable and produces a code coverage report. # +# 6. Build a Debug build: +# cmake -DCMAKE_BUILD_TYPE=Debug .. +# make +# make my_coverage_target # +include(CMakeParseArguments) + # Check prereqs -FIND_PROGRAM( GCOV_PATH gcov ) -FIND_PROGRAM( LCOV_PATH lcov ) -FIND_PROGRAM( GENHTML_PATH genhtml ) -FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) +find_program( GCOV_PATH gcov ) +find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl) +find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat ) +find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test) +find_program( SIMPLE_PYTHON_EXECUTABLE python ) -IF(NOT GCOV_PATH) - MESSAGE(FATAL_ERROR "gcov not found! Aborting...") -ENDIF() # NOT GCOV_PATH +if(NOT GCOV_PATH) + message(FATAL_ERROR "gcov not found! Aborting...") +endif() # NOT GCOV_PATH -IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") - IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) - MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") - ENDIF() -ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX) - MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") -ENDIF() # CHECK VALID COMPILER +if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") + if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) + message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") + endif() +elseif(NOT CMAKE_COMPILER_IS_GNUCXX) + message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") +endif() -SET(CMAKE_CXX_FLAGS_COVERAGE - "-g -O0 --coverage -fprofile-arcs -ftest-coverage" +set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage" + CACHE INTERNAL "") + +set(CMAKE_CXX_FLAGS_COVERAGE + ${COVERAGE_COMPILER_FLAGS} CACHE STRING "Flags used by the C++ compiler during coverage builds." FORCE ) -SET(CMAKE_C_FLAGS_COVERAGE - "-g -O0 --coverage -fprofile-arcs -ftest-coverage" +set(CMAKE_C_FLAGS_COVERAGE + ${COVERAGE_COMPILER_FLAGS} CACHE STRING "Flags used by the C compiler during coverage builds." FORCE ) -SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE +set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "" CACHE STRING "Flags used for linking binaries during coverage builds." FORCE ) -SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE +set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "" CACHE STRING "Flags used by the shared libraries linker during coverage builds." FORCE ) -MARK_AS_ADVANCED( +mark_as_advanced( CMAKE_CXX_FLAGS_COVERAGE CMAKE_C_FLAGS_COVERAGE CMAKE_EXE_LINKER_FLAGS_COVERAGE CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) -IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) - MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) -ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" +if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading") +endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" +if(CMAKE_C_COMPILER_ID STREQUAL "GNU") + link_libraries(gcov) +else() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") +endif() -# Param _targetname The name of new the custom make target -# Param _testrunner The name of the target which runs the tests. -# MUST return ZERO always, even on errors. -# If not, no coverage report will be created! -# Param _outputname lcov output is generated as _outputname.info -# HTML report is generated in _outputname/index.html -# Optional fourth parameter is passed as arguments to _testrunner -# Pass them in list form, e.g.: "-j;2" for -j 2 -FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) +# Defines a target for running and collection code coverage information +# Builds dependencies, runs the given executable and outputs reports. +# NOTE! The executable should always have a ZERO as exit code otherwise +# the coverage generation will not complete. +# +# SETUP_TARGET_FOR_COVERAGE_LCOV( +# NAME testrunner_coverage # New target name +# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +# DEPENDENCIES testrunner # Dependencies to build first +# ) +function(SETUP_TARGET_FOR_COVERAGE_LCOV) - IF(NOT LCOV_PATH) - MESSAGE(FATAL_ERROR "lcov not found! Aborting...") - ENDIF() # NOT LCOV_PATH + set(options NONE) + set(oneValueArgs NAME) + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - IF(NOT GENHTML_PATH) - MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") - ENDIF() # NOT GENHTML_PATH + if(NOT LCOV_PATH) + message(FATAL_ERROR "lcov not found! Aborting...") + endif() # NOT LCOV_PATH - SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info") - IF(MINGW) - # Replace C:/ with /C for MINGW - STRING(REGEX REPLACE "^([a-zA-Z]):" "/\\1" coverage_info ${coverage_info}) - ENDIF() - SET(coverage_cleaned "${coverage_info}.cleaned") + if(NOT GENHTML_PATH) + message(FATAL_ERROR "genhtml not found! Aborting...") + endif() # NOT GENHTML_PATH - SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") + # Setup target + add_custom_target(${Coverage_NAME} - # Setup target - ADD_CUSTOM_TARGET(${_targetname} + # Cleanup lcov + COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -directory . --zerocounters + # Create baseline to make sure untouched files show up in the report + COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -c -i -d . -o ${Coverage_NAME}.base - # Cleanup lcov - ${LCOV_PATH} --directory . --zerocounters + # Run tests + COMMAND ${Coverage_EXECUTABLE} - # Run tests - COMMAND ${test_command} ${ARGV3} + # Capturing lcov counters and generating report + COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info + # add baseline counters + COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -a ${Coverage_NAME}.base -a ${Coverage_NAME}.info --output-file ${Coverage_NAME}.total + COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --remove ${Coverage_NAME}.total ${COVERAGE_LCOV_EXCLUDES} --output-file ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned + COMMAND ${GENHTML_PATH} -o ${Coverage_NAME} ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned + COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.base ${Coverage_NAME}.total ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned - # Capturing lcov counters and generating report - COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info} - COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' --output-file ${coverage_cleaned} - COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned} - COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${Coverage_DEPENDENCIES} + COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." + ) - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." - ) + # Show where to find the lcov info report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info." + ) - # Show info where to find the report - ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD - COMMAND ; - COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." - ) + # Show info where to find the report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." + ) -ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE +endfunction() # SETUP_TARGET_FOR_COVERAGE_LCOV -# Param _targetname The name of new the custom make target -# Param _testrunner The name of the target which runs the tests -# Param _outputname cobertura output is generated as _outputname.xml -# Optional fourth parameter is passed as arguments to _testrunner -# Pass them in list form, e.g.: "-j;2" for -j 2 -FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) +# Defines a target for running and collection code coverage information +# Builds dependencies, runs the given executable and outputs reports. +# NOTE! The executable should always have a ZERO as exit code otherwise +# the coverage generation will not complete. +# +# SETUP_TARGET_FOR_COVERAGE_GCOVR_XML( +# NAME ctest_coverage # New target name +# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +# DEPENDENCIES executable_target # Dependencies to build first +# ) +function(SETUP_TARGET_FOR_COVERAGE_GCOVR_XML) - IF(NOT PYTHON_EXECUTABLE) - MESSAGE(FATAL_ERROR "Python not found! Aborting...") - ENDIF() # NOT PYTHON_EXECUTABLE + set(options NONE) + set(oneValueArgs NAME) + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - IF(NOT GCOVR_PATH) - MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") - ENDIF() # NOT GCOVR_PATH + if(NOT SIMPLE_PYTHON_EXECUTABLE) + message(FATAL_ERROR "python not found! Aborting...") + endif() # NOT SIMPLE_PYTHON_EXECUTABLE - ADD_CUSTOM_TARGET(${_targetname} + if(NOT GCOVR_PATH) + message(FATAL_ERROR "gcovr not found! Aborting...") + endif() # NOT GCOVR_PATH - # Run tests - ${_testrunner} ${ARGV3} + # Combine excludes to several -e arguments + set(GCOVR_EXCLUDES "") + foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES}) + list(APPEND GCOVR_EXCLUDES "-e") + list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") + endforeach() - # Running gcovr - COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Running gcovr to produce Cobertura code coverage report." - ) + add_custom_target(${Coverage_NAME} + # Run tests + ${Coverage_EXECUTABLE} - # Show info where to find the report - ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD - COMMAND ; - COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." - ) + # Running gcovr + COMMAND ${GCOVR_PATH} --xml + -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES} + --object-directory=${PROJECT_BINARY_DIR} + -o ${Coverage_NAME}.xml + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${Coverage_DEPENDENCIES} + COMMENT "Running gcovr to produce Cobertura code coverage report." + ) -ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA + # Show info where to find the report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml." + ) + +endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_XML + +# Defines a target for running and collection code coverage information +# Builds dependencies, runs the given executable and outputs reports. +# NOTE! The executable should always have a ZERO as exit code otherwise +# the coverage generation will not complete. +# +# SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML( +# NAME ctest_coverage # New target name +# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +# DEPENDENCIES executable_target # Dependencies to build first +# ) +function(SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML) + + set(options NONE) + set(oneValueArgs NAME) + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT SIMPLE_PYTHON_EXECUTABLE) + message(FATAL_ERROR "python not found! Aborting...") + endif() # NOT SIMPLE_PYTHON_EXECUTABLE + + if(NOT GCOVR_PATH) + message(FATAL_ERROR "gcovr not found! Aborting...") + endif() # NOT GCOVR_PATH + + # Combine excludes to several -e arguments + set(GCOVR_EXCLUDES "") + foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES}) + list(APPEND GCOVR_EXCLUDES "-e") + list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") + endforeach() + + add_custom_target(${Coverage_NAME} + # Run tests + ${Coverage_EXECUTABLE} + + # Create folder + COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/${Coverage_NAME} + + # Running gcovr + COMMAND ${GCOVR_PATH} --html --html-details + -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES} + --object-directory=${PROJECT_BINARY_DIR} + -o ${Coverage_NAME}/index.html + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${Coverage_DEPENDENCIES} + COMMENT "Running gcovr to produce HTML code coverage report." + ) + + # Show info where to find the report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." + ) + +endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML + +function(APPEND_COVERAGE_COMPILER_FLAGS) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) + message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}") +endfunction() # APPEND_COVERAGE_COMPILER_FLAGS \ No newline at end of file diff --git a/cmake/FindArgon2.cmake b/cmake/FindArgon2.cmake index bb2f5811d..766e659b3 100644 --- a/cmake/FindArgon2.cmake +++ b/cmake/FindArgon2.cmake @@ -14,21 +14,21 @@ # along with this program. If not, see . find_path(ARGON2_INCLUDE_DIR argon2.h) -if (MINGW) - # find static library on Windows, and redefine used symbols to - # avoid definition name conflicts with libsodium - find_library(ARGON2_SYS_LIBRARIES libargon2.a) - message(STATUS "Patching libargon2...\n") - execute_process(COMMAND objcopy - --redefine-sym argon2_hash=libargon2_argon2_hash - --redefine-sym _argon2_hash=_libargon2_argon2_hash - --redefine-sym argon2_error_message=libargon2_argon2_error_message - --redefine-sym _argon2_error_message=_libargon2_argon2_error_message - ${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) - find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) +if(MINGW) + # find static library on Windows, and redefine used symbols to + # avoid definition name conflicts with libsodium + find_library(ARGON2_SYS_LIBRARIES libargon2.a) + message(STATUS "Patching libargon2...\n") + execute_process(COMMAND objcopy + --redefine-sym argon2_hash=libargon2_argon2_hash + --redefine-sym _argon2_hash=_libargon2_argon2_hash + --redefine-sym argon2_error_message=libargon2_argon2_error_message + --redefine-sym _argon2_error_message=_libargon2_argon2_error_message + ${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) else() - find_library(ARGON2_LIBRARIES argon2) + find_library(ARGON2_LIBRARIES argon2) endif() mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) diff --git a/cmake/FindGcrypt.cmake b/cmake/FindGcrypt.cmake index 077570462..59c6f473a 100644 --- a/cmake/FindGcrypt.cmake +++ b/cmake/FindGcrypt.cmake @@ -22,7 +22,7 @@ mark_as_advanced(GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR) if(GCRYPT_INCLUDE_DIR AND EXISTS "${GCRYPT_INCLUDE_DIR}/gcrypt.h") file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" GCRYPT_H REGEX "^#define GCRYPT_VERSION \"[^\"]*\"$") string(REGEX REPLACE "^.*GCRYPT_VERSION \"([0-9]+).*$" "\\1" GCRYPT_VERSION_MAJOR "${GCRYPT_H}") - string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}") + string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}") string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_PATCH "${GCRYPT_H}") set(GCRYPT_VERSION_STRING "${GCRYPT_VERSION_MAJOR}.${GCRYPT_VERSION_MINOR}.${GCRYPT_VERSION_PATCH}") endif() diff --git a/cmake/FindQREncode.cmake b/cmake/FindQREncode.cmake new file mode 100644 index 000000000..6328d9699 --- /dev/null +++ b/cmake/FindQREncode.cmake @@ -0,0 +1,22 @@ +# Copyright (C) 2017 KeePassXC Team +# +# This program 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 2 or (at your option) +# version 3 of the License. +# +# This program 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 this program. If not, see . + +find_path(QRENCODE_INCLUDE_DIR qrencode.h) +find_library(QRENCODE_LIBRARY qrencode) + +mark_as_advanced(QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(QREncode DEFAULT_MSG QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR) diff --git a/cmake/FindQuaZip.cmake b/cmake/FindQuaZip.cmake new file mode 100644 index 000000000..8d3091810 --- /dev/null +++ b/cmake/FindQuaZip.cmake @@ -0,0 +1,41 @@ +# QUAZIP_FOUND - QuaZip library was found +# QUAZIP_INCLUDE_DIR - Path to QuaZip include dir +# QUAZIP_INCLUDE_DIRS - Path to QuaZip and zlib include dir (combined from QUAZIP_INCLUDE_DIR + ZLIB_INCLUDE_DIR) +# QUAZIP_LIBRARIES - List of QuaZip libraries +# QUAZIP_ZLIB_INCLUDE_DIR - The include dir of zlib headers + +IF(QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES) + # in cache already + SET(QUAZIP_FOUND TRUE) +ELSE(QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES) + IF(Qt5Core_FOUND) + set(QUAZIP_LIB_VERSION_SUFFIX 5) + ENDIF() + IF(WIN32) + FIND_PATH(QUAZIP_LIBRARY_DIR + WIN32_DEBUG_POSTFIX d + NAMES libquazip${QUAZIP_LIB_VERSION_SUFFIX}.dll + HINTS "C:/Programme/" "C:/Program Files" + PATH_SUFFIXES QuaZip/lib + ) + FIND_LIBRARY(QUAZIP_LIBRARIES NAMES libquazip${QUAZIP_LIB_VERSION_SUFFIX}.dll HINTS ${QUAZIP_LIBRARY_DIR}) + FIND_PATH(QUAZIP_INCLUDE_DIR NAMES quazip.h HINTS ${QUAZIP_LIBRARY_DIR}/../ PATH_SUFFIXES include/quazip5) + FIND_PATH(QUAZIP_ZLIB_INCLUDE_DIR NAMES zlib.h) + ELSE(WIN32) + FIND_PACKAGE(PkgConfig) + pkg_check_modules(PC_QUAZIP quazip) + FIND_LIBRARY(QUAZIP_LIBRARIES + WIN32_DEBUG_POSTFIX d + NAMES quazip${QUAZIP_LIB_VERSION_SUFFIX} + HINTS /usr/lib /usr/lib64 + ) + FIND_PATH(QUAZIP_INCLUDE_DIR quazip.h + HINTS /usr/include /usr/local/include + PATH_SUFFIXES quazip${QUAZIP_LIB_VERSION_SUFFIX} + ) + FIND_PATH(QUAZIP_ZLIB_INCLUDE_DIR zlib.h HINTS /usr/include /usr/local/include) + ENDIF(WIN32) + INCLUDE(FindPackageHandleStandardArgs) + SET(QUAZIP_INCLUDE_DIRS ${QUAZIP_INCLUDE_DIR} ${QUAZIP_ZLIB_INCLUDE_DIR}) + find_package_handle_standard_args(QUAZIP DEFAULT_MSG QUAZIP_LIBRARIES QUAZIP_INCLUDE_DIR QUAZIP_ZLIB_INCLUDE_DIR QUAZIP_INCLUDE_DIRS) +ENDIF(QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES) diff --git a/cmake/GenerateProductVersion.cmake b/cmake/GenerateProductVersion.cmake index 2d311efaf..f66c1b33c 100644 --- a/cmake/GenerateProductVersion.cmake +++ b/cmake/GenerateProductVersion.cmake @@ -91,7 +91,7 @@ function(generate_product_version outfiles) set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}") endif() if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "") - set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}") + set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_VERSION_PATCH}") endif() if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "") set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}") diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake deleted file mode 100644 index d39671cd6..000000000 --- a/cmake/GetGitRevisionDescription.cmake +++ /dev/null @@ -1,130 +0,0 @@ -# - Returns a version string from Git -# -# These functions force a re-configure on each git commit so that you can -# trust the values of the variables in your build system. -# -# get_git_head_revision( [ ...]) -# -# Returns the refspec and sha hash of the current head revision -# -# git_describe( [ ...]) -# -# Returns the results of git describe on the source tree, and adjusting -# the output so that it tests false if an error occurs. -# -# git_get_exact_tag( [ ...]) -# -# Returns the results of git describe --exact-match on the source tree, -# and adjusting the output so that it tests false if there was no exact -# matching tag. -# -# Requires CMake 2.6 or newer (uses the 'function' command) -# -# Original Author: -# 2009-2010 Ryan Pavlik -# http://academic.cleardefinition.com -# Iowa State University HCI Graduate Program/VRAC -# -# Copyright Iowa State University 2009-2010. -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE.BOOST-1.0 or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -if(__get_git_revision_description) - return() -endif() -set(__get_git_revision_description YES) - -# We must run the following at "include" time, not at function call time, -# to find the path to this module rather than the path to a calling list file -get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) - -function(get_git_head_revision _refspecvar _hashvar) - set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") - set(GIT_DIR "${GIT_PARENT_DIR}/.git") - while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories - set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") - get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) - if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT) - # We have reached the root directory, we are not in git - set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE) - set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE) - return() - endif() - set(GIT_DIR "${GIT_PARENT_DIR}/.git") - endwhile() - # check if this is a submodule - if(NOT IS_DIRECTORY ${GIT_DIR}) - file(READ ${GIT_DIR} submodule) - string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule}) - get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH) - get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE) - endif() - set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data") - if(NOT EXISTS "${GIT_DATA}") - file(MAKE_DIRECTORY "${GIT_DATA}") - endif() - - if(NOT EXISTS "${GIT_DIR}/HEAD") - return() - endif() - set(HEAD_FILE "${GIT_DATA}/HEAD") - configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY) - - configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" - "${GIT_DATA}/grabRef.cmake" - @ONLY) - include("${GIT_DATA}/grabRef.cmake") - - set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE) - set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE) -endfunction() - -function(git_describe _var) - if(NOT GIT_FOUND) - find_package(Git QUIET) - endif() - get_git_head_revision(refspec hash) - if(NOT GIT_FOUND) - set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) - return() - endif() - if(NOT hash) - set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) - return() - endif() - - # TODO sanitize - #if((${ARGN}" MATCHES "&&") OR - # (ARGN MATCHES "||") OR - # (ARGN MATCHES "\\;")) - # message("Please report the following error to the project!") - # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") - #endif() - - #message(STATUS "Arguments to execute_process: ${ARGN}") - - execute_process(COMMAND - "${GIT_EXECUTABLE}" - describe - ${hash} - ${ARGN} - WORKING_DIRECTORY - "${CMAKE_SOURCE_DIR}" - RESULT_VARIABLE - res - OUTPUT_VARIABLE - out - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(NOT res EQUAL 0) - set(out "${out}-${res}-NOTFOUND") - endif() - - set(${_var} "${out}" PARENT_SCOPE) -endfunction() - -function(git_get_exact_tag _var) - git_describe(out --exact-match ${ARGN}) - set(${_var} "${out}" PARENT_SCOPE) -endfunction() diff --git a/cmake/GetGitRevisionDescription.cmake.in b/cmake/GetGitRevisionDescription.cmake.in deleted file mode 100644 index 353c02521..000000000 --- a/cmake/GetGitRevisionDescription.cmake.in +++ /dev/null @@ -1,41 +0,0 @@ -# -# Internal file for GetGitRevisionDescription.cmake -# -# Requires CMake 2.6 or newer (uses the 'function' command) -# -# Original Author: -# 2009-2010 Ryan Pavlik -# http://academic.cleardefinition.com -# Iowa State University HCI Graduate Program/VRAC -# -# Copyright Iowa State University 2009-2010. -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE.BOOST-1.0 or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -set(HEAD_HASH) - -file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) - -string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) -if(HEAD_CONTENTS MATCHES "ref") - # named branch - string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") - if(EXISTS "@GIT_DIR@/${HEAD_REF}") - configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) - else() - configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY) - file(READ "@GIT_DATA@/packed-refs" PACKED_REFS) - if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") - set(HEAD_HASH "${CMAKE_MATCH_1}") - endif() - endif() -else() - # detached HEAD - configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY) -endif() - -if(NOT HEAD_HASH) - file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024) - string(STRIP "${HEAD_HASH}" HEAD_HASH) -endif() diff --git a/docs/KeePassHTTP/KeePassXC-Accept-Button.png b/docs/KeePassHTTP/KeePassXC-Accept-Button.png new file mode 100644 index 000000000..8c736c213 Binary files /dev/null and b/docs/KeePassHTTP/KeePassXC-Accept-Button.png differ diff --git a/docs/KeePassHTTP/KeePassXC-Confirm.png b/docs/KeePassHTTP/KeePassXC-Confirm.png new file mode 100644 index 000000000..e0b0f084e Binary files /dev/null and b/docs/KeePassHTTP/KeePassXC-Confirm.png differ diff --git a/docs/KeePassHTTP/KeePassXC-Connect.png b/docs/KeePassHTTP/KeePassXC-Connect.png new file mode 100644 index 000000000..a2d756712 Binary files /dev/null and b/docs/KeePassHTTP/KeePassXC-Connect.png differ diff --git a/docs/KeePassXC-Accept-Button.png b/docs/KeePassXC-Accept-Button.png deleted file mode 100644 index de4b39261..000000000 Binary files a/docs/KeePassXC-Accept-Button.png and /dev/null differ diff --git a/docs/KeePassXC-Confirm.png b/docs/KeePassXC-Confirm.png deleted file mode 100644 index 989294a4e..000000000 Binary files a/docs/KeePassXC-Confirm.png and /dev/null differ diff --git a/docs/KeePassXC-Connect.png b/docs/KeePassXC-Connect.png deleted file mode 100644 index 55b0f3d49..000000000 Binary files a/docs/KeePassXC-Connect.png and /dev/null differ diff --git a/docs/KeeShare/AppSettings.png b/docs/KeeShare/AppSettings.png new file mode 100644 index 000000000..b12e6a04d Binary files /dev/null and b/docs/KeeShare/AppSettings.png differ diff --git a/docs/KeeShare/DatabaseSettings.png b/docs/KeeShare/DatabaseSettings.png new file mode 100644 index 000000000..ec89b51d5 Binary files /dev/null and b/docs/KeeShare/DatabaseSettings.png differ diff --git a/docs/KeeShare/GroupSettings_Export.png b/docs/KeeShare/GroupSettings_Export.png new file mode 100644 index 000000000..1cfd3f331 Binary files /dev/null and b/docs/KeeShare/GroupSettings_Export.png differ diff --git a/docs/KeeShare/GroupSettings_Import.png b/docs/KeeShare/GroupSettings_Import.png new file mode 100644 index 000000000..3824c0158 Binary files /dev/null and b/docs/KeeShare/GroupSettings_Import.png differ diff --git a/docs/KeeShare/GroupSettings_Sync.png b/docs/KeeShare/GroupSettings_Sync.png new file mode 100644 index 000000000..7385229e8 Binary files /dev/null and b/docs/KeeShare/GroupSettings_Sync.png differ diff --git a/docs/QUICKSTART.md b/docs/QUICKSTART.md index b4b2d38ca..c2afd0b98 100644 --- a/docs/QUICKSTART.md +++ b/docs/QUICKSTART.md @@ -24,17 +24,18 @@ for all your websites, programs, etc. ## Setting up Browser Integration with KeePassXC * *Within KeePassXC*, go to **Tools->Settings** (on macOS, go to **KeePassXC->Preferences**.) -* In **Browser Integration**, check **Enable KeePassHTTP server** +* In **Browser Integration**, check **Enable KeePassXC browser integration** +* Right below that, click the checkbox for the browser(s) you use Leave the other options at their defaults. -* *In your default web browser,* install the KeePassHTTP-Connector extension/add-on. Instructions for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepasshttp-connector/?src=api) or [Chrome](https://chrome.google.com/webstore/detail/keepasshttp-connector/dafgdjggglmmknipkhngniifhplpcldb?utm_source=chrome-app-launcher-info-dialog) +* *In your default web browser,* install the KeePassXC Browser extension/add-on. Instructions for [Firefox or Tor Browser](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) or [Chrome](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk) * Click the KeePassXC icon in the upper-right corner. You'll see the dialog below. * Click the blue Connect button to make the browser extension connect to the KeePassXC application. -KeePassXC Connect dialog +KeePassXC Connect dialog * *Switch back to KeePassXC.* You'll see a dialog (below) indicating that a request to connect has arrived. * Give the connection a name (perhaps *Keepass-Browsername*, any unique name will suffice) and click OK to accept it. * This one-time operation connects KeePassXC and your browser. -KeePassXC accept connection dialog +KeePassXC accept connection dialog ## Using Browser Integration @@ -44,4 +45,87 @@ or select it and type Ctrl+U (Cmd+U on macOS). * If there are username/password fields on that page, you will see the dialog below. Click *Allow* to confirm that KeePassXC may access the credentials to auto-fill the fields. * Check *Remember this decision* to allow this each time you visit the page. -KeePassCX Confirm Access dialog +KeePassCX Confirm Access dialog + +## Using Sharing + +Sharing allows you to share a subset of your credentials with others and vice versa. + +### Enable Sharing + +To use sharing, you need to enable for the application. + +1. Go to Tools → Settings +2. Select the category KeeShare +3. Check _Allow import_ if you want to import shared credentials +4. Check _Allow export_ if you want to share credentials + +To make sure that your data is valid when im imported by another client, please _generate_ (or _import_) a public/private key pair and enter your _signer_ name. This way your client may verify that the imported data is valid. When Importing, you'll see the known sources with names and fingerprint in the list at the bottom. This is the place to _trust_ or _untrust_ signers. It is only possible to trust someone on application level. + +KeeShare Application Settings + +### Sharing Credentials + +If you checked _Allow export_ in the Sharing settings you now are good to go to share some passwords with others. Sharing always is defined on a group. If you enable sharing on a group, every entry under this group or it's children is shared. If you enable sharing on the root node, **every password** inside your database gets shared! + +1. Open the edit sheet on a group you want to share +1. Select the sharing section +1. Choose _Export to path_ as the sharing method +1. Choose a path to store the shared credentials to +1. Generate a password for this share container + +The export file will not be generated automatically. Instead, each time the database is saved, the file gets written (so please deactivate the autosafe feature). If an old file is present, the old file will be overwritten! The file should be written to a location that is accessible by others. An easy setup is a network share or storing the file inside the cloud. + +KeeShare Group Sharing Settings + +### Using Shared Credentials + +Checking _Allow import_ in the Sharing settings of the database enables you to receive credentials from others. KeePass will watch sharing sources and import any changes immediately into your database using the synchronization feature. + +1. Create a group for import +1. Open the edit sheet on that group +1. Select the sharing section +1. Choose _Import from path_ as the sharing method +1. Choose a share container that is shared with you +1. Enter the password for the shared container + +KeeShare observes the container for changes and merges them into your database when necessary. Importing merges in time order, so older data is moved to the history, which should have a sufficient size to prevent loss of needed data. + +Please note, that the import currently is not restricted to the configured group. Every entry which was imported and moved outside the import group will be updated regardless of it's location! + +KeeShare Group Import Settings + +### Using Synchronized Credentials + +Instead of using different groups for sharing and importing you can use a single group that acts as both. This way you can synchronize a number of credentials easily across many users without a lot of hassle. + +1. Open the edit sheet on a group you want to synchronize +1. Select the sharing section +1. Choose _Synchronize with path_ as the sharing method +1. Choose a database that you want to use a synchronization file +1. Enter the password for the database + +KeeShare Group Synchronization Settings + +### Disable Sharing for Credentials + +In case you don't want to share (import or export) some credentials, it is possible to you can +* use the application settings and uncheck the options or +* instead of selecting _Import from path_, _Export to path_ or _Synchronize with path_ you'll select _Inactive_ while leaving the path and the password untouched + +### Sharing overview + +There is a simple overview of shared groups to keep track of your data. + +1. Open the Database Settings +1. Select the KeeShare category + +KeeShare Group Sharing Ovewview + +## Technical Details and Limitations of Sharing + +Sharing relies on the combination of file exports and imports as well as the synchronization mechanism provided by KeePassXC. Since the merge algorithm uses the history of entries to prevent data loss, this history must be enabled and have a sufficient size. Furthermore, the merge algorithm is location independend, therefore it does not matter if entries are moved outside of an import group. These entries will be updated none the less. Moving entries outside of export groups will prevent a further export of the entry, but it will not ensure that the already shared data will be removed from any client. + +KeeShare uses a custom certification mechanism to ensure that the source of the data is the expected one. This ensures that the data was exported by the signer but it is not possible to detect if someone replaced the data with an older version from a valid signer. To prevent this, the container could be placed at a location which is only writeable for valid signers. + + diff --git a/release-tool b/release-tool index 5dfdad434..a04ad5de9 100755 --- a/release-tool +++ b/release-tool @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# +# # KeePassXC Release Preparation Helper # Copyright (C) 2017 KeePassXC team # @@ -35,7 +35,7 @@ TAG_NAME="" DOCKER_IMAGE="" DOCKER_CONTAINER_NAME="keepassxc-build-container" CMAKE_OPTIONS="" -CPACK_GENERATORS="NSIS;ZIP" +CPACK_GENERATORS="WIX;ZIP" COMPILER="g++" MAKE_OPTIONS="-j8" BUILD_PLUGINS="all" @@ -50,7 +50,8 @@ printUsage() { local cmd if [ "" == "$1" ] || [ "help" == "$1" ]; then cmd="COMMAND" - elif [ "check" == "$1" ] || [ "merge" == "$1" ] || [ "build" == "$1" ] || [ "gpgsign" == "$1" ] || [ "appsign" == "$1" ]; then + elif [ "check" == "$1" ] || [ "merge" == "$1" ] || [ "build" == "$1" ] \ + || [ "gpgsign" == "$1" ] || [ "appsign" == "$1" ] || [ "appimage" == "$1" ]; then cmd="$1" else logError "Unknown command: '$1'\n" @@ -58,7 +59,7 @@ printUsage() { fi printf "\e[1mUsage:\e[0m $(basename $0) $cmd [options]\n" - + if [ "COMMAND" == "$cmd" ]; then cat << EOF @@ -107,6 +108,8 @@ Options: The container must not exist already --snapcraft Create and use docker image to build snapcraft distribution. This option has no effect if --docker-image is not set. + --appimage Build a Linux AppImage after compilation. + If this option is set, --install-prefix has no effect --appsign Perform platform specific App Signing before packaging -k, --key Specify the App Signing Key/Identity -c, --cmake-options Additional CMake options for compiling the sources @@ -139,6 +142,25 @@ Options: -f, --files Files to sign (required) -k, --key Signing Key or Apple Developer ID -h, --help Show this help +EOF + elif [ "appimage" == "$cmd" ]; then + cat << EOF + +Generate Linux AppImage from 'make install' AppDir + +Options: + -a, --appdir Input AppDir (required) + -v, --version KeePassXC version + -o, --output-dir Output directory where to build the AppImage + (default: '${OUTPUT_DIR}') + -d, --docker-image Use the specified Docker image to build the AppImage. + The image must have all required build dependencies installed. + --container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}') + The container must not exist already + --appsign Embed a PGP signature into the AppImage + -k, --key The PGP Signing Key + --verbosity linuxdeploy verbosity (default: 3) + -h, --help Show this help EOF fi } @@ -161,7 +183,7 @@ init() { if [ "" == "$TAG_NAME" ]; then TAG_NAME="$RELEASE_NAME" fi - + if [ "" == "$SOURCE_BRANCH" ]; then SOURCE_BRANCH="release/${RELEASE_NAME}" fi @@ -192,6 +214,10 @@ exitTrap() { exitError "Existing upon user request..." } +cmdExists() { + command -v "$1" &> /dev/null +} + checkSourceDirExists() { if [ ! -d "$SRC_DIR" ]; then exitError "Source directory '${SRC_DIR}' does not exist!" @@ -210,15 +236,8 @@ checkGitRepository() { fi } -checkTagExists() { - git tag | grep -q "$TAG_NAME" - if [ $? -ne 0 ]; then - exitError "Tag '${TAG_NAME}' does not exist!" - fi -} - checkReleaseDoesNotExist() { - git tag | grep -q "$TAG_NAME" + git tag | grep -q "^$TAG_NAME$" if [ $? -eq 0 ]; then exitError "Release '$RELEASE_NAME' (tag: '$TAG_NAME') already exists!" fi @@ -271,7 +290,7 @@ checkChangeLog() { if [ ! -f CHANGELOG ]; then exitError "No CHANGELOG file found!" fi - + grep -qPzo "${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n=+\n" CHANGELOG if [ $? -ne 0 ]; then exitError "'CHANGELOG' has not been updated to the '${RELEASE_NAME}' release!" @@ -299,41 +318,34 @@ checkSnapcraft() { if [ $? -ne 0 ]; then exitError "'snapcraft.yaml' has not been updated to the '${RELEASE_NAME}' release!" fi + + grep -qPzo "KEEPASSXC_BUILD_TYPE=Release" snapcraft.yaml + if [ $? -ne 0 ]; then + exitError "'snapcraft.yaml' is not set for a release build!" + fi } checkTransifexCommandExists() { - command -v tx > /dev/null - if [ 0 -ne $? ]; then + if ! cmdExists tx; then exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'." fi } -checkOsslsigncodeCommandExists() { - command -v osslsigncode > /dev/null - if [ 0 -ne $? ]; then - exitError "osslsigncode command not found on the PATH! Please install it using 'pacman -S mingw-w64-osslsigncode'." - fi -} - checkSigntoolCommandExists() { - command -v signtool > /dev/null - if [ 0 -ne $? ]; then + if ! cmdExists signtool; then exitError "signtool command not found on the PATH! Add the Windows SDK binary folder to your PATH." fi } checkCodesignCommandExists() { - command -v codesign > /dev/null - if [ 0 -ne $? ]; then + if ! cmdExists codesign; then exitError "codesign command not found on the PATH! Please check that you have correctly installed Xcode." fi } checkQt5LUpdateExists() { - command -v lupdate > /dev/null - if [ 0 -eq $? ] && ! $(lupdate -version | grep -q "lupdate version 5\."); then - command -v lupdate-qt5 > /dev/null - if [ 0 -ne $? ]; then + if cmdExists lupdate && ! $(lupdate -version | grep -q "lupdate version 5\."); then + if ! cmdExists lupdate-qt5; then exitError "Qt Linguist tool (lupdate-qt5) is not installed! Please install using 'apt install qttools5-dev-tools'" fi fi @@ -341,12 +353,12 @@ checkQt5LUpdateExists() { performChecks() { logInfo "Performing basic checks..." - + checkSourceDirExists logInfo "Changing to source directory..." cd "${SRC_DIR}" - + logInfo "Validating toolset and repository..." checkTransifexCommandExists @@ -356,23 +368,23 @@ performChecks() { checkWorkingTreeClean checkSourceBranchExists checkTargetBranchExists - + logInfo "Checking out '${SOURCE_BRANCH}'..." git checkout "$SOURCE_BRANCH" - + logInfo "Attempting to find '${RELEASE_NAME}' in various files..." checkVersionInCMake checkChangeLog checkAppStreamInfo checkSnapcraft - + logInfo "\e[1m\e[32mAll checks passed!\e[0m" } # re-implement realpath for OS X (thanks mschrag) # https://superuser.com/questions/205127/ -if ! $(command -v realpath > /dev/null); then +if ! cmdExists realpath; then realpath() { pushd . > /dev/null if [ -d "$1" ]; then @@ -381,7 +393,7 @@ if ! $(command -v realpath > /dev/null); then else cd "$(dirname "$1")" cur_dir=$(dirs -l +0) - + if [ "$cur_dir" == "/" ]; then echo "$cur_dir$(basename "$1")" else @@ -421,42 +433,42 @@ check() { # ----------------------------------------------------------------------- # merge command # ----------------------------------------------------------------------- -merge() { +merge() { while [ $# -ge 1 ]; do local arg="$1" case "$arg" in -v|--version) RELEASE_NAME="$2" shift ;; - + -a|--app-name) APP_NAME="$2" shift ;; - + -s|--source-dir) SRC_DIR="$2" shift ;; - + -k|--key|-g|--gpg-key) GPG_GIT_KEY="$2" shift ;; - + -r|--release-branch) SOURCE_BRANCH="$2" shift ;; - + --target-branch) TARGET_BRANCH="$2" shift ;; - + -t|--tag-name) TAG_NAME="$2" shift ;; - + -h|--help) printUsage "merge" exit ;; - + *) logError "Unknown option '$arg'\n" printUsage "merge" @@ -468,7 +480,7 @@ merge() { init performChecks - + logInfo "Updating language files..." ./share/translations/update.sh update ./share/translations/update.sh pull @@ -489,10 +501,10 @@ merge() { CHANGELOG=$(grep -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n)=+\n\n?(?:.|\n)+?\n(?=\n)" \ CHANGELOG | grep -Pzo '(?<=\n\n)(.|\n)+' | tr -d \\0) COMMIT_MSG="Release ${RELEASE_NAME}" - + logInfo "Checking out target branch '${TARGET_BRANCH}'..." git checkout "$TARGET_BRANCH" - + logInfo "Merging '${SOURCE_BRANCH}' into '${TARGET_BRANCH}'..." git merge "$SOURCE_BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$SOURCE_BRANCH" -S"$GPG_GIT_KEY" @@ -503,14 +515,203 @@ merge() { else git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY" fi - + cleanup - + logInfo "All done!" logInfo "Please merge the release branch back into the develop branch now and then push your changes." logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m." } +# ----------------------------------------------------------------------- +# appimage command +# ----------------------------------------------------------------------- +appimage() { + local appdir + local build_appsign=false + local build_key + local verbosity="1" + + while [ $# -ge 1 ]; do + local arg="$1" + case "$arg" in + -v|--version) + RELEASE_NAME="$2" + shift ;; + + -a|--appdir) + appdir="$2" + shift ;; + + -o|--output-dir) + OUTPUT_DIR="$2" + shift ;; + + -d|--docker-image) + DOCKER_IMAGE="$2" + shift ;; + + --container-name) + DOCKER_CONTAINER_NAME="$2" + shift ;; + + --appsign) + build_appsign=true ;; + + --verbosity) + verbosity=$2 + shift ;; + + -k|--key) + build_key="$2" + shift ;; + + -h|--help) + printUsage "appimage" + exit ;; + + *) + logError "Unknown option '$arg'\n" + printUsage "appimage" + exit 1 ;; + esac + shift + done + + if [ -z "${appdir}" ]; then + logError "Missing arguments, --appdir is required!\n" + printUsage "appimage" + exit 1 + fi + + if [ ! -d "${appdir}" ]; then + logError "AppDir does not exist, please create one with 'make install'!\n" + exit 1 + elif [ -e "${appdir}/AppRun" ]; then + logError "AppDir has already been run through linuxdeploy, please create a fresh AppDir with 'make install'.\n" + exit 1 + fi + + appdir="$(realpath "$appdir")" + + local out="${OUTPUT_DIR}" + if [ "" == "$out" ]; then + out="." + fi + mkdir -p "$out" + local out_real="$(realpath "$out")" + cd "$out" + + local linuxdeploy="linuxdeploy" + local linuxdeploy_cleanup + local linuxdeploy_plugin_qt="linuxdeploy-plugin-qt" + local linuxdeploy_plugin_qt_cleanup + local appimagetool="appimagetool" + local appimagetool_cleanup + + logInfo "Testing for AppImage tools..." + local docker_test_cmd + if [ "" != "$DOCKER_IMAGE" ]; then + docker_test_cmd="docker run --rm ${DOCKER_IMAGE}" + fi + + # Test if linuxdeploy and linuxdeploy-plugin-qt are installed + # on the system or inside the Docker container + if ! ${docker_test_cmd} which ${linuxdeploy} &> /dev/null; then + logInfo "Downloading linuxdeploy..." + linuxdeploy="./linuxdeploy" + linuxdeploy_cleanup="rm -f ${linuxdeploy}" + curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > "$linuxdeploy" + chmod +x "$linuxdeploy" + fi + if ! ${docker_test_cmd} which ${linuxdeploy_plugin_qt} &> /dev/null; then + logInfo "Downloading linuxdeploy-plugin-qt..." + linuxdeploy_plugin_qt="./linuxdeploy-plugin-qt" + linuxdeploy_plugin_qt_cleanup="rm -f ${linuxdeploy_plugin_qt}" + curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > "$linuxdeploy_plugin_qt" + chmod +x "$linuxdeploy_plugin_qt" + fi + + # appimagetool is always run outside a Docker container, so we can access our GPG keys + if ! cmdExists ${appimagetool}; then + logInfo "Downloading appimagetool..." + appimagetool="./appimagetool" + appimagetool_cleanup="rm -f ${appimagetool}" + curl -L "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > "$appimagetool" + chmod +x "$appimagetool" + fi + + # Create custom AppRun wrapper + cat << EOF > "${out_real}/KeePassXC-AppRun" +#!/usr/bin/env bash + +export PATH="\$(dirname \$0)/usr/bin:\${PATH}" +export LD_LIBRARY_PATH="\$(dirname \$0)/usr/lib:\${LD_LIBRARY_PATH}" + +if [ "\${1}" == "cli" ]; then + shift + exec keepassxc-cli "\$@" +elif [ "\${1}" == "proxy" ]; then + shift + exec keepassxc-proxy "\$@" +elif [ -v CHROME_WRAPPER ] || [ -v MOZ_LAUNCHED_CHILD ]; then + exec keepassxc-proxy "\$@" +else + exec keepassxc "\$@" +fi +EOF + chmod +x "${out_real}/KeePassXC-AppRun" + + # Find .desktop files, icons, and binaries to deploy + local desktop_file="$(find "$appdir" -name "org.keepassxc.KeePassXC.desktop" | head -n1)" + local icon="$(find "$appdir" -name 'keepassxc.png' | grep -P 'application/256x256/apps/keepassxc.png$' | head -n1)" + local executables="$(IFS=$'\n' find "$appdir" | grep -P '/usr/bin/keepassxc[^/]*$' | xargs -i printf " --executable={}")" + + logInfo "Collecting libs and patching binaries..." + if [ "" == "$DOCKER_IMAGE" ]; then + "$linuxdeploy" --verbosity=${verbosity} --plugin=qt --appdir="$appdir" --desktop-file="$desktop_file" \ + --custom-apprun="${out_real}/KeePassXC-AppRun" --icon-file="$icon" ${executables} \ + --library=$(ldconfig -p | grep x86-64 | grep -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1) + else + desktop_file="${desktop_file//${appdir}/\/keepassxc\/AppDir}" + icon="${icon//${appdir}/\/keepassxc\/AppDir}" + executables="${executables//${appdir}/\/keepassxc\/AppDir}" + + docker run --name "$DOCKER_CONTAINER_NAME" --rm \ + --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \ + -v "${appdir}:/keepassxc/AppDir:rw" \ + -v "${out_real}:/keepassxc/out:rw" \ + "$DOCKER_IMAGE" \ + bash -c "cd /keepassxc/out && ${linuxdeploy} --verbosity=${verbosity} --plugin=qt --appdir=/keepassxc/AppDir \ + --custom-apprun="/keepassxc/out/KeePassXC-AppRun" --desktop-file=${desktop_file} --icon-file=${icon} ${executables} \ + --library=\$(ldconfig -p | grep x86-64 | grep -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1)" + fi + + logInfo "Creating AppImage..." + local appsign_flag="" + local appsign_key_flag="" + if ${build_appsign}; then + appsign_flag="--sign" + appsign_key_flag="--sign-key ${build_key}" + fi + local appimage_name="KeePassXC-x86_64.AppImage" + if [ "" != "$RELEASE_NAME" ]; then + appimage_name="KeePassXC-${RELEASE_NAME}-x86_64.AppImage" + fi + + # Run appimagetool to package (and possibly sign) AppImage + # --no-appstream is required, since it may crash on newer systems + # see: https://github.com/AppImage/AppImageKit/issues/856 + "$appimagetool" --updateinformation "gh-releases-zsync|keepassxreboot|keepassxc|latest|KeePassXC-*-x86_64.AppImage.zsync" \ + ${appsign_flag} ${appsign_key_flag} --no-appstream "$appdir" "${out_real}/${appimage_name}" + + logInfo "Cleaning up temporary files..." + ${linuxdeploy_cleanup} + ${linuxdeploy_plugin_qt_cleanup} + ${appimagetool_cleanup} + rm -f "${out_real}/KeePassXC-AppRun" +} + # ----------------------------------------------------------------------- # build command # ----------------------------------------------------------------------- @@ -518,59 +719,63 @@ build() { local build_source_tarball=true local build_snapshot=false local build_snapcraft=false + local build_appimage=false local build_generators="" local build_appsign=false local build_key="" - + while [ $# -ge 1 ]; do local arg="$1" case "$arg" in -v|--version) RELEASE_NAME="$2" shift ;; - + -a|--app-name) APP_NAME="$2" shift ;; - + -s|--source-dir) SRC_DIR="$2" shift ;; - + -o|--output-dir) OUTPUT_DIR="$2" shift ;; - + -t|--tag-name) TAG_NAME="$2" shift ;; - + -d|--docker-image) DOCKER_IMAGE="$2" shift ;; + --container-name) + DOCKER_CONTAINER_NAME="$2" + shift ;; + --appsign) build_appsign=true ;; -k|--key) build_key="$2" shift ;; - - --container-name) - DOCKER_CONTAINER_NAME="$2" - shift ;; - + --snapcraft) build_snapcraft=true ;; - + + --appimage) + build_appimage=true ;; + -c|--cmake-options) CMAKE_OPTIONS="$2" shift ;; - + --compiler) COMPILER="$2" shift ;; - + -m|--make-options) MAKE_OPTIONS="$2" shift ;; @@ -578,25 +783,25 @@ build() { -g|--generators) build_generators="$2" shift ;; - + -i|--install-prefix) INSTALL_PREFIX="$2" shift ;; - + -p|--plugins) BUILD_PLUGINS="$2" shift ;; - + -n|--no-source-tarball) build_source_tarball=false ;; --snapshot) build_snapshot=true ;; - + -h|--help) printUsage "build" exit ;; - + *) logError "Unknown option '$arg'\n" printUsage "build" @@ -605,6 +810,10 @@ build() { shift done + if [[ ${build_appsign} && ! -f ${build_key} ]]; then + exitError "--appsign specified with invalid key file\n" + fi + init OUTPUT_DIR="$(realpath "$OUTPUT_DIR")" @@ -666,19 +875,24 @@ build() { logInfo "Creating build directory..." mkdir -p "${OUTPUT_DIR}/build-release" cd "${OUTPUT_DIR}/build-release" - + logInfo "Configuring sources..." for p in ${BUILD_PLUGINS}; do CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On" done - + if [ "$(uname -o)" == "GNU/Linux" ] && ${build_appimage}; then + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_DIST_TYPE=AppImage" + # linuxdeploy requires /usr as install prefix + INSTALL_PREFIX="/usr" + fi + if [ "$COMPILER" == "g++" ]; then export CC=gcc elif [ "$COMPILER" == "clang++" ]; then export CC=clang fi export CXX="$COMPILER" - + if [ "" == "$DOCKER_IMAGE" ]; then if [ "$(uname -s)" == "Darwin" ]; then # Building on macOS @@ -692,21 +906,27 @@ build() { logInfo "Compiling and packaging sources..." make ${MAKE_OPTIONS} package - + + # Appsign the executables if desired + if [[ ${build_appsign} ]]; then + logInfo "Signing executable files" + appsign "-f" "./${APP_NAME}-${RELEASE_NAME}.dmg" "-k" "${build_key}" + fi + mv "./${APP_NAME}-${RELEASE_NAME}.dmg" ../ elif [ "$(uname -o)" == "Msys" ]; then # Building on Windows with Msys2 logInfo "Configuring build..." cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off -G"MSYS Makefiles" \ -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" ${CMAKE_OPTIONS} "$SRC_DIR" - + logInfo "Compiling and packaging sources..." mingw32-make ${MAKE_OPTIONS} preinstall # Appsign the executables if desired - if [[ ${build_appsign} && ! -z ${build_key} ]]; then + if [[ ${build_appsign} ]]; then logInfo "Signing executable files" - appsign "-f" `find src | grep '\.exe'` "-k" "${build_key}" + appsign "-f" $(find src | grep -P '\.exe$|\.dll$') "-k" "${build_key}" fi # Call cpack directly instead of calling make package. @@ -717,47 +937,43 @@ build() { # Inject the portable config into the zip build and rename for filename in ${APP_NAME}-*.zip; do logInfo "Creating portable zip file" - local folder=`echo ${filename} | sed -r 's/(.*)\.zip/\1/'` + local folder=$(echo ${filename} | sed -r 's/(.*)\.zip/\1/') python -c 'import zipfile,sys ; zipfile.ZipFile(sys.argv[1],"a").write(sys.argv[2],sys.argv[3])' \ ${filename} ${SRC_DIR}/share/keepassxc.ini ${folder}/keepassxc.ini mv ${filename} ${folder}-portable.zip done - + mv "${APP_NAME}-"*.* ../ else - mkdir -p "${OUTPUT_DIR}/bin-release" - + mkdir -p "${OUTPUT_DIR}/KeePassXC.AppDir" + # Building on Linux without Docker container logInfo "Configuring build..." cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off ${CMAKE_OPTIONS} \ - -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ - -DKEEPASSXC_DIST_TYPE=AppImage "$SRC_DIR" - + -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" "$SRC_DIR" + logInfo "Compiling sources..." - make $MAKE_OPTIONS - + make ${MAKE_OPTIONS} + logInfo "Installing to bin dir..." - make DESTDIR="${OUTPUT_DIR}/bin-release" install/strip - - logInfo "Creating AppImage..." - ${SRC_DIR}/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME" + make DESTDIR="${OUTPUT_DIR}/KeePassXC.AppDir" install/strip fi else - if [ build_snapcraft ]; then + if ${build_snapcraft}; then logInfo "Building snapcraft docker image..." - + sudo docker image build -t "$DOCKER_IMAGE" "$(realpath "$SRC_DIR")/ci/snapcraft" logInfo "Launching Docker contain to compile snapcraft..." - + sudo docker run --name "$DOCKER_CONTAINER_NAME" --rm \ -v "$(realpath "$SRC_DIR"):/keepassxc" -w "/keepassxc" \ - "$DOCKER_IMAGE" snapcraft + "$DOCKER_IMAGE" snapcraft else - mkdir -p "${OUTPUT_DIR}/bin-release" - + mkdir -p "${OUTPUT_DIR}/KeePassXC.AppDir" + logInfo "Launching Docker container to compile sources..." - + docker run --name "$DOCKER_CONTAINER_NAME" --rm \ --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \ -e "CC=${CC}" -e "CXX=${CXX}" \ @@ -765,26 +981,40 @@ build() { -v "$(realpath "$OUTPUT_DIR"):/keepassxc/out:rw" \ "$DOCKER_IMAGE" \ bash -c "cd /keepassxc/out/build-release && \ - cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \ - -DCMAKE_INSTALL_PREFIX=\"${INSTALL_PREFIX}\" \ - -DKEEPASSXC_DIST_TYPE=AppImage /keepassxc/src && \ - make $MAKE_OPTIONS && make DESTDIR=/keepassxc/out/bin-release install/strip && \ - /keepassxc/src/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME"" + cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off ${CMAKE_OPTIONS} \ + -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} /keepassxc/src && \ + make ${MAKE_OPTIONS} && make DESTDIR=/keepassxc/out/KeePassXC.AppDir install/strip" fi - + if [ 0 -ne $? ]; then exitError "Docker build failed!" fi - + logInfo "Build finished, Docker container terminated." fi - + + if [ "$(uname -o)" == "GNU/Linux" ] && ${build_appimage}; then + local appsign_flag="" + local appsign_key_flag="" + local docker_image_flag="" + local docker_container_name_flag="" + if ${build_appsign}; then + appsign_flag="--appsign" + appsign_key_flag="-k ${build_key}" + fi + if [ "" != "${DOCKER_IMAGE}" ]; then + docker_image_flag="-d ${DOCKER_IMAGE}" + docker_container_name_flag="--container-name ${DOCKER_CONTAINER_NAME}" + fi + appimage "-a" "${OUTPUT_DIR}/KeePassXC.AppDir" "-o" "${OUTPUT_DIR}" \ + ${appsign_flag} ${appsign_key_flag} ${docker_image_flag} ${docker_container_name_flag} + fi + cleanup - + logInfo "All done!" } - # ----------------------------------------------------------------------- # gpgsign command # ----------------------------------------------------------------------- @@ -815,7 +1045,7 @@ gpgsign() { esac shift done - + if [ -z "${sign_files}" ]; then logError "Missing arguments, --files is required!\n" printUsage "gpgsign" @@ -829,7 +1059,7 @@ gpgsign() { logInfo "Signing file '${f}' using release key..." gpg --output "${f}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$f" - + if [ 0 -ne $? ]; then exitError "Signing failed!" fi @@ -839,12 +1069,10 @@ gpgsign() { local bname="$(basename "$f")" (cd "$(dirname "$rp")"; sha256sum "$bname" > "${bname}.DIGEST") done - + logInfo "All done!" } - - # ----------------------------------------------------------------------- # appsign command # ----------------------------------------------------------------------- @@ -915,7 +1143,7 @@ appsign() { fi logInfo "Signing app using codesign..." - codesign --sign "${key}" --verbose --deep ./app/KeePassXC.app + codesign --sign "${key}" --verbose --deep --entitlements ${orig_dir}/share/macosx/keepassxc.entitlements ./app/KeePassXC.app if [ 0 -ne $? ]; then cd "${orig_dir}" @@ -940,8 +1168,6 @@ appsign() { done elif [ "$(uname -o)" == "Msys" ]; then - checkOsslsigncodeCommandExists - if [[ ! -f "${key}" ]]; then exitError "Key file was not found!" fi @@ -950,20 +1176,8 @@ appsign() { echo for f in "${sign_files[@]}"; do - if [[ ${f: -4} == ".exe" ]]; then - logInfo "Signing file '${f}' using osslsigncode..." - # output a signed exe; we have to use a different name due to osslsigntool limitations - osslsigncode sign -pkcs12 "${key}" -pass "${password}" -n "KeePassXC" \ - -t "http://timestamp.comodoca.com/authenticode" -in "${f}" -out "${f}.signed" - - if [ 0 -ne $? ]; then - rm -f "${f}.signed" - exitError "Signing failed!" - fi - - # overwrite the original exe with the signed exe - mv -f "${f}.signed" "${f}" - elif [[ ${f: -4} == ".msi" ]]; then + ext=${f: -4} + if [[ $ext == ".msi" || $ext == ".exe" || $ext == ".dll" ]]; then # Make sure we can find the signtool checkSigntoolCommandExists @@ -971,7 +1185,7 @@ appsign() { logInfo "Signing file '${f}' using Microsoft signtool..." signtool sign -f "${key}" -p "${password}" -d "KeePassXC" \ -t "http://timestamp.comodoca.com/authenticode" "${f}" - + if [ 0 -ne $? ]; then exitError "Signing failed!" fi @@ -987,7 +1201,6 @@ appsign() { logInfo "All done!" } - # ----------------------------------------------------------------------- # parse global command line # ----------------------------------------------------------------------- @@ -1000,7 +1213,8 @@ if [ "" == "$MODE" ]; then elif [ "help" == "$MODE" ]; then printUsage "$1" exit -elif [ "check" == "$MODE" ] || [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] || [ "gpgsign" == "$MODE" ] || [ "appsign" == "$MODE" ]; then +elif [ "check" == "$MODE" ] || [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] \ + || [ "gpgsign" == "$MODE" ] || [ "appsign" == "$MODE" ] || [ "appimage" == "$MODE" ]; then ${MODE} "$@" else printUsage "$MODE" diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index 81bb26938..214c0ec92 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -25,10 +25,10 @@ install(FILES ${DATABASE_ICONS} DESTINATION ${DATA_INSTALL_DIR}/icons/database) if(UNIX AND NOT APPLE) install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor - FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svgz" + FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svg" PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor - FILES_MATCHING PATTERN "application-x-keepassxc.png" PATTERN "application-x-keepassxc.svgz" + FILES_MATCHING PATTERN "application-x-keepassxc.png" PATTERN "application-x-keepassxc.svg" PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) install(FILES linux/org.keepassxc.KeePassXC.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) install(FILES linux/org.keepassxc.KeePassXC.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) @@ -39,102 +39,102 @@ if(APPLE) install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR}) endif() +install(DIRECTORY wizard/ DESTINATION ${DATA_INSTALL_DIR}/wizard FILES_MATCHING PATTERN "*.png") + install(DIRECTORY icons/application/ DESTINATION ${DATA_INSTALL_DIR}/icons/application - FILES_MATCHING PATTERN "*.png" PATTERN "*.svgz") + FILES_MATCHING PATTERN "*.png" PATTERN "*.svg") add_custom_target(icons - # SVGZ to PNGs for KeePassXC - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/apps/keepassxc.svgz -e icons/application/16x16/apps/keepassxc.png - COMMAND inkscape -z -w 24 -h 24 - icons/application/scalable/apps/keepassxc.svgz -e icons/application/24x24/apps/keepassxc.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/apps/keepassxc.svgz -e icons/application/32x32/apps/keepassxc.png - COMMAND inkscape -z -w 48 -h 48 - icons/application/scalable/apps/keepassxc.svgz -e icons/application/48x48/apps/keepassxc.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/apps/keepassxc.svgz -e icons/application/64x64/apps/keepassxc.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/apps/keepassxc.svgz -e icons/application/128x128/apps/keepassxc.png - COMMAND inkscape -z -w 256 -h 256 - icons/application/scalable/apps/keepassxc.svgz -e icons/application/256x256/apps/keepassxc.png + # SVG to PNGs for KeePassXC + COMMAND inkscape -z -w 16 -h 16 + icons/application/scalable/apps/keepassxc.svg -e icons/application/16x16/apps/keepassxc.png + COMMAND inkscape -z -w 24 -h 24 + icons/application/scalable/apps/keepassxc.svg -e icons/application/24x24/apps/keepassxc.png + COMMAND inkscape -z -w 32 -h 32 + icons/application/scalable/apps/keepassxc.svg -e icons/application/32x32/apps/keepassxc.png + COMMAND inkscape -z -w 48 -h 48 + icons/application/scalable/apps/keepassxc.svg -e icons/application/48x48/apps/keepassxc.png + COMMAND inkscape -z -w 64 -h 64 + icons/application/scalable/apps/keepassxc.svg -e icons/application/64x64/apps/keepassxc.png + COMMAND inkscape -z -w 128 -h 128 + icons/application/scalable/apps/keepassxc.svg -e icons/application/128x128/apps/keepassxc.png + COMMAND inkscape -z -w 256 -h 256 + icons/application/scalable/apps/keepassxc.svg -e icons/application/256x256/apps/keepassxc.png - # SVGZ to PNGs for KeePassXC - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/16x16/apps/keepassxc-dark.png - COMMAND inkscape -z -w 24 -h 24 - icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/24x24/apps/keepassxc-dark.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/32x32/apps/keepassxc-dark.png - COMMAND inkscape -z -w 48 -h 48 - icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/48x48/apps/keepassxc-dark.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/64x64/apps/keepassxc-dark.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/128x128/apps/keepassxc-dark.png - COMMAND inkscape -z -w 256 -h 256 - icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/256x256/apps/keepassxc-dark.png + # SVG to PNGs for KeePassXC + COMMAND inkscape -z -w 16 -h 16 + icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/16x16/apps/keepassxc-dark.png + COMMAND inkscape -z -w 24 -h 24 + icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/24x24/apps/keepassxc-dark.png + COMMAND inkscape -z -w 32 -h 32 + icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/32x32/apps/keepassxc-dark.png + COMMAND inkscape -z -w 48 -h 48 + icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/48x48/apps/keepassxc-dark.png + COMMAND inkscape -z -w 64 -h 64 + icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/64x64/apps/keepassxc-dark.png + COMMAND inkscape -z -w 128 -h 128 + icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/128x128/apps/keepassxc-dark.png + COMMAND inkscape -z -w 256 -h 256 + icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/256x256/apps/keepassxc-dark.png - # SVGZ to PNGs for KeePassXC - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/16x16/apps/keepassxc-locked.png - COMMAND inkscape -z -w 24 -h 24 - icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/24x24/apps/keepassxc-locked.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/32x32/apps/keepassxc-locked.png - COMMAND inkscape -z -w 48 -h 48 - icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/48x48/apps/keepassxc-locked.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/64x64/apps/keepassxc-locked.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/128x128/apps/keepassxc-locked.png - COMMAND inkscape -z -w 256 -h 256 - icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/256x256/apps/keepassxc-locked.png + # SVG to PNGs for KeePassXC + COMMAND inkscape -z -w 16 -h 16 + icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/16x16/apps/keepassxc-locked.png + COMMAND inkscape -z -w 24 -h 24 + icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/24x24/apps/keepassxc-locked.png + COMMAND inkscape -z -w 32 -h 32 + icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/32x32/apps/keepassxc-locked.png + COMMAND inkscape -z -w 48 -h 48 + icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/48x48/apps/keepassxc-locked.png + COMMAND inkscape -z -w 64 -h 64 + icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/64x64/apps/keepassxc-locked.png + COMMAND inkscape -z -w 128 -h 128 + icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/128x128/apps/keepassxc-locked.png + COMMAND inkscape -z -w 256 -h 256 + icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/256x256/apps/keepassxc-locked.png - # SVGZ to PNGs for KeePassXC - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/16x16/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 24 -h 24 - icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/24x24/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/32x32/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 48 -h 48 - icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/48x48/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/64x64/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/128x128/apps/keepassxc-unlocked.png - COMMAND inkscape -z -w 256 -h 256 - icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/256x256/apps/keepassxc-unlocked.png + # SVG to PNGs for KeePassXC + COMMAND inkscape -z -w 16 -h 16 + icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/16x16/apps/keepassxc-unlocked.png + COMMAND inkscape -z -w 24 -h 24 + icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/24x24/apps/keepassxc-unlocked.png + COMMAND inkscape -z -w 32 -h 32 + icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/32x32/apps/keepassxc-unlocked.png + COMMAND inkscape -z -w 48 -h 48 + icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/48x48/apps/keepassxc-unlocked.png + COMMAND inkscape -z -w 64 -h 64 + icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/64x64/apps/keepassxc-unlocked.png + COMMAND inkscape -z -w 128 -h 128 + icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/128x128/apps/keepassxc-unlocked.png + COMMAND inkscape -z -w 256 -h 256 + icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/256x256/apps/keepassxc-unlocked.png - # SVGZ to PNGs for KeePassXC MIME-Type - COMMAND inkscape -z -w 16 -h 16 - icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/16x16/mimetypes/application-x-keepassxc.png - COMMAND inkscape -z -w 22 -h 22 - icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/22x22/mimetypes/application-x-keepassxc.png - COMMAND inkscape -z -w 32 -h 32 - icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/32x32/mimetypes/application-x-keepassxc.png - COMMAND inkscape -z -w 64 -h 64 - icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/64x64/mimetypes/application-x-keepassxc.png - COMMAND inkscape -z -w 128 -h 128 - icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/128x128/mimetypes/application-x-keepassxc.png + # SVG to PNGs for KeePassXC MIME-Type + COMMAND inkscape -z -w 16 -h 16 + icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/16x16/mimetypes/application-x-keepassxc.png + COMMAND inkscape -z -w 22 -h 22 + icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/22x22/mimetypes/application-x-keepassxc.png + COMMAND inkscape -z -w 32 -h 32 + icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/32x32/mimetypes/application-x-keepassxc.png + COMMAND inkscape -z -w 64 -h 64 + icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/64x64/mimetypes/application-x-keepassxc.png + COMMAND inkscape -z -w 128 -h 128 + icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/128x128/mimetypes/application-x-keepassxc.png - # ICNS for MacOS - COMMAND png2icns macosx/keepassxc.icns - icons/application/16x16/apps/keepassxc.png - icons/application/32x32/apps/keepassxc.png - icons/application/48x48/apps/keepassxc.png - icons/application/128x128/apps/keepassxc.png - icons/application/256x256/apps/keepassxc.png + # Shrink PNGs using pngcrush + COMMAND bash ./crushpng.sh icons - # ICO for Windows - COMMAND icotool -c -o windows/keepassxc.ico - icons/application/16x16/apps/keepassxc.png - icons/application/24x24/apps/keepassxc.png - icons/application/32x32/apps/keepassxc.png - icons/application/48x48/apps/keepassxc.png - icons/application/64x64/apps/keepassxc.png - icons/application/128x128/apps/keepassxc.png - icons/application/256x256/apps/keepassxc.png - VERBATIM - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + # ICNS for MacOS + COMMAND png2icns macosx/keepassxc.icns + icons/application/16x16/apps/keepassxc.png + icons/application/32x32/apps/keepassxc.png + icons/application/48x48/apps/keepassxc.png + icons/application/128x128/apps/keepassxc.png + icons/application/256x256/apps/keepassxc.png + + # ICO for Windows + COMMAND bash ./windows/create-ico.sh icons/application/scalable/apps/keepassxc.svg windows/keepassxc.ico + COMMAND bash ./windows/create-ico.sh icons/application/scalable/mimetypes/application-x-keepassxc.svg windows/keepassxc-kdbx.ico + + VERBATIM + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/share/about-contributors.html b/share/about-contributors.html deleted file mode 100644 index 77ceadb5f..000000000 --- a/share/about-contributors.html +++ /dev/null @@ -1,54 +0,0 @@ -

VIP Patreon Supporters:

-
    -
  • John Cook
  • -
  • Max Anderson
  • -
-

Notable Code Contributions:

-
    -
  • droidmonkey
  • -
  • phoerious
  • -
  • TheZ3ro
  • -
  • louib
  • -
  • weslly
  • -
  • varjolintu (KeePassXC-Browser)
  • -
  • hifi (SSH Agent)
  • -
  • frostasm
  • -
  • fonic (Entry Table View)
  • -
  • kylemanna (YubiKey)
  • -
  • keithbennett (KeePassHTTP)
  • -
  • Typz (KeePassHTTP)
  • -
  • denk-mal (KeePassHTTP)
  • -
  • angelsl (KDBX 4)
  • -
  • seatedscribe (CSV Import)
  • -
  • debfx (KeePassX)
  • -
  • BlueIce (KeePassX)
  • -
-

Patreon Supporters:

-
    -
  • Ashura
  • -
  • Alexanderjb
  • -
  • Andreas Kollmann
  • -
  • Richard Ames
  • -
-

Translations:

-
    -
  • Basque: azken_tximinoa, Hey_neken
  • -
  • Catalan: capitantrueno, dsoms, mcus, raulua, ZJaume
  • -
  • Chinese (China): Biggulu, Brandon_c, hoilc, ligyxy, vc5, Small_Ku
  • -
  • Chinese (Taiwan): BestSteve, MiauLightouch, Small_Ku, yan12125, ymhuang0808
  • -
  • Czech: DanielMilde, JosefVitu, pavelb, tpavelek
  • -
  • Danish: nlkl
  • -
  • Dutch: apie, bartlibert, evanoosten, fvw, KnooL, srgvg, Vistaus, wanderingidea
  • -
  • Finnish: artnay, Jarppi, MawKKe
  • -
  • French: A1RO, aghilas.messara, bisaloo, frgnca, ggtr1138, gilbsgilbs, gtalbot, Gui13, iannick, jlutran, kyodev, logut, MartialBis, narzb, pBouillon, plunkets, Raphi111, Scrat15, tl_pierre, wilfriedroset
  • -
  • German: antsas, BasicBaer, Calyrx, codejunky, DavidHamburg, eth0, for1real, jensrutschmann, joe776, kflesch, MarcEdinger, marcbone, mcliquid, mfernau77, montilo, nursoda, omnisome4, origin_de, pcrcoding, phoerious, rgloor, transi_222, vlenzer, waster
  • -
  • Greek: magkopian, nplatis, tassos.b, xinomilo
  • -
  • Hungarian: bubu, meskobalazs, urbalazs
  • -
  • Indonesian: zk
  • -
  • Italian: amaxis, bovirus, duncanmid, FranzMari, lucaim, Mte90, Peo, TheZ3ro, tosky, VosaxAlo
  • -
  • Japanese: masoo, metalic_cat, p2635, Shinichirou_Yamada, vargas.peniel, vmemjp, yukinakato
  • -
  • Korean: cancantun, peremen
  • -
  • Lithuanian: Moo
  • -
  • Polish: keypress, konradmb, mrerexx, psobczak
  • -
  • Portuguese (Brazil): danielbibit, fabiom, flaviobn, vitor895, weslly
  • -
diff --git a/share/about.html b/share/about.html deleted file mode 100644 index 3d0e8974d..000000000 --- a/share/about.html +++ /dev/null @@ -1,14 +0,0 @@ -

Website: https://keepassxc.org

-

Report bugs at: https://github.com

-

KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.

-

Project Maintainers:

- -

Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.

\ No newline at end of file diff --git a/share/crushpng.sh b/share/crushpng.sh new file mode 100644 index 000000000..f36176d3c --- /dev/null +++ b/share/crushpng.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +if [[ -z $1 ]]; then + echo "You must supply a root folder!" + exit 1 +fi + +find "$1" -iname '*png' -exec pngcrush -ow -brute {} \; \ No newline at end of file diff --git a/share/icons/application/128x128/apps/keepassxc-dark.png b/share/icons/application/128x128/apps/keepassxc-dark.png index 57ad32062..d2cc1d580 100644 Binary files a/share/icons/application/128x128/apps/keepassxc-dark.png and b/share/icons/application/128x128/apps/keepassxc-dark.png differ diff --git a/share/icons/application/128x128/apps/keepassxc-locked.png b/share/icons/application/128x128/apps/keepassxc-locked.png index 0465596ec..b850f577e 100644 Binary files a/share/icons/application/128x128/apps/keepassxc-locked.png and b/share/icons/application/128x128/apps/keepassxc-locked.png differ diff --git a/share/icons/application/128x128/apps/keepassxc-unlocked.png b/share/icons/application/128x128/apps/keepassxc-unlocked.png index 69b0fe24e..30a820261 100644 Binary files a/share/icons/application/128x128/apps/keepassxc-unlocked.png and b/share/icons/application/128x128/apps/keepassxc-unlocked.png differ diff --git a/share/icons/application/128x128/apps/keepassxc.png b/share/icons/application/128x128/apps/keepassxc.png index 69b0fe24e..30a820261 100644 Binary files a/share/icons/application/128x128/apps/keepassxc.png and b/share/icons/application/128x128/apps/keepassxc.png differ diff --git a/share/icons/application/128x128/apps/preferences-system-network-sharing.png b/share/icons/application/128x128/apps/preferences-system-network-sharing.png new file mode 100644 index 000000000..88a251701 Binary files /dev/null and b/share/icons/application/128x128/apps/preferences-system-network-sharing.png differ diff --git a/share/icons/application/128x128/mimetypes/application-x-keepassxc.png b/share/icons/application/128x128/mimetypes/application-x-keepassxc.png index 539823d92..dac32fed4 100644 Binary files a/share/icons/application/128x128/mimetypes/application-x-keepassxc.png and b/share/icons/application/128x128/mimetypes/application-x-keepassxc.png differ diff --git a/share/icons/application/16x16/actions/application-exit.png b/share/icons/application/16x16/actions/application-exit.png index 4839c6142..eaad4c44d 100644 Binary files a/share/icons/application/16x16/actions/application-exit.png and b/share/icons/application/16x16/actions/application-exit.png differ diff --git a/share/icons/application/16x16/actions/auto-type.png b/share/icons/application/16x16/actions/auto-type.png index 3d4481d14..ee985dac4 100644 Binary files a/share/icons/application/16x16/actions/auto-type.png and b/share/icons/application/16x16/actions/auto-type.png differ diff --git a/share/icons/application/16x16/actions/configure.png b/share/icons/application/16x16/actions/configure.png index f5f1bab88..80d1815c6 100644 Binary files a/share/icons/application/16x16/actions/configure.png and b/share/icons/application/16x16/actions/configure.png differ diff --git a/share/icons/application/16x16/actions/database-change-key.png b/share/icons/application/16x16/actions/database-change-key.png index ef0b0301b..186c07728 100644 Binary files a/share/icons/application/16x16/actions/database-change-key.png and b/share/icons/application/16x16/actions/database-change-key.png differ diff --git a/share/icons/application/16x16/actions/document-close.png b/share/icons/application/16x16/actions/document-close.png index 411031eb8..fcfaa46c0 100644 Binary files a/share/icons/application/16x16/actions/document-close.png and b/share/icons/application/16x16/actions/document-close.png differ diff --git a/share/icons/application/16x16/actions/document-edit.png b/share/icons/application/16x16/actions/document-edit.png index 67059e358..7ddca1fca 100644 Binary files a/share/icons/application/16x16/actions/document-edit.png and b/share/icons/application/16x16/actions/document-edit.png differ diff --git a/share/icons/application/16x16/actions/document-encrypt.png b/share/icons/application/16x16/actions/document-encrypt.png index ac2fd6f90..b06801211 100644 Binary files a/share/icons/application/16x16/actions/document-encrypt.png and b/share/icons/application/16x16/actions/document-encrypt.png differ diff --git a/share/icons/application/16x16/actions/document-new.png b/share/icons/application/16x16/actions/document-new.png index b79e90314..a8e07a5e9 100644 Binary files a/share/icons/application/16x16/actions/document-new.png and b/share/icons/application/16x16/actions/document-new.png differ diff --git a/share/icons/application/16x16/actions/document-open.png b/share/icons/application/16x16/actions/document-open.png index 530940ce5..0dba17b67 100644 Binary files a/share/icons/application/16x16/actions/document-open.png and b/share/icons/application/16x16/actions/document-open.png differ diff --git a/share/icons/application/16x16/actions/document-save-as.png b/share/icons/application/16x16/actions/document-save-as.png index 41c52aaa9..f0f278941 100644 Binary files a/share/icons/application/16x16/actions/document-save-as.png and b/share/icons/application/16x16/actions/document-save-as.png differ diff --git a/share/icons/application/16x16/actions/document-save.png b/share/icons/application/16x16/actions/document-save.png index 5a29dae47..59a0e255a 100644 Binary files a/share/icons/application/16x16/actions/document-save.png and b/share/icons/application/16x16/actions/document-save.png differ diff --git a/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png b/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png index 97c8e38a7..c16b812fc 100644 Binary files a/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png and b/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png differ diff --git a/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png b/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png index 85e31eb30..34e805d24 100644 Binary files a/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png and b/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png differ diff --git a/share/icons/application/16x16/actions/entry-clone.png b/share/icons/application/16x16/actions/entry-clone.png index 43e5a521d..9846255b8 100644 Binary files a/share/icons/application/16x16/actions/entry-clone.png and b/share/icons/application/16x16/actions/entry-clone.png differ diff --git a/share/icons/application/16x16/actions/entry-delete.png b/share/icons/application/16x16/actions/entry-delete.png index 0a21e090e..d8f784c75 100644 Binary files a/share/icons/application/16x16/actions/entry-delete.png and b/share/icons/application/16x16/actions/entry-delete.png differ diff --git a/share/icons/application/16x16/actions/entry-edit.png b/share/icons/application/16x16/actions/entry-edit.png index 83f4eed2c..c6f04a494 100644 Binary files a/share/icons/application/16x16/actions/entry-edit.png and b/share/icons/application/16x16/actions/entry-edit.png differ diff --git a/share/icons/application/16x16/actions/entry-new.png b/share/icons/application/16x16/actions/entry-new.png index 3f6a25e4f..b4ff1d8eb 100644 Binary files a/share/icons/application/16x16/actions/entry-new.png and b/share/icons/application/16x16/actions/entry-new.png differ diff --git a/share/icons/application/16x16/actions/favicon-download.png b/share/icons/application/16x16/actions/favicon-download.png new file mode 100644 index 000000000..3426fb937 Binary files /dev/null and b/share/icons/application/16x16/actions/favicon-download.png differ diff --git a/share/icons/application/16x16/actions/group-empty-trash.png b/share/icons/application/16x16/actions/group-empty-trash.png index aa9d7321f..d09e07935 100644 Binary files a/share/icons/application/16x16/actions/group-empty-trash.png and b/share/icons/application/16x16/actions/group-empty-trash.png differ diff --git a/share/icons/application/16x16/actions/help-about.png b/share/icons/application/16x16/actions/help-about.png index 7c524e5d4..225dbb695 100644 Binary files a/share/icons/application/16x16/actions/help-about.png and b/share/icons/application/16x16/actions/help-about.png differ diff --git a/share/icons/application/16x16/actions/message-close.png b/share/icons/application/16x16/actions/message-close.png index b3a44a232..ddf5a667d 100644 Binary files a/share/icons/application/16x16/actions/message-close.png and b/share/icons/application/16x16/actions/message-close.png differ diff --git a/share/icons/application/16x16/actions/paperclip.png b/share/icons/application/16x16/actions/paperclip.png index c09bde3b0..b84d865d0 100644 Binary files a/share/icons/application/16x16/actions/paperclip.png and b/share/icons/application/16x16/actions/paperclip.png differ diff --git a/share/icons/application/16x16/actions/password-copy.png b/share/icons/application/16x16/actions/password-copy.png index 7443d3fba..4f0f502a0 100644 Binary files a/share/icons/application/16x16/actions/password-copy.png and b/share/icons/application/16x16/actions/password-copy.png differ diff --git a/share/icons/application/16x16/actions/password-generate.png b/share/icons/application/16x16/actions/password-generate.png index 74578fb8d..8f9c5aec8 100644 Binary files a/share/icons/application/16x16/actions/password-generate.png and b/share/icons/application/16x16/actions/password-generate.png differ diff --git a/share/icons/application/16x16/actions/password-generator.png b/share/icons/application/16x16/actions/password-generator.png index 735459681..1fd64960e 100644 Binary files a/share/icons/application/16x16/actions/password-generator.png and b/share/icons/application/16x16/actions/password-generator.png differ diff --git a/share/icons/application/16x16/actions/password-show-off.png b/share/icons/application/16x16/actions/password-show-off.png index 24277f6de..209062d78 100644 Binary files a/share/icons/application/16x16/actions/password-show-off.png and b/share/icons/application/16x16/actions/password-show-off.png differ diff --git a/share/icons/application/16x16/actions/password-show-on.png b/share/icons/application/16x16/actions/password-show-on.png index ea53bd1c0..a6b89cdab 100644 Binary files a/share/icons/application/16x16/actions/password-show-on.png and b/share/icons/application/16x16/actions/password-show-on.png differ diff --git a/share/icons/application/16x16/actions/system-help.png b/share/icons/application/16x16/actions/system-help.png new file mode 100644 index 000000000..adb2d8e21 Binary files /dev/null and b/share/icons/application/16x16/actions/system-help.png differ diff --git a/share/icons/application/16x16/actions/system-search.png b/share/icons/application/16x16/actions/system-search.png index 354c0f98f..ad7f3c59f 100644 Binary files a/share/icons/application/16x16/actions/system-search.png and b/share/icons/application/16x16/actions/system-search.png differ diff --git a/share/icons/application/16x16/actions/url-copy.png b/share/icons/application/16x16/actions/url-copy.png index 113107c10..90fa595e7 100644 Binary files a/share/icons/application/16x16/actions/url-copy.png and b/share/icons/application/16x16/actions/url-copy.png differ diff --git a/share/icons/application/16x16/actions/username-copy.png b/share/icons/application/16x16/actions/username-copy.png index 65b48fdf5..e2f855c89 100644 Binary files a/share/icons/application/16x16/actions/username-copy.png and b/share/icons/application/16x16/actions/username-copy.png differ diff --git a/share/icons/application/16x16/apps/keepassxc-dark.png b/share/icons/application/16x16/apps/keepassxc-dark.png index 3c10ad4b7..1419cbffe 100644 Binary files a/share/icons/application/16x16/apps/keepassxc-dark.png and b/share/icons/application/16x16/apps/keepassxc-dark.png differ diff --git a/share/icons/application/16x16/apps/keepassxc-locked.png b/share/icons/application/16x16/apps/keepassxc-locked.png index 711b3ba10..7f173c640 100644 Binary files a/share/icons/application/16x16/apps/keepassxc-locked.png and b/share/icons/application/16x16/apps/keepassxc-locked.png differ diff --git a/share/icons/application/16x16/apps/keepassxc-unlocked.png b/share/icons/application/16x16/apps/keepassxc-unlocked.png index 2164f0335..3b9c3f4a0 100644 Binary files a/share/icons/application/16x16/apps/keepassxc-unlocked.png and b/share/icons/application/16x16/apps/keepassxc-unlocked.png differ diff --git a/share/icons/application/16x16/apps/keepassxc.png b/share/icons/application/16x16/apps/keepassxc.png index 2164f0335..3b9c3f4a0 100644 Binary files a/share/icons/application/16x16/apps/keepassxc.png and b/share/icons/application/16x16/apps/keepassxc.png differ diff --git a/share/icons/application/16x16/mimetypes/application-x-keepassxc.png b/share/icons/application/16x16/mimetypes/application-x-keepassxc.png index 7bfdf6d59..bd7d98e7e 100644 Binary files a/share/icons/application/16x16/mimetypes/application-x-keepassxc.png and b/share/icons/application/16x16/mimetypes/application-x-keepassxc.png differ diff --git a/share/icons/application/22x22/actions/auto-type.png b/share/icons/application/22x22/actions/auto-type.png index 29d02664f..dcc8b75d1 100644 Binary files a/share/icons/application/22x22/actions/auto-type.png and b/share/icons/application/22x22/actions/auto-type.png differ diff --git a/share/icons/application/22x22/actions/chronometer.png b/share/icons/application/22x22/actions/chronometer.png index 71d6eabe5..8e8d61de9 100644 Binary files a/share/icons/application/22x22/actions/chronometer.png and b/share/icons/application/22x22/actions/chronometer.png differ diff --git a/share/icons/application/22x22/actions/database-change-key.png b/share/icons/application/22x22/actions/database-change-key.png index 3ea98fa70..7bf8d05d3 100644 Binary files a/share/icons/application/22x22/actions/database-change-key.png and b/share/icons/application/22x22/actions/database-change-key.png differ diff --git a/share/icons/application/22x22/actions/dialog-close.png b/share/icons/application/22x22/actions/dialog-close.png index ef0b6bdc6..81f85067d 100644 Binary files a/share/icons/application/22x22/actions/dialog-close.png and b/share/icons/application/22x22/actions/dialog-close.png differ diff --git a/share/icons/application/22x22/actions/dialog-ok.png b/share/icons/application/22x22/actions/dialog-ok.png index 8b12d79a4..bb27eea88 100644 Binary files a/share/icons/application/22x22/actions/dialog-ok.png and b/share/icons/application/22x22/actions/dialog-ok.png differ diff --git a/share/icons/application/22x22/actions/document-encrypt.png b/share/icons/application/22x22/actions/document-encrypt.png index 38dff012d..eed69ac51 100644 Binary files a/share/icons/application/22x22/actions/document-encrypt.png and b/share/icons/application/22x22/actions/document-encrypt.png differ diff --git a/share/icons/application/22x22/actions/document-new.png b/share/icons/application/22x22/actions/document-new.png index 9ff24e2b2..50f67bfb4 100644 Binary files a/share/icons/application/22x22/actions/document-new.png and b/share/icons/application/22x22/actions/document-new.png differ diff --git a/share/icons/application/22x22/actions/document-open.png b/share/icons/application/22x22/actions/document-open.png index 317a3577a..dff45686b 100644 Binary files a/share/icons/application/22x22/actions/document-open.png and b/share/icons/application/22x22/actions/document-open.png differ diff --git a/share/icons/application/22x22/actions/document-save.png b/share/icons/application/22x22/actions/document-save.png index a81e70d47..2ad801c13 100644 Binary files a/share/icons/application/22x22/actions/document-save.png and b/share/icons/application/22x22/actions/document-save.png differ diff --git a/share/icons/application/22x22/actions/entry-clone.png b/share/icons/application/22x22/actions/entry-clone.png index 89383d9e0..fc4787dfd 100644 Binary files a/share/icons/application/22x22/actions/entry-clone.png and b/share/icons/application/22x22/actions/entry-clone.png differ diff --git a/share/icons/application/22x22/actions/entry-delete.png b/share/icons/application/22x22/actions/entry-delete.png index 11b846e8c..9ad1885cb 100644 Binary files a/share/icons/application/22x22/actions/entry-delete.png and b/share/icons/application/22x22/actions/entry-delete.png differ diff --git a/share/icons/application/22x22/actions/entry-edit.png b/share/icons/application/22x22/actions/entry-edit.png index f407cfab5..8246bfe34 100644 Binary files a/share/icons/application/22x22/actions/entry-edit.png and b/share/icons/application/22x22/actions/entry-edit.png differ diff --git a/share/icons/application/22x22/actions/entry-new.png b/share/icons/application/22x22/actions/entry-new.png index a1c0b34b3..ff53e2153 100644 Binary files a/share/icons/application/22x22/actions/entry-new.png and b/share/icons/application/22x22/actions/entry-new.png differ diff --git a/share/icons/application/22x22/actions/favicon-download.png b/share/icons/application/22x22/actions/favicon-download.png new file mode 100644 index 000000000..8759d957e Binary files /dev/null and b/share/icons/application/22x22/actions/favicon-download.png differ diff --git a/share/icons/application/22x22/actions/group-empty-trash.png b/share/icons/application/22x22/actions/group-empty-trash.png index 56d90a4c0..ed0bb2b72 100644 Binary files a/share/icons/application/22x22/actions/group-empty-trash.png and b/share/icons/application/22x22/actions/group-empty-trash.png differ diff --git a/share/icons/application/22x22/actions/help-about.png b/share/icons/application/22x22/actions/help-about.png index eb37d9a08..4fefbf4c2 100644 Binary files a/share/icons/application/22x22/actions/help-about.png and b/share/icons/application/22x22/actions/help-about.png differ diff --git a/share/icons/application/22x22/actions/message-close.png b/share/icons/application/22x22/actions/message-close.png index 4b2f9ca4d..f0850594f 100644 Binary files a/share/icons/application/22x22/actions/message-close.png and b/share/icons/application/22x22/actions/message-close.png differ diff --git a/share/icons/application/22x22/actions/password-copy.png b/share/icons/application/22x22/actions/password-copy.png index eb910311a..739652646 100644 Binary files a/share/icons/application/22x22/actions/password-copy.png and b/share/icons/application/22x22/actions/password-copy.png differ diff --git a/share/icons/application/22x22/actions/password-generate.png b/share/icons/application/22x22/actions/password-generate.png index cd8c67425..590df6d4d 100644 Binary files a/share/icons/application/22x22/actions/password-generate.png and b/share/icons/application/22x22/actions/password-generate.png differ diff --git a/share/icons/application/22x22/actions/password-generator.png b/share/icons/application/22x22/actions/password-generator.png index fab0d90b7..68d1763f1 100644 Binary files a/share/icons/application/22x22/actions/password-generator.png and b/share/icons/application/22x22/actions/password-generator.png differ diff --git a/share/icons/application/22x22/actions/system-help.png b/share/icons/application/22x22/actions/system-help.png new file mode 100644 index 000000000..0a890cd59 Binary files /dev/null and b/share/icons/application/22x22/actions/system-help.png differ diff --git a/share/icons/application/22x22/actions/system-search.png b/share/icons/application/22x22/actions/system-search.png index 931d932ff..f977b606c 100644 Binary files a/share/icons/application/22x22/actions/system-search.png and b/share/icons/application/22x22/actions/system-search.png differ diff --git a/share/icons/application/22x22/actions/url-copy.png b/share/icons/application/22x22/actions/url-copy.png index caa116dbc..4a7c8acab 100644 Binary files a/share/icons/application/22x22/actions/url-copy.png and b/share/icons/application/22x22/actions/url-copy.png differ diff --git a/share/icons/application/22x22/actions/username-copy.png b/share/icons/application/22x22/actions/username-copy.png index 872771d03..81e6f5f44 100644 Binary files a/share/icons/application/22x22/actions/username-copy.png and b/share/icons/application/22x22/actions/username-copy.png differ diff --git a/share/icons/application/22x22/mimetypes/application-x-keepassxc.png b/share/icons/application/22x22/mimetypes/application-x-keepassxc.png index 2fc813f6f..22734c82d 100644 Binary files a/share/icons/application/22x22/mimetypes/application-x-keepassxc.png and b/share/icons/application/22x22/mimetypes/application-x-keepassxc.png differ diff --git a/share/icons/application/22x22/status/dialog-error.png b/share/icons/application/22x22/status/dialog-error.png index 86a92a4ee..d27dcc838 100644 Binary files a/share/icons/application/22x22/status/dialog-error.png and b/share/icons/application/22x22/status/dialog-error.png differ diff --git a/share/icons/application/22x22/status/dialog-information.png b/share/icons/application/22x22/status/dialog-information.png index 0222fcd72..91aa3829f 100644 Binary files a/share/icons/application/22x22/status/dialog-information.png and b/share/icons/application/22x22/status/dialog-information.png differ diff --git a/share/icons/application/22x22/status/dialog-warning.png b/share/icons/application/22x22/status/dialog-warning.png index e32284930..6ca3d718e 100644 Binary files a/share/icons/application/22x22/status/dialog-warning.png and b/share/icons/application/22x22/status/dialog-warning.png differ diff --git a/share/icons/application/24x24/apps/keepassxc-dark.png b/share/icons/application/24x24/apps/keepassxc-dark.png index f02157ecd..396492ebe 100644 Binary files a/share/icons/application/24x24/apps/keepassxc-dark.png and b/share/icons/application/24x24/apps/keepassxc-dark.png differ diff --git a/share/icons/application/24x24/apps/keepassxc-locked.png b/share/icons/application/24x24/apps/keepassxc-locked.png index cb8485708..6050adf22 100644 Binary files a/share/icons/application/24x24/apps/keepassxc-locked.png and b/share/icons/application/24x24/apps/keepassxc-locked.png differ diff --git a/share/icons/application/24x24/apps/keepassxc-unlocked.png b/share/icons/application/24x24/apps/keepassxc-unlocked.png index 68c6cabc1..f3061b089 100644 Binary files a/share/icons/application/24x24/apps/keepassxc-unlocked.png and b/share/icons/application/24x24/apps/keepassxc-unlocked.png differ diff --git a/share/icons/application/24x24/apps/keepassxc.png b/share/icons/application/24x24/apps/keepassxc.png index 68c6cabc1..f3061b089 100644 Binary files a/share/icons/application/24x24/apps/keepassxc.png and b/share/icons/application/24x24/apps/keepassxc.png differ diff --git a/share/icons/application/256x256/apps/keepassxc-dark.png b/share/icons/application/256x256/apps/keepassxc-dark.png index c14badcd6..e2a8dbf0f 100644 Binary files a/share/icons/application/256x256/apps/keepassxc-dark.png and b/share/icons/application/256x256/apps/keepassxc-dark.png differ diff --git a/share/icons/application/256x256/apps/keepassxc-locked.png b/share/icons/application/256x256/apps/keepassxc-locked.png index d3b7c0543..a3820c501 100644 Binary files a/share/icons/application/256x256/apps/keepassxc-locked.png and b/share/icons/application/256x256/apps/keepassxc-locked.png differ diff --git a/share/icons/application/256x256/apps/keepassxc-unlocked.png b/share/icons/application/256x256/apps/keepassxc-unlocked.png index d1c117813..03485c64e 100644 Binary files a/share/icons/application/256x256/apps/keepassxc-unlocked.png and b/share/icons/application/256x256/apps/keepassxc-unlocked.png differ diff --git a/share/icons/application/256x256/apps/keepassxc.png b/share/icons/application/256x256/apps/keepassxc.png index d1c117813..03485c64e 100644 Binary files a/share/icons/application/256x256/apps/keepassxc.png and b/share/icons/application/256x256/apps/keepassxc.png differ diff --git a/share/icons/application/32x32/actions/application-exit.png b/share/icons/application/32x32/actions/application-exit.png index dd76354c4..d7be16865 100644 Binary files a/share/icons/application/32x32/actions/application-exit.png and b/share/icons/application/32x32/actions/application-exit.png differ diff --git a/share/icons/application/32x32/actions/auto-type.png b/share/icons/application/32x32/actions/auto-type.png index b9819fda1..173bf29ca 100644 Binary files a/share/icons/application/32x32/actions/auto-type.png and b/share/icons/application/32x32/actions/auto-type.png differ diff --git a/share/icons/application/32x32/actions/chronometer.png b/share/icons/application/32x32/actions/chronometer.png index 00386b705..7f9399140 100644 Binary files a/share/icons/application/32x32/actions/chronometer.png and b/share/icons/application/32x32/actions/chronometer.png differ diff --git a/share/icons/application/32x32/actions/configure.png b/share/icons/application/32x32/actions/configure.png index c774740a1..073f87ae9 100644 Binary files a/share/icons/application/32x32/actions/configure.png and b/share/icons/application/32x32/actions/configure.png differ diff --git a/share/icons/application/32x32/actions/database-change-key.png b/share/icons/application/32x32/actions/database-change-key.png index dc9599228..1eaab8c8e 100644 Binary files a/share/icons/application/32x32/actions/database-change-key.png and b/share/icons/application/32x32/actions/database-change-key.png differ diff --git a/share/icons/application/32x32/actions/dialog-close.png b/share/icons/application/32x32/actions/dialog-close.png index b049b6886..82f6adb21 100644 Binary files a/share/icons/application/32x32/actions/dialog-close.png and b/share/icons/application/32x32/actions/dialog-close.png differ diff --git a/share/icons/application/32x32/actions/dialog-ok.png b/share/icons/application/32x32/actions/dialog-ok.png index bcb436721..f1886d070 100644 Binary files a/share/icons/application/32x32/actions/dialog-ok.png and b/share/icons/application/32x32/actions/dialog-ok.png differ diff --git a/share/icons/application/32x32/actions/document-close.png b/share/icons/application/32x32/actions/document-close.png index 23b094754..03ff2b41a 100644 Binary files a/share/icons/application/32x32/actions/document-close.png and b/share/icons/application/32x32/actions/document-close.png differ diff --git a/share/icons/application/32x32/actions/document-edit.png b/share/icons/application/32x32/actions/document-edit.png index eb327b0a1..3f299e2b8 100644 Binary files a/share/icons/application/32x32/actions/document-edit.png and b/share/icons/application/32x32/actions/document-edit.png differ diff --git a/share/icons/application/32x32/actions/document-encrypt.png b/share/icons/application/32x32/actions/document-encrypt.png index 353a22ca2..e2c996e6c 100644 Binary files a/share/icons/application/32x32/actions/document-encrypt.png and b/share/icons/application/32x32/actions/document-encrypt.png differ diff --git a/share/icons/application/32x32/actions/document-new.png b/share/icons/application/32x32/actions/document-new.png index 3d0f5cc1d..4e24f6e24 100644 Binary files a/share/icons/application/32x32/actions/document-new.png and b/share/icons/application/32x32/actions/document-new.png differ diff --git a/share/icons/application/32x32/actions/document-properties.png b/share/icons/application/32x32/actions/document-properties.png index a6d13863d..4700a60d3 100644 Binary files a/share/icons/application/32x32/actions/document-properties.png and b/share/icons/application/32x32/actions/document-properties.png differ diff --git a/share/icons/application/32x32/actions/document-save.png b/share/icons/application/32x32/actions/document-save.png index 7fa489c0f..23079aec0 100644 Binary files a/share/icons/application/32x32/actions/document-save.png and b/share/icons/application/32x32/actions/document-save.png differ diff --git a/share/icons/application/32x32/actions/edit-clear-locationbar-ltr.png b/share/icons/application/32x32/actions/edit-clear-locationbar-ltr.png index 023cfb804..d2ab1c14f 100644 Binary files a/share/icons/application/32x32/actions/edit-clear-locationbar-ltr.png and b/share/icons/application/32x32/actions/edit-clear-locationbar-ltr.png differ diff --git a/share/icons/application/32x32/actions/edit-clear-locationbar-rtl.png b/share/icons/application/32x32/actions/edit-clear-locationbar-rtl.png index 32b0666fa..0207e82cd 100644 Binary files a/share/icons/application/32x32/actions/edit-clear-locationbar-rtl.png and b/share/icons/application/32x32/actions/edit-clear-locationbar-rtl.png differ diff --git a/share/icons/application/32x32/actions/entry-clone.png b/share/icons/application/32x32/actions/entry-clone.png index 93866ad6a..672003a57 100644 Binary files a/share/icons/application/32x32/actions/entry-clone.png and b/share/icons/application/32x32/actions/entry-clone.png differ diff --git a/share/icons/application/32x32/actions/entry-delete.png b/share/icons/application/32x32/actions/entry-delete.png index d4aad094b..f20821af1 100644 Binary files a/share/icons/application/32x32/actions/entry-delete.png and b/share/icons/application/32x32/actions/entry-delete.png differ diff --git a/share/icons/application/32x32/actions/entry-edit.png b/share/icons/application/32x32/actions/entry-edit.png index cd7d34804..44f83f548 100644 Binary files a/share/icons/application/32x32/actions/entry-edit.png and b/share/icons/application/32x32/actions/entry-edit.png differ diff --git a/share/icons/application/32x32/actions/entry-new.png b/share/icons/application/32x32/actions/entry-new.png index 0226c2f3f..9911728bf 100644 Binary files a/share/icons/application/32x32/actions/entry-new.png and b/share/icons/application/32x32/actions/entry-new.png differ diff --git a/share/icons/application/32x32/actions/favicon-download.png b/share/icons/application/32x32/actions/favicon-download.png new file mode 100644 index 000000000..c8d03d755 Binary files /dev/null and b/share/icons/application/32x32/actions/favicon-download.png differ diff --git a/share/icons/application/32x32/actions/group-empty-trash.png b/share/icons/application/32x32/actions/group-empty-trash.png index f19899dd8..b272ecb56 100644 Binary files a/share/icons/application/32x32/actions/group-empty-trash.png and b/share/icons/application/32x32/actions/group-empty-trash.png differ diff --git a/share/icons/application/32x32/actions/help-about.png b/share/icons/application/32x32/actions/help-about.png index d8197d61a..dc047ffca 100644 Binary files a/share/icons/application/32x32/actions/help-about.png and b/share/icons/application/32x32/actions/help-about.png differ diff --git a/share/icons/application/32x32/actions/key-enter.png b/share/icons/application/32x32/actions/key-enter.png index 60d11e2f1..5f20ee92f 100644 Binary files a/share/icons/application/32x32/actions/key-enter.png and b/share/icons/application/32x32/actions/key-enter.png differ diff --git a/share/icons/application/32x32/actions/paperclip.png b/share/icons/application/32x32/actions/paperclip.png index d80a0b0d1..9a623973f 100644 Binary files a/share/icons/application/32x32/actions/paperclip.png and b/share/icons/application/32x32/actions/paperclip.png differ diff --git a/share/icons/application/32x32/actions/password-copy.png b/share/icons/application/32x32/actions/password-copy.png index 208af47e7..c3d42f754 100644 Binary files a/share/icons/application/32x32/actions/password-copy.png and b/share/icons/application/32x32/actions/password-copy.png differ diff --git a/share/icons/application/32x32/actions/password-generate.png b/share/icons/application/32x32/actions/password-generate.png index 99e878cf9..cad78bc7b 100644 Binary files a/share/icons/application/32x32/actions/password-generate.png and b/share/icons/application/32x32/actions/password-generate.png differ diff --git a/share/icons/application/32x32/actions/password-generator.png b/share/icons/application/32x32/actions/password-generator.png index 0a49a74b1..a06575f8c 100644 Binary files a/share/icons/application/32x32/actions/password-generator.png and b/share/icons/application/32x32/actions/password-generator.png differ diff --git a/share/icons/application/32x32/actions/password-show-off.png b/share/icons/application/32x32/actions/password-show-off.png index 6072f70cc..ff5fab697 100644 Binary files a/share/icons/application/32x32/actions/password-show-off.png and b/share/icons/application/32x32/actions/password-show-off.png differ diff --git a/share/icons/application/32x32/actions/password-show-on.png b/share/icons/application/32x32/actions/password-show-on.png index 327ea8963..72cebaa6f 100644 Binary files a/share/icons/application/32x32/actions/password-show-on.png and b/share/icons/application/32x32/actions/password-show-on.png differ diff --git a/share/icons/application/32x32/actions/system-help.png b/share/icons/application/32x32/actions/system-help.png new file mode 100644 index 000000000..19440a190 Binary files /dev/null and b/share/icons/application/32x32/actions/system-help.png differ diff --git a/share/icons/application/32x32/actions/system-search.png b/share/icons/application/32x32/actions/system-search.png index 62f67a23f..9c2568347 100644 Binary files a/share/icons/application/32x32/actions/system-search.png and b/share/icons/application/32x32/actions/system-search.png differ diff --git a/share/icons/application/32x32/actions/url-copy.png b/share/icons/application/32x32/actions/url-copy.png index 16950eca6..0ca01aeb7 100644 Binary files a/share/icons/application/32x32/actions/url-copy.png and b/share/icons/application/32x32/actions/url-copy.png differ diff --git a/share/icons/application/32x32/actions/username-copy.png b/share/icons/application/32x32/actions/username-copy.png index 16ca8cf31..b781df635 100644 Binary files a/share/icons/application/32x32/actions/username-copy.png and b/share/icons/application/32x32/actions/username-copy.png differ diff --git a/share/icons/application/32x32/actions/view-history.png b/share/icons/application/32x32/actions/view-history.png index a67c689ac..fe9a9d113 100644 Binary files a/share/icons/application/32x32/actions/view-history.png and b/share/icons/application/32x32/actions/view-history.png differ diff --git a/share/icons/application/32x32/apps/internet-web-browser.png b/share/icons/application/32x32/apps/internet-web-browser.png index b4106a58b..67aa94aff 100644 Binary files a/share/icons/application/32x32/apps/internet-web-browser.png and b/share/icons/application/32x32/apps/internet-web-browser.png differ diff --git a/share/icons/application/32x32/apps/keepassxc-dark.png b/share/icons/application/32x32/apps/keepassxc-dark.png index b2092359e..eb3f274f3 100644 Binary files a/share/icons/application/32x32/apps/keepassxc-dark.png and b/share/icons/application/32x32/apps/keepassxc-dark.png differ diff --git a/share/icons/application/32x32/apps/keepassxc-locked.png b/share/icons/application/32x32/apps/keepassxc-locked.png index dbe8f45dd..cc08472c2 100644 Binary files a/share/icons/application/32x32/apps/keepassxc-locked.png and b/share/icons/application/32x32/apps/keepassxc-locked.png differ diff --git a/share/icons/application/32x32/apps/keepassxc-unlocked.png b/share/icons/application/32x32/apps/keepassxc-unlocked.png index de06bf03a..5aff3b570 100644 Binary files a/share/icons/application/32x32/apps/keepassxc-unlocked.png and b/share/icons/application/32x32/apps/keepassxc-unlocked.png differ diff --git a/share/icons/application/32x32/apps/keepassxc.png b/share/icons/application/32x32/apps/keepassxc.png index de06bf03a..5aff3b570 100644 Binary files a/share/icons/application/32x32/apps/keepassxc.png and b/share/icons/application/32x32/apps/keepassxc.png differ diff --git a/share/icons/application/32x32/apps/preferences-desktop-icons.png b/share/icons/application/32x32/apps/preferences-desktop-icons.png index dcd605b25..3965468a5 100644 Binary files a/share/icons/application/32x32/apps/preferences-desktop-icons.png and b/share/icons/application/32x32/apps/preferences-desktop-icons.png differ diff --git a/share/icons/application/32x32/apps/utilities-terminal.png b/share/icons/application/32x32/apps/utilities-terminal.png index 3e4d324c0..3ce4cc245 100644 Binary files a/share/icons/application/32x32/apps/utilities-terminal.png and b/share/icons/application/32x32/apps/utilities-terminal.png differ diff --git a/share/icons/application/32x32/categories/preferences-other.png b/share/icons/application/32x32/categories/preferences-other.png index acafe44c6..24c03a129 100644 Binary files a/share/icons/application/32x32/categories/preferences-other.png and b/share/icons/application/32x32/categories/preferences-other.png differ diff --git a/share/icons/application/32x32/mimetypes/application-x-keepassxc.png b/share/icons/application/32x32/mimetypes/application-x-keepassxc.png index 195f792d8..d7cf40a28 100644 Binary files a/share/icons/application/32x32/mimetypes/application-x-keepassxc.png and b/share/icons/application/32x32/mimetypes/application-x-keepassxc.png differ diff --git a/share/icons/application/32x32/status/security-high.png b/share/icons/application/32x32/status/security-high.png index 7178893c2..01f7fcc46 100644 Binary files a/share/icons/application/32x32/status/security-high.png and b/share/icons/application/32x32/status/security-high.png differ diff --git a/share/icons/application/48x48/apps/keepassxc-dark.png b/share/icons/application/48x48/apps/keepassxc-dark.png index 08e396cd3..81cdcfa19 100644 Binary files a/share/icons/application/48x48/apps/keepassxc-dark.png and b/share/icons/application/48x48/apps/keepassxc-dark.png differ diff --git a/share/icons/application/48x48/apps/keepassxc-locked.png b/share/icons/application/48x48/apps/keepassxc-locked.png index 5668dd7b5..c1e87f9d0 100644 Binary files a/share/icons/application/48x48/apps/keepassxc-locked.png and b/share/icons/application/48x48/apps/keepassxc-locked.png differ diff --git a/share/icons/application/48x48/apps/keepassxc-unlocked.png b/share/icons/application/48x48/apps/keepassxc-unlocked.png index 06a563d1a..a784c3604 100644 Binary files a/share/icons/application/48x48/apps/keepassxc-unlocked.png and b/share/icons/application/48x48/apps/keepassxc-unlocked.png differ diff --git a/share/icons/application/48x48/apps/keepassxc.png b/share/icons/application/48x48/apps/keepassxc.png index 06a563d1a..a784c3604 100644 Binary files a/share/icons/application/48x48/apps/keepassxc.png and b/share/icons/application/48x48/apps/keepassxc.png differ diff --git a/share/icons/application/64x64/apps/keepassxc-dark.png b/share/icons/application/64x64/apps/keepassxc-dark.png index 439ca7e8e..5c50146f6 100644 Binary files a/share/icons/application/64x64/apps/keepassxc-dark.png and b/share/icons/application/64x64/apps/keepassxc-dark.png differ diff --git a/share/icons/application/64x64/apps/keepassxc-locked.png b/share/icons/application/64x64/apps/keepassxc-locked.png index e4ca501a9..c6e7e239c 100644 Binary files a/share/icons/application/64x64/apps/keepassxc-locked.png and b/share/icons/application/64x64/apps/keepassxc-locked.png differ diff --git a/share/icons/application/64x64/apps/keepassxc-unlocked.png b/share/icons/application/64x64/apps/keepassxc-unlocked.png index 8ade0e85e..3e1d4e5ce 100644 Binary files a/share/icons/application/64x64/apps/keepassxc-unlocked.png and b/share/icons/application/64x64/apps/keepassxc-unlocked.png differ diff --git a/share/icons/application/64x64/apps/keepassxc.png b/share/icons/application/64x64/apps/keepassxc.png index 8ade0e85e..3e1d4e5ce 100644 Binary files a/share/icons/application/64x64/apps/keepassxc.png and b/share/icons/application/64x64/apps/keepassxc.png differ diff --git a/share/icons/application/64x64/mimetypes/application-x-keepassxc.png b/share/icons/application/64x64/mimetypes/application-x-keepassxc.png index dc97a7d24..f26e140f9 100644 Binary files a/share/icons/application/64x64/mimetypes/application-x-keepassxc.png and b/share/icons/application/64x64/mimetypes/application-x-keepassxc.png differ diff --git a/share/icons/application/scalable/apps/keepassxc-dark.svg b/share/icons/application/scalable/apps/keepassxc-dark.svg new file mode 100644 index 000000000..d296e68ff --- /dev/null +++ b/share/icons/application/scalable/apps/keepassxc-dark.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/share/icons/application/scalable/apps/keepassxc-dark.svgz b/share/icons/application/scalable/apps/keepassxc-dark.svgz deleted file mode 100644 index 0f8d75e70..000000000 Binary files a/share/icons/application/scalable/apps/keepassxc-dark.svgz and /dev/null differ diff --git a/share/icons/application/scalable/apps/keepassxc-locked.svg b/share/icons/application/scalable/apps/keepassxc-locked.svg new file mode 100644 index 000000000..82e766940 --- /dev/null +++ b/share/icons/application/scalable/apps/keepassxc-locked.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/share/icons/application/scalable/apps/keepassxc-locked.svgz b/share/icons/application/scalable/apps/keepassxc-locked.svgz deleted file mode 100644 index 65aca0592..000000000 Binary files a/share/icons/application/scalable/apps/keepassxc-locked.svgz and /dev/null differ diff --git a/share/icons/application/scalable/apps/keepassxc-unlocked.svg b/share/icons/application/scalable/apps/keepassxc-unlocked.svg new file mode 100644 index 000000000..c2d5758f0 --- /dev/null +++ b/share/icons/application/scalable/apps/keepassxc-unlocked.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/share/icons/application/scalable/apps/keepassxc-unlocked.svgz b/share/icons/application/scalable/apps/keepassxc-unlocked.svgz deleted file mode 100644 index 84ce13904..000000000 Binary files a/share/icons/application/scalable/apps/keepassxc-unlocked.svgz and /dev/null differ diff --git a/share/icons/application/scalable/apps/keepassxc.svg b/share/icons/application/scalable/apps/keepassxc.svg new file mode 100644 index 000000000..c2d5758f0 --- /dev/null +++ b/share/icons/application/scalable/apps/keepassxc.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/share/icons/application/scalable/apps/keepassxc.svgz b/share/icons/application/scalable/apps/keepassxc.svgz deleted file mode 100644 index 84ce13904..000000000 Binary files a/share/icons/application/scalable/apps/keepassxc.svgz and /dev/null differ diff --git a/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg b/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg new file mode 100644 index 000000000..4b33c5a69 --- /dev/null +++ b/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/application/scalable/mimetypes/application-x-keepassxc.svgz b/share/icons/application/scalable/mimetypes/application-x-keepassxc.svgz deleted file mode 100644 index 0ea2e0b07..000000000 Binary files a/share/icons/application/scalable/mimetypes/application-x-keepassxc.svgz and /dev/null differ diff --git a/share/icons/database/C00_Password.png b/share/icons/database/C00_Password.png index 565682498..86fa47f04 100644 Binary files a/share/icons/database/C00_Password.png and b/share/icons/database/C00_Password.png differ diff --git a/share/icons/database/C01_Package_Network.png b/share/icons/database/C01_Package_Network.png index 03ef9a570..dceb0a528 100644 Binary files a/share/icons/database/C01_Package_Network.png and b/share/icons/database/C01_Package_Network.png differ diff --git a/share/icons/database/C02_MessageBox_Warning.png b/share/icons/database/C02_MessageBox_Warning.png index 474f63fc9..0b8a56f47 100644 Binary files a/share/icons/database/C02_MessageBox_Warning.png and b/share/icons/database/C02_MessageBox_Warning.png differ diff --git a/share/icons/database/C03_Server.png b/share/icons/database/C03_Server.png index bb8a316d2..00ed93316 100644 Binary files a/share/icons/database/C03_Server.png and b/share/icons/database/C03_Server.png differ diff --git a/share/icons/database/C04_Klipper.png b/share/icons/database/C04_Klipper.png index a2c0cfb10..a451fe1d2 100644 Binary files a/share/icons/database/C04_Klipper.png and b/share/icons/database/C04_Klipper.png differ diff --git a/share/icons/database/C05_Edu_Languages.png b/share/icons/database/C05_Edu_Languages.png index 8aa200479..d36534f59 100644 Binary files a/share/icons/database/C05_Edu_Languages.png and b/share/icons/database/C05_Edu_Languages.png differ diff --git a/share/icons/database/C06_KCMDF.png b/share/icons/database/C06_KCMDF.png index 604c3d593..331895758 100644 Binary files a/share/icons/database/C06_KCMDF.png and b/share/icons/database/C06_KCMDF.png differ diff --git a/share/icons/database/C07_Kate.png b/share/icons/database/C07_Kate.png index 4a52bb1c5..8427b9054 100644 Binary files a/share/icons/database/C07_Kate.png and b/share/icons/database/C07_Kate.png differ diff --git a/share/icons/database/C08_Socket.png b/share/icons/database/C08_Socket.png index 3125ef804..6baa73335 100644 Binary files a/share/icons/database/C08_Socket.png and b/share/icons/database/C08_Socket.png differ diff --git a/share/icons/database/C09_Identity.png b/share/icons/database/C09_Identity.png index 5e51272c2..0bf21df91 100644 Binary files a/share/icons/database/C09_Identity.png and b/share/icons/database/C09_Identity.png differ diff --git a/share/icons/database/C10_Kontact.png b/share/icons/database/C10_Kontact.png index e4c5cdc0e..08d441315 100644 Binary files a/share/icons/database/C10_Kontact.png and b/share/icons/database/C10_Kontact.png differ diff --git a/share/icons/database/C11_Camera.png b/share/icons/database/C11_Camera.png index 45d1436aa..e502227d0 100644 Binary files a/share/icons/database/C11_Camera.png and b/share/icons/database/C11_Camera.png differ diff --git a/share/icons/database/C12_IRKickFlash.png b/share/icons/database/C12_IRKickFlash.png index 89e7a97ab..4041042d3 100644 Binary files a/share/icons/database/C12_IRKickFlash.png and b/share/icons/database/C12_IRKickFlash.png differ diff --git a/share/icons/database/C13_KGPG_Key3.png b/share/icons/database/C13_KGPG_Key3.png index e68afac8b..db6aa8ec7 100644 Binary files a/share/icons/database/C13_KGPG_Key3.png and b/share/icons/database/C13_KGPG_Key3.png differ diff --git a/share/icons/database/C14_Laptop_Power.png b/share/icons/database/C14_Laptop_Power.png index 69c89a59b..8cd59f809 100644 Binary files a/share/icons/database/C14_Laptop_Power.png and b/share/icons/database/C14_Laptop_Power.png differ diff --git a/share/icons/database/C15_Scanner.png b/share/icons/database/C15_Scanner.png index fa0f83dd7..43f52ae8b 100644 Binary files a/share/icons/database/C15_Scanner.png and b/share/icons/database/C15_Scanner.png differ diff --git a/share/icons/database/C16_Mozilla_Firebird.png b/share/icons/database/C16_Mozilla_Firebird.png index 7c2e6612b..7f592c673 100644 Binary files a/share/icons/database/C16_Mozilla_Firebird.png and b/share/icons/database/C16_Mozilla_Firebird.png differ diff --git a/share/icons/database/C17_CDROM_Unmount.png b/share/icons/database/C17_CDROM_Unmount.png index e2e3f679a..947190374 100644 Binary files a/share/icons/database/C17_CDROM_Unmount.png and b/share/icons/database/C17_CDROM_Unmount.png differ diff --git a/share/icons/database/C18_Display.png b/share/icons/database/C18_Display.png index ededc0bd3..5348b7db2 100644 Binary files a/share/icons/database/C18_Display.png and b/share/icons/database/C18_Display.png differ diff --git a/share/icons/database/C19_Mail_Generic.png b/share/icons/database/C19_Mail_Generic.png index 2de442b80..ca7812aeb 100644 Binary files a/share/icons/database/C19_Mail_Generic.png and b/share/icons/database/C19_Mail_Generic.png differ diff --git a/share/icons/database/C20_Misc.png b/share/icons/database/C20_Misc.png index 98d4b9969..f428e4f0d 100644 Binary files a/share/icons/database/C20_Misc.png and b/share/icons/database/C20_Misc.png differ diff --git a/share/icons/database/C21_KOrganizer.png b/share/icons/database/C21_KOrganizer.png index 6c86544de..e66e4aca8 100644 Binary files a/share/icons/database/C21_KOrganizer.png and b/share/icons/database/C21_KOrganizer.png differ diff --git a/share/icons/database/C22_ASCII.png b/share/icons/database/C22_ASCII.png index 8e771b7fd..dcdfbed30 100644 Binary files a/share/icons/database/C22_ASCII.png and b/share/icons/database/C22_ASCII.png differ diff --git a/share/icons/database/C23_Icons.png b/share/icons/database/C23_Icons.png index df51f18f9..0fcc98bd6 100644 Binary files a/share/icons/database/C23_Icons.png and b/share/icons/database/C23_Icons.png differ diff --git a/share/icons/database/C24_Connect_Established.png b/share/icons/database/C24_Connect_Established.png index 0f6b9f9f8..b691fb3fe 100644 Binary files a/share/icons/database/C24_Connect_Established.png and b/share/icons/database/C24_Connect_Established.png differ diff --git a/share/icons/database/C25_Folder_Mail.png b/share/icons/database/C25_Folder_Mail.png index 90cf4878f..3ef9fcb60 100644 Binary files a/share/icons/database/C25_Folder_Mail.png and b/share/icons/database/C25_Folder_Mail.png differ diff --git a/share/icons/database/C26_FileSave.png b/share/icons/database/C26_FileSave.png index fd0048ded..0d87f2531 100644 Binary files a/share/icons/database/C26_FileSave.png and b/share/icons/database/C26_FileSave.png differ diff --git a/share/icons/database/C27_NFS_Unmount.png b/share/icons/database/C27_NFS_Unmount.png index f6a8dd54a..4c5238461 100644 Binary files a/share/icons/database/C27_NFS_Unmount.png and b/share/icons/database/C27_NFS_Unmount.png differ diff --git a/share/icons/database/C28_QuickTime.png b/share/icons/database/C28_QuickTime.png index f0bc57a03..59a169491 100644 Binary files a/share/icons/database/C28_QuickTime.png and b/share/icons/database/C28_QuickTime.png differ diff --git a/share/icons/database/C29_KGPG_Term.png b/share/icons/database/C29_KGPG_Term.png index e77ff5b0d..010d33570 100644 Binary files a/share/icons/database/C29_KGPG_Term.png and b/share/icons/database/C29_KGPG_Term.png differ diff --git a/share/icons/database/C30_Konsole.png b/share/icons/database/C30_Konsole.png index b1366b1f0..292df84ce 100644 Binary files a/share/icons/database/C30_Konsole.png and b/share/icons/database/C30_Konsole.png differ diff --git a/share/icons/database/C31_FilePrint.png b/share/icons/database/C31_FilePrint.png index 3a8754322..4ff0f127c 100644 Binary files a/share/icons/database/C31_FilePrint.png and b/share/icons/database/C31_FilePrint.png differ diff --git a/share/icons/database/C32_FSView.png b/share/icons/database/C32_FSView.png index e167acf20..53dda269a 100644 Binary files a/share/icons/database/C32_FSView.png and b/share/icons/database/C32_FSView.png differ diff --git a/share/icons/database/C33_Run.png b/share/icons/database/C33_Run.png index 751424557..522b0a3f9 100644 Binary files a/share/icons/database/C33_Run.png and b/share/icons/database/C33_Run.png differ diff --git a/share/icons/database/C34_Configure.png b/share/icons/database/C34_Configure.png index a4a3834ab..5314140ec 100644 Binary files a/share/icons/database/C34_Configure.png and b/share/icons/database/C34_Configure.png differ diff --git a/share/icons/database/C35_KRFB.png b/share/icons/database/C35_KRFB.png index 6f02e877e..b518beebd 100644 Binary files a/share/icons/database/C35_KRFB.png and b/share/icons/database/C35_KRFB.png differ diff --git a/share/icons/database/C36_Ark.png b/share/icons/database/C36_Ark.png index e2b67dcba..e30bb09b9 100644 Binary files a/share/icons/database/C36_Ark.png and b/share/icons/database/C36_Ark.png differ diff --git a/share/icons/database/C37_KPercentage.png b/share/icons/database/C37_KPercentage.png index 2a15a078c..64995d2de 100644 Binary files a/share/icons/database/C37_KPercentage.png and b/share/icons/database/C37_KPercentage.png differ diff --git a/share/icons/database/C38_Samba_Unmount.png b/share/icons/database/C38_Samba_Unmount.png index 3f3b8ff0f..4112a4f63 100644 Binary files a/share/icons/database/C38_Samba_Unmount.png and b/share/icons/database/C38_Samba_Unmount.png differ diff --git a/share/icons/database/C39_History.png b/share/icons/database/C39_History.png index 8d658e0de..95e7d6e8e 100644 Binary files a/share/icons/database/C39_History.png and b/share/icons/database/C39_History.png differ diff --git a/share/icons/database/C40_Mail_Find.png b/share/icons/database/C40_Mail_Find.png index 1e230e2e4..6dfbb958d 100644 Binary files a/share/icons/database/C40_Mail_Find.png and b/share/icons/database/C40_Mail_Find.png differ diff --git a/share/icons/database/C41_VectorGfx.png b/share/icons/database/C41_VectorGfx.png index 5b51008bd..ec47b76e3 100644 Binary files a/share/icons/database/C41_VectorGfx.png and b/share/icons/database/C41_VectorGfx.png differ diff --git a/share/icons/database/C42_KCMMemory.png b/share/icons/database/C42_KCMMemory.png index c74903467..ee2560a02 100644 Binary files a/share/icons/database/C42_KCMMemory.png and b/share/icons/database/C42_KCMMemory.png differ diff --git a/share/icons/database/C43_EditTrash.png b/share/icons/database/C43_EditTrash.png index aa9d7321f..d09e07935 100644 Binary files a/share/icons/database/C43_EditTrash.png and b/share/icons/database/C43_EditTrash.png differ diff --git a/share/icons/database/C44_KNotes.png b/share/icons/database/C44_KNotes.png index 1e27e9cae..f981a9a47 100644 Binary files a/share/icons/database/C44_KNotes.png and b/share/icons/database/C44_KNotes.png differ diff --git a/share/icons/database/C45_Cancel.png b/share/icons/database/C45_Cancel.png index a432b492c..443450f09 100644 Binary files a/share/icons/database/C45_Cancel.png and b/share/icons/database/C45_Cancel.png differ diff --git a/share/icons/database/C46_Help.png b/share/icons/database/C46_Help.png index 28a0f9e5e..fc50cff74 100644 Binary files a/share/icons/database/C46_Help.png and b/share/icons/database/C46_Help.png differ diff --git a/share/icons/database/C47_KPackage.png b/share/icons/database/C47_KPackage.png index fdb3644c6..ac5d51789 100644 Binary files a/share/icons/database/C47_KPackage.png and b/share/icons/database/C47_KPackage.png differ diff --git a/share/icons/database/C48_Folder.png b/share/icons/database/C48_Folder.png index 9232553fc..e648b3fec 100644 Binary files a/share/icons/database/C48_Folder.png and b/share/icons/database/C48_Folder.png differ diff --git a/share/icons/database/C49_Folder_Blue_Open.png b/share/icons/database/C49_Folder_Blue_Open.png index 2c55c5636..baba6e00e 100644 Binary files a/share/icons/database/C49_Folder_Blue_Open.png and b/share/icons/database/C49_Folder_Blue_Open.png differ diff --git a/share/icons/database/C50_Folder_Tar.png b/share/icons/database/C50_Folder_Tar.png index 2effa3950..69f1c455d 100644 Binary files a/share/icons/database/C50_Folder_Tar.png and b/share/icons/database/C50_Folder_Tar.png differ diff --git a/share/icons/database/C51_Decrypted.png b/share/icons/database/C51_Decrypted.png index 42dd93e26..1e239a7cc 100644 Binary files a/share/icons/database/C51_Decrypted.png and b/share/icons/database/C51_Decrypted.png differ diff --git a/share/icons/database/C52_Encrypted.png b/share/icons/database/C52_Encrypted.png index 80357125c..e1edec451 100644 Binary files a/share/icons/database/C52_Encrypted.png and b/share/icons/database/C52_Encrypted.png differ diff --git a/share/icons/database/C53_Apply.png b/share/icons/database/C53_Apply.png index 5b0f6a617..a2ae9cfc7 100644 Binary files a/share/icons/database/C53_Apply.png and b/share/icons/database/C53_Apply.png differ diff --git a/share/icons/database/C54_Signature.png b/share/icons/database/C54_Signature.png index 8834f3f59..ba5ac29dd 100644 Binary files a/share/icons/database/C54_Signature.png and b/share/icons/database/C54_Signature.png differ diff --git a/share/icons/database/C55_Thumbnail.png b/share/icons/database/C55_Thumbnail.png index 91adff8de..4c3a26d44 100644 Binary files a/share/icons/database/C55_Thumbnail.png and b/share/icons/database/C55_Thumbnail.png differ diff --git a/share/icons/database/C56_KAddressBook.png b/share/icons/database/C56_KAddressBook.png index 7f879f8cb..e24b44ad3 100644 Binary files a/share/icons/database/C56_KAddressBook.png and b/share/icons/database/C56_KAddressBook.png differ diff --git a/share/icons/database/C57_View_Text.png b/share/icons/database/C57_View_Text.png index c688d5f6f..afaa8132e 100644 Binary files a/share/icons/database/C57_View_Text.png and b/share/icons/database/C57_View_Text.png differ diff --git a/share/icons/database/C58_KGPG.png b/share/icons/database/C58_KGPG.png index a6ed9b4b7..a842c7971 100644 Binary files a/share/icons/database/C58_KGPG.png and b/share/icons/database/C58_KGPG.png differ diff --git a/share/icons/database/C59_Package_Development.png b/share/icons/database/C59_Package_Development.png index df1fb742e..b740c987b 100644 Binary files a/share/icons/database/C59_Package_Development.png and b/share/icons/database/C59_Package_Development.png differ diff --git a/share/icons/database/C60_KFM_Home.png b/share/icons/database/C60_KFM_Home.png index 3525b0b73..8076b8e24 100644 Binary files a/share/icons/database/C60_KFM_Home.png and b/share/icons/database/C60_KFM_Home.png differ diff --git a/share/icons/database/C61_Services.png b/share/icons/database/C61_Services.png index 2a24b7e7f..66478f4ad 100644 Binary files a/share/icons/database/C61_Services.png and b/share/icons/database/C61_Services.png differ diff --git a/share/icons/database/C62_Tux.png b/share/icons/database/C62_Tux.png index 85392b204..c22c15e2c 100644 Binary files a/share/icons/database/C62_Tux.png and b/share/icons/database/C62_Tux.png differ diff --git a/share/icons/database/C63_Feather.png b/share/icons/database/C63_Feather.png index cf95a5d19..307deac8a 100644 Binary files a/share/icons/database/C63_Feather.png and b/share/icons/database/C63_Feather.png differ diff --git a/share/icons/database/C64_Apple.png b/share/icons/database/C64_Apple.png index d3b11ee28..d799fec0a 100644 Binary files a/share/icons/database/C64_Apple.png and b/share/icons/database/C64_Apple.png differ diff --git a/share/icons/database/C65_W.png b/share/icons/database/C65_W.png index de84d680b..d3315b36c 100644 Binary files a/share/icons/database/C65_W.png and b/share/icons/database/C65_W.png differ diff --git a/share/icons/database/C66_Money.png b/share/icons/database/C66_Money.png index 5db755dfa..619cea4b2 100644 Binary files a/share/icons/database/C66_Money.png and b/share/icons/database/C66_Money.png differ diff --git a/share/icons/database/C67_Certificate.png b/share/icons/database/C67_Certificate.png index 2526fbe76..ba7a76799 100644 Binary files a/share/icons/database/C67_Certificate.png and b/share/icons/database/C67_Certificate.png differ diff --git a/share/icons/database/C68_BlackBerry.png b/share/icons/database/C68_BlackBerry.png index ddb8630a2..9f7e4db39 100644 Binary files a/share/icons/database/C68_BlackBerry.png and b/share/icons/database/C68_BlackBerry.png differ diff --git a/share/icons/svg/application-exit.svg b/share/icons/svg/application-exit.svg new file mode 100644 index 000000000..81868b89f --- /dev/null +++ b/share/icons/svg/application-exit.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/application-exit.svgz b/share/icons/svg/application-exit.svgz deleted file mode 100644 index 0ffd56bd3..000000000 Binary files a/share/icons/svg/application-exit.svgz and /dev/null differ diff --git a/share/icons/svg/application-x-keepassxc-16.svgz b/share/icons/svg/application-x-keepassxc-16.svgz deleted file mode 100644 index 6ee775350..000000000 Binary files a/share/icons/svg/application-x-keepassxc-16.svgz and /dev/null differ diff --git a/share/icons/svg/application-x-keepassxc.svg b/share/icons/svg/application-x-keepassxc.svg new file mode 100644 index 000000000..4b33c5a69 --- /dev/null +++ b/share/icons/svg/application-x-keepassxc.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/application-x-keepassxc.svgz b/share/icons/svg/application-x-keepassxc.svgz deleted file mode 100644 index 0ea2e0b07..000000000 Binary files a/share/icons/svg/application-x-keepassxc.svgz and /dev/null differ diff --git a/share/icons/svg/auto-type.png b/share/icons/svg/auto-type.png index 90d13a126..5e3c42535 100644 Binary files a/share/icons/svg/auto-type.png and b/share/icons/svg/auto-type.png differ diff --git a/share/icons/svg/configure.svg b/share/icons/svg/configure.svg new file mode 100644 index 000000000..ebbb7dca1 --- /dev/null +++ b/share/icons/svg/configure.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/configure.svgz b/share/icons/svg/configure.svgz deleted file mode 100644 index 8c04b222a..000000000 Binary files a/share/icons/svg/configure.svgz and /dev/null differ diff --git a/share/icons/svg/dialog-close.svg b/share/icons/svg/dialog-close.svg new file mode 100644 index 000000000..9b6b717cd --- /dev/null +++ b/share/icons/svg/dialog-close.svg @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/dialog-close.svgz b/share/icons/svg/dialog-close.svgz deleted file mode 100644 index 0112a2424..000000000 Binary files a/share/icons/svg/dialog-close.svgz and /dev/null differ diff --git a/share/icons/svg/dialog-error.svg b/share/icons/svg/dialog-error.svg new file mode 100644 index 000000000..b09885d35 --- /dev/null +++ b/share/icons/svg/dialog-error.svg @@ -0,0 +1,474 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/dialog-error.svgz b/share/icons/svg/dialog-error.svgz deleted file mode 100644 index 545a1ace6..000000000 Binary files a/share/icons/svg/dialog-error.svgz and /dev/null differ diff --git a/share/icons/svg/dialog-information.svg b/share/icons/svg/dialog-information.svg new file mode 100644 index 000000000..35992e0fc --- /dev/null +++ b/share/icons/svg/dialog-information.svg @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/dialog-information.svgz b/share/icons/svg/dialog-information.svgz deleted file mode 100644 index d73e7ac5d..000000000 Binary files a/share/icons/svg/dialog-information.svgz and /dev/null differ diff --git a/share/icons/svg/dialog-ok.svg b/share/icons/svg/dialog-ok.svg new file mode 100644 index 000000000..5ab1fad37 --- /dev/null +++ b/share/icons/svg/dialog-ok.svg @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/dialog-ok.svgz b/share/icons/svg/dialog-ok.svgz deleted file mode 100644 index e5c74d112..000000000 Binary files a/share/icons/svg/dialog-ok.svgz and /dev/null differ diff --git a/share/icons/svg/dialog-warning.svg b/share/icons/svg/dialog-warning.svg new file mode 100644 index 000000000..80e215b6e --- /dev/null +++ b/share/icons/svg/dialog-warning.svg @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/dialog-warning.svgz b/share/icons/svg/dialog-warning.svgz deleted file mode 100644 index 660e0f4db..000000000 Binary files a/share/icons/svg/dialog-warning.svgz and /dev/null differ diff --git a/share/icons/svg/document-close.svg b/share/icons/svg/document-close.svg new file mode 100644 index 000000000..44b4a6bed --- /dev/null +++ b/share/icons/svg/document-close.svg @@ -0,0 +1,426 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/share/icons/svg/document-close.svgz b/share/icons/svg/document-close.svgz deleted file mode 100644 index dc223c929..000000000 Binary files a/share/icons/svg/document-close.svgz and /dev/null differ diff --git a/share/icons/svg/document-edit.svg b/share/icons/svg/document-edit.svg new file mode 100644 index 000000000..4f462832c --- /dev/null +++ b/share/icons/svg/document-edit.svg @@ -0,0 +1,634 @@ + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/share/icons/svg/document-edit.svgz b/share/icons/svg/document-edit.svgz deleted file mode 100644 index 739ebbcc3..000000000 Binary files a/share/icons/svg/document-edit.svgz and /dev/null differ diff --git a/share/icons/svg/document-new.svg b/share/icons/svg/document-new.svg new file mode 100644 index 000000000..399b5236c --- /dev/null +++ b/share/icons/svg/document-new.svg @@ -0,0 +1,477 @@ + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/share/icons/svg/document-new.svgz b/share/icons/svg/document-new.svgz deleted file mode 100644 index 8b08bf781..000000000 Binary files a/share/icons/svg/document-new.svgz and /dev/null differ diff --git a/share/icons/svg/document-open.svg b/share/icons/svg/document-open.svg new file mode 100644 index 000000000..c48f76940 --- /dev/null +++ b/share/icons/svg/document-open.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/document-open.svgz b/share/icons/svg/document-open.svgz deleted file mode 100644 index 03a6d3258..000000000 Binary files a/share/icons/svg/document-open.svgz and /dev/null differ diff --git a/share/icons/svg/document-properties.svg b/share/icons/svg/document-properties.svg new file mode 100644 index 000000000..59337c4aa --- /dev/null +++ b/share/icons/svg/document-properties.svg @@ -0,0 +1,601 @@ + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/share/icons/svg/document-properties.svgz b/share/icons/svg/document-properties.svgz deleted file mode 100644 index 7f166d7f2..000000000 Binary files a/share/icons/svg/document-properties.svgz and /dev/null differ diff --git a/share/icons/svg/document-save-as.svg b/share/icons/svg/document-save-as.svg new file mode 100644 index 000000000..833ebc6d3 --- /dev/null +++ b/share/icons/svg/document-save-as.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/document-save-as.svgz b/share/icons/svg/document-save-as.svgz deleted file mode 100644 index 5fdefb8f0..000000000 Binary files a/share/icons/svg/document-save-as.svgz and /dev/null differ diff --git a/share/icons/svg/document-save.svg b/share/icons/svg/document-save.svg new file mode 100644 index 000000000..8e681fdb7 --- /dev/null +++ b/share/icons/svg/document-save.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/document-save.svgz b/share/icons/svg/document-save.svgz deleted file mode 100644 index 248589ba2..000000000 Binary files a/share/icons/svg/document-save.svgz and /dev/null differ diff --git a/share/icons/svg/edit-clear-locationbar-ltr.svg b/share/icons/svg/edit-clear-locationbar-ltr.svg new file mode 100644 index 000000000..010d954ac --- /dev/null +++ b/share/icons/svg/edit-clear-locationbar-ltr.svg @@ -0,0 +1,391 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/edit-clear-locationbar-ltr.svgz b/share/icons/svg/edit-clear-locationbar-ltr.svgz deleted file mode 100644 index 3b4e2ad9f..000000000 Binary files a/share/icons/svg/edit-clear-locationbar-ltr.svgz and /dev/null differ diff --git a/share/icons/svg/edit-clear-locationbar-rtl.svg b/share/icons/svg/edit-clear-locationbar-rtl.svg new file mode 100644 index 000000000..d656a0b0d --- /dev/null +++ b/share/icons/svg/edit-clear-locationbar-rtl.svg @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/edit-clear-locationbar-rtl.svgz b/share/icons/svg/edit-clear-locationbar-rtl.svgz deleted file mode 100644 index 446a06a07..000000000 Binary files a/share/icons/svg/edit-clear-locationbar-rtl.svgz and /dev/null differ diff --git a/share/icons/svg/internet-web-browser.svg b/share/icons/svg/internet-web-browser.svg new file mode 100644 index 000000000..0d00ac6dc --- /dev/null +++ b/share/icons/svg/internet-web-browser.svg @@ -0,0 +1,4 @@ + + + + diff --git a/share/icons/svg/internet-web-browser.svgz b/share/icons/svg/internet-web-browser.svgz deleted file mode 100644 index f48f1415c..000000000 Binary files a/share/icons/svg/internet-web-browser.svgz and /dev/null differ diff --git a/share/icons/svg/key-enter.svg b/share/icons/svg/key-enter.svg new file mode 100644 index 000000000..7c983be54 --- /dev/null +++ b/share/icons/svg/key-enter.svg @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/key-enter.svgz b/share/icons/svg/key-enter.svgz deleted file mode 100644 index 7176b5acb..000000000 Binary files a/share/icons/svg/key-enter.svgz and /dev/null differ diff --git a/share/icons/svg/message-close.svg b/share/icons/svg/message-close.svg new file mode 100644 index 000000000..a36700faf --- /dev/null +++ b/share/icons/svg/message-close.svg @@ -0,0 +1,41 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/share/icons/svg/message-close.svgz b/share/icons/svg/message-close.svgz deleted file mode 100644 index e06d86892..000000000 Binary files a/share/icons/svg/message-close.svgz and /dev/null differ diff --git a/share/icons/svg/paperclip.svg b/share/icons/svg/paperclip.svg new file mode 100644 index 000000000..ad1b8d616 --- /dev/null +++ b/share/icons/svg/paperclip.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/share/icons/svg/paperclip.svgz b/share/icons/svg/paperclip.svgz deleted file mode 100644 index 6c72fd09e..000000000 Binary files a/share/icons/svg/paperclip.svgz and /dev/null differ diff --git a/share/icons/svg/password-copy.svg b/share/icons/svg/password-copy.svg new file mode 100644 index 000000000..8d7e33c02 --- /dev/null +++ b/share/icons/svg/password-copy.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/password-copy.svgz b/share/icons/svg/password-copy.svgz deleted file mode 100644 index 8cb4a4416..000000000 Binary files a/share/icons/svg/password-copy.svgz and /dev/null differ diff --git a/share/icons/svg/password-generator.svgz b/share/icons/svg/password-generator.svg similarity index 60% rename from share/icons/svg/password-generator.svgz rename to share/icons/svg/password-generator.svg index 7f08089bb..440d690a0 100644 --- a/share/icons/svg/password-generator.svgz +++ b/share/icons/svg/password-generator.svg @@ -1,6 +1,4 @@ - - + id="svg1307" + height="128" + width="128"> + id="linearGradient3718"> + id="stop3720" /> + id="stop3722" /> + + + + + + + - - - - - - - - + style="stop-color:#393939;stop-opacity:1;" /> + style="stop-color:#393939;stop-opacity:0;" /> + style="stop-color:#ffffff;stop-opacity:1;" /> + style="stop-color:#ffffff;stop-opacity:0;" /> + style="stop-color:#ffffff;stop-opacity:1;" /> + id="stop2508" /> + - + style="stop-color:#ffffff;stop-opacity:0;" /> + style="stop-color:#ffffff;stop-opacity:1;" /> + style="stop-color:#ffffff;stop-opacity:0;" /> + style="stop-color:#ffffff;stop-opacity:1;" /> + style="stop-color:#ffffff;stop-opacity:0;" /> + style="stop-color:#ffffff;stop-opacity:1;" /> + style="stop-color:#ffffff;stop-opacity:0;" /> + style="stop-color:#ffffff;stop-opacity:1;" /> + id="stop2347" /> + style="stop-color:#d3d3d3;stop-opacity:1;" /> + r="59.198612" + fy="57.087173" + fx="96.433075" + cy="57.087173" + cx="96.433075" + id="radialGradient2425" + xlink:href="#linearGradient2419" /> - + - + - + - + - + - + - + - + - + - + - + - + - + + fx="49.933464" + cy="9.8521395" + cx="49.933464" + gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-11.409803,49.062709)" + gradientUnits="userSpaceOnUse" + id="radialGradient1474" + xlink:href="#linearGradient3225" /> + fx="67.876709" + cy="60.201225" + cx="67.876709" + gradientTransform="matrix(0.5645257,-0.34773821,0.28363904,0.50821111,10.679939,54.077116)" + gradientUnits="userSpaceOnUse" + id="radialGradient1480" + xlink:href="#linearGradient2453" /> + x2="78.643684" + y1="153.80435" + x1="-90.709442" + id="linearGradient2387" + xlink:href="#linearGradient2381" /> - + y1="-16.490377" + x1="57.296326" + gradientUnits="userSpaceOnUse" + id="linearGradient3301" + xlink:href="#linearGradient3291" /> + width="1.1801384" + x="-0.090069178" + id="filter3429"> + id="feGaussianBlur3431" + stdDeviation="0.68605903" /> + width="1.1835395" + x="-0.091769746" + id="filter3433"> + id="feGaussianBlur3435" + stdDeviation="0.68605903" /> + width="1.1808059" + x="-0.090402938" + id="filter3437"> + id="feGaussianBlur3439" + stdDeviation="0.68605903" /> + width="1.0792235" + x="-0.039611745" + id="filter3482"> + id="feGaussianBlur3484" + stdDeviation="1.3721181" /> + id="feGaussianBlur3520" + stdDeviation="0.45785798" /> + id="feGaussianBlur3576" + stdDeviation="1.0125102" /> - - - - - - - - - - - - - - - - - - + y1="186.47618" + x1="274.36163" + gradientTransform="matrix(0.814691,-0.4513534,-0.01142073,0.9309698,-11.541647,47.221462)" + gradientUnits="userSpaceOnUse" + id="linearGradient3678" + xlink:href="#linearGradient3680" /> + id="feGaussianBlur3716" + stdDeviation="0.42187368" /> + id="feGaussianBlur3755" + stdDeviation="0.76746435" /> - @@ -717,149 +434,135 @@ + id="layer1"> + d="m 63.6875,11.34375 c -0.307888,0.01157 -0.622049,0.03822 -0.9375,0.0625 -0.124077,0.0093 -0.251114,0.0201 -0.375,0.03125 -0.05233,0.0049 -0.103739,0.02601 -0.15625,0.03125 -0.712,0.06846 -1.428165,0.153454 -2.125,0.28125 -0.155698,0.02997 -0.311968,0.06025 -0.46875,0.09375 -1.997959,0.408268 -3.903345,1.039509 -5.53125,1.9375 -0.566172,0.280908 -1.121148,0.597939 -1.6875,0.9375 l -2.0625,1.125 c -3.384614,1.788314 -7.092461,4.343647 -12.375,7.28125 -3.43228,1.90868 -6.456933,3.625939 -9.1875,5.1875 l -4.96875,2.75 c -0.498481,0.274974 -0.961001,0.544756 -1.375,0.84375 l -0.3125,0.1875 c -0.268281,0.175855 -0.545708,0.372427 -0.8125,0.5625 -0.966273,0.596455 -1.527441,1.009092 -1.5,1.0625 0.0068,0.0132 0.146679,-0.07019 0.21875,-0.09375 -3.962556,3.207756 -7.410412,7.880262 -8,12.96875 L 12.0625,46.75 c -0.07009,0.509421 -0.116296,1.030587 -0.125,1.59375 L 10.34375,83.3125 c -0.105144,6.80274 4.445942,14.767952 10.21875,17.875 L 53.8125,119 c 0.416106,0.22396 0.814802,0.4009 1.21875,0.5625 6.179168,2.49704 14.387189,2.03917 19.03125,-0.53125 0.38938,-0.16551 0.784222,-0.33772 1.1875,-0.5625 l 31.125,-17.75 c 5.44542,-3.035234 9.8947,-10.375507 10,-16.4375 l -0.34375,-35.625 c 0.006,-0.33561 -0.0106,-0.655677 -0.0313,-0.96875 l 0.125,-0.21875 C 115.17195,41.889964 112.94649,34.769399 108.25,32.1875 l -1.375,-0.59375 C 106.25301,31.004608 98.645471,26.824191 89.15625,21.875 85.474411,19.954703 82.224469,18.29233 79.34375,16.84375 l -6.53125,-3.5 c -2.121537,-1.139951 -3.811692,-1.796844 -6.625,-1.96875 -0.253862,-0.01693 -0.519547,-0.02233 -0.78125,-0.03125 -0.147499,-0.0043 -0.289561,0.0017 -0.4375,0 -0.414575,-0.0064 -0.85006,-0.0162 -1.28125,0 z" + style="fill:#181818;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3753)" /> + d="m 21.128502,28.09122 c -4.766214,3.124206 -9.405072,8.541154 -10.096359,14.50736 l 8.629169,48.78787 35.366196,27.16282 c 5.06326,2.14656 14.524273,2.44687 19.76131,-0.92915 L 117.12128,43.463792 c -0.95305,-5.578786 -3.1596,-12.685613 -7.85609,-15.267512 L 76.187417,14.016615 27.411339,24.642694 21.128502,28.09122 z" + style="fill:#181818;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + d="m 21.128502,28.09122 c -4.766214,3.124206 -9.405072,8.541154 -10.096359,14.50736 l 8.629169,48.78787 37.487054,27.87435 c 4.487477,0.90002 9.451421,1.77535 17.640452,-2.89762 L 117.12128,43.463792 c -0.95305,-5.578786 -3.1596,-12.685613 -7.85609,-15.267512 L 76.187417,14.016615 27.411339,24.642694 21.128502,28.09122 z" + style="opacity:0;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + d="m 21.534884,37.678074 33.235279,17.969949 c 5.772809,3.10706 10.335586,11.084985 10.230441,17.887724 l -0.586755,37.784793 c -0.105145,6.80273 -4.837214,9.77795 -10.610022,6.67089 L 20.568547,100.1994 C 14.795739,97.092352 10.232963,89.114423 10.338107,82.311683 l 0.586756,-37.96271 c 0.105144,-6.802738 4.837213,-9.777959 10.610021,-6.670899 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + d="M 76.279616,56.950767 107.40321,39.201951 c 5.44542,-3.03524 9.7445,-0.598541 9.6392,5.463458 l -0.65538,38.618606 c -0.1053,6.061993 -4.57393,13.385785 -10.01935,16.421019 L 75.244086,117.45385 c -5.445414,3.03523 -9.744496,0.59853 -9.639194,-5.46346 l 0.65538,-38.61861 c 0.105301,-6.062 4.57393,-13.385772 10.019344,-16.421013 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient1463);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient1459);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient1456);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient2425);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient2429);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="opacity:0.352459;fill:url(#radialGradient2433);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient2480);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient2484);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#linearGradient1441);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + d="m 77.08844,56.915281 34.08864,-19.331703 c 5.59118,-3.097618 10.02975,-0.486059 9.95196,5.855507 l -0.50832,41.436025 c -0.0778,6.341565 -4.64162,13.940612 -10.23281,17.03823 l -34.088639,20.3317 c -5.591181,3.09763 -10.029752,0.48606 -9.951956,-5.8555 l 0.508319,-42.43603 c 0.0778,-6.341566 4.641626,-13.940614 10.232806,-17.038229 z" + style="fill:url(#linearGradient1432);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3574)" /> + style="fill:url(#radialGradient1438);fill-opacity:1;fill-rule:evenodd;stroke:none" /> + d="m 48.539396,51.570209 8.832636,4.748176 c 4.097087,4.930516 13.270379,5.877301 19.214433,-0.31034 l 16.449381,-8.905407 -16.309189,8.078374 c -7.351304,3.398287 -14.788017,2.426427 -19.241976,0.405541 l -8.945285,-4.016344 z" + style="opacity:0.54455447;fill:url(#radialGradient1435);fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3714)" /> + d="m 21.534884,37.678074 34.124863,18.407772 c 5.772809,3.10706 9.004709,10.947536 8.899565,17.750275 l -0.291005,39.175029 c -0.105145,6.80274 -6.773179,6.84305 -12.545987,3.73599 L 20.568547,100.1994 C 14.795739,97.092352 10.232963,89.114423 10.338107,82.311683 l 0.586756,-37.96271 c 0.105144,-6.802738 4.837213,-9.777959 10.610021,-6.670899 z" + id="path1506" /> + id="path3299" + style="fill:url(#linearGradient3301);fill-opacity:1;stroke:none;filter:url(#filter3518)" /> + id="g3441"> + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3429)" /> + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3433)" /> + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3437)" /> + style="fill:url(#radialGradient1474);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient1471);fill-opacity:1;fill-rule:nonzero;stroke:none" /> + style="fill:url(#radialGradient1467);fill-opacity:1;fill-rule:nonzero;stroke:none" /> - + d="m 62.328392,27.787252 c -0.444881,0.160873 -0.863105,0.357773 -1.252933,0.572865 -1.973505,1.088904 -2.658724,2.61258 -2.072615,4.019316 -0.110113,-1.174485 0.658612,-2.360808 2.281271,-3.256128 3.118626,-1.720738 8.247247,-1.702177 11.49215,0.03712 1.133182,0.607393 1.886843,1.33499 2.250083,2.107659 -0.152505,-1.039536 -0.963042,-2.069141 -2.458739,-2.870847 -2.839291,-1.52188 -7.125046,-1.736101 -10.239217,-0.609981 z" + id="path2263" /> + + d="m 77.08844,56.915281 37.08864,-22.331703 c 5.59118,-3.097618 10.02975,-0.486059 9.95196,5.855507 l -0.50832,41.436025 c -0.0778,6.341565 -4.64162,13.940612 -10.23281,17.03823 l -37.088639,23.3317 c -5.591181,3.09763 -10.029752,0.48606 -9.951956,-5.8555 l 0.508319,-42.43603 c 0.0778,-6.341566 4.641626,-13.940614 10.232806,-17.038229 z" + id="path3674" /> diff --git a/share/icons/svg/preferences-desktop-icons.svg b/share/icons/svg/preferences-desktop-icons.svg new file mode 100644 index 000000000..3d2fd2006 --- /dev/null +++ b/share/icons/svg/preferences-desktop-icons.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/share/icons/svg/preferences-desktop-icons.svgz b/share/icons/svg/preferences-desktop-icons.svgz deleted file mode 100644 index 1cd0a0526..000000000 Binary files a/share/icons/svg/preferences-desktop-icons.svgz and /dev/null differ diff --git a/share/icons/svg/preferences-other.svg b/share/icons/svg/preferences-other.svg new file mode 100644 index 000000000..41b0e6054 --- /dev/null +++ b/share/icons/svg/preferences-other.svg @@ -0,0 +1,1012 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/preferences-other.svgz b/share/icons/svg/preferences-other.svgz deleted file mode 100644 index 4abeca376..000000000 Binary files a/share/icons/svg/preferences-other.svgz and /dev/null differ diff --git a/share/icons/svg/security-high.svg b/share/icons/svg/security-high.svg new file mode 100644 index 000000000..d5c23d1e8 --- /dev/null +++ b/share/icons/svg/security-high.svg @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/security-high.svgz b/share/icons/svg/security-high.svgz deleted file mode 100644 index 5edee3734..000000000 Binary files a/share/icons/svg/security-high.svgz and /dev/null differ diff --git a/share/icons/svg/system-search.svg b/share/icons/svg/system-search.svg new file mode 100644 index 000000000..7a4bcbb49 --- /dev/null +++ b/share/icons/svg/system-search.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/system-search.svgz b/share/icons/svg/system-search.svgz deleted file mode 100644 index 7a93fbc1f..000000000 Binary files a/share/icons/svg/system-search.svgz and /dev/null differ diff --git a/share/icons/svg/url-copy.svg b/share/icons/svg/url-copy.svg new file mode 100644 index 000000000..1d104240f --- /dev/null +++ b/share/icons/svg/url-copy.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/url-copy.svgz b/share/icons/svg/url-copy.svgz deleted file mode 100644 index d6ac421c1..000000000 Binary files a/share/icons/svg/url-copy.svgz and /dev/null differ diff --git a/share/icons/svg/username-copy.svg b/share/icons/svg/username-copy.svg new file mode 100644 index 000000000..3a6f056f2 --- /dev/null +++ b/share/icons/svg/username-copy.svg @@ -0,0 +1,2 @@ + + diff --git a/share/icons/svg/username-copy.svgz b/share/icons/svg/username-copy.svgz deleted file mode 100644 index ebec8c62c..000000000 Binary files a/share/icons/svg/username-copy.svgz and /dev/null differ diff --git a/share/icons/svg/utilities-terminal.svg b/share/icons/svg/utilities-terminal.svg new file mode 100644 index 000000000..df601b7b4 --- /dev/null +++ b/share/icons/svg/utilities-terminal.svg @@ -0,0 +1,1517 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/svg/utilities-terminal.svgz b/share/icons/svg/utilities-terminal.svgz deleted file mode 100644 index e913402f5..000000000 Binary files a/share/icons/svg/utilities-terminal.svgz and /dev/null differ diff --git a/share/icons/svg/view-history.svg b/share/icons/svg/view-history.svg new file mode 100644 index 000000000..519a4d3ee --- /dev/null +++ b/share/icons/svg/view-history.svg @@ -0,0 +1,753 @@ + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/share/icons/svg/view-history.svgz b/share/icons/svg/view-history.svgz deleted file mode 100644 index fff230f66..000000000 Binary files a/share/icons/svg/view-history.svgz and /dev/null differ diff --git a/share/keepassxc.ini b/share/keepassxc.ini index 54920224a..b91fefb4b 100644 --- a/share/keepassxc.ini +++ b/share/keepassxc.ini @@ -34,6 +34,7 @@ lockdatabaseidlesec=240 lockdatabaseminimize=false lockdatabasescreenlock=true passwordscleartext=false +passwordemptynodots=true passwordsrepeat=false [Http] diff --git a/share/linux/org.keepassxc.KeePassXC.appdata.xml b/share/linux/org.keepassxc.KeePassXC.appdata.xml index 554bcdefa..45480333c 100644 --- a/share/linux/org.keepassxc.KeePassXC.appdata.xml +++ b/share/linux/org.keepassxc.KeePassXC.appdata.xml @@ -50,6 +50,40 @@ + + +
    +
  • New Database Wizard [#1952]
  • +
  • Advanced Search [#1797]
  • +
  • Automatic update checker [#2648]
  • +
  • KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739]
  • +
  • Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439]
  • +
  • Remove KeePassHttp support [#1752]
  • +
  • CLI: output info to stderr for easier scripting [#2558]
  • +
  • CLI: Add --quiet option [#2507]
  • +
  • CLI: Add create command [#2540]
  • +
  • CLI: Add recursive listing of entries [#2345]
  • +
  • CLI: Fix stdin/stdout encoding on Windows [#2425]
  • +
  • SSH Agent: Support OpenSSH for Windows [#1994]
  • +
  • macOS: TouchID Quick Unlock [#1851]
  • +
  • macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583]
  • +
  • Linux: Prevent Klipper from storing secrets in clipboard [#1969]
  • +
  • Linux: Use polling based file watching for NFS [#2171]
  • +
  • Linux: Enable use of browser plugin in Snap build [#2802]
  • +
  • TOTP QR Code Generator [#1167]
  • +
  • High-DPI Scaling for 4k screens [#2404]
  • +
  • Make keyboard shortcuts more consistent [#2431]
  • +
  • Warn user if deleting referenced entries [#1744]
  • +
  • Allow toolbar to be hidden and repositioned [#1819, #2357]
  • +
  • Increase max allowed database timeout to 12 hours [#2173]
  • +
  • Password generator uses existing password length by default [#2318]
  • +
  • Improve alert message box button labels [#2376]
  • +
  • Show message when a database merge makes no changes [#2551]
  • +
  • Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790]
  • +
  • Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731]
  • +
+
+
    diff --git a/share/linux/org.keepassxc.KeePassXC.desktop b/share/linux/org.keepassxc.KeePassXC.desktop index 8a0169800..6ee0f7411 100644 --- a/share/linux/org.keepassxc.KeePassXC.desktop +++ b/share/linux/org.keepassxc.KeePassXC.desktop @@ -10,6 +10,7 @@ Exec=keepassxc %f TryExec=keepassxc Icon=keepassxc StartupWMClass=keepassxc +StartupNotify=true Terminal=false Type=Application Version=1.0 diff --git a/share/macosx/keepassxc.entitlements b/share/macosx/keepassxc.entitlements new file mode 100644 index 000000000..a63705585 --- /dev/null +++ b/share/macosx/keepassxc.entitlements @@ -0,0 +1,24 @@ + + + + + com.apple.application-identifier + org.keepassx.keepassxc + com.apple.developer.aps-environment + production + com.apple.security.network.client + + com.apple.security.app-sandbox + + com.apple.security.print + + com.apple.security.app-sandbox + + keychain-access-groups + + org.keepassx.keepassxc + + com.apple.security.files.user-selected.read-only + + + \ No newline at end of file diff --git a/share/macosx/keepassxc.icns b/share/macosx/keepassxc.icns index dfb98d20d..02baec7d4 100644 Binary files a/share/macosx/keepassxc.icns and b/share/macosx/keepassxc.icns differ diff --git a/share/translations/keepassx_ar.ts b/share/translations/keepassx_ar.ts index d532bd15a..ddffd7fa8 100644 --- a/share/translations/keepassx_ar.ts +++ b/share/translations/keepassx_ar.ts @@ -7,11 +7,11 @@ About - عن + حول Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - للإبلاغ عن الأخطاء: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + للإبلاغ عن العلل: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. @@ -19,7 +19,7 @@ Contributors - المساهمين + المساهمون <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> @@ -31,80 +31,19 @@ Include the following information whenever you report a bug: - قم بتضمين المعلومات التالية عند الإبلاغ عن خطأ: + قم بتضمين المعلومات التالية عند الإبلاغ عن علة: Copy to clipboard نسخ إلى الحافظة - - Version %1 - - الإصدار %1 - - - - Revision: %1 - مراجعة: %1 - - - Distribution: %1 - مراجعة: %1 - - - Libraries: - المكتبات: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - نظام التشغيل: %1 -معمارية المعالج: %2 -النواة: %3 %4 - - - Enabled extensions: - الإضافات المُفعلة: - Project Maintainers: مشرفي المشروع: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - - - - Build Type: %1 - - نوع التكوين: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - تأكيد وصول KeePassXC ل HTTP - - - Remember this decision - تذكر هذا القرار - - - Allow - اسمح - - - Deny - رفض - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 طلب الدخول إلى كلمات المرور للعنصر التالي (العناصر) التالية. -يرجى تحديد ما إذا كنت تريد السماح بالوصول أم لا. + شكر خاص من فريق KeePassXC يذهب إلى debfx لإنشاء KeePassX الأصلي. @@ -113,6 +52,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) تفعيل وكيل SSH (يتطلب إعادة التشغيل) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + إعدادات التطبيق + + + General + العام + + + Security + الأمان + + + Access error for config file %1 + خطأ في الوصول لملف التكوين %1 + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + الإعدادات الأساسية + + + Startup + بدأ التشغيل + + + Start only a single instance of KeePassXC + شغل تطبيق واحد فقط من KeePassXC + + + Remember last databases + تذكر قواعد البيانات الأخيرة + + + Remember last key files and security dongles + تذكر الملفات الرئيسية الأخيرة و قواعد الأمن + + + Load previous databases on startup + إستعادة قواعد البيانات السابقة عند بدء التشغيل + + + Minimize window at application startup + تصغير النافذة عند بدء تشغيل التطبيق + + + File Management + إدارة الملفات + + + Safely save database files (may be incompatible with Dropbox, etc) + حفظ ملفات قواعد البيانات بأمان (قد يكون غير متوافق مع Dropbox، إلخ) + + + Backup database file before saving + إحتفظ بنسخة من ملف قاعدة البيانات قبل الحفظ + + + Automatically save after every change + الحفظ تلقائيًا بعد كل تعديل + + + Automatically save on exit + الحفظ تلقائيًا عند الإغلاق + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + عدم وضع علامة على قاعدة البيانات المعدلة للتغييرات غير المتعلقة بالبيانات (مثال، توسيع المجموعات) + + + Automatically reload the database when modified externally + إعادة تحميل قاعدة البيانات تلقائيا عند تعديلها خارجيًا + + + Entry Management + إدارة الإدخالات + + + Use group icon on entry creation + استخدم رمز المجموعة عند إنشاء الإدخال + + + Minimize when copying to clipboard + تصغير عند النسخ إلى الحافظة + + + Hide the entry preview panel + + + + General + العام + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + اظهر أيقونة البرنامج في صينية النظام + + + Dark system tray icon + رمز شريط المهام المظلم + + + Hide window to system tray when minimized + إخفاء النافذة إلى شريط المهام عند تصغيرها + + + Language + اللغة + + + Auto-Type + الطباعة التلقائية + + + Use entry title to match windows for global Auto-Type + استخدم عنوان الإدخال لمطابقة النوافذ للطباعة التلقائية بشكل عام + + + Use entry URL to match windows for global Auto-Type + استخدم رابط الإدخال لمطابقة النوافذ للطباعة التلقائية بشكل عام + + + Always ask before performing Auto-Type + اسأل دائما قبل تنفيذ الطباعة التلقائية + + + Global Auto-Type shortcut + المفتاح العام للطباعة التلقائية + + + Auto-Type typing delay + + + + ms + Milliseconds + مل.ثانية + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + مهلة نفاد الوقت + + + Clear clipboard after + امسح الذاكرة بعد + + + sec + Seconds + ثانية + + + Lock databases after inactivity of + أغلق قواعد البيانات بعد حالة عدم النشاط ل + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + السهولة + + + Lock databases when session is locked or lid is closed + اقفل قواعد البيانات عندما تنقفل الجلسة أو يتم إغلاق اللابتوب + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + قفل قواعد البيانات عند تصغير النافذة + + + Re-lock previously locked database after performing Auto-Type + أعد قفل قاعدة البيانات التي تم تأمينها سابقًا بعد تنفيذ الطباعة التلقائية + + + Don't require password repeat when it is visible + لا تطلب تكرار كلمة المرور عندما تكون مرئية + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + إخفاء مُدخل الملاحظات إفتراضيًا + + + Privacy + الخصوصية + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -122,7 +332,7 @@ Please select whether you want to allow access. Auto-Type - KeePassXC - المكمل التلقائي - KeePassXC + الطباعة التلقائية - KeePassXC Auto-Type @@ -183,11 +393,11 @@ Please select whether you want to allow access. AutoTypeSelectDialog Auto-Type - KeePassXC - المكمل التلقائي - KeePassXC + الطباعة التلقائية - KeePassXC Select entry to Auto-Type: - حدد مدخل للمكمل التلقائي: + حدد مدخل للطباعة التلقائية: @@ -206,7 +416,7 @@ Please select whether you want to allow access. Deny - رفض + ارفض %1 has requested access to passwords for the following item(s). @@ -215,6 +425,26 @@ Please select whether you want to allow access. يرجى تحديد ما إذا كنت تريد السماح بالوصول أم لا. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + ألغ + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -272,11 +502,11 @@ Please select whether you want to allow access. Only returns the best matches for a specific URL instead of all entries for the whole domain. - لا تعرض سوى أفضل التطابقات للرابط المحدد بدلًا من جميع الإدخالات للنطاق بأكمله. + لا تعرض سوى أفضل التطابقات للرابط المحدد بدلا من جميع الإدخالات للنطاق بأكمله. &Return only best-matching credentials - + &عرض أفضل مطابقة لبيانات الإعتماد فقط Sort &matching credentials by title @@ -288,14 +518,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension فرز ومطابقة بيانات الإعتماد حسب إسم المستخدم - - &Disconnect all browsers - &فصل جميع المتصفحات - - - Forget all remembered &permissions - نسيان جميع &التصريحات المحفوظة - Advanced متقدم @@ -317,7 +539,7 @@ Please select whether you want to allow access. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - + البحث في جميع قواعد البيانات لمطابقة بيانات الإعتماد Automatically creating or updating string fields is not supported. @@ -329,11 +551,11 @@ Please select whether you want to allow access. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - + تحديثات مسارات KeePassXC أو keepassxc-proxy تلقائيًا لبرامج المراسلات الأصلية عند بدء التشغيل. Update &native messaging manifest files at startup - + تحديث &أصل ملفات manifest للمراسلات الأصلية عند بدء التشغيل Support a proxy application between KeePassXC and browser extension. @@ -361,35 +583,59 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>تحذير:</b> قد تكون الخيارات التالية خطيرة! - - Executable Files (*.exe);;All Files (*.*) - الملفات القابلة للتنفيذ (*.exe);;جميع الملفات (*.*) - - - Executable Files (*) - الملفات القابلة للتنفيذ (*) - Select custom proxy location حدد موقع خادم الوكيل المخصص - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - نحن متأسفون, ولكن KeePassXC-Browser غير مدعوم لإصدارات Snap في الوقت الراهن. + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + BrowserService KeePassXC: New key association request - + KeePassXC: طلب مصادقة مفتاح جديد You have received an association request for the above key. If you would like to allow it access to your KeePassXC database, give it a unique name to identify and accept it. - + لقد تلقيت طلب ارتباط للمفتاح أعلاه. + +إذا كنت ترغب في السماح له بالوصول إلى قاعدة بيانات KeePassXC ، +إعطه اسم فريد لمعرفته وقبوله. Save and allow access @@ -402,7 +648,8 @@ give it a unique name to identify and accept it. A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - + مفتاح التشفير المشترك مع إسم "%1" موجود بالفعل. +هل تريد الكتابة عليه؟ KeePassXC: Update Entry @@ -412,149 +659,53 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? هل تريد تحديث المعلومات في %1 - %2؟ - - KeePassXC: Database locked! - KeePassXC: قاعدة البيانات أقفلت! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - قاعدة البيانات هذه قد أقفلت! -يرجى إلغاء قفل قاعدة البيانات المحددة أو اختيار واحدة أخرى تكون مفتوحة. - - - KeePassXC: Settings not available! - KeePassXC: الإعدادات غير متاحة! - - - The active database does not contain a settings entry. - لا تحتوي قاعدة البيانات النشطة على إدخال إعدادات. - - - KeePassXC: No keys found - KeePassXC: لم يُعثر على أية مفاتيح - - - No shared encryption keys found in KeePassXC Settings. - لم يُعثر على مفاتيح التشفير المشتركة في إعدادات KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: حُذِفت المفاتيح من قاعدة البيانات - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - إزالة الصلاحيات المخزنة... - Abort إجهاض - KeePassXC: Removed permissions - KeePassXC: حُذفت الصلاحيات + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! + KeePassXC: No entry with KeePassHTTP attributes found! - The active database does not contain an entry with permissions. - لا تحتوي قاعدة البيانات النشطة على إدخال مع صلاحيات. - - - - ChangeMasterKeyWidget - - Password - كلمه السر - - - Enter password: - أدخل كلمة المرور: - - - Repeat password: - تكرار كلمة السر: - - - &Key file - &ملف المفتاح - - - Browse - تصّفح - - - Create - إنشاء - - - Cha&llenge Response + The active database does not contain an entry with KeePassHTTP attributes. - Refresh - تحديث - - - Key files - ملفات المفتاح - - - All files - كل الملفات - - - Create Key File... - إنشاء ملف مفتاح... - - - Unable to create Key File : - تعذر إنشاء ملف المفتاح : - - - Select a key file - حدد ملف المفتاح - - - Empty password - كلمة المرور فارغة - - - Do you really want to use an empty string as password? - هل تريد حقًا استخدام كلمات فارغة ككلمة مرور؟ - - - Different passwords supplied. - توفير كلمات السر مختلفة. - - - Failed to set %1 as the Key file: -%2 + KeePassXC: Legacy browser integration settings detected - Legacy key file format - تنسيق ملف المفتاح القديم - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + KeePassXC: Create a new group - Changing master key failed: no YubiKey inserted. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + + + + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? @@ -566,11 +717,11 @@ Please consider generating a new key file. Append ' - Clone' to title - + أضف ' - Clone' إلى العنوان Replace username and password with references - + إستبدل اسم المستخدم وكلمة المرور بالتوصيات Copy history @@ -601,7 +752,7 @@ Please consider generating a new key file. Text is qualified by - + النص مؤهل من قبل Fields are separated by @@ -613,7 +764,7 @@ Please consider generating a new key file. First record has field names - + يحتوي السجل الأول على أسماء الحقول Number of headers line to discard @@ -621,7 +772,7 @@ Please consider generating a new key file. Consider '\' an escape character - + يعتبر '\' حرف هروب Preview @@ -635,14 +786,6 @@ Please consider generating a new key file. Not present in CSV file غير موجود في ملف CSV - - Empty fieldname - - - - column - العمود - Imported from CSV file مُستورد من ملف CSV @@ -651,50 +794,90 @@ Please consider generating a new key file. Original data: البيانات الأصلية: - - Error(s) detected in CSV file ! - تم إكتشاف خطأ (أخطاء) في ملف CSV ! - - - more messages skipped] - المزيد من الرسائل تم تخطيها] - Error خطأ + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - إستيراد CSV: الكاتب يحتوي أخطاء: - - - - - CsvImportWizard - - Error - خطأ - - - Unable to calculate master key - تعذر حساب المفتاح الرئيسي +%1 + CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) + %n عمود%n عمود%n عمود%n عمود%n عمود%n عمود + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + %n row(s) + + + + + Database + + Root + Root group name + الجذر + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + DatabaseOpenWidget @@ -722,14 +905,6 @@ Please consider generating a new key file. Challenge Response: استجابة التحدي: - - Unable to open the database. - فتح قاعدة البيانات غير ممكن. - - - Can't open key file - لا يمكن فتح ملف المفتاح - Legacy key file format تنسيق ملف المفتاح القديم @@ -739,7 +914,10 @@ Please consider generating a new key file. unsupported in the future. Please consider generating a new key file. - + أنت تستخدم تنسيق ملف مفتاح قديم قد يصبح +غير مُعتمد في المستقبل. + +يرجى النظر في إنشاء ملف مفتاح جديد. Don't show this warning again @@ -757,108 +935,175 @@ Please consider generating a new key file. Select key file إختر ملف المفتاح - - - DatabaseRepairWidget - Repair database - إصلاح قاعدة البيانات + TouchID for quick unlock + - Error - خطأ + Unable to open the database: +%1 + - Can't open key file - لا يمكن فتح ملف المفتاح - - - Unable to open the database. - فتح قاعدة البيانات غير ممكن. - - - Database opened fine. Nothing to do. - قاعدة البيانات فُتحت بشكل جيد. لا يوجد شيء لفعله. - - - Success - نجاح - - - The database has been successfully repaired -You can now save it. - تم إصلاح قاعدة البيانات بنجاح -يمكنك الآن حفظها. - - - Unable to repair the database. - تعذر إصلاح قاعدة البيانات. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + كلمه السر + + + + DatabaseSettingsDialog + + Advanced Settings + + General العام - Encryption - التشفير + Security + الأمان - Number of rounds too high - Key transformation rounds - عدد الجولات عالي جدًا - - - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! + Master Key - Understood, keep number + Encryption Settings - Cancel - إلغاء + Browser Integration + تكامل المتصفح + + + DatabaseSettingsWidgetBrowser - Number of rounds too low - Key transformation rounds - عدد الجولات منخفض جدًا - - - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! + KeePassXC-Browser settings - KDF unchanged + &Disconnect all browsers + &فصل جميع المتصفحات + + + Forg&et all site-specific settings on entries - Failed to transform key with new KDF parameters; KDF unchanged. + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + Stored keys + + + + Remove + إزالة + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + المفتاح + + + Value + القيمة + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: لم يُعثر على أية مفاتيح + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: حُذِفت المفاتيح من قاعدة البيانات + - MiB - Abbreviation for Mebibytes (KDF settings) + Successfully removed %n encryption key(s) from KeePassXC settings. + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + إزالة الصلاحيات المخزنة... + + + Abort + إجهاض + + + KeePassXC: Removed permissions + KeePassXC: حُذفت الصلاحيات + - thread(s) - Threads for parallel execution (KDF settings) + Successfully removed permissions from %n entry(s). + + KeePassXC: No entry with permissions found! + KeePassXC: لا يوجد مُدخل مع الصلاحيات الموجودة! + + + The active database does not contain an entry with permissions. + لا تحتوي قاعدة البيانات النشطة على إدخال مع صلاحيات. + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + DatabaseSettingsWidgetEncryption Encryption Algorithm: - خورزامية التشفير: + خورزامية التعمية: AES: 256 Bit (default) @@ -870,15 +1115,15 @@ If you keep this number, your database may be too easy to crack! Key Derivation Function: - + وظيفة مفتاح الإشتقاق: Transform rounds: - + جولات التحول: Benchmark 1-second delay - + مؤشر تأخير 1-ثانية Memory Usage: @@ -886,14 +1131,121 @@ If you keep this number, your database may be too easy to crack! Parallelism: + التماثل: + + + Decryption Time: + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + + + + Number of rounds too high + Key transformation rounds + عدد الجولات عالي جدًا + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + أنت تستخدم عدد كبير جدًا من جولات تحول المفتاح مع Argon2. + +إذا احتفظت بهذا الرقم، فقد تستغرق قاعدة البيانات ساعات أو أيام (أو حتى أطول) لفتحها! + + + Understood, keep number + مفهوم، حافظ على العدد + + + Cancel + ألغ + + + Number of rounds too low + Key transformation rounds + عدد الجولات منخفض جدًا + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + أنت تستخدم عدد قليل جدًا من جولات تحول المفتاح مع AES-KDF. + +إذا احتفزت بهذا الرقم، قد تكون قاعدة البيانات الخاصة بك من السهل جدًا كسرها! + + + KDF unchanged + KDF دون تغيير + + + Failed to transform key with new KDF parameters; KDF unchanged. + أخفق تحويل المفتاح مع معطيات KDF الجديدة; KDF دون تغيير. + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + DatabaseSettingsWidgetGeneral Database Meta Data - + البيانات الوصفية لقاعدة البيانات Database name: @@ -933,16 +1285,87 @@ If you keep this number, your database may be too easy to crack! Enable &compression (recommended) + تفعيل &الضغط (مستحسن) + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + خطأ مجهول + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: DatabaseTabWidget - - Root - Root group - - KeePass 2 Database قاعدة بيانات KeePass 2 @@ -955,30 +1378,10 @@ If you keep this number, your database may be too easy to crack! Open database فتح قاعدة بيانات - - File not found! - الملف غير موجود! - - - Unable to open the database. - فتح قاعدة البيانات غير ممكن. - - - File opened in read only mode. - الملف تم فتحه بوضع القراءة فقط. - - - Open CSV file - فتح ملف CSV - CSV file ملف CSV - - All files (*) - جميع الملفات (*) - Merge database دمج قاعدة بيانات @@ -991,38 +1394,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database قاعدة بيانات KeePass 1 - - Close? - إغلاق؟ - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" في وضع التحرير. -تجاهل التغييرات وإلاغلاق على أي حال؟ - - - Save changes? - حفظ التغييرات؟ - - - "%1" was modified. -Save changes? - "%1" مُعدل. -هل تريد حفظ التغييرات؟ - - - Writing the database failed. - فشل كتابة قاعدة البيانات. - - - Passwords - كلمه السر - - - Save database as - حفظ قاعدة البيانات باسم - Export database to CSV file تصدير قاعدة البيانات إلى ملف CSV @@ -1032,83 +1403,59 @@ Save changes? تعذر كتابة ملف CSV. - New database - قاعدة بيانات جديدة + Database creation error + - locked - مقفل + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - Lock database - قفل قاعدة بيانات + The database file does not exist or is not accessible. + - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - لا يمكن إقفال قاعدة البيانات ريثما تقوم بتغييرها. -اضغط على إلغاء لكي تقوم بإنهاء التغييرات أو إلغائها. + Select CSV file + - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - قاعدة البيانات هذه قد تم تعديلها. -هل تريد حفظ قاعدة البيانات قبل قفلها؟ -وإلا فإنك ستخسر التغييرات التي قمت بها. + New Database + - Disable safe saves? - هل تريد تعطيل الحفظ الآمن؟ + %1 [New Database] + Database tab name modifier + - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC قد فشل في حفظ قاعدة البيانات عدة مرات. هذا غالبا ما يحدث بسبب خدمات مزامنة الملف حيث تقوم بمنع الكتابة على الملف. -أتريد إلغاء خيار الحفظ الامن ثم المحاولة مرة أخرى؟ + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + DatabaseWidget Searching... - البحث... - - - Change master key - تغيير كلمة المرور الرئيسية - - - Delete entry? - حذف المدخل؟ + يبْحَث... Do you really want to delete the entry "%1" for good? - - - - Delete entries? - حذف المدخلات؟ - - - Do you really want to delete %1 entries for good? - - - - Move entry to recycle bin? - نقل المدخل إلى سلة المحذوفات؟ + هل تريد حقًا حذف الإدخال "%1" بشكل دائم؟ Do you really want to move entry "%1" to the recycle bin? هل تريد حقًا نقل الإدخال "%1" إلى سلة المهملات؟ - - Move entries to recycle bin? - نقل المدخلات إلى سلة المحذوفات؟ - Do you really want to move %n entry(s) to the recycle bin? - + هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟هل تريد حقًا نقل %n مُدخل إلى سلة المهملات؟ Execute command? @@ -1116,27 +1463,19 @@ Disable safe saves and try again? Do you really want to execute the following command?<br><br>%1<br> - + هل تريد حقًا تنفيذ الأمر التالي؟<br><br>%1<br> Remember my choice - تذكر إختياري - - - Delete group? - حذف المجموعة؟ + تذكر ما اخترته Do you really want to delete the group "%1" for good? - - - - Unable to calculate master key - تعذر حساب المفتاح الرئيسي + هل تريد حقًا حذف المجموعة "%1" بشكل دائم؟ No current database. - لا يوجد قاعدة بيانات حالية + لا يوجد قاعدة بيانات حالية. No source database, nothing to do. @@ -1165,11 +1504,8 @@ Disable safe saves and try again? The database file has changed and you have unsaved changes. Do you want to merge your changes? - - - - Could not open the new database file while attempting to autoreload this database. - + تم تغيير ملف قاعدة البيانات ولديك تغييرات لم يتم حفظها. +هل تريد دمج التغييرات؟ Empty recycle bin? @@ -1179,95 +1515,115 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? هل أنت متأكد من حذف كل شيء من سلة المهملات نهائيًا؟ - - - DetailsWidget + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + - Generate TOTP Token + File opened in read only mode. + الملف تم فتحه بوضع القراءة فقط. + + + Lock Database? - Close - إغلاق + You are editing an entry. Discard changes and lock anyway? + - General - العام + "%1" was modified. +Save changes? + "%1" مُعدل. +هل تريد حفظ التغييرات؟ - Password + Database was modified. +Save changes? + + + + Save changes? + حفظ التغييرات؟ + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + هل تريد تعطيل الحفظ الآمن؟ + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC قد فشل في حفظ قاعدة البيانات عدة مرات. هذا غالبا ما يحدث بسبب خدمات مزامنة الملف حيث تقوم بمنع الكتابة على الملف. +أتريد إلغاء خيار الحفظ الامن ثم المحاولة مرة أخرى؟ + + + Writing the database failed. +%1 + + + + Passwords كلمه السر - URL - رابط + Save database as + حفظ قاعدة البيانات باسم - Expiration + KeePass 2 Database + قاعدة بيانات KeePass 2 + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group - Username - اسم المستخدم - - - Autotype + Move group to recycle bin? - Searching - جاري البحث + Do you really want to move the group "%1" to the recycle bin? + - Attributes - الخصائص + Successfully merged the database files. + - Attachments - المرفقات + Database was not modified by merge operation. + - Notes - ملاحظات - - - Window - النافذة - - - Sequence - التسلسل - - - Search - بحث - - - Clear - مسح - - - Never - أبدًا - - - [PROTECTED] - [محمي] - - - Disabled - مُعطل - - - Enabled - مُفعل + Shared group... + EditEntryWidget Entry - دخول + مُدخلة Advanced @@ -1275,11 +1631,11 @@ Do you want to merge your changes? Icon - رمز + أيقونة Auto-Type - المكمل التلقائي + الطباعة التلقائية Properties @@ -1299,7 +1655,7 @@ Do you want to merge your changes? (encrypted) - (مشفر) + (مُعمّى) Select private key @@ -1333,48 +1689,52 @@ Do you want to merge your changes? New attribute خاصية جديدة - - Confirm Remove - تأكيد الحذف - Are you sure you want to remove this attribute? هل أنت متاكد من إزالة هذه الخاصية؟ - - [PROTECTED] - [محمي] - - - Press reveal to view or edit - - Tomorrow غدا %n week(s) - + %n أسبوعأسبوعأسبوعين%n أسابيع%n أسبوع%n أسابيع %n month(s) - - - - 1 year - سنة 1 + %n شهرشهرشهرين%n شهور%n شهور%n شهور Apply generated password? - + تطبيق كلمة المرور المولدة؟ Do you want to apply the generated password to this entry? - + هل تريد تطبيق كلمة المرور المولدة لهذا المُدخل؟ Entry updated successfully. + حُدث المُدخل بنجاح. + + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal @@ -1402,7 +1762,7 @@ Do you want to merge your changes? Reveal - + إستكشاف Attachments @@ -1410,11 +1770,11 @@ Do you want to merge your changes? Foreground Color: - + لون المقدمة: Background Color: - + لون الخلفية: @@ -1433,7 +1793,7 @@ Do you want to merge your changes? Window Associations - + مصادقات النافذة + @@ -1449,7 +1809,7 @@ Do you want to merge your changes? Use a specific sequence for this association: - + إستخدم تسلسل محدد لهذا الإرتباط: @@ -1495,15 +1855,15 @@ Do you want to merge your changes? Presets - + المسبقة Toggle the checkbox to reveal the notes section. - + إختر مربع الإختيار لإستكشاف قسم الملاحظات. Username: - اسم المستخدم + اسم المستخدم: Expires @@ -1526,7 +1886,7 @@ Do you want to merge your changes? Fingerprint - بصمة + البصمة Remove key from agent when database is closed/locked @@ -1546,7 +1906,7 @@ Do you want to merge your changes? Decrypt - فك تشفير + فك التعمية n/a @@ -1594,7 +1954,7 @@ Do you want to merge your changes? Icon - رمز + أيقونة Properties @@ -1614,10 +1974,101 @@ Do you want to merge your changes? Disable - قم ب تعطيل + تعطيل Inherit from parent group (%1) + ورث من المجموعة الرئيسية (%1) + + + + EditGroupWidgetKeeShare + + Form + النموذج + + + Type: + + + + Path: + + + + ... + + + + Password: + كلمه السر: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + مسح + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. @@ -1641,7 +2092,7 @@ Do you want to merge your changes? Auto-Type - المكمل التلقائي + الطباعة التلقائية &Use default Auto-Type sequence of parent group @@ -1660,15 +2111,15 @@ Do you want to merge your changes? Use custo&m icon - إستخدم الرمز المخصص + استخدم أيقونة مخصصة Add custom icon - إضافة رمز مخصص + أضف أيقونة مخصصة Delete custom icon - حذف الرمز المخصص + احذف أيقونة مخصصة Download favicon @@ -1678,10 +2129,6 @@ Do you want to merge your changes? Unable to fetch favicon. تعذر جلب رمز المفضلة. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - - Images الصور @@ -1690,14 +2137,6 @@ Do you want to merge your changes? All files كل الملفات - - Select Image - اختر صورة - - - Can't read icon - لا يمكن قراءة الرمز - Custom icon already exists الرمز المخصص موجود بالفعل @@ -1707,8 +2146,36 @@ Do you want to merge your changes? تأكيد الحذف - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - هذا الرمز مستخدم من قبل %1 إدخالات، وسيتم إستبداله بالرمز الإفتراضي. هل أنت متأكد من حذفه؟ + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1727,11 +2194,11 @@ Do you want to merge your changes? Uuid: - Uuid: + المعرف الفريد: Plugin Data - + بيانات الإضافة Remove @@ -1739,28 +2206,28 @@ Do you want to merge your changes? Delete plugin data? - + حذف بيانات الإضافة؟ Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - + هل تريد حقًا حذف بيانات الإضافة المحددة؟ +قد يؤدي إلى حدوث خلل في الإضافات المتأثرة. Key - + المفتاح Value - + القيمة Entry - - Clone - Suffix added to cloned entries - - إستنساخ + %1 - Clone + @@ -1794,7 +2261,7 @@ This may cause the affected plugins to malfunction. Save - حفظ + احفظ Select files @@ -1802,11 +2269,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - تأكيد الحذف + هل أنت متأكد من حذف %n مرفق؟هل أنت متأكد من حذف %n مرفق؟هل أنت متأكد من حذف %n مرفق؟هل أنت متأكد من حذف %n مرفقات؟هل أنت متأكد من حذف %n مرفق؟هل أنت متأكد من حذف %n مرفقات؟ Save attachments @@ -1845,10 +2308,13 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - تعذر فتح الملفات: -%1 + @@ -1882,7 +2348,7 @@ This may cause the affected plugins to malfunction. Ref: Reference abbreviation - + المرجع: Group @@ -1922,16 +2388,116 @@ This may cause the affected plugins to malfunction. Modified - + التعديل Accessed - + الوصول Attachments المرفقات + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + إنشاء رمز TOTP + + + Close + إغلاق + + + General + العام + + + Username + اسم المستخدم + + + Password + كلمه السر + + + Expiration + الإنتهاء + + + URL + رابط + + + Attributes + الخصائص + + + Attachments + المرفقات + + + Notes + ملاحظات + + + Autotype + Auto-Type + + + Window + النافذة + + + Sequence + التسلسل + + + Searching + جاري البحث + + + Search + بحث + + + Clear + مسح + + + Never + أبدًا + + + [PROTECTED] + [محمي] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + مُفعل + + + Disabled + مُعطل + + + Share + + EntryView @@ -1941,11 +2507,11 @@ This may cause the affected plugins to malfunction. Hide Usernames - إخفاء أسماء المستخدم + اخفي أسماء المستخدمين Hide Passwords - إخفاء كلمات المرور + اخفي كلمات السر Fit to window @@ -1970,6 +2536,11 @@ This may cause the affected plugins to malfunction. Recycle Bin سلة المهملات + + [empty] + group has no children + + HostInstaller @@ -1979,62 +2550,7 @@ This may cause the affected plugins to malfunction. Cannot save the native messaging script file. - - - - - HttpPasswordGeneratorWidget - - Length: - الطول: - - - Character Types - أنواع الرموز - - - Upper Case Letters - الحروف الكبيرة - - - A-Z - A-Z - - - Lower Case Letters - أحرف صغيرة - - - a-z - a-z - - - Numbers - أرقام - - - 0-9 - 0-9 - - - Special Characters - رموز مخصصة - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - استبعاد الرموز التي تبدو على حد سواء - - - Ensure that the password contains characters from every group - - - - Extended ASCII - تمديد ASCII + لا يمكن حفظ ملف برنامج المراسلات الأصلية. @@ -2056,18 +2572,38 @@ This may cause the affected plugins to malfunction. Unable to issue challenge-response. - + تعذر إصدار إستجابة التحدي. Wrong key or database file is corrupt. المفتاح أو ملف قاعدة البيانات معطوب. + + missing database headers + رؤوس قاعدة البيانات مفقودة + + + Header doesn't match hash + + + + Invalid header id size + حجم معرف الرأس غير صحيح + + + Invalid header field length + رأس حقل الطول غير صحيح + + + Invalid header data length + طول بيانات الرأس غير صحيح + Kdbx3Writer Unable to issue challenge-response. - + تعذر إصدار إستجابة التحدي. Unable to calculate master key @@ -2086,110 +2622,110 @@ This may cause the affected plugins to malfunction. Invalid header checksum size - + حجم رأس تدقيق المجموع غير صحيح Header SHA256 mismatch - + رأس SHA256 غير متطابق Wrong key or database file is corrupt. (HMAC mismatch) - + المفتاح خاطئ أو ملف قاعدة البيانات تالف. (HMAC غير متطابق) Unknown cipher - + تشفير غير معروف Invalid header id size - + حجم معرف الرأس غير صحيح Invalid header field length - + رأس حقل الطول غير صحيح Invalid header data length - + طول بيانات الرأس غير صحيح Failed to open buffer for KDF parameters in header - + أخفق فتح مخزن بيانات مؤقت لمعطيات KDF في الرأس Unsupported key derivation function (KDF) or invalid parameters - + وظيفة إشتقاق المفاتيح غير مدعومة (KDF) أو المعطيات غير صحيحة Legacy header fields found in KDBX4 file. - + عُثر على حقول رأس قديمة في ملف KDBX4. Invalid inner header id size - + حجم معرف الرأس الداخلي غير صحيح Invalid inner header field length - + رأس حقل الطول الداخلي غير صحيح Invalid inner header binary size - + حجم ثنائي الرأس الداخلي غير صحيح Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - + نسخة خريطة KeePass المتنوعة غير مدعومة. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - + طول ادخال الاسم للخريطة المتنوعة غير صحيح Invalid variant map entry name data Translation: variant map = data structure for storing meta data - + بيانات ادخال الاسم الخريطة المتنوعة غير صحيحة Invalid variant map entry value length Translation: variant map = data structure for storing meta data - + طول قيمة إدخال الخريطة المتنوعة غير صحيح Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - + بيانات قيمة إدخال الخريطة المتنوعة غير صحيحة Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - + طول قيمة إدخال Bool للخريطة المتنوعة غير صحيح Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - + طول قيمة إدخال Int32 للخريطة المتنوعة غير صحيح Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - + طول قيمة إدخال UInt32 للخريطة المتنوعة غير صحيح Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - + طول قيمة إدخال Int64 للخريطة المتنوعة غير صحيح Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - + طول قيمة إدخال UInt64 للخريطة المتنوعة غير صحيح Invalid variant map entry type Translation: variant map = data structure for storing meta data - نوع إدخال الخريطة المتنوعة غير صحيح + إدخال نوع الخريطة المتنوعة غير صحيح Invalid variant map field type size @@ -2215,18 +2751,14 @@ This may cause the affected plugins to malfunction. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - + أخفق تسلسل معطيات KDF للخريطة المتنوعة KdbxReader - - Invalid cipher uuid length - طول تشفير uuid غير صحيح - Unsupported cipher - + تشفير غير مدعوم Invalid compression flags length @@ -2269,12 +2801,27 @@ This may cause the affected plugins to malfunction. You can import it by clicking on Database > 'Import KeePass 1 database...'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. - + الملف المحدد هو قاعدة بيانات KeePass 1 القديمة (.kdb). + +يمكنك إستيراده عن طريق النقر على قاعدة البيانات > 'إستيراد قاعدة بيانات KeePass 1...'. +هذه الطريقة الوحيدة للترحيل. لن تتمكن من فتح قاعدة البيانات المستوردة من القديم في إصدار KeePassXC 0.4. Unsupported KeePass 2 database version. إصدار قاعدة بيانات 2 KeePass غير مدعوم. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2284,7 +2831,7 @@ This is a one-way migration. You won't be able to open the imported databas No root group - + لا يوجد مجموعة رئيسية Missing icon uuid or data @@ -2296,7 +2843,7 @@ This is a one-way migration. You won't be able to open the imported databas Multiple group elements - + عناصر المجموعة المتعددة Null group uuid @@ -2308,7 +2855,7 @@ This is a one-way migration. You won't be able to open the imported databas Invalid EnableAutoType value - + قيمة EnableAutoType غير صحيحة Invalid EnableSearching value @@ -2316,7 +2863,7 @@ This is a one-way migration. You won't be able to open the imported databas No group uuid found - لم يُعثر على uuid المجموعة + لم يُعثر على مُعرف المجموعة الفريد Null DeleteObject uuid @@ -2340,15 +2887,11 @@ This is a one-way migration. You won't be able to open the imported databas No entry uuid found - لم يُعثر على uuid المُدخل + لم يُعثر على مُعرف المُدخل الفريد History element with different uuid - سجل العنصر مع uuid مختلف - - - Unable to decrypt entry string - يتعذر فك تشفير سلسلة الإدخال + أرِخ العنصر مسخدمًا معرف فريد مختلف Duplicate custom attribute found @@ -2392,13 +2935,19 @@ This is a one-way migration. You won't be able to open the imported databas Invalid uuid value - قيمة uuid غير صحيحة + قيمة المُعرف الفريد غير صحيحة Unable to decompress binary Translator meant is a binary data inside an entry تعذر فك ضغط القيمة الثنائية + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2460,7 +3009,7 @@ This is a one-way migration. You won't be able to open the imported databas Root - + الجذر Unable to calculate master key @@ -2472,7 +3021,7 @@ This is a one-way migration. You won't be able to open the imported databas Key transformation failed - فشل تحول المفتاح + تعذر تحويل المفتاح Invalid group field type number @@ -2484,7 +3033,7 @@ This is a one-way migration. You won't be able to open the imported databas Read group field data doesn't match size - + قراءة بيانات الحقل للمجموعة لا تتطابق مع الحجم Incorrect group id field size @@ -2562,55 +3111,142 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type نوع حقل الإدخال غير صحيح - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – مستحسن) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - ملف القفل الحالي المثيل غير صحيح. سيُطلق مثيل جديد. + Disabled share + - The lock file could not be created. Single-instance mode disabled. - تعذر إنشاء ملف القفل. تم تعطيل وضع المثيل الأحادي. + Import from + - Another instance of KeePassXC is already running. - نسخة أخرى من KeePassXC قيد التشغيل. + Export to + - Fatal error while testing the cryptographic functions. - خطأ فادح أثناء اختبار وظائف التشفير. + Synchronize with + - KeePassXC - Error - KeePassXC - خطأ + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + ألغ + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + تصّفح + + + Generate + توليد + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + تنسيق ملف المفتاح القديم + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + ملفات المفتاح + + + All files + كل الملفات + + + Create Key File... + إنشاء ملف مفتاح... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + حدد ملف المفتاح @@ -2623,25 +3259,13 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases &قواعد البيانات الحديثة - - Import - إستيراد - &Help &مساعدة E&ntries - - - - Copy att&ribute to clipboard - نسخ الخاصية إلى الحافظة - - - Time-based one-time password - كلمة مرور لمرة واحدة تعتمد على الوقت + المُدخلات &Groups @@ -2671,30 +3295,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database &إغلاق قاعدة البيانات - - &New database - &إنشاء قاعدة بيانات - - - Merge from KeePassX database - دمج من قاعدة بيانات KeePassX - - - &Add new entry - &إضافة مُدخل جديد - - - &View/Edit entry - &مشاهدة/تعديل مدخل - &Delete entry &حذف مدخل - - &Add new group - &إضافة مجموعة جديدة - &Edit group &تعديل المجموعة @@ -2707,14 +3311,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... حفظ قاعدة البيانات بأسم... - - Change &master key... - تغيير &المفتاح الرئيسي... - - - &Database settings - &إعدادات قاعدة البيانات - Database settings إعدادات قاعدة البيانات @@ -2723,10 +3319,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry &إستنساخ مدخل - - &Find - &بحث - Copy &username نسخ &اسم المستخدم @@ -2735,10 +3327,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard نسخ اسم المستخدم إلى الحافظة - - Cop&y password - نسخ كلمة المرور - Copy password to clipboard نسخ كلمة المرور إلى الحافظة @@ -2751,14 +3339,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator مولد كلمة السر - - &Perform Auto-Type - &تنفيذ الضغط التلقائي - - - &Open URL - &فتح الرابط - &Lock databases &قفل قواعد البيانات @@ -2781,7 +3361,7 @@ This is a one-way migration. You won't be able to open the imported databas &Notes - &ملاحظات + &الملاحظات Copy notes to clipboard @@ -2791,29 +3371,13 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... &تصدير كملف CSV... - - Import KeePass 1 database... - إستيراد قاعدة بيانات KeePass 1... - - - Import CSV file... - إستيراد ملف CSV... - - - Re&pair database... - إصلاح قاعدة البيانات... - - - Show TOTP - - Set up TOTP... - + إعداد TOTP... Copy &TOTP - + نسخ &TOTP E&mpty recycle bin @@ -2825,15 +3389,7 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 - - - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - + خطأ في الوصول لملف التكوين %1 Settings @@ -2841,40 +3397,283 @@ This is a one-way migration. You won't be able to open the imported databas Toggle window - + تبديل النافذة Quit KeePassXC إغلاق KeePassXC - - KeePass 2 Database - قاعدة بيانات KeePass 2 - - - All files - كل الملفات - - - Open database - فتح قاعدة بيانات - - - Save repaired database - حفظ قاعدة البيانات المُصَحَّحة - - - Writing the database failed. - فشل كتابة قاعدة البيانات. - Please touch the button on your YubiKey! - + يرجى لمس الزر المتواجد على YubiKey! WARNING: You are using an unstable build of KeePassXC! There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + تحذير: أنت تستخدم بناء غير مستقر من KeePassXC! +هناك خطر كبير للعطب، حافظ على أخذ نسخة إحتياطية لقاعدة البيانات. +ليس المقصود من هذا الإصدار للإستخدام الأساسي. + + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + الجذر + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: @@ -2882,7 +3681,7 @@ This version is not meant for production use. OpenSSHKey Invalid key file, expecting an OpenSSH key - + ملف المفتاح غير صحيح، متوقع أنه مفتاح OpenSSH PEM boundary mismatch @@ -2890,7 +3689,7 @@ This version is not meant for production use. Base64 decoding failed - + تعذر فك تشفير Base64 Key file way too small. @@ -2970,7 +3769,7 @@ This version is not meant for production use. Unknown KDF: %1 - + KDF غير معروف: %1 Unknown key type: %1 @@ -2978,126 +3777,31 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - الحوار + Enter password: + أدخل كلمة السر: - This is required for accessing your databases from ChromeIPass or PassIFox - هذا مطلوب للوصول إلى قواعد البيانات الخاصة بك من ChromeIPass أو PassIFox - - - Enable KeePassHTTP server - تفعيل خادم KeePassHTTP - - - General - العام - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - عرض إشعار عند طلب بيانات الإعتماد - - - Only returns the best matches for a specific URL instead of all entries for the whole domain. - لا تعرض سوى أفضل التطابقات للرابط المحدد بدلًا من جميع الإدخالات للنطاق بأكمله. - - - &Return only best matching entries - &عرض أفضل إدخالات مطابقة فقط - - - Re&quest to unlock the database if it is locked - طلب إلغاء القفل في حال تم الإقفال - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - يُسترجع الإدخالات مع نفس المخطط (http://, https://, ftp://, ...) فقط. - - - &Match URL schemes - &مطابقة مخططات الروابط - - - Sort matching entries by &username + Confirm password: - Sort &matching entries by title + Password + كلمه السر + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - R&emove all shared encryption keys from active database - إزالة جميع مفاتيح التشفير المشتركة من قاعدة البيانات النشطة - - - Re&move all stored permissions from entries in active database - إزالة كافة الصلاحيات المخزنة من المُدخلات في قاعدة البيانات النشطة - - - Password Generator - مولد كلمة السر - - - Advanced - متقدم - - - Always allow &access to entries - السماح دائمًا &بالوصول للمُدخلات - - - Always allow &updating entries - السماح دائمًا &بتحديث المُدخلات - - - Only the selected database has to be connected with a client. - قاعدة البيانات المحددة هي التي يجب تتصل مع العميل فقط. - - - Searc&h in all opened databases for matching entries + Passwords do not match. - Automatically creating or updating string fields is not supported. - إنشاء او تحديث حقول التسلسل تلقائيًا غير مدعوم. - - - &Return advanced string fields which start with "KPH: " - &جلب حقول التسلسل المتقدمة التي تبدأ ب "KPH: " - - - HTTP Port: - منفذ HTTP: - - - Default port: 19455 - المنفذ الافتراضي: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC سيعمل على هذا المنفذ في 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>تحذير:</b> قد تكون الخيارات التالية خطيرة! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> + Generate master password - - Cannot bind to privileged ports - لا يمكن ربط المنافذ المميزة - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - لا يمكن ربط المنافذ المميزة أقل من 1024! -استخدم المنفذ الإفتراضي 19455. - PasswordGeneratorWidget @@ -3116,7 +3820,7 @@ Using default port 19455. entropy - غير قادر + entropy Password @@ -3132,7 +3836,7 @@ Using default port 19455. Lower Case Letters - الحروف صغيرة + أحرف صغيرة Numbers @@ -3166,18 +3870,10 @@ Using default port 19455. Wordlist: قائمة الكلمات: - - Word Count: - عدد الكلمات: - Word Separator: فاصل الكلمة: - - Generate - توليد - Copy نسخة @@ -3190,10 +3886,6 @@ Using default port 19455. Close إغلاق - - Apply - تطبيق - Entropy: %1 bit Entropy: %1 bit @@ -3222,6 +3914,171 @@ Using default port 19455. Password quality ممتازة + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + متقدم + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + حذف + + + Move + + + + Empty + + + + Remove + إزالة + + + Skip + + + + Disable + تعطيل + + + Merge + + QObject @@ -3241,34 +4098,18 @@ Using default port 19455. Cannot decrypt message لا يمكن فك تشفير الرسالة - - Timeout or cannot connect to KeePassXC - نفذ الوقت أو لا يمكن الإتصال على KeePassXC - Action cancelled or denied أُلغي الإجراء أو رُفض - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - لا يمكن تشفير الرسالة أو لم يتم العثور على المفتاح العام. هل تم تمكين المراسلة الأساسية في KeePassXC؟ - KeePassXC association failed, try again تعذر إرتباط KeePassXC، حاول مرة أخرى - - Key change was not successful - لم يكن تغيير المفتاح ناجحًا - Encryption key is not recognized لم يتم التعرف على مفتاح التشفير - - No saved databases found - لم يتم العثور على قواعد بيانات محفوظة - Incorrect action إجراء غير صحيح @@ -3299,7 +4140,7 @@ Using default port 19455. Key file of the database. - ملف المفتاح لقاعدة البيانات + ملف المفتاح لقاعدة البيانات. path @@ -3315,7 +4156,7 @@ Using default port 19455. URL for the entry. - الرابط للمُدخل + الرابط للمُدخل. URL @@ -3392,11 +4233,7 @@ Using default port 19455. Insert password to unlock %1: - ادخل كلمة المرور لإلغاء القفل %1: - - - Failed to load key file %1 : %2 - تعذر تحميل ملف المفتاح %1 : %2 + ادخل كلمة المرور لإلغاء قفل %1: WARNING: You are using a legacy key file format which may become @@ -3436,7 +4273,7 @@ Available commands: Search term. - + مصطلح البحث. Merge two databases. @@ -3456,7 +4293,7 @@ Available commands: Key file of the database to merge from. - ملف قاعدة البيانات للدمج منه. + ملف المفتاح لقاعدة البيانات للدمج منه. Show an entry's information. @@ -3464,7 +4301,7 @@ Available commands: Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - + أسماء الخصائص المراد عرضها. يمكن تحديد هذا الخيار أكثر من مرة، مع عرض كل خاصية لكل سطر بالترتيب المحدد. إذا لم يتم تحديد خاصية، يتم إعطاء ملخص للخصائص الإفتراضية. attribute @@ -3476,25 +4313,19 @@ Available commands: NULL device - + جهاز غير معروف error reading from device - - - - file empty ! - - ملف فارغ ! - + خطأ القراءة من الجهاز malformed string - + سلسلة غير صحيحة missing closing quote - + إغلاق الإقتباس مفقود Group @@ -3524,21 +4355,17 @@ Available commands: Created أُنشئت - - Legacy Browser Integration - تكامل المتصفح القديم - Browser Integration تكامل المتصفح YubiKey[%1] Challenge Response - Slot %2 - %3 - + YubiKey[%1] إستجابة التحدي - فتحة %2 - %3 Press - + اضغط Passive @@ -3550,48 +4377,459 @@ Available commands: Generate a new random diceware passphrase. - + إنشاء عبارة مرور diceware عشوائية جديدة. Word count for the diceware passphrase. - - - - count - العدد + عدد الكلمات لعبارة مرور diceware. Wordlist for the diceware generator. [Default: EFF English] - + قائمة الكلمات لمولد diceware. +[الإفتراضية: EFF English] Generate a new random password. إنشاء كلمة مرور عشوائية جديدة. - Length of the generated password. - طول كلمة المرور المُنشئة. + Invalid value for password length %1. + - Use lowercase characters in the generated password. - إستخدام الأحرف الصغيرة في كلمة المرور المُنشئة. + Could not create entry with path %1. + - Use uppercase characters in the generated password. - إستخدام الأحرف الكبيرة في كلمة المرور المُنشئة. + Enter password for new entry: + - Use numbers in the generated password. - إستخدام الأرقام في كلمة المرور المُنشئة. + Writing the database failed %1. + - Use special characters in the generated password. - إستخدام رموز مخصصة في كلمة المرور المُنشئة. + Successfully added entry %1. + - Use extended ASCII in the generated password. - إستخدام ASCII الموسع في كلمة المرور التي المُنشئة. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + العدد + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – مستحسن) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + حذف مُدخل من قاعدة البيانات. + + + Path of the entry to remove. + مسار المُدخل التي ستحذف. + + + Existing single-instance lock file is invalid. Launching new instance. + ملف القفل الحالي المثيل غير صحيح. سيُطلق مثيل جديد. + + + The lock file could not be created. Single-instance mode disabled. + تعذر إنشاء ملف القفل. وضع المثيل الأحادي مُعطل. + + + KeePassXC - cross-platform password manager + KeePassXC - مدير كلمات المرور لعدة أنظمة + + + filenames of the password databases to open (*.kdbx) + أسماء ملفات قواعد بيانات كلمات المرور للفتح (*.kdbx) + + + path to a custom config file + مسار ملف الاعدادات المخصص + + + key file of the database + ملف مفتاح قاعدة البيانات + + + read password of the database from stdin + قراءة كلمة سر قاعدة البيانات من الدخل القياسي "stdin" + + + Parent window handle + زر النافذة الأم + + + Another instance of KeePassXC is already running. + نسخة أخرى من KeePassXC قيد التشغيل. + + + Fatal error while testing the cryptographic functions. + خطأ فادح أثناء اختبار وظائف التشفير. + + + KeePassXC - Error + KeePassXC - خطأ + + + Database password: + + + + Cannot create new group + @@ -3602,7 +4840,7 @@ Available commands: Error writing to underlying device: - + حدث خطأ أثناء الكتابة إلى الجهاز الأساسي: Error opening underlying device: @@ -3614,26 +4852,112 @@ Available commands: Internal zlib error when decompressing: - + خطأ zlib داخلي عند فك الضغط: QtIOCompressor::open The gzip format not supported in this version of zlib. - تنسيق gzip غير مدعوم في ه + تنسيق gzip غير مدعوم في هذا الإصدار من zlib. Internal zlib error: + خطأ zlib داخلي: + + + + SSHAgent + + Agent connection failed. + + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples SearchWidget - - Search... - البحث... - Search بحث @@ -3642,316 +4966,335 @@ Available commands: Clear مسح - - Case Sensitive - حالة الحساسية - Limit search to selected group + حدد البحث في المجموعة المحددة + + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive - Service + SettingsWidgetKeeShare - KeePassXC: New key association request + Active - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Allow export - KeePassXC: Overwrite existing key? - KeePassXC: الكتابة على المفتاح الحالي؟ + Allow import + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - مفتاح التشفير المشترك مع إسم "%1" موجود بالفعل. -هل تريد الكتابة عليه؟ + Own certificate + - KeePassXC: Update Entry - KeePassXC: تحديث المُدخل + Fingerprint: + - Do you want to update the information in %1 - %2? - هل تريد تحديث المعلومات في %1 - %2؟ + Certificate: + - KeePassXC: Database locked! - KeePassXC: قاعدة البيانات أقفلت! + Signer + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - قاعدة البيانات هذه قد أقفلت! -يرجى إلغاء قفل قاعدة البيانات المحددة أو اختيار واحدة أخرى تكون مفتوحة. + Key: + المفتاح: - KeePassXC: Removed keys from database - KeePassXC: حُذِفت المفاتيح من قاعدة البيانات + Generate + توليد + + + Import + إستيراد + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + إزالة + + + Path + + + + Status + + + + Fingerprint + البصمة + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + كل الملفات + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + أبدًا + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + كلمة مرور موقوته + + + 000000 + 000000 + + + Copy + نسخ - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) + + + TotpExportSettingsDialog - KeePassXC: No keys found - KeePassXC: لم يتم العثور على أية مفاتيح + Copy + نسخ - No shared encryption-keys found in KeePassHttp Settings. - لم يُعثر على مفاتيح التشفير المشتركة في إعدادات KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: الإعدادات غير متاحة! - - - The active database does not contain an entry of KeePassHttp Settings. - لا تحتوي قاعدة البيانات النشطة على إدخال لإعدادات KeePassHttp. - - - Removing stored permissions... - إزالة الصلاحيات المخزنة... - - - Abort - إجهاض - - - KeePassXC: Removed permissions - KeePassXC: حُذفت الصلاحيات - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - The active database does not contain an entry with permissions. - لا تحتوي قاعدة البيانات النشطة على إدخال مع صلاحيات. - - - - SettingsWidget - - Application Settings - إعدادات التطبيق + There was an error creating the QR code. + - General - العام - - - Security - الأمن - - - Access error for config file %1 + Closing in %1 seconds. - SettingsWidgetGeneral - - Basic Settings - الإعدادات الأساسية - - - Start only a single instance of KeePassXC - شغل تطبيق واحد فقط من KeePassXC - - - Remember last databases - تذكر قواعد البيانات الأخيرة - - - Remember last key files and security dongles - تذكر الملفات الرئيسية الأخيرة و قواعد الأمن - - - Load previous databases on startup - إستعادة قواعد البيانات السابقة عند بدء التشغيل - - - Automatically save on exit - الحفظ تلقائيًا عند الإغلاق - - - Automatically save after every change - - - - Automatically reload the database when modified externally - إعادة تحميل قاعدة البيانات تلقائيا عند تعديلها خارجيًا - - - Minimize when copying to clipboard - تصغير عند النسخ إلى الحافظة - - - Minimize window at application startup - تصغير النافذة عند بدء تشغيل التطبيق - - - Use group icon on entry creation - استخدم رمز المجموعة عند إنشاء الإدخال - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - عدم وضع علامة على قاعدة البيانات المعدلة للتغييرات غير المتعلقة بالبيانات (مثال، توسيع المجموعات) - - - Hide the Details view - - - - Show a system tray icon - إظهار علامة تبويب - - - Hide window to system tray when minimized - إخفاء النافذة إلى شريط المهام عند تصغيرها - - - Hide window to system tray instead of app exit - إخفاء النافذة إلى شريط المهام بدلًا من إغلاق التطبيق - - - Dark system tray icon - - - - Language - اللغة - - - Auto-Type - المكمل التلقائي - - - Use entry title to match windows for global Auto-Type - استخدم عنوان الإدخال لمطابقة النوافذ للطباعة التلقائية بشكل عام - - - Use entry URL to match windows for global Auto-Type - استخدم رابط الإدخال لمطابقة النوافذ للطباعة التلقائية بشكل عام - - - Always ask before performing Auto-Type - اسأل دائما قبل تنفيذ الطباعة التلقائية - - - Global Auto-Type shortcut - المفتاح العام للطباعة التلقائية - - - Auto-Type delay - زمن التأخير للطباعة التلقائية - - - ms - Milliseconds - م.ثانية - - - Startup - بدأ التشغيل - - - File Management - إدارة الملفات - - - Safely save database files (may be incompatible with Dropbox, etc) - حفظ ملفات قواعد البيانات بأمان (قد يكون غير متوافق مع Dropbox، إلخ) - - - Backup database file before saving - إحتفظ بنسخة من ملف قاعدة البيانات قبل الحفظ - - - Entry Management - - - - General - العام - - - - SettingsWidgetSecurity - - Timeouts - مهلة نفاد الوقت - - - Clear clipboard after - امسح الذاكرة بعد - - - sec - Seconds - ثانية - - - Lock databases after inactivity of - أغلق قواعد البيانات بعد حالات عدم النشاط ل - - - Convenience - - - - Lock databases when session is locked or lid is closed - اقفل قواعد البيانات عندما تنقفل الجلسة أو يتم إغلاق اللابتوب - - - Lock databases after minimizing the window - قفل قواعد البيانات عند تصغير النافذة - - - Don't require password repeat when it is visible - - - - Show passwords in cleartext by default - إظهار كلمة المرور كنص إفتراضيًا - - - Hide passwords in the preview panel - إخفاء كلمات المرور في نافذة المعاينة - - - Hide entry notes by default - إخفاء مُدخل الملاحظات إفتراضيًا - - - Privacy - الخصوصية - - - Use Google as fallback for downloading website icons - - - - Re-lock previously locked database after performing Auto-Type - أعد قفل قاعدة البيانات التي تم تأمينها سابقًا بعد تنفيذ الطباعة التلقائية - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP - + إعداد TOTP Key: @@ -3970,59 +5313,84 @@ Please unlock the selected database or choose another one which is unlocked.إستخدم أعدادات مخصصة - Note: Change these settings only if you know what you are doing. - ملاحظة: لاتغير هذه الإعدادات إلا إذا كنت تعلم ماذا تفعل. + Custom Settings + Time step: الخطوة الزمنية: - 8 digits - 8 أرقام - - - 6 digits - 6 أرقام + sec + Seconds + ثانية Code size: حجم الكود: - sec - Seconds - ثانية + 6 digits + 6 أرقام + + + 7 digits + + + + 8 digits + 8 أرقام - TotpDialog + UpdateCheckDialog - Timed Password - كلمة مرور موقوته + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - نسخة + Close + إغلاق - Expires in - وتنتهي في + Update Error! + - seconds - ثواني + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - إلغاء قفل قاعدة البيانات + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4033,7 +5401,7 @@ Please unlock the selected database or choose another one which is unlocked. Create new database - إنشاء قاعدة بيانات جديدة + أنشىء قاعدة بيانات جديدة Open existing database @@ -4049,7 +5417,7 @@ Please unlock the selected database or choose another one which is unlocked. Recent databases - قواعد البيانات الحديثة + المفتوحة مؤخرًا Welcome to KeePassXC %1 @@ -4057,42 +5425,26 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - حذف مُدخل من قاعدة البيانات. + Refresh + تحديث - Path of the database. - مسار قاعدة البيانات. + YubiKey Challenge-Response + - Path of the entry to remove. - مسار المُدخل للحذف. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC - مدير كلمات المرور لعدة أنظمة + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - أسماء ملفات قواعد بيانات كلمات المرور للفتح (*.kdbx) - - - path to a custom config file - مسار ملف التكوين المخصص - - - key file of the database - ملف المفتاح لقاعدة البيانات - - - read password of the database from stdin - قراءة كلمة مرور قاعدة البيانات من stdin - - - Parent window handle - زر النافذة الأم + No YubiKey inserted. + \ No newline at end of file diff --git a/share/translations/keepassx_bn.ts b/share/translations/keepassx_bn.ts index 1996cb58d..2aa9200a4 100644 --- a/share/translations/keepassx_bn.ts +++ b/share/translations/keepassx_bn.ts @@ -15,11 +15,11 @@ KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - GNU General Public License (GPL) সংস্করণ ২ বা (আপনার ইচ্ছানুসারে) সংস্করণ ৩ এর অধীনে KeePassXC বিনামূল্যে বিতরন করা হয়। + GNU General Public License (GPL) সংস্করণ 2 বা (আপনার ইচ্ছানুসারে) সংস্করণ 3 এর অধীনে KeePassXC বিনামূল্যে বিতরন করা হয়। Contributors - অবদানকারী + অবদানকারীগণ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> @@ -27,22 +27,16 @@ Debug Info - ডিবাগ তথ্য + ডিবাগের তথ্য Include the following information whenever you report a bug: - যখন আপনি একটি বাগ রিপোর্ট করুন নিচের তথ্যগুলো অন্তর্ভুক্ত করুন: + যখন আপনি একটি বাগ রিপোর্ট করবেন, নিচের তথ্যগুলো অন্তর্ভুক্ত করুন: Copy to clipboard ক্লিপবোর্ডে কপি করুন - - Version %1 - - সংস্করণ %1 - - Revision: %1 পরিমার্জনা %1 @@ -76,35 +70,48 @@ Kernel: %3 %4 KeePassXC টিম থেকে বিশেষ ধন্যবাদ debfx-কে মূল KeePassX তৈরি করার জন্য । - Build Type: %1 - - বিল্ড প্রকার: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP অ্যাক্সেস নিশ্চিত করুন + Version %1 + - Remember this decision - এই সিদ্ধান্ত মনে রাখুন + Build Type: %1 + - Allow - অনুমতি দিন + Auto-Type + অটো-টাইপ - Deny - নাকচ করুন + Browser Integration + - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 নিম্নলিখিত আইটেম (গুলি) এর জন্য পাসওয়ার্ড অ্যাক্সেসের অনুরোধ জানিয়েছে -আপনি প্রবেশাধিকার অনুমতি দিতে চান তা নির্বাচন করুন। + SSH Agent + SSH এজেন্ট + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) + @@ -113,6 +120,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) SSH এজেন্ট সক্ষম করুন (পুনর্সূচনা প্রয়োজন) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + + + + General + সাধারন + + + Security + + + + Access error for config file %1 + + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + + + + Startup + সূচনা + + + Start only a single instance of KeePassXC + + + + Remember last databases + + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + ফাইল ব্যবস্থাপনা + + + Safely save database files (may be incompatible with Dropbox, etc) + নিরাপদে ডাটাবেস সংরক্ষণ করুন (ড্রডবক্স, এবং অন্যান্যর সাথে অসংগত হতে পারে) + + + Backup database file before saving + সংরক্ষণ করার আগে ডাটাবেস ব্যাকআপ করুন + + + Automatically save after every change + + + + Automatically save on exit + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + এন্ট্রি ব্যবস্থাপনা + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + + + + Hide the entry preview panel + + + + General + সাধারন + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + + + + Auto-Type + অটো-টাইপ + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + এমএস + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + সময় শেষ + + + Clear clipboard after + ক্লিপবোর্ড পরিস্কার হবে + + + sec + Seconds + সে. + + + Lock databases after inactivity of + অব্যবহৃত থাকলে ডাটাবেস লক হবে + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + সাচ্ছন্দ্য + + + Lock databases when session is locked or lid is closed + ডাটাবেস লক হবে লিড বন্ধ করলে বা সেশন লক করলে + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + উইন্ডো মিনিমাইজ করলে ডাটাবেস লক হবে + + + Re-lock previously locked database after performing Auto-Type + অটো-টাইপের পরে পূনরায় লক করুন আগের লক করা ডাটাবেস + + + Don't require password repeat when it is visible + আবার যখন দৃশ্যমান হবে তখন পাসওয়ার্ড লাগবেনা + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + ডিফল্টভাবে এন্ট্রি নোট লুকান + + + Privacy + গোপণীয়তা + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -215,6 +493,26 @@ Please select whether you want to allow access. আপনি প্রবেশাধিকার অনুমতি দিতে চান তা নির্বাচন করুন। + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + বাতিল + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -256,7 +554,7 @@ Please select whether you want to allow access. Show a &notification when credentials are requested Credentials mean login data requested via browser extension - প্রমাণপ্রত্রাদি অনুরোধ করা হলে একটি &বিজ্ঞপ্তি দেখান + প্রমাণপ্রত্রাদি অনুরোধ করা হলে একটি বিজ্ঞপ্তি দেখান Re&quest to unlock the database if it is locked @@ -288,14 +586,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension সম্ভাব্য সর্ব্বোত্তম ফলাফলটি ব্যবহারকারী অনুসারে সাজান - - &Disconnect all browsers - সকল ব্রাউজারে সংযোগ বিচ্ছিন্ন করুন - - - Forget all remembered &permissions - মনে রাখা সকল অনুমতি ভুলে যান - Advanced উন্নততর @@ -303,7 +593,7 @@ Please select whether you want to allow access. Never &ask before accessing credentials Credentials mean login data requested via browser extension - তথে প্রবেশ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না + তথ্যে প্রবেশ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না Never ask before &updating credentials @@ -361,14 +651,6 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>সতর্কতা:</b> নিম্নোক্ত বিকল্পগুলি বিপজ্জনক হতে পারে। - - Executable Files (*.exe);;All Files (*.*) - এক্সিকিউটেবল ফাইল (*.exe)।। সব ফাইল (*. *) - - - Executable Files (*) - - Select custom proxy location স্বনির্বাচিত প্রক্সি অবস্থান নির্বাচন করুন @@ -377,12 +659,37 @@ Please select whether you want to allow access. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. আমরা দুঃখিত, কিন্তু এই মুহূর্তে স্নাপ রিলিজ KeePassXC ব্রাউজার সমর্থন করে না। + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + BrowserService KeePassXC: New key association request - KeePassXC: নতুন কী (key) যুক্ত করার আবেদন + KeePassXC: নতুন কী যুক্ত করার আবেদন You have received an association request for the above key. @@ -415,153 +722,44 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? %1 - %2 এর মধ্যে তথ্য হালনাগাদ করতে চান? - - KeePassXC: Database locked! - KeePassXC: ডাটাবেস তালাবদ্ধ ! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - সক্রিয় ডাটাবেজ বন্ধ রয়েছে। -নির্বাচিত ডাটাবেস আনলক করুন বা খোলা আছে এমন অন্য একটি পছন্দ করুন। - - - KeePassXC: Settings not available! - KeePassXC: সেটিংস সমূহ সুপ্রাপ্য নয়। - - - The active database does not contain a settings entry. - - - - KeePassXC: No keys found - KeePassXC: কোন কী পাওয়া যায়নি - - - No shared encryption keys found in KeePassXC Settings. - কোন শেয়ারকৃত এনক্রিপশন কী KeePassXC সেটিংসে পাওয়া যায়নি। - - - KeePassXC: Removed keys from database - KeePassXC: কী ডাটাবেস থেকে অপসারণ করা হয়েছে - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - সঞ্চিত অনুমতিসমূহ অপসারণ করা হচ্ছে... - Abort বাতিল - KeePassXC: Removed permissions - KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি। + KeePassXC: No entry with KeePassHTTP attributes found! + - The active database does not contain an entry with permissions. - সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই। - - - - ChangeMasterKeyWidget - - Password - পাসওয়ার্ড + The active database does not contain an entry with KeePassHTTP attributes. + - Enter password: - পাসওয়ার্ড প্রবেশ করান: + KeePassXC: Legacy browser integration settings detected + - Repeat password: - পুনরায় পাসওয়ার্ড দিন: - - - &Key file - কী ফাইল - - - Browse - ব্রাউজ করুন - - - Create - তৈরি করুন - - - Cha&llenge Response - চ্যালেঞ্জ প্রতিক্রিয়া - - - Refresh - রিফ্রেশ - - - Key files - কী ফাইলগুলো - - - All files - সকল ফাইল - - - Create Key File... - কী ফাইল তৈরি করুন... - - - Unable to create Key File : - কী ফাইল তৈরি করা যায়নি: - - - Select a key file - কী ফাইল নির্বাচন করুন - - - Empty password - পাসাওয়ার্ড খালি আছে - - - Do you really want to use an empty string as password? - আপনি কি খালি স্ট্রিং পাসওয়ার্ড হিসেবে ব্যবহার করতে চান? - - - Different passwords supplied. - ভিন্ন ভিন্ন পাসওয়ার্ড সরবরাহ করা হয়েছে। - - - Failed to set %1 as the Key file: -%2 - কী ফাইল হিসেবে %1 সেট করতে ব্যর্থ হয়েছে: - %2 - - - Legacy key file format - পূর্ববর্তী কী ফাইল ফরম্যাট - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - আপনি পূর্ববর্তী কী ফাইল ফরম্যাট ব্যবহার করেছেন - যা ভবিষ্যতে অসমর্থিত হতে পারে । -নতুন কী (key) ফাইল তৈরি করুন। - - - Changing master key failed: no YubiKey inserted. - মাস্টার কী পরিবর্তন হয়নি: কোন YubiKey বসানো হয়নি। + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + @@ -615,7 +813,7 @@ Please consider generating a new key file. Comments start with - মন্তব্য দিয়ে শুরু + মন্তব্য শুরু হয়েছে First record has field names @@ -641,14 +839,6 @@ Please consider generating a new key file. Not present in CSV file CSV ফাইলে উপস্থিত নয় - - Empty fieldname - খালি ফিল্ডনেম - - - column - - Imported from CSV file CSV ফাইল থেকে আমদানি করা। @@ -657,50 +847,86 @@ Please consider generating a new key file. Original data: অরিজিনাল তথ্য: - - Error(s) detected in CSV file ! - ত্রুটি (গুলি) CSV ফাইলে শনাক্ত করা হয়েছে। - - - more messages skipped] - একাধিক বার্তা এড়িয়ে গেছে। - Error ত্রুটি + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - CSV আমদানি: লেখক ভুল করেছেন। - - - - - CsvImportWizard - - Error - ত্রুটি - - - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম +%1 + CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) + %n column(s)%n কলাম(সমূহ) + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + %n row(s) + + + + + Database + + Root + Root group name + রুট + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + DatabaseOpenWidget @@ -728,14 +954,6 @@ Please consider generating a new key file. Challenge Response: চ্যালেঞ্জের জবাব: - - Unable to open the database. - ডাটাবেজ খুলে দিতে অক্ষম। - - - Can't open key file - কী ফাইলটি খোলা যাচ্ছে না - Legacy key file format পূর্ববর্তী কী ফাইল ফরম্যাট @@ -765,53 +983,248 @@ Please consider generating a new key file. Select key file কী ফাইল নির্বাচন করুন - - - DatabaseRepairWidget - Repair database - ডাটাবেস মেরামত + TouchID for quick unlock + - Error - ত্রুটি + Unable to open the database: +%1 + - Can't open key file - কী ফাইলটি খোলা যাচ্ছে না - - - Unable to open the database. - ডাটাবেজ খুলে দিতে অক্ষম। - - - Database opened fine. Nothing to do. - ডাটাবেজ ভালোভাবে খুলেছে। কিছুই করার নেই। - - - Success - সফল - - - The database has been successfully repaired -You can now save it. - ডাটাবেজ সফলভাবে মেরামত করা হয়েছে -এখন আপনি তা সংরক্ষণ করতে পারবেন। - - - Unable to repair the database. - ডাটাবেস মেরামত করতে পারছে না। + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + পাসওয়ার্ডসমূহ + + + + DatabaseSettingsDialog + + Advanced Settings + + General সাধারন - Encryption - এনক্রিপশন + Security + + + + Master Key + + + + Encryption Settings + + + + Browser Integration + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + সকল ব্রাউজারে সংযোগ বিচ্ছিন্ন করুন + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + অপসারণ করুন + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + কী + + + Value + মান + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: কোন কী পাওয়া যায়নি + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: কী ডাটাবেস থেকে অপসারণ করা হয়েছে + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + সঞ্চিত অনুমতিসমূহ অপসারণ করা হচ্ছে... + + + Abort + বাতিল + + + KeePassXC: Removed permissions + KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি। + + + The active database does not contain an entry with permissions. + সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই। + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + এনক্রিপশন এ্যালগরিদম: + + + AES: 256 Bit (default) + AES: 256 Bit (default) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + কী ডেরিভেশন ফাংশন: + + + Transform rounds: + রাউন্ড রূপান্তর করো: + + + Benchmark 1-second delay + বেঞ্চমার্ক 1 সেকেন্ড দেরি + + + Memory Usage: + মেমোরি ব্যবহার: + + + Parallelism: + সমান্তরালভাবে: + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -865,40 +1278,15 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - এনক্রিপশন এ্যালগরিদম: + + %1 ms + milliseconds + - - AES: 256 Bit (default) - AES: 256 Bit (default) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - কী ডেরিভেশন ফাংশন: - - - Transform rounds: - রাউন্ড রূপান্তর করো: - - - Benchmark 1-second delay - বেঞ্চমার্ক 1 সেকেন্ড দেরি - - - Memory Usage: - মেমোরি ব্যবহার: - - - Parallelism: - সমান্তরালভাবে: + + %1 s + seconds + @@ -949,12 +1337,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - রুট + Sharing + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 ডাটাবেস @@ -967,30 +1426,10 @@ If you keep this number, your database may be too easy to crack! Open database উন্মুক্ত ডাটাবেস - - File not found! - - - - Unable to open the database. - ডাটাবেজ খুলে দিতে অক্ষম। - - - File opened in read only mode. - ফাইলটি শুধুমাত্র পঠন পরিমণ্ডলে খোলা। - - - Open CSV file - CSV ফাইল খুলুন - CSV file CSV ফাইল - - All files (*) - - Merge database ডাটাবেস একত্রীকরণ @@ -1003,38 +1442,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 তথ্যভাণ্ডার - - Close? - বন্ধ করুন? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" সম্পাদনা মোডে আছে। -পরিবর্তনগুলি পরিত্যাগ করা হবে, আর যাই হোক বন্ধ? - - - Save changes? - পরিবর্তন সংরক্ষণ করব? - - - "%1" was modified. -Save changes? - '%1' পরিবর্তিত হয়েছে। -পরিবর্তন সংরক্ষণ করব? - - - Writing the database failed. - এই ডাটাবেসে লেখা ব্যর্থ হয়েছে। - - - Passwords - পাসওয়ার্ডসমূহ - - - Save database as - ডাটাবেজ হিসেবে সংরক্ষণ করুন - Export database to CSV file ডাটাবেস CSV ফাইল হিসেবে রপ্তানি করুন @@ -1044,39 +1451,40 @@ Save changes? CSV ফাইলে লেখা ব্যর্থ হয়েছে। - New database - নতুন ডাটাবেস - - - locked - আটকানো - - - Lock database - তালাবদ্ধ ডাকাবেস - - - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + Database creation error - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - এই ডাটাবেজ সংশোধন করা হয়েছে। -লক করার আগে ডাটাবেস সংরক্ষণ করতে চান? -তা না হলে আপনার করা কোন পরিবর্তন সংরক্ষিত হবেনা। + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - Disable safe saves? - নিরাপদ সংরক্ষণ অক্ষম? + The database file does not exist or is not accessible. + - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC একাধিক বার ডাটাবেস সংরক্ষণ করতে ব্যর্থ হয়েছে। ফাইল সিংক্রোনাইজ সেবা ফাইলটি লক ধরে রাখলে এমনটি হতে পারে। -নিরাপদ সংরক্ষণ অক্ষম করুন এবং আবার চেষ্টা করুন। + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + @@ -1085,41 +1493,17 @@ Disable safe saves and try again? Searching... সন্ধান করা হচ্ছে... - - Change master key - মাস্টার কী পরিবর্তন করুন - - - Delete entry? - এন্ট্রি মুছে ফেলতে চান? - Do you really want to delete the entry "%1" for good? আপনি কি সত্যিই এন্ট্রি "%1" মুছে ফেলতে চান? - - Delete entries? - এন্ট্রিসমূহ মুছে ফেলতে চান? - - - Do you really want to delete %1 entries for good? - আপনি সত্যিই %1 এন্ট্রিসমূহ মুছে ফেলতে চান? - - - Move entry to recycle bin? - এন্ট্রি রিসাইকেল বিনে সরাবে? - Do you really want to move entry "%1" to the recycle bin? আপনি কি "%1" এন্ট্রিটি রিসাইকেল বিনে সরাতে চান? - - Move entries to recycle bin? - রিসাইকেল বিনে এন্ট্রিসমূহ সরাবেন? - Do you really want to move %n entry(s) to the recycle bin? - + আপনি কি সত্যিই %n entry(s) রিসাইকেল বিনে সরাতে চান?আপনি কি সত্যিই %n এন্ট্রি(সমূহ) রিসাইকেল বিনে সরাতে চান? Execute command? @@ -1133,18 +1517,10 @@ Disable safe saves and try again? Remember my choice আমার পছন্দ মনে রাখুন - - Delete group? - দল মুছে ফেলতে চান? - Do you really want to delete the group "%1" for good? আপনি কি গ্রুপ '%1' মুছে ফেলতে চান? - - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম - No current database. কোন বর্তমান ডাকাবেস নেই। @@ -1179,10 +1555,6 @@ Do you want to merge your changes? এই ডাটাবেস ফাইল পরিবর্তন হয়েছে এবং আপনার পরিবর্তন অসংরক্ষিত রয়েছে। আপনি কি আপনার পরিবর্তন একত্রিত করতে চান? - - Could not open the new database file while attempting to autoreload this database. - এই ডাটাবেস টি সয়ংক্রিয়ভাবে পূনরায় খোলার সময় নতুন ডাটাবেস খুলতে ব্যর্থ হয়েছে - Empty recycle bin? রিসাইকেল বিন খালি করুন? @@ -1191,88 +1563,104 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? আপনি কি নিশ্চিত যে ,আপনি রিসাইকেল বিন থেকে সবকিছু স্থায়ীভাবে মুছে ফেলতে চান? - - - DetailsWidget - - Generate TOTP Token - TOTP টোকেন তৈরি করুন + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - বন্ধ করুন + File opened in read only mode. + ফাইলটি শুধুমাত্র পঠন পরিমণ্ডলে খোলা। - General - সাধারন + Lock Database? + - Password - পাসওয়ার্ড + You are editing an entry. Discard changes and lock anyway? + - URL - URL + "%1" was modified. +Save changes? + '%1' পরিবর্তিত হয়েছে। +পরিবর্তন সংরক্ষণ করব? - Expiration - মেয়াদ শেষে + Database was modified. +Save changes? + - Username - ব্যবহারকরীর নাম + Save changes? + পরিবর্তন সংরক্ষণ করব? - Autotype - অটোটাইপ + Could not open the new database file while attempting to autoreload. +Error: %1 + - Searching - সন্ধান করা হচ্ছে + Disable safe saves? + নিরাপদ সংরক্ষণ অক্ষম? - Attributes - বৈশিষ্ট্যাবলী + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC একাধিক বার ডাটাবেস সংরক্ষণ করতে ব্যর্থ হয়েছে। ফাইল সিংক্রোনাইজ সেবা ফাইলটি লক ধরে রাখলে এমনটি হতে পারে। +নিরাপদ সংরক্ষণ অক্ষম করুন এবং আবার চেষ্টা করুন। - Attachments - সংযুক্তিসমূহ + Writing the database failed. +%1 + - Notes - নোটসমূহ + Passwords + পাসওয়ার্ডসমূহ - Window - উইন্ডো + Save database as + ডাটাবেজ হিসেবে সংরক্ষণ করুন - Sequence - অনুক্রম + KeePass 2 Database + KeePass 2 ডাটাবেস - Search - সন্ধান + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Clear - পরিস্কার + Delete group + - Never - কখনো না + Move group to recycle bin? + - [PROTECTED] - [সংরক্ষিত] + Do you really want to move the group "%1" to the recycle bin? + - Disabled - নিষ্ক্রিয় + Successfully merged the database files. + - Enabled - সক্রিয় + Database was not modified by merge operation. + @@ -1327,7 +1715,7 @@ Do you want to merge your changes? Entry history - + এন্ট্রি ইতিহাস Add entry @@ -1345,37 +1733,21 @@ Do you want to merge your changes? New attribute নতুন বৈশিষ্ট্য - - Confirm Remove - মূছে ফেলা নিশ্চিত করুন - Are you sure you want to remove this attribute? আপনি কি নিশ্চিত আপনি এই বৈশিষ্ট্য অপসারণ করতে চান? - - [PROTECTED] - [সংরক্ষিত] - - - Press reveal to view or edit - দেখতে বা সম্পাদনা করতে রিভেল টিপুন - Tomorrow আগামীকাল %n week(s) - + দিনগুলো সপ্তাহগুলো মাসগুলো %n%n সপ্তাহ(s) %n month(s) - - - - 1 year - ১ বছর + %n month(s)%n মাস(s) Apply generated password? @@ -1389,6 +1761,26 @@ Do you want to merge your changes? Entry updated successfully. এন্ট্রি সফলভাবে আপডেট করা হয়েছে। + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1595,7 +1987,7 @@ Do you want to merge your changes? Require user confirmation when this key is used - + এ কী যখন ব্যবহার করা হয় ব্যবহারকারী অনুমোদন প্রয়োজন @@ -1614,7 +2006,7 @@ Do you want to merge your changes? Add group - দলযোগ করুন + দল যোগ করুন Edit group @@ -1633,6 +2025,81 @@ Do you want to merge your changes? মূল দল (%1) এর মত + + EditGroupWidgetKeeShare + + Form + ফরম + + + Type: + + + + Path: + + + + ... + + + + Password: + পাসওয়ার্ড: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + EditGroupWidgetMain @@ -1684,16 +2151,12 @@ Do you want to merge your changes? Download favicon - + Favicon ডাউনলোড করুন Unable to fetch favicon. Favicon আনতে অক্ষম হয়েছে। - - Hint: You can enable Google as a fallback under Tools>Settings>Security - ইঙ্গিত: আপনি গুগল কে ফল-ব্যাক হিসেবে সক্রিয় করতে পারেন টুলস > সেটিংস > নিরাপত্তা - Images ছবি @@ -1702,14 +2165,6 @@ Do you want to merge your changes? All files সকল ফাইল - - Select Image - ছবি নির্বাচন করুন - - - Can't read icon - আইকন দেখা যায়নি - Custom icon already exists স্বনির্বাচিত আইকন ইতোমধ্যে বিদ্যমান @@ -1719,8 +2174,36 @@ Do you want to merge your changes? মুছে ফেলা নিশ্চিত করুন - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - এই আইকন %1 এন্ট্রি দ্বারা ব্যবহৃত হচ্ছে, এবং ডিফল্ট আইকন দ্বারা প্রতিস্থাপিত হবে। আপনি কি নিশ্চিত যে আপনি এটা মুছে ফেলতে চান? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1771,9 +2254,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - -ক্লোন + %1 - Clone + @@ -1815,11 +2297,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - মূছে ফেলা নিশ্চিত করুন + আপনি কি নিশ্চিত যে আপনি %n সংযোজন (গুলো) অপসারণ করতে চান?আপনি কি নিশ্চিত যে আপনি %n সংযুক্তি (গুলো) অপসারণ করতে চান? Save attachments @@ -1858,10 +2336,13 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - ফাইল খোলা যায়নি: -%1 + @@ -1931,7 +2412,7 @@ This may cause the affected plugins to malfunction. Created - সৃষ্টি করেছেন + সৃষ্টি করা হয়েছে Modified @@ -1939,12 +2420,112 @@ This may cause the affected plugins to malfunction. Accessed - + প্রবেশ করা হয়েছে Attachments সংযুক্তিসমূহ + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + TOTP টোকেন তৈরি করুন + + + Close + বন্ধ করুন + + + General + সাধারন + + + Username + ব্যবহারকরীর নাম + + + Password + পাসওয়ার্ড + + + Expiration + মেয়াদ শেষে + + + URL + URL + + + Attributes + বৈশিষ্ট্যাবলী + + + Attachments + সংযুক্তিসমূহ + + + Notes + নোটসমূহ + + + Autotype + অটোটাইপ + + + Window + উইন্ডো + + + Sequence + অনুক্রম + + + Searching + সন্ধান করা হচ্ছে + + + Search + সন্ধান + + + Clear + পরিস্কার + + + Never + কখনো না + + + [PROTECTED] + [সংরক্ষিত] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + সক্রিয় + + + Disabled + নিষ্ক্রিয় + + + Share + + EntryView @@ -1966,7 +2547,7 @@ This may cause the affected plugins to malfunction. Fit to contents - + বিষয়বস্তুর সাথে মিল করুন Reset to defaults @@ -1983,71 +2564,29 @@ This may cause the affected plugins to malfunction. Recycle Bin রিসাইকেল বিন + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + HostInstaller KeePassXC: Cannot save file! - + KeePassXC: ফাইল সংরক্ষণ হয়নি! Cannot save the native messaging script file. - - - - - HttpPasswordGeneratorWidget - - Length: - দৈর্ঘ্য: - - - Character Types - অক্ষরের ধরণ - - - Upper Case Letters - বড় হাতের অক্ষর - - - A-Z - - - - Lower Case Letters - ছোট হাতের অক্ষর - - - a-z - - - - Numbers - নম্বরগুলি - - - 0-9 - 0-9 - - - Special Characters - বিশেষ অক্ষরসমূহ - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - - - - Ensure that the password contains characters from every group - পাসওয়ার্ড টি প্রত্যেক অক্ষর দলের সমন্বয় নিশ্চিত করুন - - - Extended ASCII - বর্ধিত ASCII + স্থানীয় মেসেজিং স্ক্রিপ্ট ফাইল সংরক্ষণ হয়নি। @@ -2075,6 +2614,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। + + missing database headers + ডাটাবেসের হেডারসমূহ নেই + + + Header doesn't match hash + + + + Invalid header id size + হেডারের আইডি আকার সঠিক নয় + + + Invalid header field length + হেডার ক্ষেত্রের দৈর্ঘ্য সঠিক নয় + + + Invalid header data length + হেডার তথ্য দৈর্ঘ্য সঠিক নয় + Kdbx3Writer @@ -2091,7 +2650,7 @@ This may cause the affected plugins to malfunction. Kdbx4Reader missing database headers - ডাটাবেসের শিরোনাম নেই + ডাটাবেসের হেডারসমূহ নেই Unable to calculate master key @@ -2099,7 +2658,7 @@ This may cause the affected plugins to malfunction. Invalid header checksum size - শিরোনামের চেকসাম আকার সঠিক নয় + হেডারের চেকসাম আকার সঠিক নয় Header SHA256 mismatch @@ -2119,7 +2678,7 @@ This may cause the affected plugins to malfunction. Invalid header field length - + হেডার ক্ষেত্রের দৈর্ঘ্য সঠিক নয় Invalid header data length @@ -2233,10 +2792,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher @@ -2288,6 +2843,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2359,10 +2926,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid - - Unable to decrypt entry string - - Duplicate custom attribute found @@ -2412,6 +2975,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2575,56 +3144,127 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type - - - KeePass2 - AES: 256-bit - - - - Twofish: 256-bit - - - - ChaCha20: 256-bit - - - - AES-KDF (KDBX 4) - - - - AES-KDF (KDBX 3.1) - - - - Argon2 (KDBX 4 – recommended) + unable to seek to content position - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. + Disabled share - The lock file could not be created. Single-instance mode disabled. + Import from - Another instance of KeePassXC is already running. + Export to - Fatal error while testing the cryptographic functions. + Synchronize with + + + + + KeyComponentWidget + + Key Component - KeePassXC - Error + Key Component Description + + Cancel + বাতিল + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + ব্রাউজ করুন + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + পূর্ববর্তী কী ফাইল ফরম্যাট + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + কী ফাইলগুলো + + + All files + সকল ফাইল + + + Create Key File... + কী ফাইল তৈরি করুন... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + কী ফাইল নির্বাচন করুন + MainWindow @@ -2636,10 +3276,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases - - Import - - &Help @@ -2648,14 +3284,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries - - Copy att&ribute to clipboard - - - - Time-based one-time password - - &Groups @@ -2684,30 +3312,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database - - &New database - - - - Merge from KeePassX database - - - - &Add new entry - - - - &View/Edit entry - - &Delete entry - - &Add new group - - &Edit group @@ -2720,14 +3328,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... - - Change &master key... - - - - &Database settings - - Database settings @@ -2736,10 +3336,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry - - &Find - - Copy &username @@ -2748,10 +3344,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard - - Cop&y password - - Copy password to clipboard @@ -2764,14 +3356,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator - - &Perform Auto-Type - - - - &Open URL - - &Lock databases @@ -2804,22 +3388,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... - - Import KeePass 1 database... - - - - Import CSV file... - - - - Re&pair database... - - - - Show TOTP - - Set up TOTP... @@ -2840,14 +3408,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - শুধুমাত্র পাঠযোগ্য - Settings সেটিংস @@ -2860,26 +3420,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC KeePassXC বন্ধ করুন - - KeePass 2 Database - KeePass 2 ডাটাবেস - - - All files - সকল ফাইল - - - Open database - উন্মুক্ত ডাটাবেস - - - Save repaired database - মেরামতকৃত ডাটাবেস সংরক্ষন করুন - - - Writing the database failed. - এই ডাটাবেসে লেখা ব্যর্থ হয়েছে। - Please touch the button on your YubiKey! দয়া করে আপনার YubiKey! বাটন স্পর্শ করুন @@ -2892,6 +3432,267 @@ This version is not meant for production use. সমস্যা হবার উচ্চ ঝুঁকি আছে, আপনার ডাটাবেস ব্যাকআপ রাখুন। -এই সংস্করণ নিয়মিত ব্যবহারের জন্য বানানো হয়নি। + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + রুট + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2993,123 +3794,33 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - সংলাপ + Enter password: + পাসওয়ার্ড প্রবেশ করান: - This is required for accessing your databases from ChromeIPass or PassIFox + Confirm password: - Enable KeePassHTTP server + Password + পাসওয়ার্ড + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - General - সাধারন - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + Password cannot be empty. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - একটি নির্দিষ্ট URL জন্য সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে পুরো ডোমেইনের জন্য সকল এন্ট্রি না দেখিয়ে। - - - &Return only best matching entries + Passwords do not match. - Re&quest to unlock the database if it is locked - ডাটাবেস লক থাকলে আনলক করার অনুরোধ জানান - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - - &Match URL schemes - - - - Sort matching entries by &username - - - - Sort &matching entries by title - - - - R&emove all shared encryption keys from active database - - - - Re&move all stored permissions from entries in active database - - - - Password Generator - - - - Advanced - উন্নততর - - - Always allow &access to entries - - - - Always allow &updating entries - - - - Only the selected database has to be connected with a client. - শুধুমাত্র নির্বাচিত ডাটাবেসকে ক্লায়েন্টের সাথে সংযুক্ত করা উচিত। - - - Searc&h in all opened databases for matching entries - - - - Automatically creating or updating string fields is not supported. - স্বয়ংক্রিয়ভাবে তৈরি করা বা স্ট্রিং ফিল্ড আপডেট করা সমর্থন করে না। - - - &Return advanced string fields which start with "KPH: " - "KPH: " দিয়ে শুরু হয়েছে এমন উন্নত স্ট্রিং ফিল্ডগুলি দেখান - - - HTTP Port: - - - - Default port: 19455 - - - - KeePassXC will listen to this port on 127.0.0.1 - - - - <b>Warning:</b> The following options can be dangerous! - <b>সতর্কতা:</b> নিম্নোক্ত বিকল্পগুলি বিপজ্জনক হতে পারে। - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password @@ -3180,18 +3891,10 @@ Using default port 19455. Wordlist: - - Word Count: - - Word Separator: - - Generate - - Copy কপি @@ -3204,10 +3907,6 @@ Using default port 19455. Close বন্ধ করুন - - Apply - প্রয়োগ করুন - Entropy: %1 bit @@ -3236,6 +3935,171 @@ Using default port 19455. Password quality খুব ভাল + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + উন্নততর + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + মুছে ফেলুন + + + Move + + + + Empty + + + + Remove + অপসারণ করুন + + + Skip + + + + Disable + নিষ্ক্রিয় + + + Merge + + QObject @@ -3255,34 +4119,18 @@ Using default port 19455. Cannot decrypt message - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - - Encryption key is not recognized - - No saved databases found - - Incorrect action @@ -3408,10 +4256,6 @@ Using default port 19455. Insert password to unlock %1: - - Failed to load key file %1 : %2 - - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3490,11 +4334,6 @@ Available commands: error reading from device - - file empty ! - - - malformed string @@ -3531,10 +4370,6 @@ Available commands: Created সৃষ্টি করেছেন - - Legacy Browser Integration - - Browser Integration @@ -3563,10 +4398,6 @@ Available commands: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3577,27 +4408,437 @@ Available commands: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + ডাটাবেস থেকে একটি এন্ট্রি মুছে ফেলুন + + + Path of the entry to remove. + যে এন্ট্রি মুছে ফেলতে চান তার পাথ + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + KeePassXC - ক্রস প্ল্যাটফর্ম পাসওয়ার্ড ম্যানেজার + + + filenames of the password databases to open (*.kdbx) + পাসওয়ার্ড দিয়ে যে ডাটাবেস (*.kdbx) খুলতে চান তার ফাইলনেম + + + path to a custom config file + একটি কাস্টম কনফিগ ফাইল পাথ + + + key file of the database + ডাটাবেসের কী ফাইল + + + read password of the database from stdin + stdin থেকে ডাটাবেসের পাসওয়ার্ড পড় + + + Parent window handle + মূল উইন্ডো হ্যান্ডেল + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + + + + Database password: @@ -3636,11 +4877,97 @@ Available commands: - SearchWidget + SSHAgent - Search... + Agent connection failed. + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search সন্ধান @@ -3649,312 +4976,317 @@ Available commands: Clear পরিস্কার - - Case Sensitive - - Limit search to selected group + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: নতুন কী (key) যুক্ত করার আবেদন - - - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Active - KeePassXC: Overwrite existing key? - KeePassXC: বর্তমান কী উপরিলিখন করবেন? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Allow export - KeePassXC: Update Entry - KeePassXC: হালনাগাদ এন্ট্রি + Allow import + - Do you want to update the information in %1 - %2? - %1 - %2 এর মধ্যে তথ্য হালনাগাদ করতে চান? + Own certificate + - KeePassXC: Database locked! - KeePassXC: ডাটাবেস তালাবদ্ধ ! + Fingerprint: + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - সক্রিয় ডাটাবেজ বন্ধ রয়েছে। -নির্বাচিত ডাটাবেস আনলক করুন বা খোলা আছে এমন অন্য একটি পছন্দ করুন। + Certificate: + - KeePassXC: Removed keys from database - KeePassXC: কী ডাটাবেস থেকে অপসারণ করা হয়েছে + Signer + + + + Key: + কী: + + + Generate + + + + Import + + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + অপসারণ করুন + + + Path + + + + Status + + + + Fingerprint + আঙ্গুলের ছাপ + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + সকল ফাইল + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + কখনো না + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + সময়ানুসারে পাসওয়ার্ড + + + 000000 + 000000 + + + Copy + কপি - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) - - KeePassXC: No keys found - KeePassXC: কোন কী পাওয়া যায়নি - - - No shared encryption-keys found in KeePassHttp Settings. - - - - KeePassXC: Settings not available! - KeePassXC: সেটিংস সমূহ সুপ্রাপ্য নয়। - - - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - - - - Abort - বাতিল - - - KeePassXC: Removed permissions - KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি। - - - The active database does not contain an entry with permissions. - সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই। - - SettingsWidget + TotpExportSettingsDialog - Application Settings + Copy + কপি + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - General - সাধারন - - - Security + There was an error creating the QR code. - Access error for config file %1 + Closing in %1 seconds. - SettingsWidgetGeneral - - Basic Settings - - - - Start only a single instance of KeePassXC - - - - Remember last databases - - - - Remember last key files and security dongles - - - - Load previous databases on startup - - - - Automatically save on exit - - - - Automatically save after every change - - - - Automatically reload the database when modified externally - - - - Minimize when copying to clipboard - - - - Minimize window at application startup - - - - Use group icon on entry creation - - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Hide the Details view - - - - Show a system tray icon - - - - Hide window to system tray when minimized - - - - Hide window to system tray instead of app exit - - - - Dark system tray icon - - - - Language - - - - Auto-Type - অটো-টাইপ - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Global Auto-Type shortcut - - - - Auto-Type delay - - - - ms - Milliseconds - এমএস - - - Startup - সূচনা - - - File Management - ফাইল ব্যবস্থাপনা - - - Safely save database files (may be incompatible with Dropbox, etc) - নিরাপদে ডাটাবেস সংরক্ষণ করুন (ড্রডবক্স, এবং অন্যান্যর সাথে অসংগত হতে পারে) - - - Backup database file before saving - সংরক্ষণ করার আগে ডাটাবেস ব্যাকআপ করুন - - - Entry Management - এন্ট্রি ব্যবস্থাপনা - - - General - সাধারন - - - - SettingsWidgetSecurity - - Timeouts - সময় শেষ - - - Clear clipboard after - ক্লিপবোর্ড পরিস্কার হবে - - - sec - Seconds - সে. - - - Lock databases after inactivity of - অব্যবহৃত থাকলে ডাটাবেস লক হবে - - - Convenience - সাচ্ছন্দ্য - - - Lock databases when session is locked or lid is closed - ডাটাবেস লক হবে লিড বন্ধ করলে বা সেশন লক করলে - - - Lock databases after minimizing the window - উইন্ডো মিনিমাইজ করলে ডাটাবেস লক হবে - - - Don't require password repeat when it is visible - আবার যখন দৃশ্যমান হবে তখন পাসওয়ার্ড লাগবেনা - - - Show passwords in cleartext by default - ডিফল্টভাবে পাসওয়ার্ড সাধারন লেখায় দেখান - - - Hide passwords in the preview panel - - - - Hide entry notes by default - ডিফল্টভাবে এন্ট্রি নোট লুকান - - - Privacy - - - - Use Google as fallback for downloading website icons - গুগল ব্যবহার করুন ওয়েবসাইটের আইকন ডাউনলোড করার জন্য - - - Re-lock previously locked database after performing Auto-Type - অটো-টাইপের পরে পূনরায় লক করুন আগের লক করা ডাটাবেস - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP TOTP সেট করুন @@ -3973,69 +5305,94 @@ Please unlock the selected database or choose another one which is unlocked. Use custom settings - + সচারচর সেটিংসমূহ ব্যবহার করুন - Note: Change these settings only if you know what you are doing. - দ্রষ্টব্য: এই সেটিংস পরিবর্তন করুন শুধুমাত্র যদি আপনি জানেন যে আপনি কি করছেন। + Custom Settings + Time step: সময় ধাপ: - 8 digits - 8 (আট) ডিজিট - - - 6 digits - ৬ ডিজিট + sec + Seconds + সে. Code size: কোড সাইজ: - sec - Seconds - সে. + 6 digits + ৬ ডিজিট + + + 7 digits + + + + 8 digits + ৮ ডিজিট - TotpDialog + UpdateCheckDialog - Timed Password - সময়ানুসারে পাসওয়ার্ড + Checking for updates + - 000000 - ০০০০০০ + Checking for updates... + - Copy - কপি + Close + বন্ধ করুন - Expires in - মেয়াদ শেষ + Update Error! + - seconds - সেকেন্ড + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - ডাটাবেস আনলক করুন + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + WelcomeWidget Start storing your passwords securely in a KeePassXC database - + আপনার পাসওয়ার্ডসমূহ নিরাপদে KeePassXC ডাটাবেসে সংরক্ষণ করুন Create new database @@ -4063,42 +5420,26 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - ডাটাবেস থেকে একটি এন্ট্রি মুছে ফেলুন + Refresh + রিফ্রেশ - Path of the database. - ডাটাবেসের পাথ - - - Path of the entry to remove. - যে এন্ট্রি মুছে ফেলতে চান তার পাথ - - - KeePassXC - cross-platform password manager - KeePassXC - ক্রস প্ল্যাটফর্ম পাসওয়ার্ড ম্যানেজার - - - filenames of the password databases to open (*.kdbx) - পাসওয়ার্ড দিয়ে যে ডাটাবেস (*.kdbx) খুলতে চান তার ফাইলনেম - - - path to a custom config file - একটি কাস্টম কনফিগ ফাইল পাথ - - - key file of the database - ডাটাবেসের কী ফাইল - - - read password of the database from stdin + YubiKey Challenge-Response - Parent window handle - মূল উইন্ডো হ্যান্ডেল + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + + + No YubiKey detected, please ensure it's plugged in. + + + + No YubiKey inserted. + \ No newline at end of file diff --git a/share/translations/keepassx_ca.ts b/share/translations/keepassx_ca.ts index 20316f161..b6041417e 100644 --- a/share/translations/keepassx_ca.ts +++ b/share/translations/keepassx_ca.ts @@ -7,7 +7,7 @@ About - Quant + Quant a Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> @@ -23,7 +23,7 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Veure els contribuïdors a GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vegeu les contribucions a GitHub</a> Debug Info @@ -37,36 +37,6 @@ Copy to clipboard Copia al porta-retalls - - Version %1 - - Versió %1 - - - - Revision: %1 - Revisió: %1 - - - Distribution: %1 - Distribució: %1 - - - Libraries: - Llibreries - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operatiu: %1 -Arquitectura de la CPU: %2 -Nucli: %3 %4 - - - Enabled extensions: - Extensions habilitades: - Project Maintainers: Mantenidors del projecte: @@ -75,37 +45,6 @@ Nucli: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Agraïments de l'equip de KeePassXC a debfx per crear el KeePassX original. - - Build Type: %1 - - Tipus de construcció: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Confirmeu l'accés - - - Remember this decision - Recorda aquesta decisió - - - Allow - Permet - - - Deny - Denega - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 ha demanat l'accés a contrasenyes pels següents elements. -Seleccioneu si voleu permetre l'accés. - AgentSettingsWidget @@ -113,6 +52,277 @@ Seleccioneu si voleu permetre l'accés. Enable SSH Agent (requires restart) Habilita l'agent SSH (requereix reiniciar-se) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Configuració de l'aplicació + + + General + General + + + Security + Seguretat + + + Access error for config file %1 + Error d'accés al fitxer de configuració %1 + + + Icon only + Només la icona + + + Text only + Només text + + + Text beside icon + Text enlloc d'icona + + + Text under icon + Text sota la icona + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Configuració bàsica + + + Startup + + + + Start only a single instance of KeePassXC + Obriu només una sola instància del KeePassXC + + + Remember last databases + Recordeu les últimes bases de dades + + + Remember last key files and security dongles + Recordeu els últims arxius clau i motxilles de seguretat + + + Load previous databases on startup + Carregueu les bases de dades anteriors a l'obrir el KeepassXC + + + Minimize window at application startup + Minimitzeu la finestra a l'obrir l'aplicació + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + Deseu després de cada canvi de forma automàtica + + + Automatically save on exit + Deseu en tancar de forma automàtica + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + No marqueu la base de dades com a modificada si no han hagut canvis en les dades (per exemple, a l'expandir grups) + + + Automatically reload the database when modified externally + Torneu a carregar automàticament la base de dades quan siga modificada de forma externa + + + Entry Management + + + + Use group icon on entry creation + Utilitzeu la icona del grup al crear una entrada + + + Minimize when copying to clipboard + Minimitzeu en copiar al porta-retalls + + + Hide the entry preview panel + + + + General + General + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + Mostreu una icona a la safata del sistema + + + Dark system tray icon + + + + Hide window to system tray when minimized + Amagueu la finestra a la safata del sistema quan es minimitze + + + Language + Idioma + + + Auto-Type + Compleció automàtica + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + Pregunteu sempre abans d'efectuar la compleció automàtica + + + Global Auto-Type shortcut + Drecera global de compleció automàtica + + + Auto-Type typing delay + + + + ms + Milliseconds + ms + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Temps excedits + + + Clear clipboard after + Neteja el porta-retalls després + + + sec + Seconds + sec + + + Lock databases after inactivity of + Bloquegeu les bases de dades després d'estar inactives per + + + min + min + + + Forget TouchID after inactivity of + + + + Convenience + Conveniència + + + Lock databases when session is locked or lid is closed + Bloquegeu les bases de dades quan sessió siga bloquejada o es tanque la tapa + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + Bloquegeu les bases de dades després minimitzar la finestra + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + No requerir la repetició de la contrasenya quan aquesta és visible + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + Privacitat + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -130,7 +340,7 @@ Seleccioneu si voleu permetre l'accés. The Syntax of your Auto-Type statement is incorrect! - La sintaxi de l'Auto-Type no és correcte! + This Auto-Type command contains a very long delay. Do you really want to proceed? @@ -215,6 +425,26 @@ Please select whether you want to allow access. Seleccioneu si voleu permetre l'accés. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + Cancel·lar + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -260,11 +490,11 @@ Seleccioneu si voleu permetre l'accés. Re&quest to unlock the database if it is locked - Sol·licita el desbloqueig de la base de dades si està blocada + Sol·licitar el desbloqueig de la base de dades si està blocada Only entries with the same scheme (http://, https://, ...) are returned. - Només es retornen les entrades amb el mateix patró (http://, https://, ...) + Només es retornen les entrades amb el mateix esquema (http://, https://, ...) &Match URL scheme (e.g., https://...) @@ -286,15 +516,7 @@ Seleccioneu si voleu permetre l'accés. Sort matching credentials by &username Credentials mean login data requested via browser extension - Ordena les entrades coincidents per nom d'&usuari - - - &Disconnect all browsers - &Desconnecta tots els navegadors - - - Forget all remembered &permissions - Oblida tots els &permisos recordats + Advanced @@ -361,20 +583,41 @@ Seleccioneu si voleu permetre l'accés. <b>Warning:</b> The following options can be dangerous! <b>Atenció:</b> Canviar les següents opcions és perillós! - - Executable Files (*.exe);;All Files (*.*) - Arxius executables (*.exe);;Tots els arxius (*.*) - - - Executable Files (*) - Arxius executables (*) - Select custom proxy location - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + Tots els fitxers + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 @@ -393,7 +636,7 @@ give it a unique name to identify and accept it. Save and allow access - Desa i autoritza l'accés + Desa i autoritza l'accès KeePassXC: Overwrite existing key? @@ -402,7 +645,7 @@ give it a unique name to identify and accept it. A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - Ja existeix una clau de xifratge compartida amb el nom "%1". + Ja existeix una clau de xifrat compartida amb el nom "%1". Voleu sobreescriure-la? @@ -413,150 +656,54 @@ Voleu sobreescriure-la? Do you want to update the information in %1 - %2? Voleu actualitzar la informació en %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Base de dades bloquejada! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - La base de dades activa està bloquejada! -Per favor, desbloqueu la base de dades seleccionada o escolliu-ne una altra. - - - KeePassXC: Settings not available! - KeePassXC: La configuració no està disponible! - - - The active database does not contain a settings entry. - La base de dades activa no conté cap entrada de configuració. - - - KeePassXC: No keys found - KeePassXC: No s'han trobat claus - - - No shared encryption keys found in KeePassXC Settings. - No s'han trobat claus de xifratge compartides en la configuració de KeePassHttp. - - - KeePassXC: Removed keys from database - KeePassXC: Claus de la base de dades eliminades - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Reeixidament eliminat %n encriptació clau (s) de configuració KeePassXC.Eliminada(es) correctament %n clau(s) de xifratge de la configuració de KeePassXC. - - - Removing stored permissions… - Eliminant permisos emmagatzemats... - Abort Avorta - KeePassXC: Removed permissions - KeePassXC: Permisos eliminats + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: No s'ha trobat cap entrada amb permisos! - - - The active database does not contain an entry with permissions. - La base de dades activa no conté cap entrada amb permisos. - - - - ChangeMasterKeyWidget - - Password - Contrasenya - - - Enter password: - Introduïu la contrasenya: - - - Repeat password: - Repetiu la contrasenya: - - - &Key file - Arxiu clau - - - Browse - Navegar - - - Create - Crea - - - Cha&llenge Response - Pregunta/resposta - - - Refresh - L'actualitza - - - Key files - Fitxers de clau - - - All files - Tots els fitxers - - - Create Key File... - Crea un arxiu clau... - - - Unable to create Key File : - No s'ha pogut de crear el fitxer clau: - - - Select a key file - Seleccioneu un arxiu clau - - - Empty password - Contrasenya buida - - - Do you really want to use an empty string as password? - Realment voleu utilitzar una cadena buida com a contrasenya? - - - Different passwords supplied. - Les contrasenyes no coincideixen. - - - Failed to set %1 as the Key file: -%2 - No ha pogut definir %1 com a arxiu clau: %2 - - - Legacy key file format + KeePassXC: No entry with KeePassHTTP attributes found! - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + The active database does not contain an entry with KeePassHTTP attributes. - Changing master key failed: no YubiKey inserted. - Ha fallat el canvi de clau mestra: cap YubiKey inserida. + KeePassXC: Legacy browser integration settings detected + + + + KeePassXC: Create a new group + + + + A request for creating a new group "%1" has been received. +Do you want to create this group? + + + + + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -575,7 +722,7 @@ Please consider generating a new key file. Copy history - Copia el historial + Còpia el historial @@ -636,14 +783,6 @@ Please consider generating a new key file. Not present in CSV file No apareix al fitxer CSV - - Empty fieldname - Camp de nom buit - - - column - columna - Imported from CSV file Importats d'un fitxer CSV @@ -652,49 +791,89 @@ Please consider generating a new key file. Original data: Dades originals: - - Error(s) detected in CSV file ! - S'ha(n) detectat error(s) al fitxer CSV ! - - - more messages skipped] - més missatges omesos] - Error Error + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - Importació CSV: el fitxer té errors: - - - - - CsvImportWizard - - Error - Error - - - Unable to calculate master key - No es pot calcular la clau mestra +%1 + CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) - + %n columna(es)%n columna(es) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte(s)%n byte(s) + + + %n row(s) + %n fila(es)%n fila(es) + + + + Database + + Root + Root group name + Arrel + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + @@ -723,14 +902,6 @@ Please consider generating a new key file. Challenge Response: Pregunta/resposta - - Unable to open the database. - No es pot obrir la base de dades. - - - Can't open key file - No es pot obrir el fitxer de clau - Legacy key file format @@ -752,59 +923,254 @@ Please consider generating a new key file. Key files - Arxius de clau + Fitxers de clau Select key file Seleccioneu el fitxer de clau - - - DatabaseRepairWidget - Repair database - Repara la base de dades + TouchID for quick unlock + - Error - Error + Unable to open the database: +%1 + - Can't open key file - No es pot obrir el fitxer de clau - - - Unable to open the database. - No es pot obrir la base de dades. - - - Database opened fine. Nothing to do. - Base de dades oberta correctament. - - - Success - Completat amb èxit - - - The database has been successfully repaired -You can now save it. - La base de dades ha estat reparada. - Ara es pot desar. - - - Unable to repair the database. - No es pot reparar la base de dades. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Contrasenyes + + + + DatabaseSettingsDialog + + Advanced Settings + Configuració avançada + General General - Encryption - Xifratge + Security + Seguretat + + + Master Key + Clau Mestra + + + Encryption Settings + Configuració del xifrat + + + Browser Integration + Integració amb el navegador + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + &Desconnecta tots els navegadors + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + Claus emmagatzemades + + + Remove + Suprimiu + + + Delete the selected key? + Voleu eliminar la clau seleccionada? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + Clau + + + Value + Valor + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: No s'han trobat claus + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: Claus de la base de dades eliminades + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Eliminant permisos emmagatzemats... + + + Abort + Avorta + + + KeePassXC: Removed permissions + KeePassXC: Permisos eliminats + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: No s'ha trobat cap entrada amb permisos! + + + The active database does not contain an entry with permissions. + La base de dades activa no conté cap entrada amb permisos. + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algorisme de d’encriptatge: + + + AES: 256 Bit (default) + AES: 256 bits (per defecte) + + + Twofish: 256 Bit + Twofish: 256 bits + + + Key Derivation Function: + + + + Transform rounds: + Transformar rondes: + + + Benchmark 1-second delay + + + + Memory Usage: + Ús de memòria: + + + Parallelism: + + + + Decryption Time: + Temps de desxifrat: + + + ?? s + ?? s + + + Change + + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + KDBX 4.0 (recomanat) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -847,47 +1213,22 @@ If you keep this number, your database may be too easy to crack! MiB Abbreviation for Mebibytes (KDF settings) - + MiB MiB thread(s) Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algorisme de xifratge: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 bits (per defecte) - - - Twofish: 256 Bit - Twofish: 256 bits - - - Key Derivation Function: - - - - Transform rounds: - Transformar rondes: - - - Benchmark 1-second delay - - - - Memory Usage: - - - - Parallelism: - + + %1 s + seconds + %1 s%1 s @@ -938,12 +1279,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Arrel + Sharing + + + Breadcrumb + + + + Type + Tipus + + + Path + Camí + + + Last Signer + Últim signant + + + Certificates + Certificats + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + Error desconegut + + + Failed to change master key + No s'ha pogut canviar la clau mestra + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nom de la base de dades: + + + Description: + Descripció: + + + + DatabaseTabWidget KeePass 2 Database Base de dades de KeePass 2 @@ -956,30 +1368,10 @@ If you keep this number, your database may be too easy to crack! Open database Obre la base de dades - - File not found! - No s'ha trobat el fitxer! - - - Unable to open the database. - No es pot obrir la base de dades. - - - File opened in read only mode. - Arxiu obert en mode de només lectura. - - - Open CSV file - Obre arxiu CSV - CSV file Fitxer CSV - - All files (*) - Tots els arxius (*) - Merge database Fusiona la base de dades @@ -992,38 +1384,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database Base de dades de KeePass 1 - - Close? - Voleu tancar? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" està en mode d'edició. -Voleu descartar els canvis i tancar de totes maneres? - - - Save changes? - Voleu desar els canvis? - - - "%1" was modified. -Save changes? - "%1" ha canviat. -Voleu desar els canvis? - - - Writing the database failed. - Ha fallat l'escriptura en la base de dades. - - - Passwords - Contrasenyes - - - Save database as - Desa la base de dades com a - Export database to CSV file Exporta la base de dades a un fitxer CSV @@ -1033,38 +1393,39 @@ Voleu desar els canvis? Ha fallat l'escriptura al fitxer CSV. - New database - Nova base de dades - - - locked - bloquejat - - - Lock database - Bloqueja la base de dades - - - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - No es pot bloquejar la base de dades actualment en ús. -Per favor, feu clic a cancel·la per a finalitzar els canvis o descarteu-los. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Aquesta base de dades ha estat modificada. -Voleu desar la base de dades abans de tancar-la? -En cas contrari, es perderan els canvis. - - - Disable safe saves? + Database creation error - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + + + + New Database + Base de dades nova + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier @@ -1074,41 +1435,17 @@ Disable safe saves and try again? Searching... Cercant... - - Change master key - Canvia la clau mestra - - - Delete entry? - Suprimir l'entrada? - Do you really want to delete the entry "%1" for good? Realment voleu suprimir l'entrada "%1" per sempre? - - Delete entries? - Suprimir les entrades? - - - Do you really want to delete %1 entries for good? - Realment voleu suprimir %1 entrades per sempre? - - - Move entry to recycle bin? - Moure l'entrada a la Paperera? - Do you really want to move entry "%1" to the recycle bin? Realment voleu moure l'entrada "%1" a la paperera? - - Move entries to recycle bin? - Moure les entrades a la paperera? - Do you really want to move %n entry(s) to the recycle bin? - Realment voleu moure %n entry(s) a la Paperera de reciclatge?Realment voleu moure %n entrada(es) a la paperera? + Execute command? @@ -1122,18 +1459,10 @@ Disable safe saves and try again? Remember my choice Recordar la meva elecció - - Delete group? - Voleu suprimir el grup? - Do you really want to delete the group "%1" for good? Realment voleu suprimir el grup "%1" per sempre? - - Unable to calculate master key - No es pot calcular la clau mestra - No current database. Cap base de dades actual. @@ -1167,10 +1496,6 @@ Disable safe saves and try again? Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - No s'ha pogut obrir el nou fitxer de base de dades al intentar reobrir aquesta base de dades. - Empty recycle bin? Buida la paperera? @@ -1179,88 +1504,107 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? Esteu segur que voleu suprimir permanentment tot el contingut de la paperera? - - - DetailsWidget + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + - Generate TOTP Token + File opened in read only mode. + Arxiu obert en mode de només lectura. + + + Lock Database? - Close - Tanca - - - General - General - - - Password - Contrasenya - - - URL - URL - - - Expiration - Venciment - - - Username - Nom d'usuari - - - Autotype + You are editing an entry. Discard changes and lock anyway? - Searching - S'està cercant + "%1" was modified. +Save changes? + "%1" ha canviat. +Voleu desar els canvis? - Attributes - Atributs - - - Attachments - Fitxers adjunts - - - Notes - Notes - - - Window - Finestra - - - Sequence - Seqüència - - - Search - Cerca - - - Clear - Neteja - - - Never - Mai - - - [PROTECTED] + Database was modified. +Save changes? - Disabled - Inhabilitat + Save changes? + Voleu desar els canvis? - Enabled - Habilitat + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords + Contrasenyes + + + Save database as + Desa la base de dades com a + + + KeePass 2 Database + Base de dades de KeePass 2 + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + + + + Shared group... + @@ -1299,7 +1643,7 @@ Do you want to merge your changes? (encrypted) - (xifrat) + (encriptat) Select private key @@ -1333,37 +1677,21 @@ Do you want to merge your changes? New attribute Nou atribut - - Confirm Remove - Confirma la supressió - Are you sure you want to remove this attribute? Esteu segur que voleu suprimir aquest atribut? - - [PROTECTED] - - - - Press reveal to view or edit - - Tomorrow Demà %n week(s) - %n setmanes%n setmana(es) + %n month(s) - %n mes (OS)%n mes(os) - - - 1 year - 1 any + Apply generated password? @@ -1377,6 +1705,26 @@ Do you want to merge your changes? Entry updated successfully. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + [PROTEGIT] Premeu revelar per veure o editar + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1621,6 +1969,97 @@ Do you want to merge your changes? Hereta de grup pare (%1) + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + Contrasenya: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + Neteja + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1678,10 +2117,6 @@ Do you want to merge your changes? Unable to fetch favicon. No es pot descarregar el favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Consell: Podeu activar Google com a recurs alternatiu a Eines > Configuració > Seguretat - Images Imatges @@ -1690,14 +2125,6 @@ Do you want to merge your changes? All files Tots els fitxers - - Select Image - Seleccioneu la imatge - - - Can't read icon - No es pot llegir la icona - Custom icon already exists Ja existeix una icona personalitzada @@ -1707,8 +2134,36 @@ Do you want to merge your changes? Confirma la supressió - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Aquesta icona s'utilitza en %1 entrades i serà substituïda per la icona per defecte. Esteu segur que voleu suprimir-la? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1748,19 +2203,18 @@ This may cause the affected plugins to malfunction. Key - + Clau Value - + Valor Entry - - Clone - Suffix added to cloned entries - -Clon + %1 - Clone + @@ -1804,10 +2258,6 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - Confirm Remove - Confirma la supressió - Save attachments @@ -1841,10 +2291,14 @@ This may cause the affected plugins to malfunction. - Unable to open files: -%1 + Confirm remove + + Unable to open file(s): +%1 + + EntryAttributesModel @@ -1927,6 +2381,106 @@ This may cause the affected plugins to malfunction. Attachments Fitxers adjunts + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + Tanca + + + General + General + + + Username + Nom d'usuari + + + Password + Contrasenya + + + Expiration + Venciment + + + URL + URL + + + Attributes + Atributs + + + Attachments + Fitxers adjunts + + + Notes + Notes + + + Autotype + + + + Window + Finestra + + + Sequence + Seqüència + + + Searching + S'està cercant + + + Search + Cerca + + + Clear + Neteja + + + Never + Mai + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + Habilitat + + + Disabled + Inhabilitat + + + Share + + EntryView @@ -1965,6 +2519,11 @@ This may cause the affected plugins to malfunction. Recycle Bin Paperera + + [empty] + group has no children + + HostInstaller @@ -1977,61 +2536,6 @@ This may cause the affected plugins to malfunction. - - HttpPasswordGeneratorWidget - - Length: - Longitud: - - - Character Types - Tipus de caràcter - - - Upper Case Letters - Lletra majúscula - - - A-Z - A-Z - - - Lower Case Letters - Lletra minúscula - - - a-z - a-z - - - Numbers - Números - - - 0-9 - 0-9 - - - Special Characters - Caràcters especials - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Excloure caràcters d'aspecte semblant - - - Ensure that the password contains characters from every group - Assegurar-se que la contrasenya conté caràcters de cada grup - - - Extended ASCII - ASCII estès - - KMessageWidget @@ -2057,6 +2561,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Clau incorrecta o fitxer de base de dades corrupte. + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + Kdbx3Writer @@ -2215,10 +2739,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher @@ -2273,6 +2793,18 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2344,10 +2876,6 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa History element with different uuid - - Unable to decrypt entry string - - Duplicate custom attribute found @@ -2397,6 +2925,12 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2421,7 +2955,7 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa Unsupported encryption algorithm. - Algoritme de xifratge no admès. + Algoritme d'encriptació no admès. Unsupported KeePass database version. @@ -2560,55 +3094,142 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa Invalid entry field type - - - KeePass2 - AES: 256-bit - - - - Twofish: 256-bit - - - - ChaCha20: 256-bit - - - - AES-KDF (KDBX 4) - - - - AES-KDF (KDBX 3.1) - - - - Argon2 (KDBX 4 – recommended) + unable to seek to content position - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - El fitxer de bloqueig d'instància única no és vàlid. Execute una instància nova. + Disabled share + - The lock file could not be created. Single-instance mode disabled. - No s'ha pogut crear l'arxiu de bloqueig. Inhabilitat el mode de instància única. + Import from + - Another instance of KeePassXC is already running. - Ja s'està executant una altra instància de KeePassXC. + Export to + - Fatal error while testing the cryptographic functions. - Error mentre es provava les funcions criptogràfiques. + Synchronize with + - KeePassXC - Error - KeePassXC - Error + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + Cancel·lar + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Navega + + + Generate + Genera + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Fitxers de clau + + + All files + Tots els fitxers + + + Create Key File... + Crea un arxiu clau... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Seleccioneu un arxiu clau @@ -2621,10 +3242,6 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa &Recent databases Bases de dades &recents - - Import - Importa - &Help &Ajuda @@ -2633,14 +3250,6 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa E&ntries E&ntrades - - Copy att&ribute to clipboard - Copia l'at&ribut a porta-retalls - - - Time-based one-time password - - &Groups &Grups @@ -2667,32 +3276,12 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa &Close database - Tanca la base de dades - - - &New database - &Nova base de dades - - - Merge from KeePassX database - Combina base de dades KeePassX - - - &Add new entry - &Afegir entrada nova - - - &View/Edit entry - &Mostra/Edita l'entrada + Tanca base de dades &Delete entry &Esborra l'entrada - - &Add new group - &Afegeix un nou grup - &Edit group &Edita el grup @@ -2705,14 +3294,6 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa Sa&ve database as... &Desa la base de dades com a... - - Change &master key... - Canvia la clau &mestra... - - - &Database settings - &Configuració de la base de dades - Database settings Configuració de la base de dades @@ -2721,45 +3302,29 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa &Clone entry &Clona l'entrada - - &Find - &Cercar - Copy &username - Copia el nom d'&usuari + Còpia el nom d'&usuari Copy username to clipboard - Copia el nom d'usuari al porta-retalls - - - Cop&y password - Còpia la contrasen&ya + Còpia el nom d'usuari al porta-retalls Copy password to clipboard - Copia la contrasenya al porta-retalls + Còpia la contrasenya al porta-retalls &Settings - &Configuració + &Conficuració Password Generator Generador de contrasenyes - - &Perform Auto-Type - Realitza compleció automàtica - - - &Open URL - &Obre URL - &Lock databases - &Bloqueja la bases de dades + &bloqueja la bases de dades &Title @@ -2789,22 +3354,6 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa &Export to CSV file... &Exporta a fitxer CSV. - - Import KeePass 1 database... - Importa base de dades KeePass 1... - - - Import CSV file... - Importa fitxer CSV... - - - Re&pair database... - Re&para la base de dades... - - - Show TOTP - Mostra TOTP - Set up TOTP... Configura TOTP... @@ -2825,14 +3374,6 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa Access error for config file %1 Error d'accés al fitxer de configuració %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - Només de lectura - Settings Configuració @@ -2845,26 +3386,6 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa Quit KeePassXC Tanca KeePassXC - - KeePass 2 Database - Base de dades de KeePass 2 - - - All files - Tots els fitxers - - - Open database - Obre la base de dades - - - Save repaired database - Desa base de dades reparada - - - Writing the database failed. - Ha fallat l'escriptura en la base de dades. - Please touch the button on your YubiKey! Per favor, toqueu el botó en el seu YubiKey! @@ -2875,6 +3396,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Arrel + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + Configuració avançada + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Opcions de xifrat + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2976,125 +3758,30 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Diàleg + Enter password: + Introduïu la contrasenya: - This is required for accessing your databases from ChromeIPass or PassIFox - Requerit per a accedir a les seves bases de dades des de ChromeIPass o PassIFox - - - Enable KeePassHTTP server - Habilita el servidor KeePassHTTP - - - General - General - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - M&ostra una notificació quan es demanen credencials - - - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Només retorna les millors coincidències per a una adreça URL específica en lloc de totes les entrades per al domini. - - - &Return only best matching entries - Retorna només les millors coincidències de les entrades - - - Re&quest to unlock the database if it is locked - Sol·licitar el desbloqueig de la base de dades si està blocada - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Només s'han retornat les entrades amb el mateix patró (http://, https://, ftp: / /,...). - - - &Match URL schemes - Torna les coincidències amb patrons URL - - - Sort matching entries by &username - Ordena les entrades coincidents per nom d'&usuari - - - Sort &matching entries by title - Ordena les entrades coincidents per títol - - - R&emove all shared encryption keys from active database - Suprimeix totes les claus de xifratge compartides de la base de dades activa - - - Re&move all stored permissions from entries in active database - Esbo&rra tots els permisos emmagatzemats de les entrades a la base de dades activa - - - Password Generator - Generador de contrasenyes - - - Advanced - Avançat - - - Always allow &access to entries - Permet l'&accés a les entrades sempre - - - Always allow &updating entries - Permet l'act&ualització de les entrades, sempre - - - Only the selected database has to be connected with a client. - Només s'ha de connectar amb un client, la base de dades seleccionada. - - - Searc&h in all opened databases for matching entries - &Cerca en totes les bases de dades obertes, entrades coincidents - - - Automatically creating or updating string fields is not supported. - L'actualització o creació de camps de test no està suportada. - - - &Return advanced string fields which start with "KPH: " - Retorna camps avançats de text que comencen amb "KPH: " - - - HTTP Port: - HTTP Port: - - - Default port: 19455 - Port per defecte: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC escolta a aquest port en 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Atenció:</b> Canviar les següents opcions és perillós! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> + Confirm password: - Cannot bind to privileged ports - No podeu utilitzar ports privilegiats + Password + Contrasenya - Cannot bind to privileged ports below 1024! -Using default port 19455. - No es poden utilitzar ports privilegiats inferiors a 1024! -Utilitza per defecte port 19455. + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Passwords do not match. + + + + Generate master password + @@ -3164,18 +3851,10 @@ Utilitza per defecte port 19455. Wordlist: Llista de paraules: - - Word Count: - Nombre de paraules: - Word Separator: Separador de paraula: - - Generate - Genera - Copy Còpia @@ -3188,10 +3867,6 @@ Utilitza per defecte port 19455. Close Tanca - - Apply - Aplica - Entropy: %1 bit Entropia: %1 bit(s) @@ -3220,6 +3895,171 @@ Utilitza per defecte port 19455. Password quality Excel·lent + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Avançat + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Suprimeix + + + Move + + + + Empty + + + + Remove + Suprimiu + + + Skip + + + + Disable + Inhabilita + + + Merge + + QObject @@ -3239,34 +4079,18 @@ Utilitza per defecte port 19455. Cannot decrypt message - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - - Encryption key is not recognized - - No saved databases found - - Incorrect action @@ -3285,7 +4109,7 @@ Utilitza per defecte port 19455. Unknown error - + Error desconegut Add a new entry to a database. @@ -3392,10 +4216,6 @@ Utilitza per defecte port 19455. Insert password to unlock %1: - - Failed to load key file %1 : %2 - - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3474,12 +4294,6 @@ Available commands: error reading from device error de lectura del dispositiu - - file empty ! - - fitxer buit! - - malformed string cadena mal formada @@ -3516,10 +4330,6 @@ Available commands: Created Creat - - Legacy Browser Integration - - Browser Integration Integració amb el navegador @@ -3548,10 +4358,6 @@ Available commands: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3562,27 +4368,441 @@ Available commands: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + El fitxer de bloqueig d'instància única no és vàlid. Execute una instància nova. + + + The lock file could not be created. Single-instance mode disabled. + No s'ha pogut crear l'arxiu de bloqueig. Inhabilitat el mode de instància única. + + + KeePassXC - cross-platform password manager + KeePassXC - gestor de contrasenyes multi-plataforma + + + filenames of the password databases to open (*.kdbx) + Noms de les bases de dades de contrasenya per a obrir (*.kdbx) + + + path to a custom config file + camí cap a un fitxer personalitzat de configuració + + + key file of the database + Arxiu clau de la base de dades + + + read password of the database from stdin + llegiu la contrasenya de la base de dades des de l'entrada estàndard (stdin) + + + Parent window handle + + + + Another instance of KeePassXC is already running. + Ja s'està executant una altra instància de KeePassXC. + + + Fatal error while testing the cryptographic functions. + Error mentre es provava les funcions criptogràfiques. + + + KeePassXC - Error + KeePassXC - Error + + + Database password: + + + + Cannot create new group @@ -3621,11 +4841,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - Cerca... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Cerca @@ -3634,315 +4940,332 @@ Available commands: Clear Neteja - - Case Sensitive - Distingeix entre majúscules i minúscules - Limit search to selected group Limitar la cerca al grup seleccionat + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Nova petició de associació de clau + Active + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - S'ha rebut una sol·licitud d'associació per a la citada clau. -Voleu permetre l'accés a la base de dades KeePassXC? - Doneu-li un nom únic per a poder identificar-la i seleccione acceptar. + Allow export + - KeePassXC: Overwrite existing key? - KeePassXC: Voleu sobreescriure la clau existent? + Allow import + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Ja existeix una clau de xifrat compartida amb el nom "%1". -Voleu sobreescriure-la? + Own certificate + - KeePassXC: Update Entry - KeePassXC: Actualitza l'entrada + Fingerprint: + - Do you want to update the information in %1 - %2? - Voleu actualitzar la informació en %1 - %2? + Certificate: + - KeePassXC: Database locked! - KeePassXC: Base de dades bloquejada! + Signer + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - La base de dades activa està bloquejada! -Per favor, desbloqueu la base de dades seleccionada o escolliu-ne una altra. + Key: + Clau: - KeePassXC: Removed keys from database - KeePassXC: Claus de la base de dades eliminades + Generate + Genera + + + Import + Importa + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Suprimiu + + + Path + Camí + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Tots els fitxers + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + Mai + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Contrasenya per temps + + + 000000 + 000000 + + + Copy + Còpia - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) - - KeePassXC: No keys found - KeePassXC: No s'han trobat claus - - - No shared encryption-keys found in KeePassHttp Settings. - No s'han trobat claus de xifratge compartides en la configuració de KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: La configuració no està disponible! - - - The active database does not contain an entry of KeePassHttp Settings. - La base de dades activa no conté cap entrada de configuració de KeePassHttp. - - - Removing stored permissions... - Eliminant permisos emmagatzemats... - - - Abort - Avorta - - - KeePassXC: Removed permissions - KeePassXC: Permisos eliminats - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC: No s'ha trobat cap entrada amb permisos! - - - The active database does not contain an entry with permissions. - La base de dades activa no conté cap entrada amb permisos. - - SettingsWidget + TotpExportSettingsDialog - Application Settings - Configuració de l'aplicació + Copy + Còpia - General - General - - - Security - Seguretat - - - Access error for config file %1 - Error d'accés al fitxer de configuració %1 - - - - SettingsWidgetGeneral - - Basic Settings - Configuració bàsica - - - Start only a single instance of KeePassXC - Obriu només una sola instància del KeePassXC - - - Remember last databases - Recordeu les últimes bases de dades - - - Remember last key files and security dongles - Recordeu els últims arxius clau i motxilles de seguretat - - - Load previous databases on startup - Carregueu les bases de dades anteriors a l'obrir el KeepassXC - - - Automatically save on exit - Deseu en tancar de forma automàtica - - - Automatically save after every change - Deseu després de cada canvi de forma automàtica - - - Automatically reload the database when modified externally - Torneu a carregar automàticament la base de dades quan siga modificada de forma externa - - - Minimize when copying to clipboard - Minimitzeu en copiar al porta-retalls - - - Minimize window at application startup - Minimitzeu la finestra a l'obrir l'aplicació - - - Use group icon on entry creation - Utilitzeu la icona del grup al crear una entrada - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - No marqueu la base de dades com a modificada si no han hagut canvis en les dades (per exemple, a l'expandir grups) - - - Hide the Details view + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - Show a system tray icon - Mostreu una icona a la safata del sistema - - - Hide window to system tray when minimized - Amagueu la finestra a la safata del sistema quan es minimitze - - - Hide window to system tray instead of app exit - Amagueu la finestra a la safata del sistema en lloc de tancar KeepassXC - - - Dark system tray icon + There was an error creating the QR code. - Language - Idioma - - - Auto-Type - Compleció automàtica - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - Pregunteu sempre abans d'efectuar la compleció automàtica - - - Global Auto-Type shortcut - Drecera global de compleció automàtica - - - Auto-Type delay - Retard de la compleció automàtica - - - ms - Milliseconds - ms - - - Startup - - - - File Management - - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - - - - Entry Management - - - - General - General - - - - SettingsWidgetSecurity - - Timeouts - Temps excedits - - - Clear clipboard after - Neteja el porta-retalls després - - - sec - Seconds - sec - - - Lock databases after inactivity of - Bloquegeu les bases de dades després d'estar inactives per - - - Convenience - Conveniència - - - Lock databases when session is locked or lid is closed - Bloquegeu les bases de dades quan sessió siga bloquejada o es tanque la tapa - - - Lock databases after minimizing the window - Bloquegeu les bases de dades després minimitzar la finestra - - - Don't require password repeat when it is visible - No requerir la repetició de la contrasenya quan aquesta és visible - - - Show passwords in cleartext by default - Mostreu per defecte les contrasenyes en text sense xifrar - - - Hide passwords in the preview panel - - - - Hide entry notes by default - - - - Privacy - Privacitat - - - Use Google as fallback for downloading website icons - Utilitzeu Google com a alternativa per a descarregar icones de llocs web - - - Re-lock previously locked database after performing Auto-Type + Closing in %1 seconds. - SetupTotpDialog + TotpSetupDialog Setup TOTP Organització TOTP @@ -3964,59 +5287,84 @@ Per favor, desbloqueu la base de dades seleccionada o escolliu-ne una altra.Utilitza la configuració personalitzada - Note: Change these settings only if you know what you are doing. - Nota: Canvieu aquesta configuració només si sabeu què esteu fent. + Custom Settings + Time step: Intervals: - 8 digits - 8 dígits - - - 6 digits - 6 dígits + sec + Seconds + sec Code size: Mida del codi: - sec - Seconds - sec + 6 digits + 6 dígits + + + 7 digits + + + + 8 digits + 8 dígits - TotpDialog + UpdateCheckDialog - Timed Password - Contrasenya per temps + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - Còpia + Close + Tanca - Expires in - Caduca el + Update Error! + - seconds - segons + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - Desbloqueja la base de dades + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4051,41 +5399,25 @@ Per favor, desbloqueu la base de dades seleccionada o escolliu-ne una altra. - main + YubiKeyEditWidget - Remove an entry from the database. + Refresh + Actualitza + + + YubiKey Challenge-Response - Path of the database. - Camí de la base de dades. - - - Path of the entry to remove. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - gestor de contrasenyes multi-plataforma + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - Noms de les bases de dades de contrasenya per a obrir (*.kdbx) - - - path to a custom config file - camí cap a un fitxer personalitzat de configuració - - - key file of the database - Arxiu clau de la base de dades - - - read password of the database from stdin - llegiu la contrasenya de la base de dades des de l'entrada estàndard (stdin) - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_cs.ts b/share/translations/keepassx_cs.ts index 5520774ab..60ea7985a 100644 --- a/share/translations/keepassx_cs.ts +++ b/share/translations/keepassx_cs.ts @@ -37,36 +37,6 @@ Copy to clipboard Zkopírovat do schránky - - Version %1 - - Verze %1 - - - - Revision: %1 - Revize: %1 - - - Distribution: %1 - Distribuce: %1 - - - Libraries: - Knihovny: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operační systém: %1 -Architektura procesoru: %2 -Jádro systému: %3 %4 - - - Enabled extensions: - Zapnutá rozšíření: - Project Maintainers: Správci projektu: @@ -75,37 +45,6 @@ Jádro systému: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Tým KeePassXC děkuje zvláště vývojáři debfx za vytvoření původního KeePassX. - - Build Type: %1 - - Typ sestavení: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - Potvrzení přístupu KeePassXC HTTP - - - Remember this decision - Zapamatovat si toto rozhodnutí - - - Allow - Umožnit - - - Deny - Odepřít - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 si vyžádalo přístup k heslům u následujících položek. -Umožnit přístup? - AgentSettingsWidget @@ -113,6 +52,277 @@ Umožnit přístup? Enable SSH Agent (requires restart) Zapnout SSH agenta (vyžaduje restart) + + Use OpenSSH for Windows instead of Pageant + Použít namísto Pagent raději OpenSSH pro Windows + + + + ApplicationSettingsWidget + + Application Settings + Nastavení aplikace + + + General + Obecné + + + Security + Zabezpečení + + + Access error for config file %1 + Chyba přístupu k souboru s nastaveními %1 + + + Icon only + Pouze ikona + + + Text only + Pouze text + + + Text beside icon + Text vedle ikony + + + Text under icon + Text pod ikonou + + + Follow style + Styl následování + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Základní nastavení + + + Startup + Spouštění + + + Start only a single instance of KeePassXC + Spouštět pouze jedinou instanci KeePassXC + + + Remember last databases + Pamatovat si nedávno otevřené databáze + + + Remember last key files and security dongles + Pamatovat si minule použité soubory s klíči a zabezpečovací klíčenky + + + Load previous databases on startup + Při spouštění aplikace načíst minule otevřené databáze + + + Minimize window at application startup + Spouštět aplikaci s minimalizovaným oknem + + + File Management + Správa souboru + + + Safely save database files (may be incompatible with Dropbox, etc) + Ukládat databázové soubory bezpečně (může být neslučitelné s Dropbox, atd.) + + + Backup database file before saving + Před uložením zazálohovat databázový soubor + + + Automatically save after every change + Po každé změně hned automaticky uložit + + + Automatically save on exit + Před ukončením aplikace automaticky uložit případné změny + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Neoznačovat databázi jako upravenou při změnách, nepostihujících údaje (např. rozkliknutí skupin) + + + Automatically reload the database when modified externally + V případě úpravy zvenčí, automaticky znovu načíst databázi + + + Entry Management + Správa záznamu + + + Use group icon on entry creation + Pro vytvářený záznam použít ikonu skupiny, pod kterou je vytvářen + + + Minimize when copying to clipboard + Po zkopírování údaje do schránky odklidit okno aplikace jeho automatickou minimalizací + + + Hide the entry preview panel + Skrýt panel náhledu položky + + + General + Obecné + + + Hide toolbar (icons) + Skrýt lištu nástrojů (ikony) + + + Minimize instead of app exit + Namísto ukončení aplikaci minimalizovat + + + Show a system tray icon + Zobrazovat ikonu v oznamovací oblasti systémového panelu + + + Dark system tray icon + Tmavá ikona v oznamovací oblasti systémového panelu + + + Hide window to system tray when minimized + Minimalizovat okno aplikace do oznamovací oblasti systémového panelu + + + Language + Jazyk + + + Auto-Type + Automatické vyplňování + + + Use entry title to match windows for global Auto-Type + Použít titulek položky pro hledání shody s okny pro všeobecné automatické vyplňování + + + Use entry URL to match windows for global Auto-Type + Použít URL adresu položky pro hledání shody s okny pro všeobecné automatické vyplňování + + + Always ask before performing Auto-Type + Vždy se zeptat před provedením automatického vyplnění + + + Global Auto-Type shortcut + Klávesová zkratka pro všeobecné automatické vyplňování + + + Auto-Type typing delay + Prodleva automatického vyplnění + + + ms + Milliseconds + ms + + + Auto-Type start delay + Prodleva zahájení automatického vyplňování + + + Check for updates at application startup + Kontrolovat dostupnost aktualizací při spouštění aplikace + + + Include pre-releases when checking for updates + Do vyhledávání aktualizací zahrnovat i ještě nehotové verze + + + Movable toolbar + Přesouvatelná lišta nástrojů + + + Button style + Styl tlačítka + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Časové limity + + + Clear clipboard after + Vymazat obsah schránky po uplynutí + + + sec + Seconds + sek. + + + Lock databases after inactivity of + Uzamknout databázi při nečinnosti delší než + + + min + min + + + Forget TouchID after inactivity of + Zapomenout TouchID po nečinnosti trvající + + + Convenience + Pohodlí + + + Lock databases when session is locked or lid is closed + Zamknout databáze když je zamčeno sezení uživatele v operačním systému nebo je zavřeno víko notebooku + + + Forget TouchID when session is locked or lid is closed + Zapomenout TouchID při uzamčení relace nebo při zavření víka s displejem + + + Lock databases after minimizing the window + Při minimalizaci okna uzamknout databáze + + + Re-lock previously locked database after performing Auto-Type + Po provedení automatického vyplnění opět zamknout dříve uzamčenou databázi. + + + Don't require password repeat when it is visible + Pokud je viditelné, nevyžadovat zopakování zadání hesla + + + Don't hide passwords when editing them + Neskrývat hesla při jejich upravování + + + Don't use placeholder for empty password fields + Nepoužívat pro prázdné kolonky pro heslo zástupnou výplň + + + Hide passwords in the entry preview panel + Skrýt hesla v panelu náhledu položky + + + Hide entry notes by default + Skrývat ve výchozím stavu poznámky k položkám + + + Privacy + Soukromí + + + Use DuckDuckGo as fallback for downloading website icons + Použít DuckDuckGo jako náhradní zdroj pro stahování ikon webů + AutoType @@ -215,6 +425,27 @@ Please select whether you want to allow access. Umožnit přístup? + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Uložit položku + + + Ok + Ok + + + Cancel + Zrušit + + + You have multiple databases open. +Please select the correct database for saving credentials. + Máte otevřeno vícero databází. +Vyberte databázi, do které chcete přihlašovací údaje uložit. + + BrowserOptionDialog @@ -288,14 +519,6 @@ Umožnit přístup? Credentials mean login data requested via browser extension Seřadit odpovídající přihlašovací údaje podle &uživatelského jména - - &Disconnect all browsers - O&dpojit veškeré prohlížeče - - - Forget all remembered &permissions - Zapomenout všechna zapamatovaná o&právnění - Advanced Pokročilé @@ -361,21 +584,42 @@ Umožnit přístup? <b>Warning:</b> The following options can be dangerous! <b>Varování:</b> Následující předvolby mohou být nebezpečné! - - Executable Files (*.exe);;All Files (*.*) - Spustitelné soubor (*.exe);;Všechny soubory (*.*) - - - Executable Files (*) - Spustitelné soubory (*) - Select custom proxy location Vybrat uživatelem určené umístění zprostředkovávající aplikace - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Je nám líto, ale KeePassXC-Browser v tuto chvíli není ve snap vydáních podporován. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Varování</b>, aplikace keepassxc-proxy nebyla nalezena! <br />Zkontrolujte instalační složku KeePassXC nebo v pokročilých možnostech potvrďte uživatelsky určené umístění.<br />Napojení na prohlížeč NEBUDE FUNGOVAT bez proxy aplikace. <br /> Očekávané umístění: + + + Executable Files + Spustitelné soubory + + + All Files + Veškeré soubory + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Neptat se na oprávnění pro HTTP &Basic Auth + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,153 +660,55 @@ Přejete si ho přepsat? Do you want to update the information in %1 - %2? Chcete aktualizovat údaj v %1 – %2? - - KeePassXC: Database locked! - KeePassXC: Databáze uzamčena! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Právě otevřená databáze je uzamčená! -Buď jí odemkněte, nebo vyberte jinou, odemčenou. - - - KeePassXC: Settings not available! - KeePassXC: Nastavení nejsou k dispozici! - - - The active database does not contain a settings entry. - Nyní otevřená databáze neobsahuje položku nastavení. - - - KeePassXC: No keys found - KeePassXC: Nebyly nalezeny žádné klíče - - - No shared encryption keys found in KeePassXC Settings. - V nastavení KeePassXC nebyly nalezeny žádné sdílené šifrovací klíče. - - - KeePassXC: Removed keys from database - KeePassXC: Klíče odebrány z databáze - - - Successfully removed %n encryption key(s) from KeePassXC settings. - %n šifrovací klíč úspěšně odebrán z nastavení KeePassXC.%n šifrovací klíče úspěšně odebrány z nastavení KeePassXC.%n šifrovacích klíčů úspěšně odebráno z nastavení KeePassXC.%n šifrovacích klíčů úspěšně odebráno z nastavení KeePassXC. - - - Removing stored permissions… - Odebírání uložených oprávnění… - Abort Přerušit - KeePassXC: Removed permissions - KeePassXC: Odebraná oprávnění + Converting attributes to custom data… + Převádění atributů na uživatelsky určená data… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Převedené KeePassHTTP atributy + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Úspěšně převedeny atributy z %1 položek. +Přesunuto %2 klíčů do uživatelsky určených dat. - Successfully removed permissions from %n entry(s). - Z %n položky úspěšně odebrána oprávnění.Ze %n položek úspěšně odebrána oprávnění.Z %n položek úspěšně odebrána oprávnění.Z %n položek úspěšně odebrána oprávnění. + Successfully moved %n keys to custom data. + %n klíč úspěšně přesunut do uživatelsky určených dat.%n klíče úspěšně přesunuty do uživatelsky určených dat.%n klíčů úspěšně přesunuto do uživatelsky určených dat.%n klíčy úspěšně přesunuty do uživatelsky určených dat. - KeePassXC: No entry with permissions found! - KeePassXC: Nebyl nalezen žádný záznam s oprávněními! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nenalezena žádná položka, která má KeePassHTTP atributy! - The active database does not contain an entry with permissions. - Právě otevřená databáze neobsahuje záznam s oprávněními. - - - - ChangeMasterKeyWidget - - Password - Heslo + The active database does not contain an entry with KeePassHTTP attributes. + Právě otevřená databáze neobsahuje žádnou položku s atributy KeePassHTTP. - Enter password: - Zadejte heslo: + KeePassXC: Legacy browser integration settings detected + KeePassXC: zjištěna nastavení starého napojení na webový prohlížeč - Repeat password: - Zopakujte heslo: + KeePassXC: Create a new group + - &Key file - Soubor s &klíčem + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Procházet - - - Create - Vytvořit - - - Cha&llenge Response - Výzva–odpověď - - - Refresh - Načíst znovu - - - Key files - Soubory s klíči - - - All files - Veškeré soubory - - - Create Key File... - Vytvořit soubor s klíčem… - - - Unable to create Key File : - Nedaří se vytvořit soubor s klíčem: - - - Select a key file - Vyberte soubor s klíčem - - - Empty password - Prázdné heslo - - - Do you really want to use an empty string as password? - Opravdu ponechat bez hesla, tedy nechráněné? - - - Different passwords supplied. - Nepodařilo se vám zadat heslo do obou kolonek stejně. - - - Failed to set %1 as the Key file: -%2 - Nepodařilo se nastavit %1 jako soubor s klíčem: -%2 - - - Legacy key file format - Starý formát souboru s klíčem - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Používáte starý formát souboru s klíčem, který v budoucnu nemusí být podporován. - -Zvažte vytvoření nového souboru s klíčem. - - - Changing master key failed: no YubiKey inserted. - Změna hlavního klíče se nezdařila: není připojeno žádné YubiKey zařízení. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -642,14 +788,6 @@ Zvažte vytvoření nového souboru s klíčem. Not present in CSV file Nenachází se v CSV souboru - - Empty fieldname - Prázný název kolonky - - - column - sloupec - Imported from CSV file Importováno z CSV souboru @@ -658,50 +796,91 @@ Zvažte vytvoření nového souboru s klíčem. Original data: Původní data: - - Error(s) detected in CSV file ! - V CSV soubory byly zjištěny chyby! - - - more messages skipped] - další zprávy přeskočeny] - Error Chyba + + Empty fieldname %1 + Prázdný název kolonky %1 + + + column %1 + sloupec %1 + + + Error(s) detected in CSV file! + V CSV soubory byly zjištěny chyby! + + + [%n more message(s) skipped] + [%n další zpráva přeskočena][%n další zprávy přeskočeny][%n dalších zpráv přeskočeno][%n další zprávy přeskočeny] + CSV import: writer has errors: - +%1 CSV import: chyby zápisu: - - - - - CsvImportWizard - - Error - Chyba - - - Unable to calculate master key - Nedaří se spočítat hlavní klíč +%1 CsvParserModel - - %n byte(s), - %n bajt%n bajty%n bajtů%n bajtů - - - %n row(s), - %n řádek%n řádky%n řádků%n řádků - %n column(s) %n sloupec%n sloupce%n sloupců%n sloupců + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bajt%n bajty%n bajtů%n bajty + + + %n row(s) + %n řádek%n řádky%n řádků%n řádky + + + + Database + + Root + Root group name + Kořen + + + File %1 does not exist. + Soubor %1 neexistuje. + + + Unable to open file %1. + Soubor %1 se nedaří otevřít. + + + Error while reading the database: %1 + Chyba při čtení databáze: %1 + + + Could not save, database has no file name. + Nedaří se uložit, databáze nemá název. + + + File cannot be written as it is opened in read-only mode. + Do souboru nelze zapisovat, protože je otevřen v režimu pouze pro čtení. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Odemknout databázi – KeePassXC + DatabaseOpenWidget @@ -729,14 +908,6 @@ Zvažte vytvoření nového souboru s klíčem. Challenge Response: Výzva–odpověď: - - Unable to open the database. - Databázi se nedaří otevřít. - - - Can't open key file - Soubor s klíčem se nedaří otevřít - Legacy key file format Starý formát souboru s klíčem @@ -766,53 +937,254 @@ Zvažte vytvoření nového souboru s klíčem. Select key file Vyberte soubor s klíčem - - - DatabaseRepairWidget - Repair database - Opravit databázi + TouchID for quick unlock + TouchID pro rychlé odemčení - Error - Chyba + Unable to open the database: +%1 + Databázi se nedaří otevřít: +%1 - Can't open key file - Nedaří se otevřít soubor s klíčem - - - Unable to open the database. - Nedaří se otevřít databázi. - - - Database opened fine. Nothing to do. - Databázi se podařilo v pořádku otevřít. Není třeba žádného zásahu. - - - Success - Úspěch - - - The database has been successfully repaired -You can now save it. - Databáze je úspěšně opravená. -Nyní je možné ji uložit. - - - Unable to repair the database. - Databázi se nedaří opravit. + Can't open key file: +%1 + Soubor s klíčem se nedaří otevřít: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Hesla + + + + DatabaseSettingsDialog + + Advanced Settings + Pokročilá nastavení + General Obecné - Encryption - Šifrování + Security + Zabezpečení + + + Master Key + Hlavní klíč + + + Encryption Settings + Nastavení šifrování + + + Browser Integration + Napojení webového prohlížeče + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Nastavení pro KeePassXC-Browser + + + &Disconnect all browsers + O&dpojit veškeré prohlížeče + + + Forg&et all site-specific settings on entries + Zapom&enout v položkách veškerá nastavení specifická pro daný web + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Přesunout KeePassHTTP atributy do uživatelsky určených dat v KeePassX&C-Browser + + + Stored keys + Uložené klíče + + + Remove + Odebrat + + + Delete the selected key? + Smazat označený klíč? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Opravdu chcete označený klíč smazat? +Toto může zabránit spojení se zásuvným modulem prohlížeče. + + + Key + Klíč + + + Value + Hodnota + + + Enable Browser Integration to access these settings. + Pro zpřístupnění těchto nastavení zapněte Napojení na webový prohlížeč. + + + Disconnect all browsers + Odpojit veškeré prohlížeče + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Opravdu chcete odpojit všechny prohlížeče? +To může zabránit spojení se zásuvným modulem prohlížeče. + + + KeePassXC: No keys found + KeePassXC: Nebyly nalezeny žádné klíče + + + No shared encryption keys found in KeePassXC settings. + V nastavení KeePassXC nenalezeny žádné sdílené šifrovací klíče. + + + KeePassXC: Removed keys from database + KeePassXC: Klíče odebrány z databáze + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Z nastavení KeePassXC úspěšně odebrán %n šifrovací klíč.Z nastavení KeePassXC úspěšně odebrány %n šifrovací klíče.Z nastavení KeePassXC úspěšně odebráno %n šifrovacích klíčů.Z nastavení KeePassXC úspěšně odebrány %n šifrovací klíče. + + + Forget all site-specific settings on entries + Zapomenout v položkách veškerá nastavení specifická pro daný web + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Opravdu chcete zapomenout veškerá nastavení pro dané weby na každé položce? +Oprávnění pro přístup k položkám budou odvolána. + + + Removing stored permissions… + Odebírání uložených oprávnění… + + + Abort + Přerušit + + + KeePassXC: Removed permissions + KeePassXC: Odebraná oprávnění + + + Successfully removed permissions from %n entry(s). + Z %n položky úspěšně odebrána oprávnění.Ze %n položek úspěšně odebrána oprávnění.Z %n položek úspěšně odebrána oprávnění.Ze %n položek úspěšně odebrána oprávnění. + + + KeePassXC: No entry with permissions found! + KeePassXC: Nebyl nalezen žádný záznam s oprávněními! + + + The active database does not contain an entry with permissions. + Právě otevřená databáze neobsahuje záznam s oprávněními. + + + Move KeePassHTTP attributes to custom data + Přesunout KeePassHTTP atributy do uživatelsky určených dat + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Opravdu chcete přesunout všechna data starého napojení na prohlížeč na nejnovější standard? +Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohlížeč. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Šifrovací algoritmus: + + + AES: 256 Bit (default) + AES: 256 bit (výchozí) + + + Twofish: 256 Bit + Twofish: 256 bit + + + Key Derivation Function: + Funkce pro odvození klíče: + + + Transform rounds: + Počet průchodů šifrovacího algoritmu: + + + Benchmark 1-second delay + Jednosekundová prodleva testu výkonnosti + + + Memory Usage: + Využití paměti: + + + Parallelism: + Souběžné zpracovávání: + + + Decryption Time: + Doba, kterou rozšifrování trvalo: + + + ?? s + ?? s + + + Change + Změnit + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Vyšší hodnota poskytuje lepší ochranu, ale otevírání databáze zabere déle. + + + Database format: + Formát databáze: + + + This is only important if you need to use your database with other programs. + Toto je důležité pouze pokud potřebujete svou databázi používat v ostatních aplikacích. + + + KDBX 4.0 (recommended) + KDBX 4.0 (doporučeno) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + nezměněno Number of rounds too high @@ -864,42 +1236,17 @@ Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování v thread(s) Threads for parallel execution (KDF settings) - vláknovláknavlákenvláken + vláknovláknavlákenvlákna - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Šifrovací algoritmus: + + %1 ms + milliseconds + %1 ms%1 ms%1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 bit (výchozí) - - - Twofish: 256 Bit - Twofish: 256 bit - - - Key Derivation Function: - Funkce pro odvození klíče: - - - Transform rounds: - Počet průchodů šifrovacího algoritmu: - - - Benchmark 1-second delay - Jednosekundová prodleva testu výkonnosti - - - Memory Usage: - Využití paměti: - - - Parallelism: - Souběžné zpracovávání: + + %1 s + seconds + %1 s%1 s%1 s%1 s @@ -950,12 +1297,85 @@ Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování v - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Kořen + Sharing + Sdílení + + Breadcrumb + Zobrazení cesty rozhraním + + + Type + Typ + + + Path + Popis umístění + + + Last Signer + Nedávno podepsal + + + Certificates + Certifikáty + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Přidat další ochranu… + + + No encryption key added + Nepřidán žádný šifrovací klíč + + + You must add at least one encryption key to secure your database! + Aby byla vaše databáze zabezpečená, je třeba přidat alespoň jeden šifrovací klíč! + + + No password set + Není nastavené žádné heslo + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + VAROVÁNÍ! Nenastavili jste heslo. Používání databáze bez hesla je silně nedoporučeno! + +Opravdu chcete pokračovat bez hesla? + + + Unknown error + Neznámá chyba + + + Failed to change master key + Hlavní klíč se nepodařilo změnit + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Název databáze: + + + Description: + Popis: + + + + DatabaseTabWidget KeePass 2 Database Databáze ve formátu KeePass verze 2 @@ -968,30 +1388,10 @@ Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování v Open database Otevřít databázi - - File not found! - Soubor nebyl nalezen! - - - Unable to open the database. - Databázi se nedaří otevřít. - - - File opened in read only mode. - Soubor otevřen v režimu pouze pro čtení. - - - Open CSV file - Otevřít CSV soubor - CSV file CSV soubor - - All files (*) - Veškeré soubory (*) - Merge database Sloučit databáze @@ -1004,38 +1404,6 @@ Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování v KeePass 1 database Databáze ve formátu KeePass verze 1 - - Close? - Zavřít? - - - "%1" is in edit mode. -Discard changes and close anyway? - „%1“ je právě upravováno. -Přesto zavřít a zahodit tak změny? - - - Save changes? - Uložit změny? - - - "%1" was modified. -Save changes? - „%1“ bylo změněno. -Uložit změny? - - - Writing the database failed. - Zápis do databáze se nezdařil. - - - Passwords - Hesla - - - Save database as - Uložit databázi jako - Export database to CSV file Exportovat databázi do CSV souboru @@ -1045,40 +1413,41 @@ Uložit změny? Zápis do CSV souboru se nezdařil. - New database + Database creation error + Chyba vytváření databáze + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + Vytvořená databáze nemá klíč nebo KDF, její uložení je domítnuto. +Toto je nepochybně chyba, nahlaste ji prosím vývojářům. + + + The database file does not exist or is not accessible. + Soubor s databází neexistuje nebo není přístupný. + + + Select CSV file + Vyberte CSV soubor + + + New Database Nová databáze - locked - zamčeno + %1 [New Database] + Database tab name modifier + %1 [nová databáze] - Lock database - Uzamknout databázi + %1 [Locked] + Database tab name modifier + %1 [uzamčeno] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Nelze uzamknout databázi, protože ji v tuto chvíli upravujete. -Pokud chcete změny dokončit, klikněte na Storno. V opačném případě změny zahodíte. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Tato databáze byla upravena. -Chcete ji před uzamčením uložit? -Pokud ne, provedené změny budou ztraceny. - - - Disable safe saves? - Vypnout bezpečná ukládání? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - I přes několikátý pokus se KeePassXC nepodařilo databázi uložit. To je nejspíš způsobeno službou synchronizace souborů, která drží zámek na ukládaném souboru. -Vypnout bezpečné ukládání a zkusit to znovu? + %1 [Read-only] + Database tab name modifier + %1 [pouze pro čtení] @@ -1087,38 +1456,14 @@ Vypnout bezpečné ukládání a zkusit to znovu? Searching... Hledání… - - Change master key - Změnit hlavní klíč - - - Delete entry? - Smazat záznam? - Do you really want to delete the entry "%1" for good? Opravdu chcete nenávratně smazat záznam „%1“? - - Delete entries? - Smazat záznamy? - - - Do you really want to delete %1 entries for good? - Opravdu chcete nenávratně smazat %1 záznamů? - - - Move entry to recycle bin? - Přesunout záznam do Koše? - Do you really want to move entry "%1" to the recycle bin? Opravdu přesunout záznam "%1" do Koše? - - Move entries to recycle bin? - Přesunout záznamy do Koše? - Do you really want to move %n entry(s) to the recycle bin? Opravdu přesunout %n záznam do Koše? ()Opravdu přesunout %n záznamy do Koše? ()Opravdu přesunout %n záznamů do Koše?Opravdu přesunout %n záznamů do Koše? @@ -1135,18 +1480,10 @@ Vypnout bezpečné ukládání a zkusit to znovu? Remember my choice Zapamatovat si pro příště - - Delete group? - Smazat skupinu? - Do you really want to delete the group "%1" for good? Opravdu chcete nenávratně smazat skupinu „%1“? - - Unable to calculate master key - Nedaří se spočítat hlavní klíč - No current database. Aktuálně žádná databáze. @@ -1181,10 +1518,6 @@ Do you want to merge your changes? Databázový soubor byl změněn a máte neuložené změny. Přejete si je sloučit? - - Could not open the new database file while attempting to autoreload this database. - Nepodařilo se otevřít nový soubor, obsahující aktuální verzi této databáze. - Empty recycle bin? Vysypat Koš? @@ -1193,88 +1526,111 @@ Přejete si je sloučit? Are you sure you want to permanently delete everything from your recycle bin? Opravdu chcete natrvalo smazat všechno z Koše? - - - DetailsWidget - - Generate TOTP Token - Vytvořit token na času založeného jednorázového hesla (TOTP) + + Do you really want to delete %n entry(s) for good? + Opravdu chcete %n položku nadobro smazat?Opravdu chcete %n položky nadobro smazat?Opravdu chcete %n položek nadobro smazat?Opravdu chcete %n položky nadobro smazat? + + + Delete entry(s)? + Smazat položkuSmazat položkySmazat položekSmazat položky + + + Move entry(s) to recycle bin? + Přesunout položku do Koše?Přesunout položky do Koše?Přesunout položek do Koše?Přesunout položky do Koše? - Close - Zavřít + File opened in read only mode. + Soubor otevřen v režimu pouze pro čtení. - General - Obecné + Lock Database? + Uzamknout databázi? - Password - Heslo + You are editing an entry. Discard changes and lock anyway? + Upravujete položku. Přesto zavřít a zahodit tak změny? - URL - URL adresa + "%1" was modified. +Save changes? + „%1“ bylo změněno. +Uložit změny? - Expiration - Skončení platnosti + Database was modified. +Save changes? + Databáze byla změněna. +Uložit změny? - Username - Uživatelské jméno + Save changes? + Uložit změny? - Autotype - Automatické vyplnění + Could not open the new database file while attempting to autoreload. +Error: %1 + Nepodařilo se otevřít nový soubor s databází během pokusu o její opětovné načtení. +Chyba: %1 - Searching - Hledání + Disable safe saves? + Vypnout bezpečná ukládání? - Attributes - Atributy + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + I přes několikátý pokus se KeePassXC nepodařilo databázi uložit. To je nejspíš způsobeno službou synchronizace souborů, která drží zámek na ukládaném souboru. +Vypnout bezpečné ukládání a zkusit to znovu? - Attachments - Přílohy + Writing the database failed. +%1 + Zápis do databáze se nezdařil. +%1 - Notes - Poznámky + Passwords + Hesla - Window - Okno + Save database as + Uložit databázi jako - Sequence - Posloupnost + KeePass 2 Database + Databáze ve formátu KeePass 2 - Search - Hledat + Replace references to entry? + Nahradit odkazy na položku? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Položka „%1“ má %2 odkaz. Chcete odkazy přepsat hodnotami, přeskočit ji, nebo smazat i tak?Položka „%1“ má %2 odkazy. Chcete odkazy přepsat hodnotami, přeskočit ji, nebo smazat i tak?Položka „%1“ má %2 odkazů. Chcete odkazy přepsat hodnotami, přeskočit ji, nebo smazat i tak?Položka „%1“ má %2 odkazy. Chcete odkazy přepsat hodnotami, přeskočit ji, nebo smazat i tak? - Clear - Vyčistit + Delete group + Smazat skupinu - Never - Nikdy + Move group to recycle bin? + Přesunout skupinu do Koše? - [PROTECTED] - [CHRÁNĚNO] + Do you really want to move the group "%1" to the recycle bin? + Opravdu chcete skupinu „%1“ přesunout do koše? - Disabled - Vypnuto + Successfully merged the database files. + Databázové soubory úspěšně sloučeny. - Enabled - Zapnuto + Database was not modified by merge operation. + Databáze nebyla operací slučování upravena. + + + Shared group... + @@ -1347,22 +1703,10 @@ Přejete si je sloučit? New attribute Nový atribut - - Confirm Remove - Potvrdit odebrání - Are you sure you want to remove this attribute? Opravdu chcete odebrat tento atribut? - - [PROTECTED] - [CHRÁNĚNO] - - - Press reveal to view or edit - Pro zobrazení nebo úpravu klikněte na Odkrýt - Tomorrow Zítra @@ -1375,10 +1719,6 @@ Přejete si je sloučit? %n month(s) %n měsíc%n měsíce%n měsíců%n měsíců - - 1 year - 1 rok - Apply generated password? Použít vytvořené heslo? @@ -1391,6 +1731,26 @@ Přejete si je sloučit? Entry updated successfully. Položka úspěšně aktualizována. + + Entry has unsaved changes + Položka má neuložené změny + + + New attribute %1 + Nový atribut %1 + + + [PROTECTED] Press reveal to view or edit + [CHRÁNĚNO] Pro zobrazení nebo úpravu klikněte na Odhalit + + + %n year(s) + %n rok%n roky%n let%n roky + + + Confirm Removal + Potvrdit odebrání + EditEntryWidgetAdvanced @@ -1635,6 +1995,97 @@ Přejete si je sloučit? Převzít od nadřazené skupiny (%1) + + EditGroupWidgetKeeShare + + Form + Formulář + + + Type: + Typ: + + + Path: + Popis umístění: + + + ... + + + + Password: + Heslo: + + + Inactive + Neaktivní + + + Import from path + Importovat z umístění + + + Export to path + Exportovat do umístění + + + Synchronize with path + Synchronizovat s umístěním + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Vámi používaná verze KeePassXC nepodporuje sdílení vašeho typu kontejneru. Použijte %1. + + + Database sharing is disabled + Sdílení databáze je vypnuto + + + Database export is disabled + Export databáze je vypnutý + + + Database import is disabled + Import databáze je vypnutý + + + KeeShare unsigned container + Nepodepsaný KeeShare kontejner + + + KeeShare signed container + KeeShare sdílený kontejner + + + Select import source + Vybrat zdroj importu + + + Select export target + Vybrat cíl importu + + + Select import/export file + Vybrat importní/exportní soubor + + + Clear + Vyčistit + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1692,10 +2143,6 @@ Přejete si je sloučit? Unable to fetch favicon. Ikonu webu (favicon) se nedaří stáhnout. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Rada: Jako náhradní řešení můžete zapnout Google v Nástroje → Nastavení → Zabezpečení - Images Obrázky @@ -1704,14 +2151,6 @@ Přejete si je sloučit? All files Veškeré soubory - - Select Image - Vyberte obrázek - - - Can't read icon - Ikonu se nedaří načíst - Custom icon already exists Tato vlastní ikona už existuje @@ -1721,8 +2160,36 @@ Přejete si je sloučit? Potvrdit smazání - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Tato ikona je používána %1 záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat? + Custom icon successfully downloaded + Uživatelsky určená ikona úspěšně stažena + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Rada: Jako náhradní řešení můžete zapnout DuckDuckGo v Nástroje → Nastavení → Zabezpečení + + + Select Image(s) + Vyberte obrázky + + + Successfully loaded %1 of %n icon(s) + Úspěšně načtena %1 z %n ikonÚspěšně načteny %1 z %n ikonÚspěšně načteno %1 z %n ikonÚspěšně načteny %1 z %n ikon + + + No icons were loaded + Nebyly načteny žádné ikony + + + %n icon(s) already exist in the database + %n ikona už v databázi existuje%n ikony už v databázi existují%n ikon už v databázi existuje%n ikony už v databázi existují + + + The following icon(s) failed: + Následující ikona se nezdařila:Následující ikony se nezdařily:Následující ikony se nezdařily:Následující ikony se nezdařily: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Tato ikona je používána %n záznamem a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat?Tato ikona je používána %n záznamy a bude nahrazena výchozí ikonou. Opravdu ji chcete smazat? @@ -1773,9 +2240,8 @@ Dotčený zásuvný modul to může rozbít. Entry - - Clone - Suffix added to cloned entries - - klon + %1 - Clone + %1 – klon @@ -1819,10 +2285,6 @@ Dotčený zásuvný modul to může rozbít. Are you sure you want to remove %n attachment(s)? Opravdu chcete odebrat %n přílohu?Opravdu chcete odebrat %n přílohy?Opravdu chcete odebrat %n příloh?Opravdu chcete odebrat %n příloh? - - Confirm Remove - Potvrdit odebrání - Save attachments Uložit přílohy @@ -1860,10 +2322,17 @@ Dotčený zásuvný modul to může rozbít. %1 - Unable to open files: + Confirm remove + Potvrdit odebrání + + + Unable to open file(s): %1 - Nedaří se otevřít soubory: -%1 + Nedaří se otevřít soubor: +%1Nedaří se otevřít soubory: +%1Nedaří se otevřít soubory: +%1Nedaří se otevřít soubory: +%1 @@ -1947,6 +2416,106 @@ Dotčený zásuvný modul to může rozbít. Attachments Přílohy + + Yes + Ano + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Vytvořit token na času založeného jednorázového hesla (TOTP) + + + Close + Zavřít + + + General + Obecné + + + Username + Uživatelské jméno + + + Password + Heslo + + + Expiration + Skončení platnosti + + + URL + URL adresa + + + Attributes + Atributy + + + Attachments + Přílohy + + + Notes + Poznámky + + + Autotype + Automatické vyplnění + + + Window + Okno + + + Sequence + Posloupnost + + + Searching + Hledání + + + Search + Hledat + + + Clear + Vyčistit + + + Never + Nikdy + + + [PROTECTED] + [CHRÁNĚNO] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Zapnuto + + + Disabled + Vypnuto + + + Share + Sdílet + EntryView @@ -1985,6 +2554,11 @@ Dotčený zásuvný modul to může rozbít. Recycle Bin Koš + + [empty] + group has no children + [prázdné] + HostInstaller @@ -1997,61 +2571,6 @@ Dotčený zásuvný modul to může rozbít. Nedaří se uložit soubor se skriptem pro posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging). - - HttpPasswordGeneratorWidget - - Length: - Délka: - - - Character Types - Typy znaků - - - Upper Case Letters - Velká písmena - - - A-Z - A-Z - - - Lower Case Letters - Malá písmena - - - a-z - a-z - - - Numbers - Číslice - - - 0-9 - 0-9 - - - Special Characters - Zvláštní znaky - - - /*_& ... - /*_& … - - - Exclude look-alike characters - Vynechat podobně vypadající znaky (předejití záměně) - - - Ensure that the password contains characters from every group - Zajistit aby heslo obsahovalo znaky ze všech zvolených skupin znaků - - - Extended ASCII - Rozšířené ASCII - - KMessageWidget @@ -2077,6 +2596,26 @@ Dotčený zásuvný modul to může rozbít. Wrong key or database file is corrupt. Byl zadán nesprávný klíč, nebo je soubor s databází poškozený. + + missing database headers + chybí databázové hlavičky + + + Header doesn't match hash + Hlavička neodpovídá otisku + + + Invalid header id size + Neplatná velikost identifikátoru hlavičky + + + Invalid header field length + Neplatná délka kolonky hlavičky + + + Invalid header data length + Neplatné délka dat hlavičky + Kdbx3Writer @@ -2235,10 +2774,6 @@ Dotčený zásuvný modul to může rozbít. KdbxReader - - Invalid cipher uuid length - Neplatná délka neopakujícího se identifikátoru šifry - Unsupported cipher Nepodporovaná šifra @@ -2293,6 +2828,18 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Unsupported KeePass 2 database version. Nepodporovaná verze databáze KeePass 2. + + Invalid cipher uuid length: %1 (length=%2) + Neplatná délka nikde se neopakujícího identifikátoru šifry: %1 (length=%2) + + + Unable to parse UUID: %1 + UUID se nedaří zpracovat: %1 + + + Failed to read database file. + Nepodařilo se číst soubor s databází. + KdbxXmlReader @@ -2364,10 +2911,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev History element with different uuid Prvek historie s rozdílným neopakujícím se identifikátorem - - Unable to decrypt entry string - Nedaří se rozšifrovat řetězec položky - Duplicate custom attribute found Zjištěn duplicitní uživatelem určený atribut @@ -2417,6 +2960,14 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Translator meant is a binary data inside an entry Nedaří se rozbalit binární soubor + + XML error: +%1 +Line %2, column %3 + Chyba XML: +%1 +Řádek %2, sloupec %3 + KeePass1OpenWidget @@ -2580,55 +3131,145 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Invalid entry field type Neplatný typ kolonky položky - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – doporučeno) + unable to seek to content position + nedaří se posunout na pozici obsahu - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Existující uzamykací soubor, zajišťující spuštění pouze jedné instance, není platný. Spouští se nová instance. + Disabled share + Vypnuté sdílení - The lock file could not be created. Single-instance mode disabled. - Soubor se zámkem se nepodařilo vytvořit. Režim jediné instance proto vypnut. + Import from + Importovat z - Another instance of KeePassXC is already running. - Již je spuštěná jiná instance KeePassXC. + Export to + Exportovat do - Fatal error while testing the cryptographic functions. - Při zkoušení šifrovacích funkcí byl zjištěn fatální nedostatek. + Synchronize with + Synchronizovat s - KeePassXC - Error - KeePassXC – chyba + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Součást klíče + + + Key Component Description + Popis součásti klíče + + + Cancel + Zrušit + + + Key Component set, click to change or remove + Součást klíče nastavena, kliknutím změníte nebo odeberete + + + Add %1 + Add a key component + Přidat %1 + + + Change %1 + Change a key component + Změnit %1 + + + Remove %1 + Remove a key component + Odebrat %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 nastaveno, kliknutím změníte nebo odeberete + + + + KeyFileEditWidget + + Browse + Procházet + + + Generate + Tvoř + + + Key File + Soubor s klíčem + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Jako další úroveň zabezpečení je možné přidat soubor s klíčem obsahujícím náhodné bajty.</p><p>Je třeba ho uchovávat v bezpečí a nikdy ho neztratit, jinak budete uzamčeni!</p> + + + Legacy key file format + Starý formát souboru s klíčem + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Používáte starý formát souboru s klíčem, který v budoucnu nemusí být podporován. + +Jděte do nastavení hlavního klíče a vytvořte nový soubor s klíčem. + + + Error loading the key file '%1' +Message: %2 + Chyba načítání souboru s klíčem „%1“ +Zpráva: %2 + + + Key files + Soubory s klíči + + + All files + Veškeré soubory + + + Create Key File... + Vytvořit soubor s klíčem… + + + Error creating key file + Chyba při vytváření souboru s klíčem + + + Unable to create key file: %1 + Nedaří se vytvořit soubor s klíčem: %1 + + + Select a key file + Vyberte soubor s klíčem @@ -2641,10 +3282,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev &Recent databases &Nedávno otevřené databáze - - Import - Importovat - &Help Nápověda @@ -2653,14 +3290,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev E&ntries Záz&namy - - Copy att&ribute to clipboard - Zkopí&rovat atribut do schránky - - - Time-based one-time password - Na času založené jednorázové heslo - &Groups Skupiny @@ -2689,30 +3318,10 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev &Close database Zavřít databázi - - &New database - &Nová databáze - - - Merge from KeePassX database - Sloučit z databáze KeePassX - - - &Add new entry - Přid&at nový záznam - - - &View/Edit entry - Zobrazit/Upra&vit záznam - &Delete entry Smazat záznam - - &Add new group - Přid&at novou skupinu - &Edit group Upravit skupinu @@ -2725,14 +3334,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Sa&ve database as... &Uložit databázi jako… - - Change &master key... - Z&měnit hlavní klíč… - - - &Database settings - Nastavení &databáze - Database settings Nastavení databáze @@ -2741,10 +3342,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev &Clone entry Klonovat záznam - - &Find - Najít - Copy &username Zkopírovat &uživatelské jméno @@ -2753,10 +3350,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Copy username to clipboard Zkopírovat uživatelské jméno do schránky - - Cop&y password - Zkopírovat heslo - Copy password to clipboard Zkopírovat heslo do schránky @@ -2769,14 +3362,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Password Generator Generátor hesel - - &Perform Auto-Type - &Provést automatické vyplnění - - - &Open URL - &Otevřít URL adresu - &Lock databases Uzamknout databáze @@ -2809,22 +3394,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev &Export to CSV file... &Exportovat do CSV souboru… - - Import KeePass 1 database... - Importovat databázi aplikace KeePass verze 1… - - - Import CSV file... - Importovat CSV soubor… - - - Re&pair database... - O&pravit databázi… - - - Show TOTP - Zobrazit TOTP - Set up TOTP... Nastavit TOTP… @@ -2845,14 +3414,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Access error for config file %1 Chyba přístupu k souboru s nastaveními %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Zdá se, že pro napojení prohlížeče používáte KeePassHTTP. Tato funkce byla označena za zastaralou a bude v budoucnu odebrána.<br>Přejděte na KeePassXC-Browser! S přechodem pomůže <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migrační příručka</a> (varování %1 ze 3).</p> - - - read-only - pouze pro čtení - Settings Nastavení @@ -2865,26 +3426,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Quit KeePassXC Ukončit KeePassXC - - KeePass 2 Database - Databáze ve formátu KeePass 2 - - - All files - Veškeré soubory - - - Open database - Otevřít databázi - - - Save repaired database - Uložit opravenou databázi - - - Writing the database failed. - Zápis do databáze se nezdařil. - Please touch the button on your YubiKey! Dotkněte se tlačítka na svém YubiKey zařízení! @@ -2897,6 +3438,269 @@ This version is not meant for production use. Je zde vysoké riziko poškození dat, proto udržujte zálohu svých databází. Tato verze není určena pro produkční použití. + + &Donate + &Darovat + + + Report a &bug + Nahlásit chy&bu + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + VAROVÁNÍ: Vámi používaná verze Qt může způsobovat, že při použití klávesnice na obrazovce KeePassXC zhavaruje! +Doporučujeme použít AppImage, které je k dispozici v sekci stahování našich stránek. + + + &Import + &Importovat + + + Copy att&ribute... + Zkopírovat at&ribut… + + + TOTP... + TOTP… + + + &New database... + &Nová databáze… + + + Create a new database + Vytvořit novou databázi + + + &Merge from database... + &Sloučit z databáze… + + + Merge from another KDBX database + Sloučit z jiné KDBX databáze + + + &New entry + &Nový záznam + + + Add a new entry + Přidat nový záznam + + + &Edit entry + &Upravit záznam + + + View or edit entry + Zobrazit nebo upravit položku + + + &New group + &Nová skupina + + + Add a new group + Přidat novou skupinu + + + Change master &key... + Změnit hlavní &klíč… + + + &Database settings... + Nastavení &databáze… + + + Copy &password + Zko&pírovat heslo + + + Perform &Auto-Type + Provést &automatické vyplnění + + + Open &URL + Otevřít &URL adresu + + + KeePass 1 database... + Databáze ve formátu KeePass verze 1… + + + Import a KeePass 1 database + Importovat databázi aplikace KeePass verze 1 + + + CSV file... + CSV soubor… + + + Import a CSV file + Importovat CSV soubor + + + Show TOTP... + Zobrazit na času založené jednorázové heslo (TOTP)… + + + Show TOTP QR Code... + Zobrazit QR kód s TOTP… + + + Check for Updates... + Zjistit dostupnost aktualizací… + + + Share entry + Sdílet položku + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + UPOZORNĚNÍ: Používáte vývojové sestavení KeePassXC! +Očekávejte chyby a drobné problémy, tato verze není určena pro produkční použití. + + + Check for updates on startup? + Zjišťovat dostupnost aktualizací při spouštění? + + + Would you like KeePassXC to check for updates on startup? + Přejete si, aby KeePassXC zjišťovalo dostupnost aktualizací při svém spouštění? + + + You can always check for updates manually from the application menu. + Vždy můžete aktualizace vyhledávat ručně z nabídky aplikace. + + + + Merger + + Creating missing %1 [%2] + Vytváření chybějícího %1 [%2] + + + Relocating %1 [%2] + Přemisťování %1 [%2] + + + Overwriting %1 [%2] + Přepisování %1 [%2] + + + older entry merged from database "%1" + starší položka sloučena z databáze „%1“ + + + Adding backup for older target %1 [%2] + Přidávání zálohy pro starší cíl %1 [%2] + + + Adding backup for older source %1 [%2] + Přidávání zálohy pro starší zdroj %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Znovu se uplatňují původní zdrojové položky nad novějším zdrojem %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Znovu se uplatňují původní zdrojové položky nad novějším cílem %1 [%2] + + + Synchronizing from newer source %1 [%2] + Synchronizace z novějšího zdroje %1 [%2] + + + Synchronizing from older source %1 [%2] + Synchronizace ze staršího zdroje %1 [%2] + + + Deleting child %1 [%2] + Mazání podřízeného %1 [%2] + + + Deleting orphan %1 [%2] + Mazání osiřelého %1 [%2] + + + Changed deleted objects + Změněny smazané objekty + + + Adding missing icon %1 + Přidávání chybějící ikony %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Vytvořit novou KeePassXC databázi… + + + Root + Root group + Kořen + + + + NewDatabaseWizardPage + + WizardPage + Stránka průvodce + + + En&cryption Settings + &Nastavení šifrování + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Zde je možné přizpůsobit nastavení šifrování databáze. Nemějte obavy, kdykoli je možné je později změnit v nastavení databáze. + + + Advanced Settings + Pokročilá nastavení + + + Simple Settings + Základní nastavení + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Nastavení šifrování + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Zde je možné přizpůsobit nastavení šifrování databáze. Nemějte obavy, kdykoli je možné je později změnit v nastavení databáze. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Hlavní klíč do databáze + + + A master key known only to you protects your database. + Hlavní klíč, známý pouze vám, pro ochranu vaší databáze. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Obecné informace o databázi + + + Please fill in the display name and an optional description for your new database: + Vyplňte zobrazovaný název a volitelný popis nové databáze: + OpenSSHKey @@ -2998,125 +3802,30 @@ Tato verze není určena pro produkční použití. - OptionDialog + PasswordEditWidget - Dialog - Dialog + Enter password: + Zadejte heslo: - This is required for accessing your databases from ChromeIPass or PassIFox - Toto je vyžadováno pro přístup k databázím z ChromeIPass nebo PassIFox + Confirm password: + Potvrdit heslo: - Enable KeePassHTTP server - Zapnout KeePassHTTP server + Password + Heslo - General - Obecné + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Heslo je hlavní metodou zabezpečení databáze.</p><p>Dobrá hesla jsou dlouhá a nepoužívaná stejná na více místech. KeePassXC ho pro vás může vytvořit.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Z&obrazit oznámení když jsou požadovány přihlašovací údaje + Passwords do not match. + Zadání hesla se neshodují. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Vrátí pouze nejlepší shody pro konkrétní URL adresu namísto všech položek pro celou doménu. - - - &Return only best matching entries - V&racet pouze nejlépe odpovídající položky - - - Re&quest to unlock the database if it is locked - Vyžádat odemknutí zamčené databáze - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Jsou vráceny pouze položky se stejným schématem (http://, https://, ftp://, …). - - - &Match URL schemes - &Hledat shodu s URL schématy - - - Sort matching entries by &username - Seřadit odpovídající záznamy dle &uživatelského jména - - - Sort &matching entries by title - Seřadit odpovídající zázna&my dle názvu - - - R&emove all shared encryption keys from active database - Z právě otevřené databáze od&ebrat veškeré sdílené šifrovací klíče - - - Re&move all stored permissions from entries in active database - Z právě otevřené databáze odebrat veškerá uložená oprávnění - - - Password Generator - Generátor hesel - - - Advanced - Pokročilé - - - Always allow &access to entries - Vždy umožnit přístup k zázn&amům - - - Always allow &updating entries - Vždy umožnit akt&ualizovat záznamy - - - Only the selected database has to be connected with a client. - Pouze označené databáze budou spojeny s klientem. - - - Searc&h in all opened databases for matching entries - Vy&hledat odpovídající záznamy ve všech otevřených databázích - - - Automatically creating or updating string fields is not supported. - Automatická vytváření nebo aktualizace nejsou u textových kolonek podporované! - - - &Return advanced string fields which start with "KPH: " - Odpovědět také kolonkami pok&ročilých textových řetězců které začínají na „KPH:“ - - - HTTP Port: - HTTP port: - - - Default port: 19455 - Výchozí port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC bude očekávat spojení na tomto portu na adrese 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Varování:</b> Následující předvolby mohou být nebezpečné! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP byl označen za zastaralý a bude v budoucnu odebrán.<br>Přejděte na KeePassXC-Browser! Pomoc s přechodem naleznete v <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migrační příručce</a>.</p> - - - Cannot bind to privileged ports - Není možné navázat se na privilegované porty - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Není možné navázat na porty s číslem nižším, než 1024! -Náhradně bude použit port 19455. + Generate master password + Vytvořit hlavní heslo @@ -3186,18 +3895,10 @@ Náhradně bude použit port 19455. Wordlist: Slovník: - - Word Count: - Počet slov: - Word Separator: Oddělovač slov: - - Generate - Tvoř - Copy Kopírovat @@ -3210,10 +3911,6 @@ Náhradně bude použit port 19455. Close Zavřít - - Apply - Použít - Entropy: %1 bit Nahodilost: %1 bitů @@ -3242,6 +3939,171 @@ Náhradně bude použit port 19455. Password quality Výborná + + ExtendedASCII + RozšířenéASCII + + + Switch to advanced mode + Přepnout do pokročilého režimu + + + Advanced + Pokročilé + + + Upper Case Letters A to F + Velká písmena od A do F + + + A-Z + A-Z + + + Lower Case Letters A to F + Malá písmena od A do F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Složené závorky + + + {[( + {[( + + + Punctuation + Interpunkční znaménka + + + .,:; + .,:; + + + Quotes + Uvozovky + + + " ' + " ' + + + Math + Matematické + + + <*+!?= + <*+!?= + + + Dashes + Pomlčky + + + \_|-/ + \_|-/ + + + Logograms + Logogramy + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Přepnout do zjednodušeného režimu + + + Simple + Jednoduchý + + + Character set to exclude from generated password + Sada znaků kterou z vytvářených hesel vynechat + + + Do not include: + Nezahrnovat: + + + Add non-hex letters to "do not include" list + Přidat nehexadecimální znaky do seznamu „nezahrnovat“ + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Vynechané znaky: „0“, „1“, „l“, „I“, „O“, „|“, „ . “ + + + Word Co&unt: + &Počet slov: + + + Regenerate + Regenerovat + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Vybrat + + + + QMessageBox + + Overwrite + Přepsat + + + Delete + Smazat + + + Move + Přesunout + + + Empty + Prázdné + + + Remove + Odebrat + + + Skip + Přeskočit + + + Disable + Vypnout + + + Merge + Sloučit + QObject @@ -3261,34 +4123,18 @@ Náhradně bude použit port 19455. Cannot decrypt message Zprávu se nedaří rozšifrovat - - Timeout or cannot connect to KeePassXC - Překročení časového limitu nebo se nedaří spojit s KeePassXC - Action cancelled or denied Akce zrušena nebo odepřena - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Zprávu se nedaří zašifrovat nebo nebyla nalezena veřejná část klíče. Je v KeePassXC zapnuté posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging)? - KeePassXC association failed, try again Přiřazení KeePassXC se nezdařilo, zkuste to znovu - - Key change was not successful - Výměna klíče nebyla úspěšná - Encryption key is not recognized Šifrovací klíč nebyl rozpoznán - - No saved databases found - Nebyly nalezeny žádné uložené databáze - Incorrect action Nesprávná akce @@ -3414,10 +4260,6 @@ Náhradně bude použit port 19455. Insert password to unlock %1: Zadejte heslo pro odemknutí %1: - - Failed to load key file %1 : %2 - Nepodařilo se načíst soubor s klíčem %1: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3501,12 +4343,6 @@ Příkazy k dispozici: error reading from device Chyba při čtení ze zařízení - - file empty ! - - soubor je prázdný! - - malformed string špatně formovaný řetězec @@ -3543,10 +4379,6 @@ Příkazy k dispozici: Created Vytvořeno - - Legacy Browser Integration - Starý způsob napojení webového prohlížeče - Browser Integration Napojení na webový prohlížeč @@ -3575,10 +4407,6 @@ Příkazy k dispozici: Word count for the diceware passphrase. Počet slov pro diceware heslovou frázi. - - count - počet - Wordlist for the diceware generator. [Default: EFF English] @@ -3590,28 +4418,445 @@ Příkazy k dispozici: Vytvořit nové náhodné heslo. - Length of the generated password. - Délka vytvářeného hesla. + Invalid value for password length %1. + Neplatná hodnota pro délku hesla %1. - Use lowercase characters in the generated password. - Použít ve vytvářeném heslu malá písmena. + Could not create entry with path %1. + Nedaří se vytvořit položku v umístění %1. - Use uppercase characters in the generated password. - Použít ve vytvářeném heslu velká písmena. + Enter password for new entry: + Zadejte heslo pro novou položku: - Use numbers in the generated password. - Použít ve vytvářeném heslu číslice. + Writing the database failed %1. + Zápis do databáze se nezdařil %1. - Use special characters in the generated password. - Použít ve vytvářeném heslu speciální znaky. + Successfully added entry %1. + Položka %1 úspěšně přidána. - Use extended ASCII in the generated password. - Použít ve vytvářeném heslu rozšířené ASCII. + Copy the current TOTP to the clipboard. + Zkopírovat stávající TOTP do schránky. + + + Invalid timeout value %1. + Neplatná hodnota časového limitu %1. + + + Entry %1 not found. + Položka %1 nenalezena. + + + Entry with path %1 has no TOTP set up. + Položka s umístěním %1 nemá nastavené TOTP heslo. + + + Entry's current TOTP copied to the clipboard! + Stávající TOTP heslo položky zkopírováno do schránky! + + + Entry's password copied to the clipboard! + Heslo položky zkopírováno do schránky! + + + Clearing the clipboard in %1 second(s)... + Vyčištění schránky za %1 sekundu…Vyčištění schránky za %1 sekundy…Vyčištění schránky za %1 sekund…Vyčištění schránky za %1 sekundy… + + + Clipboard cleared! + Schránka vyčištěna! + + + Silence password prompt and other secondary outputs. + Umlčet výzvy na heslo a další druhotné výstupy. + + + count + CLI parameter + počet + + + Invalid value for password length: %1 + Neplatná hodnota pro délku hesla: %1. + + + Could not find entry with path %1. + Položku se nedaří v umístění %1 nalézt. + + + Not changing any field for entry %1. + Neprovedena změna žádného pole pro položku %1. + + + Enter new password for entry: + Zadejte nové heslo pro položku: + + + Writing the database failed: %1 + Zápis do databáze se nezdařil: %1 + + + Successfully edited entry %1. + Položka %1 úspěšně upravena. + + + Length %1 + Délka %1 + + + Entropy %1 + Nahodilost %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Víceslovné extra bity %1 + + + Type: Bruteforce + Typ: hrubá síla + + + Type: Dictionary + Typ: slovníkový + + + Type: Dict+Leet + Typ: slovník+nahrazování + + + Type: User Words + Typ: uživatelsky zadaná slova + + + Type: User+Leet + Typ: uživatelský+nahrazování + + + Type: Repeated + Typ: opakování + + + Type: Sequence + Typ: posloupnost + + + Type: Spatial + Typ: prostorové + + + Type: Date + Typ: datum + + + Type: Bruteforce(Rep) + Type: hrubá síla (opak.) + + + Type: Dictionary(Rep) + Type: slovníkový (opak.) + + + Type: Dict+Leet(Rep) + Typ: slovník+nahrazování (opak.) + + + Type: User Words(Rep) + Typ: uživatelsky zadaná slova (opak) + + + Type: User+Leet(Rep) + Typ: uživatelský+nahrazování (opak) + + + Type: Repeated(Rep) + Typ: opakování (opak.) + + + Type: Sequence(Rep) + Typ: posloupnost (opak) + + + Type: Spatial(Rep) + Typ: prostorové (opak.) + + + Type: Date(Rep) + Type: datum (opak) + + + Type: Unknown%1 + Typ: neznámé%1 + + + Entropy %1 (%2) + Nahodilost %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Délka hesla (%1) != součtu délky částí (%2) *** + + + Failed to load key file %1: %2 + Nepodařilo se načíst soubor s klíčem %1: %2 + + + File %1 does not exist. + Soubor %1 neexistuje. + + + Unable to open file %1. + Soubor %1 se nedaří otevřít. + + + Error while reading the database: +%1 + Chyba při čtení databáze: +%1 + + + Error while parsing the database: +%1 + Chyba při zpracování databáze: +%1 + + + Length of the generated password + Délka vytvářeného hesla + + + Use lowercase characters + Použít malá písmena + + + Use uppercase characters + Použít velká písmena + + + Use numbers. + Použít čísla. + + + Use special characters + Použít zvláštní znaky + + + Use extended ASCII + Použít rozšířené ASCII + + + Exclude character set + Vynechat sadu znaků + + + chars + znaky + + + Exclude similar looking characters + Vynechat podobně vypadající znaky (předejití záměně) + + + Include characters from every selected group + Zahrnout znaky ze všech zvolených skupin + + + Recursively list the elements of the group. + Rekurzivně vypsat prvky skupiny. + + + Cannot find group %1. + Skupinu %1 se nedaří nalézt. + + + Error reading merge file: +%1 + Chyba při čtení slučovaného souboru: +%1 + + + Unable to save database to file : %1 + Nedaří se uložit databázi do souboru: %1 + + + Unable to save database to file: %1 + Nedaří se uložit databázi do souboru: %1 + + + Successfully recycled entry %1. + Položka %1 úspěšně přesunuta do Koše. + + + Successfully deleted entry %1. + Položka %1 úspěšně smazána. + + + Show the entry's current TOTP. + Zobrazit stávající TOTP heslo položky. + + + ERROR: unknown attribute %1. + CHYBA: neznámý atribut %1. + + + No program defined for clipboard manipulation + Nebyl určen program pro manipulaci se schránkou + + + Unable to start program %1 + Nedaří se spustit program %1 + + + file empty + soubor je prázdný + + + %1: (row, col) %2,%3 + %1: (řádek, sloupec) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – doporučeno) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Neplatná nastavení + + + Invalid Key + TOTP + Neplatný klíč + + + Message encryption failed. + Zprávu se nepodařilo zašifrovat. + + + No groups found + Nenalezeny žádné skupiny + + + Create a new database. + Vytvořit novou databázi. + + + File %1 already exists. + Soubor %1 už existuje. + + + Loading the key file failed + Načítání souboru s klíčem se nezdařilo + + + No key is set. Aborting database creation. + Není nastavený žádný klíč. Vytváření databáze se ruší. + + + Failed to save the database: %1. + Databázi se nepodařilo uložit: %1. + + + Successfully created new database. + Nová databáze úspěšně vytvořena. + + + Insert password to encrypt database (Press enter to leave blank): + Zadejte heslo pro zašifrování databáze (pokud nechcete vyplňovat, stiskněte Enter): + + + Creating KeyFile %1 failed: %2 + Vytváření souboru s klíčem %1 se nezdařilo: %2 + + + Loading KeyFile %1 failed: %2 + Načítání souboru s klíčem %1 se nezdařilo: %2 + + + Remove an entry from the database. + Odebrat položku z databáze. + + + Path of the entry to remove. + Popis umístění položky k odebrání. + + + Existing single-instance lock file is invalid. Launching new instance. + Existující uzamykací soubor, zajišťující spuštění pouze jedné instance, není platný. Spouští se nová instance. + + + The lock file could not be created. Single-instance mode disabled. + Soubor se zámkem se nepodařilo vytvořit. Režim jediné instance proto vypnut. + + + KeePassXC - cross-platform password manager + KeePassXC – aplikace pro správu hesel, fungující na vícero operačních systémech + + + filenames of the password databases to open (*.kdbx) + soubory s databázemi hesel k otevření (*.kdbx) + + + path to a custom config file + umístění vlastního souboru s nastaveními + + + key file of the database + soubor s klíčem k databázi + + + read password of the database from stdin + načíst heslo k databázi ze standardního vstupu + + + Parent window handle + Obecný identifikátor (handle) nadřazeného okna + + + Another instance of KeePassXC is already running. + Již je spuštěná jiná instance KeePassXC. + + + Fatal error while testing the cryptographic functions. + Při zkoušení šifrovacích funkcí byl zjištěn fatální nedostatek. + + + KeePassXC - Error + KeePassXC – chyba + + + Database password: + Heslo databáze: + + + Cannot create new group + @@ -3649,11 +4894,97 @@ Příkazy k dispozici: - SearchWidget + SSHAgent - Search... - Hledat… + Agent connection failed. + Připojení k agentovi se nezdařilo. + + Agent protocol error. + Chyba protokolu agenta. + + + No agent running, cannot add identity. + Není spuštěný žádný agent, identitu nelze přidat. + + + No agent running, cannot remove identity. + Není spuštěný žádný agent, identitu není možné odebrat. + + + Agent refused this identity. Possible reasons include: + Agent tuto identitu odmítl. Mezi možné důvody patří: + + + The key has already been added. + Klíč už byl přidán. + + + Restricted lifetime is not supported by the agent (check options). + Omezená životnost není podporována agentem (zkontrolujte volby). + + + A confirmation request is not supported by the agent (check options). + Požadavek na potvrzení není podporován agentem (zkontrolujte volby). + + + + SearchHelpWidget + + Search Help + Nápověda ke hledání + + + Search terms are as follows: [modifiers][field:]["]term["] + Pojmy hledejte následovně: [modifikátory][kolonka:]["]pojem["] + + + Every search term must match (ie, logical AND) + Je třeba shody v každém hledaném termínu (tj, logické A) + + + Modifiers + Modifikátory + + + exclude term from results + vynechat pojem z výsledků + + + match term exactly + hledat přesnou shodu s pojmem + + + use regex in term + použít v pojmu regulární výraz + + + Fields + Kolonky + + + Term Wildcards + Zástupné znaky pojmu + + + match anything + shoda s čímkoli + + + match one + shoda s jedním + + + logical OR + logické NEBO + + + Examples + Příklady + + + + SearchWidget Search Hledat @@ -3662,318 +4993,335 @@ Příkazy k dispozici: Clear Vyčistit - - Case Sensitive - Rozlišovat velikost písmen - Limit search to selected group Omezit hledání na označenou skupinu + + Search Help + Nápověda ke hledání + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Hledat (%1)… + + + Case sensitive + Rozlišovat malá/velká písmena + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: nový požadavek na přiřazení klíče + Active + Aktivní - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Obdrželi jste požadavek na přiřazení výše uvedeného klíče. -Pokud jím chcete umožnit přístup do KeePassXC databáze, zadejte pro něj -neopakující se název pro identifikaci a potvrďte ho. + Allow export + Umožnit export - KeePassXC: Overwrite existing key? - KeePassXC: Přepsat stávající klíč? + Allow import + Umožnit import - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Již existuje sdílený šifrovací klíč s názvem „%1“. -Chcete ho přepsat? + Own certificate + Vlastní certifikát - KeePassXC: Update Entry - KeePassXC: Aktualizovat záznam + Fingerprint: + Otisk: - Do you want to update the information in %1 - %2? - Chcete aktualizovat údaj v %1 – %2? + Certificate: + Certifikát: - KeePassXC: Database locked! - KeePassXC: Databáze uzamčena! + Signer + Podepsal - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Právě otevřená databáze je uzamčená! -Buď jí odemkněte, nebo vyberte jinou, odemčenou. + Key: + Klíč: - KeePassXC: Removed keys from database - KeePassXC: Klíče odebrány z databáze + Generate + Tvoř + + + Import + Importovat + + + Export + Export + + + Imported certificates + Importované certifikáty + + + Trust + Důvěra + + + Ask + Ptát se + + + Untrust + Nevěřit + + + Remove + Odebrat + + + Path + Popis umístění + + + Status + Stav + + + Fingerprint + Otisk + + + Certificate + Certifikát + + + Trusted + Důvěryhodný + + + Untrusted + Nedůvěryhodný + + + Unknown + Neznámý + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + Soubor s klíček pro KeeShare + + + All files + Veškeré soubory + + + Select path + Vybrat umístění + + + Exporting changed certificate + Exportování změněného certifikátu + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Exportovaný certifikát se liší od toho, který je používán. Chcete exportovat stávající certifikát? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Importovat z kontejneru bez podpisu + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Není možné ověřit zdroj sdíleného kontejneru protože není podepsán. Opravdu chcete importovat z %1? + + + Import from container with certificate + Importovat z kontejneru s certifikátem + + + Not this time + Tentokrát ne + + + Never + Nikdy + + + Always + Vždy + + + Just this time + Jen pro teď + + + Import from %1 failed (%2) + Import z %1 se nezdařil (%2) + + + Import from %1 successful (%2) + Import z %1 úspěšný (%2) + + + Imported from %1 + Importováno z %1 + + + Signed share container are not supported - import prevented + Kontejner podepsaného sdílení není podporován – importu zabráněno + + + File is not readable + Soubor není čitelný + + + Invalid sharing container + Neplatný kontejner pro sdílení + + + Untrusted import prevented + Zabráněno nedůvěryhodnému importu + + + Successful signed import + Úspěšný podepsaný import + + + Unexpected error + Neočekávaná chyba + + + Unsigned share container are not supported - import prevented + Kontejner nepodepsaného sdílení není podporován – importu zabráněno + + + Successful unsigned import + Úspěšný nepodepsaný import + + + File does not exist + Soubor neexistuje + + + Unknown share container type + Neznámý typ kontejneru pro sdílení + + + Overwriting signed share container is not supported - export prevented + Přepsání podepsaného kontejneru sdílení není podporováno – exportu zabráněno + + + Could not write export container (%1) + Nedaří se zapsat exportní kontejner (%1) + + + Overwriting unsigned share container is not supported - export prevented + Přepsání nepodepsaného kontejneru sdílení není podporováno – exportu zabráněno + + + Could not write export container + Nedaří se zapsat do exportního kontejneru + + + Unexpected export error occurred + Došlo k neočekávané chybě exportu + + + Export to %1 failed (%2) + Export do %1 se nezdařil (%2) + + + Export to %1 successful (%2) + Export do %1 úspěšný (%2) + + + Export to %1 + Exportovat do %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Věříte %1 s otiskem %2 od %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Časované heslo + + + 000000 + 000000 + + + Copy + Kopírovat - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Úspěšně odebrán %n šifrovací klíč z nastavení KeePassX/Http.Úspěšně odebrány %n šifrovací klíče z nastavení KeePassX/Http.Úspěšně odebráno %n šifrovacích klíčů z nastavení KeePassX/Http.Úspěšně odebráno %n šifrovacích klíčů z nastavení KeePassX/Http. - - - KeePassXC: No keys found - KeePassXC: Klíče nebyly nalezeny - - - No shared encryption-keys found in KeePassHttp Settings. - V nastavení KeePassHttp nebyly nalezeny žádné sdílené šifrovací klíče. - - - KeePassXC: Settings not available! - KeePassXC: Nastavení nejsou k dispozici! - - - The active database does not contain an entry of KeePassHttp Settings. - Právě otevřená databáze neobsahuje žádný záznam nastavení KeePassHttp. - - - Removing stored permissions... - Odstraňování uložených oprávnění… - - - Abort - Přerušit - - - KeePassXC: Removed permissions - KeePassXC: Odebraná oprávnění - - - Successfully removed permissions from %n entries. - Úspěšně odebrána oprávnění z %n položky.Úspěšně odebrána oprávnění ze %n položek.Úspěšně odebrána oprávnění ze %n položek.Úspěšně odebrána oprávnění ze %n položek. - - - KeePassXC: No entry with permissions found! - KeePassXC: Nebyl nalezen záznam s oprávněními! - - - The active database does not contain an entry with permissions. - Právě otevřená databáze neobsahuje záznam s oprávněními. + Expires in <b>%n</b> second(s) + Platnost končí za <b>%n</b> sekunduPlatnost končí za %n sekundyPlatnost končí za %n sekundPlatnost končí za %n sekundy - SettingsWidget + TotpExportSettingsDialog - Application Settings - Nastavení aplikace + Copy + Kopírovat - General - Obecné + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + POZN.: Tato TOTP nastavení jsou uživatelská a nemusí fungovat s ostatními ověřovači. - Security - Zabezpečení + There was an error creating the QR code. + Došlo k chybě při vytváření QR kódu. - Access error for config file %1 - Chyba přístupu pro soubor s nastaveními %1 + Closing in %1 seconds. + Zavření za %1 sekund. - SettingsWidgetGeneral - - Basic Settings - Základní nastavení - - - Start only a single instance of KeePassXC - Spouštět pouze jedinou instanci KeePassXC - - - Remember last databases - Pamatovat si nedávno otevřené databáze - - - Remember last key files and security dongles - Pamatovat si minule použité soubory s klíči a zabezpečovací klíčenky - - - Load previous databases on startup - Při spouštění aplikace načíst minule otevřené databáze - - - Automatically save on exit - Před ukončením aplikace automaticky uložit případné změny - - - Automatically save after every change - Po každé změně hned automaticky uložit - - - Automatically reload the database when modified externally - V případě úpravy zvenčí, automaticky opětovně načíst databázi - - - Minimize when copying to clipboard - Po zkopírování údaje do schránky odklidit okno aplikace jeho automatickou minimalizací - - - Minimize window at application startup - Spouštět aplikaci s minimalizovaným oknem - - - Use group icon on entry creation - Pro vytvářený záznam použít ikonu skupiny, do které spadá - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Neoznačovat databázi jako upravenou při změnách, nepostihujících údaje (např. rozšíření skupin) - - - Hide the Details view - Skrýt podrobný pohled - - - Show a system tray icon - Zobrazovat ikonu v oznamovací oblasti systémového panelu - - - Hide window to system tray when minimized - Minimalizovat okno aplikace do oznamovací oblasti systémového panelu - - - Hide window to system tray instead of app exit - Namísto ukončení aplikace skrýt její okno do oznamovací oblasti systémového panelu - - - Dark system tray icon - Tmavá ikona v oznamovací oblasti systémového panelu - - - Language - Jazyk - - - Auto-Type - Automatické vyplňování - - - Use entry title to match windows for global Auto-Type - Použít titulek položky pro hledání shody s okny pro všeobecné automatické vyplňování - - - Use entry URL to match windows for global Auto-Type - Použít URL adresu položky pro hledání shody s okny pro všeobecné automatické vyplňování - - - Always ask before performing Auto-Type - Vždy se zeptat před provedením automatického vyplnění - - - Global Auto-Type shortcut - Klávesová zkratka pro všeobecné automatické vyplňování - - - Auto-Type delay - Prodleva automatického vyplnění - - - ms - Milliseconds - ms - - - Startup - Spouštění - - - File Management - Správa souboru - - - Safely save database files (may be incompatible with Dropbox, etc) - Ukládat databázové soubory bezpečně (může být neslučitelné s Dropbox, atd.) - - - Backup database file before saving - Před uložením zazálohovat databázový soubor - - - Entry Management - Správa záznamu - - - General - Obecné - - - - SettingsWidgetSecurity - - Timeouts - Časové limity - - - Clear clipboard after - Vymazat obsah schránky po uplynutí - - - sec - Seconds - sek. - - - Lock databases after inactivity of - Uzamknout databázi při nečinnosti delší než - - - Convenience - Pohodlí - - - Lock databases when session is locked or lid is closed - Zamknout databáze když je zamčena relace nebo je zavřeno víko notebooku - - - Lock databases after minimizing the window - Při minimalizaci okna uzamknout databáze - - - Don't require password repeat when it is visible - Pokud je viditelné, nevyžadovat zopakování zadání hesla - - - Show passwords in cleartext by default - Hesla vždy viditelná (nezakrývat hvězdičkami) - - - Hide passwords in the preview panel - Skrýt hesla v náhledovém panelu - - - Hide entry notes by default - Skrývat ve výchozím stavu poznámky k položkám - - - Privacy - Soukromí - - - Use Google as fallback for downloading website icons - Použít Google jako náhradní zdroj pro stahování ikon webů - - - Re-lock previously locked database after performing Auto-Type - Po provedení automatického vyplnění opět zamknout dříve uzamčenou databázi. - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP - Nastavit TOTP + Nastavit na času založené jednorázové heslo (TOTP) Key: @@ -3992,59 +5340,84 @@ Buď jí odemkněte, nebo vyberte jinou, odemčenou. Použít vlastní nastavení - Note: Change these settings only if you know what you are doing. - Pozn.: Tato nastavení měňte pouze pokud víte co děláte. + Custom Settings + Uživatelsky určená nastavení Time step: Časový krok: - 8 digits - 8 číslic - - - 6 digits - 6 číslic + sec + Seconds + sek. Code size: Velikost kódu: - sec - Seconds - sek. + 6 digits + 6 číslic + + + 7 digits + 7 číslic + + + 8 digits + 8 číslic - TotpDialog + UpdateCheckDialog - Timed Password - Časované heslo + Checking for updates + Zjišťování aktualizací - 000000 - 000000 + Checking for updates... + Zjišťování aktualizací… - Copy - Kopírovat + Close + Zavřít - Expires in - Platnost skončí za + Update Error! + Chyba aktualizace! - seconds - sekund + An error occurred in retrieving update information. + Došlo k chybě při získávání informací o aktualizacích. - - - UnlockDatabaseWidget - Unlock database - Odemknout databázi + Please try again later. + Zkuste to prosím znovu později. + + + Software Update + Aktualizace software + + + A new version of KeePassXC is available! + Je k dispozici nová verze KeePassXC! + + + KeePassXC %1 is now available — you have %2. + Nyní je k dispozici KeePassXC verze %1 ‒ nyní máte %2. + + + Download it at keepassxc.org + Stáhněte si z keepassxc.org + + + You're up-to-date! + Používáte aktuální verzi! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 je v tuto chvíli nejnovější dostupná verze @@ -4079,42 +5452,26 @@ Buď jí odemkněte, nebo vyberte jinou, odemčenou. - main + YubiKeyEditWidget - Remove an entry from the database. - Odebrat položku z databáze. + Refresh + Načíst znovu - Path of the database. - Umístění databáze. + YubiKey Challenge-Response + YubiKey výzva-odpověď - Path of the entry to remove. - Popis umístění položky k odebrání. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Pokud vlastníte zařízení <a href="https://www.yubico.com/">YubiKey</a>, můžete ho použít jako další úroveň zabezpečení.</p><p>YubiKey  vyžaduje aby jeden z jeho slotů byl naprogramován jako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 výzva-odpověď</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC – aplikace pro správu hesel, fungující na vícero operačních systémech + No YubiKey detected, please ensure it's plugged in. + Nezjištěno žádné YubiKey zařízení – ověřte, že je připojené. - filenames of the password databases to open (*.kdbx) - soubory s databázemi hesel k otevření (*.kdbx) - - - path to a custom config file - umístění vlastního souboru s nastaveními - - - key file of the database - soubor s klíčem k databázi - - - read password of the database from stdin - načíst heslo k databázi ze standardního vstupu - - - Parent window handle - Obecný identifikátor (handle) nadřazeného okna + No YubiKey inserted. + Není připojeno žádné Yubikey zařízení. \ No newline at end of file diff --git a/share/translations/keepassx_da.ts b/share/translations/keepassx_da.ts index 88ea408dd..558cfbd6f 100644 --- a/share/translations/keepassx_da.ts +++ b/share/translations/keepassx_da.ts @@ -37,36 +37,6 @@ Copy to clipboard Kopier til udklipsholder - - Version %1 - - Version %1 - - - - Revision: %1 - Revision: %1 - - - Distribution: %1 - Distribution: %1 - - - Libraries: - Biblioteker: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operativsystem: %1 -CPU-arkitektur: %2 -Kerne: %3 %4 - - - Enabled extensions: - Aktiverede udvidelser: - Project Maintainers: Projektet vedligeholdes af: @@ -75,37 +45,6 @@ Kerne: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Særlig tak fra KeePassXC holdet går til debfx for at udvikle den oprindelige KeePassX. - - Build Type: %1 - - Opret type:%1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Bekræft Adgang - - - Remember this decision - Husk dette valg - - - Allow - Tillad - - - Deny - Afvis - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 har forespurgt adgang til kodeord tilhørende disse element(er). -Vælg venligst hvorvidt du vil tillade denne adgang. - AgentSettingsWidget @@ -113,6 +52,277 @@ Vælg venligst hvorvidt du vil tillade denne adgang. Enable SSH Agent (requires restart) Slå SSH Agenten til (kræver genstart) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Programindstillinger + + + General + Generelt + + + Security + Sikkerhed + + + Access error for config file %1 + Adgangsfejl for konfigurationsfil %1 + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Grundlæggende indstillinnger + + + Startup + Opstart + + + Start only a single instance of KeePassXC + Start kun en enkelt instans af KeePassXC + + + Remember last databases + Husk seneste databaser + + + Remember last key files and security dongles + Husk de sidste nøglefiler og sikkerhedsdongler + + + Load previous databases on startup + Load den forrige database ved opstart + + + Minimize window at application startup + Minimér vindue ved opstart + + + File Management + Filhåndtering + + + Safely save database files (may be incompatible with Dropbox, etc) + Gem databasefiler sikkert (kan være inkompatibelt med Dropbox, etc.) + + + Backup database file before saving + Lav backup af databasefil før der gemmes + + + Automatically save after every change + Gem automatisk ved ændringer + + + Automatically save on exit + Gem automatisk ved afslutning + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Markér ikke databasen som ændret når ikke-data ændres (f.eks. udvidelse af grupper) + + + Automatically reload the database when modified externally + Load automatisk databasenn når den bliver ændret udefra + + + Entry Management + Posthåndtering + + + Use group icon on entry creation + Brug gruppeikon ved oprettelse af post + + + Minimize when copying to clipboard + Minimér ved kopiering til udklipsholder + + + Hide the entry preview panel + + + + General + Generelt + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + Vis et ikon i systembakken + + + Dark system tray icon + Mørk ikon i systembakken + + + Hide window to system tray when minimized + Skjul vindue i systembakken når det er minimeret + + + Language + Sprog + + + Auto-Type + Auto-Indsæt + + + Use entry title to match windows for global Auto-Type + Brug post-titel til at matche vinduer for global Auto-Indsæt + + + Use entry URL to match windows for global Auto-Type + Brug post-URL til at matche vinduer for global Auto-Indsæt + + + Always ask before performing Auto-Type + Spørg altid for Auto-Indsæt udføres + + + Global Auto-Type shortcut + Global Auto-Indsæt genvej + + + Auto-Type typing delay + + + + ms + Milliseconds + ms + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Timeouts + + + Clear clipboard after + Ryd udklipsholder efter + + + sec + Seconds + sek + + + Lock databases after inactivity of + Lås databaserne efter inaktivitet i + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + Bekvemmelighed + + + Lock databases when session is locked or lid is closed + Lås databaser når sessionen låses eller låget er lukket + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + Lås databaser efter at minimere vinduet + + + Re-lock previously locked database after performing Auto-Type + Lås tidligere låste databaser efter udførsel af Auto-Indsæt + + + Don't require password repeat when it is visible + Kræv ikke kodeord gentaget når det er synligt + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + Skjul post-noter som standard + + + Privacy + Privatliv + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -215,6 +425,26 @@ Please select whether you want to allow access. Vælg venligst hvorvidt du vil tillade denne adgang. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + Afbryd + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -268,7 +498,7 @@ Vælg venligst hvorvidt du vil tillade denne adgang. &Match URL scheme (e.g., https://...) - &Match URL skemaer + &Match URL skemaer (f.eks., https://...) Only returns the best matches for a specific URL instead of all entries for the whole domain. @@ -288,14 +518,6 @@ Vælg venligst hvorvidt du vil tillade denne adgang. Credentials mean login data requested via browser extension Sorter matchende poster efter &brugernavn - - &Disconnect all browsers - &Fjern tilslutning til alle browsere - - - Forget all remembered &permissions - Fjern alle tilladelser fra hukommelse - Advanced Avanceret @@ -361,21 +583,42 @@ Vælg venligst hvorvidt du vil tillade denne adgang. <b>Warning:</b> The following options can be dangerous! <b>Advarsel:</b>De følgende instillinger kan være farlige! - - Executable Files (*.exe);;All Files (*.*) - Eksekverbare Filer (*.exe);;Alle Filer (*.*) - - - Executable Files (*) - Eksekverbare Filer (*) - Select custom proxy location Vælg en brugerdefineret proxy lokation - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - KeePassXC-Browser er desværre ikke understøttet for Snap udgivelser endnu. + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,153 +659,54 @@ Vil du overskrive den? Do you want to update the information in %1 - %2? Vil du opdatere oplysningerne i %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Database låst! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Den aktive database er låst! -Lås den valgte database op eller vælg en anden som er åbnet. - - - KeePassXC: Settings not available! - KeePassXC: Indstilling er ikke tilgængelig! - - - The active database does not contain a settings entry. - Den aktive database inderholder ikke en post med indstillinger. - - - KeePassXC: No keys found - KeePassXC: Ingen nøgler fundet - - - No shared encryption keys found in KeePassXC Settings. - Ingen delte krypertingsnøgler fundet i KeePassXC Indstillinger. - - - KeePassXC: Removed keys from database - KeePassXC: Fjernede nøgler fra database - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - Fjerner gemte tilladelser... - Abort Afbryd - KeePassXC: Removed permissions - KeePassXC: Fjernede tilladelser + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: Ingen nøgler fundet + KeePassXC: No entry with KeePassHTTP attributes found! + - The active database does not contain an entry with permissions. - Den aktive database indholder ikke en post med tilladelser - - - - ChangeMasterKeyWidget - - Password - Kodeord + The active database does not contain an entry with KeePassHTTP attributes. + - Enter password: - Indtast kodeord + KeePassXC: Legacy browser integration settings detected + - Repeat password: - Gentag kodeord + KeePassXC: Create a new group + - &Key file - &Key fil + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Gennemse - - - Create - Opret - - - Cha&llenge Response - Udfordring Svar - - - Refresh - Genopfrisk - - - Key files - Nøglefiler - - - All files - Alle filer - - - Create Key File... - Opret Nøglefil... - - - Unable to create Key File : - Kan ikke oprette Nøglefil : - - - Select a key file - Vælg en nøglefil - - - Empty password - Tomt kodeord - - - Do you really want to use an empty string as password? - Vil du virkelig bruge en tom streng som kodeord? - - - Different passwords supplied. - Andre kodeord leveret. - - - Failed to set %1 as the Key file: -%2 - Kunne ikke sætte %1 som Nøglefil: -%2 - - - Legacy key file format - Forældet nøglefilformat - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Du benytter et forældet nøglefilformat, som muligvis ikke vil blive understøttet i fremtiden. - -Overvej at generere en ny nøglefil. - - - Changing master key failed: no YubiKey inserted. - Kunne ikke skifte hovednøgle: ingen YubiKey indsat. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -642,14 +786,6 @@ Overvej at generere en ny nøglefil. Not present in CSV file Ikke til stede i CSV-fil - - Empty fieldname - Tomt feltnavn - - - column - kolonne - Imported from CSV file Importeret fra CSV-fil @@ -658,49 +794,89 @@ Overvej at generere en ny nøglefil. Original data: Original data: - - Error(s) detected in CSV file ! - Fejl detekteret i CSV-fil ! - - - more messages skipped] - flere beskeder blev sprunget over] - Error Fejl + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - CSV import: udskriver har fejl: - - - - - CsvImportWizard - - Error - Fejl - - - Unable to calculate master key - Kan ikke beregne hovednøgle +%1 + CsvParserModel - - %n byte(s), - %n byte(s),%n byte(s), - - - %n row(s), - %n række(r),%n række(r), - %n column(s) - %n kolonne(r)%n kolonne(r) + + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + Rod + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + @@ -729,14 +905,6 @@ Overvej at generere en ny nøglefil. Challenge Response: Udfordring Svar - - Unable to open the database. - Kan ikke åbne databasen. - - - Can't open key file - Kan ikke åbne nøglefil - Legacy key file format Forældet nøglefilformat @@ -766,53 +934,248 @@ Overvej at generere en ny nøglefil. Select key file Vælg nøglefil - - - DatabaseRepairWidget - Repair database - Reparer database + TouchID for quick unlock + - Error - Fejl + Unable to open the database: +%1 + - Can't open key file - Kan ikke åbne nøglefil - - - Unable to open the database. - Kan ikke åbne databasen. - - - Database opened fine. Nothing to do. - Databasen åbnede fint. Intet at gøre. - - - Success - Succes - - - The database has been successfully repaired -You can now save it. - Databasen er blevet succesfuldt repareret -Du kan gemme den nu. - - - Unable to repair the database. - Kan ikke reparere databasen. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Kodeord + + + + DatabaseSettingsDialog + + Advanced Settings + + General Generelt - Encryption - Kryptering + Security + Sikkerhed + + + Master Key + + + + Encryption Settings + + + + Browser Integration + Browser-integration + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + &Fjern tilslutning til alle browsere + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + Fjern + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + Nøgle + + + Value + Værdi + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: Ingen nøgler fundet + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: Fjernede nøgler fra database + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Fjerner gemte tilladelser... + + + Abort + Afbryd + + + KeePassXC: Removed permissions + KeePassXC: Fjernede tilladelser + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: Ingen nøgler fundet + + + The active database does not contain an entry with permissions. + Den aktive database indholder ikke en post med tilladelser + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Krypteringsalgoritme + + + AES: 256 Bit (default) + AES: 256 Bit (standard) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Nøgleafledningsfunktion + + + Transform rounds: + Transformationsrunder: + + + Benchmark 1-second delay + Benchmark 1-sekunds forsinkelse + + + Memory Usage: + Hukommelsesforbrug + + + Parallelism: + Parallelitet: + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -866,40 +1229,15 @@ Hvis du beholder dette antal, så kan din database være nem af knække!Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Krypteringsalgoritme + + %1 ms + milliseconds + - - AES: 256 Bit (default) - AES: 256 Bit (standard) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Nøgleafledningsfunktion - - - Transform rounds: - Transformationsrunder: - - - Benchmark 1-second delay - Benchmark 1-sekunds forsinkelse - - - Memory Usage: - Hukommelsesforbrug - - - Parallelism: - Parallelitet + + %1 s + seconds + @@ -950,12 +1288,83 @@ Hvis du beholder dette antal, så kan din database være nem af knække! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Rod + Sharing + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + Ukendt fejl + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 Database @@ -968,30 +1377,10 @@ Hvis du beholder dette antal, så kan din database være nem af knække!Open database Åben database - - File not found! - Filen blev ikke fundet! - - - Unable to open the database. - Kan ikke åbne databasen. - - - File opened in read only mode. - Fil åbnet i skrivebeskyttet tilstand - - - Open CSV file - Åbn CSV-fil - CSV file CSV-fil - - All files (*) - Alle filer (*) - Merge database Flet database @@ -1004,38 +1393,6 @@ Hvis du beholder dette antal, så kan din database være nem af knække!KeePass 1 database KeePass 1 database - - Close? - Luk? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" er i redigeringstilstand. -Kassér ændringer og luk alligevel? - - - Save changes? - Gem ændringer? - - - "%1" was modified. -Save changes? - "%1" blev ændret. -Gem disse ændringer? - - - Writing the database failed. - Kan ikke skrive til databasen. - - - Passwords - Kodeord - - - Save database as - Gem database som - Export database to CSV file Eksportér databasen til CSV-fil @@ -1045,40 +1402,40 @@ Gem disse ændringer? Kan ikke skrive til CSV-fil. - New database - Ny database + Database creation error + - locked - låst + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - Lock database - Lås database + The database file does not exist or is not accessible. + - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Kan ikke låse databasen, mens du redigerer i den. -Tryk på Afbryd for at afslutte dine ændringer eller kassere dem. + Select CSV file + - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Denne database er blevet ændret. -Vil du gemme databasen før låsning? -Ellers mister du dine ændringer. + New Database + - Disable safe saves? - Slå sikre gem til? + %1 [New Database] + Database tab name modifier + - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC har ikke været i stand til at gemme databasen flere gange. Dette er formentlig fordi en filsynkroniseringstjeneste har en lås på filen. -Så sikre gem fra og prøv igen? + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + @@ -1087,41 +1444,17 @@ Så sikre gem fra og prøv igen? Searching... Søger... - - Change master key - Skift hovednøgle - - - Delete entry? - Slet post? - Do you really want to delete the entry "%1" for good? Vil du virkelig slette posten "%1" permanent? - - Delete entries? - Slet poster? - - - Do you really want to delete %1 entries for good? - Vil du virkelig slette %1 poster permanent? - - - Move entry to recycle bin? - Flyt post til papirkurven? - Do you really want to move entry "%1" to the recycle bin? Ønsker du virkelig at rykke post "%1" til skraldespanden? - - Move entries to recycle bin? - Flyt poster til skraldespanden? - Do you really want to move %n entry(s) to the recycle bin? - Ønsker du virkelig at flytte %n post over i papirkurven?Ønsker du virkelig at flytte %n poster over i papirkurven? + Execute command? @@ -1133,20 +1466,12 @@ Så sikre gem fra og prøv igen? Remember my choice - - - - Delete group? - Slet gruppe? + Husk mit valg Do you really want to delete the group "%1" for good? Ønsker du at slette gruppen "%1" permanent? - - Unable to calculate master key - Kan ikke beregne hovednøgle - No current database. Ingen database valgt @@ -1180,10 +1505,6 @@ Så sikre gem fra og prøv igen? Do you want to merge your changes? Database-filen har ændringer og du har ændringer som du ikke har gemt. Vil du kombinere dine ændringer med databasens? - - Could not open the new database file while attempting to autoreload this database. - - Empty recycle bin? Tøm skraldespanden? @@ -1192,88 +1513,108 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? Er du sikker på at du vil permanent slette alt fra din skraldespand? - - - DetailsWidget - - Generate TOTP Token - Generér TOTP Token + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - Luk + File opened in read only mode. + Fil åbnet i skrivebeskyttet tilstand - General - Generelt + Lock Database? + - Password + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" blev ændret. +Gem disse ændringer? + + + Database was modified. +Save changes? + + + + Save changes? + Gem ændringer? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + Slå sikre gem til? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC har ikke været i stand til at gemme databasen flere gange. Dette er formentlig fordi en filsynkroniseringstjeneste har en lås på filen. +Så sikre gem fra og prøv igen? + + + Writing the database failed. +%1 + + + + Passwords Kodeord - URL - URL + Save database as + Gem database som - Expiration - Udløbsdato + KeePass 2 Database + KeePass 2 Database - Username - Brugernavn + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Autotype - Auto-Indsæt + Delete group + Slet gruppe - Searching - Søger + Move group to recycle bin? + - Attributes - Attributter + Do you really want to move the group "%1" to the recycle bin? + - Attachments - Vedhæftninger + Successfully merged the database files. + - Notes - Noter + Database was not modified by merge operation. + - Window - Vindue - - - Sequence - Sekvens - - - Search - Søg - - - Clear - Ryd - - - Never - Aldrig - - - [PROTECTED] - [BESKYTTET] - - - Disabled - Deaktiveret - - - Enabled - Aktiveret + Shared group... + @@ -1320,7 +1661,7 @@ Do you want to merge your changes? File too large to be a private key - + Filen er for stor til at være en privat nøgle Failed to open private key @@ -1346,37 +1687,21 @@ Do you want to merge your changes? New attribute Ny attribut - - Confirm Remove - Bekræft sletning - Are you sure you want to remove this attribute? Er du sikker på at du vil fjerne denne attribut? - - [PROTECTED] - [BESKYTTET] - - - Press reveal to view or edit - Tryk vis for at se og ændre - Tomorrow I morgen %n week(s) - %n uge%n uger + %n month(s) - %n måned%n måneder - - - 1 year - Et år + Apply generated password? @@ -1390,6 +1715,26 @@ Do you want to merge your changes? Entry updated successfully. Post blev succesfuldt opdateret. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1442,7 +1787,7 @@ Do you want to merge your changes? &Use custom Auto-Type sequence: - + Brug brugerdefineret Auto-Indsæt sekvens: Window Associations @@ -1634,6 +1979,97 @@ Do you want to merge your changes? Arv fra forældregruppe (%1) + + EditGroupWidgetKeeShare + + Form + Formular + + + Type: + + + + Path: + + + + ... + + + + Password: + Kodeord: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + Ryd + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1691,10 +2127,6 @@ Do you want to merge your changes? Unable to fetch favicon. Kan ikke hente favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Forslag: Du kan slå Google til som nødløsning under Værktøj>Indstillinger>Sikkerhed - Images Billeder @@ -1703,14 +2135,6 @@ Do you want to merge your changes? All files Alle filer - - Select Image - Vælg Billede - - - Can't read icon - Kan ikke læse ikon - Custom icon already exists Brugervalgt ikon findes allerede @@ -1720,8 +2144,36 @@ Do you want to merge your changes? Bekræft sletning - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Dette ikon bliver brugt af %1 poster, and will blive erstattet af standard-ikonet. Er du sikker på at du vil slette det? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1752,7 +2204,7 @@ Do you want to merge your changes? Delete plugin data? - Slet plugin data + Slet plugin data? Do you really want to delete the selected plugin data? @@ -1772,9 +2224,8 @@ Dette kan få det påvirkede plugin til at svigte. Entry - - Clone - Suffix added to cloned entries - - Klon + %1 - Clone + @@ -1818,10 +2269,6 @@ Dette kan få det påvirkede plugin til at svigte. Are you sure you want to remove %n attachment(s)? - - Confirm Remove - Bekræft sletning - Save attachments Gem vedhæftninger @@ -1859,10 +2306,13 @@ Dette kan få det påvirkede plugin til at svigte. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - Kunne ikke åbne filer: -%1 + @@ -1946,6 +2396,106 @@ Dette kan få det påvirkede plugin til at svigte. Attachments Vedhæftninger + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + Generér TOTP Token + + + Close + Luk + + + General + Generelt + + + Username + Brugernavn + + + Password + Kodeord + + + Expiration + Udløbsdato + + + URL + URL + + + Attributes + Attributter + + + Attachments + Vedhæftninger + + + Notes + Noter + + + Autotype + Auto-Indsæt + + + Window + Vindue + + + Sequence + Sekvens + + + Searching + Søger + + + Search + Søg + + + Clear + Ryd + + + Never + Aldrig + + + [PROTECTED] + [BESKYTTET] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + Aktiveret + + + Disabled + Deaktiveret + + + Share + + EntryView @@ -1984,6 +2534,11 @@ Dette kan få det påvirkede plugin til at svigte. Recycle Bin Skraldespand + + [empty] + group has no children + + HostInstaller @@ -1993,62 +2548,7 @@ Dette kan få det påvirkede plugin til at svigte. Cannot save the native messaging script file. - - - - - HttpPasswordGeneratorWidget - - Length: - Længde: - - - Character Types - Tegntyper - - - Upper Case Letters - Store Bogstaver - - - A-Z - A-Z - - - Lower Case Letters - Små Bogstaver - - - a-z - a-z - - - Numbers - Numre - - - 0-9 - 0-9 - - - Special Characters - Specialtegn - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Udeluk lool-alike tegn - - - Ensure that the password contains characters from every group - Vær sikker på at dit kodeord indeholder tegn fra alle grupper - - - Extended ASCII - Udvidet ASCII + Kan ikke gemme besked-script filen! @@ -2076,6 +2576,26 @@ Dette kan få det påvirkede plugin til at svigte. Wrong key or database file is corrupt. Forkert nøgle eller databasefil er korrupt. + + missing database headers + Database headers mangler + + + Header doesn't match hash + + + + Invalid header id size + Invalid størrelse for gruppefelt + + + Invalid header field length + Invalid størrelse i headerfelt + + + Invalid header data length + Invalid størrelse i headerfelt + Kdbx3Writer @@ -2112,7 +2632,7 @@ Dette kan få det påvirkede plugin til at svigte. Unknown cipher - + Ukendt ciffer Invalid header id size @@ -2234,10 +2754,6 @@ Dette kan få det påvirkede plugin til at svigte. KdbxReader - - Invalid cipher uuid length - Invalid ciffer uuid længde - Unsupported cipher Ikke understøttet ciffer @@ -2272,7 +2788,7 @@ Dette kan få det påvirkede plugin til at svigte. Invalid inner random stream cipher - + Invalid ciffer for indre tilfældig strøm Not a KeePass database. @@ -2292,6 +2808,18 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Unsupported KeePass 2 database version. Ikke understøttet KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2363,10 +2891,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo History element with different uuid Historiske elementer med forskelligt uuid - - Unable to decrypt entry string - Ikke i stand til at dekyptere post-streng - Duplicate custom attribute found Fandt ens brugerdefineret attribut @@ -2416,6 +2940,12 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Translator meant is a binary data inside an entry Kan ikke dekomprimere binær data + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2436,7 +2966,7 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Not a KeePass database. - Ikke en KeePass database. + Dette er ikke en KeePass database. Unsupported encryption algorithm. @@ -2444,7 +2974,7 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Unsupported KeePass database version. - Ikke understøttet KeePass database version + KeePass database version ikke understøttet. Unable to read encryption IV @@ -2579,55 +3109,142 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Invalid entry field type Invalid post-felt-type - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – anbefalet) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Eksisterende enkelt-instans låsefil er invalid. Starter ny instans. + Disabled share + - The lock file could not be created. Single-instance mode disabled. - Låsefil kunne ikke oprettes. Enkelt-instans-tilstand slået fra. + Import from + - Another instance of KeePassXC is already running. - En anden instans af KeePassXC kører allerede. + Export to + - Fatal error while testing the cryptographic functions. - Fatal fejl ved test af kryptografiske funktioner. + Synchronize with + - KeePassXC - Error - KeePassXC - Fejl + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + Afbryd + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Gennemse + + + Generate + Opret + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + Forældet nøglefilformat + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Nøglefiler + + + All files + Alle filer + + + Create Key File... + Opret Nøglefil... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Vælg en nøglefil @@ -2640,25 +3257,13 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo &Recent databases &Seneste databaser - - Import - Importér - &Help - %Hjælp + &Hjælp E&ntries - Poster - - - Copy att&ribute to clipboard - Kopiér att&ribute til udklipsholder - - - Time-based one-time password - Tidsbaseret engangskodeord + &Poster &Groups @@ -2666,7 +3271,7 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo &Tools - + &Værktøj &Quit @@ -2674,7 +3279,7 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo &About - &O + &Om &Open database... @@ -2688,30 +3293,10 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo &Close database &Luk database - - &New database - &Ny database - - - Merge from KeePassX database - Flet og kombiner fra KeePassX database - - - &Add new entry - &Tilføj ny post - - - &View/Edit entry - &Vis/Rediger post - &Delete entry &Slet post - - &Add new group - &Tilføj ny gruppe - &Edit group &Rediger gruppe @@ -2724,14 +3309,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Sa&ve database as... Gem database som - - Change &master key... - Skift &hovednøgle... - - - &Database settings - &Databaseindstillinger - Database settings Databaseindstillinger @@ -2740,10 +3317,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo &Clone entry &Klon post - - &Find - &Find - Copy &username Kopier &brugernavn @@ -2752,10 +3325,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Copy username to clipboard Kopiér brugernavn til udklipsholder - - Cop&y password - Kopier kodeord - Copy password to clipboard Kopiér kodeord til udklipsholder @@ -2768,14 +3337,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Password Generator Kodeordsgenerator - - &Perform Auto-Type - &Udfør Auto-Indsæt - - - &Open URL - &Åbn URL - &Lock databases %Lås databaser @@ -2808,22 +3369,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo &Export to CSV file... &Eksporter til CSV-fil... - - Import KeePass 1 database... - Importér KeePass 1 database... - - - Import CSV file... - Importér CSV-fil... - - - Re&pair database... - Reparer database - - - Show TOTP - Vis TOTP - Set up TOTP... Indstil TOTP... @@ -2844,14 +3389,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Access error for config file %1 Adgangsfejl for konfigurationsfil %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Det ser ud til at du bruger KeePassHTTP til browser-integration. Denne funktion er forældet og vil blive fjernet i fremtiden.<br>Skift til KeePassXC-Browser i stedet. Besøg vores <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">konverteringsguide</a> for at få hjælp (advarsel %1 af 3). </p> - - - read-only - skrivebeskyttet - Settings Indstillinger @@ -2864,26 +3401,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo Quit KeePassXC Luk KeePassXC - - KeePass 2 Database - KeePass 2 Database - - - All files - Alle filer - - - Open database - Åben database - - - Save repaired database - Gem repareret database - - - Writing the database failed. - Skrivning til database fejler. - Please touch the button on your YubiKey! Tryk på knappen på din YubiKey! @@ -2896,6 +3413,267 @@ This version is not meant for production use. Der er høj risiko for korruption, sørg for at have en backup af dine databaser. Denne version er ikke beregnet til at blive brugt i produktion. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Rod + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2997,125 +3775,30 @@ Denne version er ikke beregnet til at blive brugt i produktion. - OptionDialog + PasswordEditWidget - Dialog - Dialog + Enter password: + Indtast kodeord - This is required for accessing your databases from ChromeIPass or PassIFox - Dette er nødvendigt for at tilgå din database med ChromeIPass eller PassIFox + Confirm password: + - Enable KeePassHTTP server - Slå KeePassHTP server til + Password + Kodeord - General - Generelt + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Vis en notifikation når legitimationsoplysninger forespørges + Passwords do not match. + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Returner kun det bedste match for en specifik URL i stedet for alle matches for hele domænet. - - - &Return only best matching entries - &Returnér kun de bedst matchende poster - - - Re&quest to unlock the database if it is locked - Anmod om at låse databasen op hvis den er låst - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Kun poster med samme skema (http://, https://, ftp://, ...) bliver returneret. - - - &Match URL schemes - &Match URL skemaer - - - Sort matching entries by &username - Sorter matchende poster efter &brugernavn - - - Sort &matching entries by title - Sorter &passende poster efter navn - - - R&emove all shared encryption keys from active database - Fjern alle delte krypteringsnøgler i den aktive database - - - Re&move all stored permissions from entries in active database - Fjern alle gemte tilladelser fra poster i den aktive database - - - Password Generator - Kodeordsgenerator - - - Advanced - Avanceret - - - Always allow &access to entries - Tillad altid &adgang til poster - - - Always allow &updating entries - Tillad alltid &optaterede poster - - - Only the selected database has to be connected with a client. - Kun den valgte database er nødt til at være forbundet med en klient. - - - Searc&h in all opened databases for matching entries - &Returnér kun de bedst matchende poster - - - Automatically creating or updating string fields is not supported. - At automatisk skabe eller opdatere tekst-felter er ikke understøttet. - - - &Return advanced string fields which start with "KPH: " - &Vis avancerede tekst felter som begynder med "KPH:" - - - HTTP Port: - HTTP Port: - - - Default port: 19455 - Standard port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC vil lytte til dette port på 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Advarsel:</b>De følgende instillinger kan være farlige! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP er forældet og vil blive fjernet i fremtiden.<br>Skift til KeePassXC-Browser i stedet! Besøg vores <a href="https://keepassxc.org/docs/keepassxc-browser-migration">konverteringsguide</a> for at få hjælp.</p> - - - Cannot bind to privileged ports - Kan ikke forbinde via priviligerede porte - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Kan ikke forbinde til prioriterede port under 1024! -Bruger standard port 19455. + Generate master password + @@ -3185,17 +3868,9 @@ Bruger standard port 19455. Wordlist: Ordliste: - - Word Count: - Antal ord: - Word Separator: - Ord separator - - - Generate - Opret + Ord separator: Copy @@ -3209,10 +3884,6 @@ Bruger standard port 19455. Close Luk - - Apply - Entropy: %1 bit - Entropy: %1 bit Entropy: %1 bit @@ -3241,6 +3912,171 @@ Bruger standard port 19455. Password quality Udmærket + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Avanceret + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Slet + + + Move + + + + Empty + + + + Remove + Fjern + + + Skip + + + + Disable + Deaktivér + + + Merge + + QObject @@ -3260,34 +4096,18 @@ Bruger standard port 19455. Cannot decrypt message Kan ikke dekryptere besked - - Timeout or cannot connect to KeePassXC - Tiden er udløbet eller var ikke i stand til at forbinde til KeePassXC - Action cancelled or denied Handling afbrudt eller nægtet - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Kan ikke kryptere besked eller den offentlige nøgle blev ikke fundet. Er native beskedhåndtering slået til i KeePassXC? - KeePassXC association failed, try again KeePassXC associering fejlede, prøv igen - - Key change was not successful - Nøgleændring fejlede - Encryption key is not recognized Krypteringsnøgle ikke genkendt - - No saved databases found - Ingen gemt database fundet - Incorrect action Forkert handling @@ -3310,7 +4130,7 @@ Bruger standard port 19455. Add a new entry to a database. - Tilføj en ny post til en database + Tilføj en ny post til en database. Path of the database. @@ -3403,7 +4223,7 @@ Bruger standard port 19455. Extract and print the content of a database. - Udtræk og print indeholdet af en database. + Dekomprimer og print indeholdet af en database. Path of the database to extract. @@ -3413,10 +4233,6 @@ Bruger standard port 19455. Insert password to unlock %1: Indsæt kodeord for at låse %1 op: - - Failed to load key file %1 : %2 - Kunne ikke indlæse nøglefil %1 : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3498,16 +4314,11 @@ Tilgængelige kommandoer: error reading from device - - - - file empty ! - - + fejl ved læsning fra enhed malformed string - + Misdannet streng missing closing quote @@ -3541,10 +4352,6 @@ Tilgængelige kommandoer: Created Oprettet - - Legacy Browser Integration - Forældet Browser-integration - Browser Integration Browser-integration @@ -3573,10 +4380,6 @@ Tilgængelige kommandoer: Word count for the diceware passphrase. Antal af ord for diceware nøglefrase. - - count - antal - Wordlist for the diceware generator. [Default: EFF English] @@ -3588,28 +4391,442 @@ Tilgængelige kommandoer: Generér et nyt tilfædligt kodeord. - Length of the generated password. - Længde af det genererede kodeord. + Invalid value for password length %1. + - Use lowercase characters in the generated password. - Brug små bogstaver i det genererede kodeord. + Could not create entry with path %1. + - Use uppercase characters in the generated password. - Brug store bogstaver i det genererede kodeord. + Enter password for new entry: + - Use numbers in the generated password. - Brug tal i det genererede kodeord. + Writing the database failed %1. + - Use special characters in the generated password. - Brug specielle karakterer i det genererede kodeord. + Successfully added entry %1. + - Use extended ASCII in the generated password. - Brug udvidet ASCII i det genererede kodeord. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + antal + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – anbefalet) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Fjern en post fra databasen. + + + Path of the entry to remove. + Sti til posten, som skal fjernes. + + + Existing single-instance lock file is invalid. Launching new instance. + Eksisterende enkelt-instans låsefil er invalid. Starter ny instans. + + + The lock file could not be created. Single-instance mode disabled. + Låsefil kunne ikke oprettes. Enkelt-instans-tilstand slået fra. + + + KeePassXC - cross-platform password manager + KeePassXC - password manager til flere platforme + + + filenames of the password databases to open (*.kdbx) + Filnavne på de kodeordsdatabaser som skal åbnes (*.kdbx) + + + path to a custom config file + sti til brugerdefineret indstillingsfil + + + key file of the database + databasens nøglefil + + + read password of the database from stdin + Læs kodeord til databasen fra stdin + + + Parent window handle + Forældrevindue handle + + + Another instance of KeePassXC is already running. + En anden instans af KeePassXC kører allerede. + + + Fatal error while testing the cryptographic functions. + Fatal fejl ved test af kryptografiske funktioner. + + + KeePassXC - Error + KeePassXC - Fejl + + + Database password: + + + + Cannot create new group + @@ -3647,11 +4864,97 @@ Tilgængelige kommandoer: - SearchWidget + SSHAgent - Search... - Søg... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Søg @@ -3660,315 +4963,332 @@ Tilgængelige kommandoer: Clear Ryd - - Case Sensitive - Versalfølsom - Limit search to selected group Begræns søgning til den valgte gruppe + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + Versalfølsom + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Ny nøgleassocieringsanmodelse + Active + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Du har modtaget en associeringsanmodelse for the ovenstående nøgle. -Hvis du gerne vil give den adgang til din KeePassXC database, -så giv den et unikt navn for at kunne identificere den og accepter den. + Allow export + - KeePassXC: Overwrite existing key? - KeePassXC: Overskriv eksisterende nøgle? + Allow import + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - En delt krypteringsnøgle med navnet "%1" findes allerede. -Vil du overskrive den? + Own certificate + - KeePassXC: Update Entry - KeePassXC: Opdater post + Fingerprint: + - Do you want to update the information in %1 - %2? - Vil du opdatere oplysningerne i %1 - %2? + Certificate: + - KeePassXC: Database locked! - KeePassXC: Database låst! + Signer + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Den aktive database er låst! -Lås den valgte database op eller vælg en anden som er åbnet. + Key: + Nøgle: - KeePassXC: Removed keys from database - KeePassXC: Fjernede nøgler fra database + Generate + Opret + + + Import + Importér + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Fjern + + + Path + + + + Status + + + + Fingerprint + Fingeraftryk + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Alle filer + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + Aldrig + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Tidsbaseret kodeord + + + 000000 + 000000 + + + Copy + Kopier - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) - - KeePassXC: No keys found - KeePassXC: Ingen nøgler fundet - - - No shared encryption-keys found in KeePassHttp Settings. - Ingen delte krypteringsnøgler fundet i KeePassHttp indstillinger. - - - KeePassXC: Settings not available! - KeePassXC: Indstilling er ikke tilgængelig! - - - The active database does not contain an entry of KeePassHttp Settings. - Den aktive database indeholder ikke en post med KeePassHttp indstillinger. - - - Removing stored permissions... - Fjerner gemte tilladelser... - - - Abort - Afbryd - - - KeePassXC: Removed permissions - KeePassXC: Fjernede tilladelser - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC: Ingen nøgler fundet - - - The active database does not contain an entry with permissions. - Den aktive database indholder ikke en post med tilladelser - - SettingsWidget + TotpExportSettingsDialog - Application Settings - Programindstillinger + Copy + Kopier - General - Generelt - - - Security - Sikkerhed - - - Access error for config file %1 - Adgangsfejl for konfigurationsfil %1 - - - - SettingsWidgetGeneral - - Basic Settings - Grundlæggende indstillinnger - - - Start only a single instance of KeePassXC - Start kun en enkelt instans af KeePassXC - - - Remember last databases - Husk seneste databaser - - - Remember last key files and security dongles - Husk de sidste nøglefiler og sikkerhedsdongler - - - Load previous databases on startup - Load den forrige database ved opstart - - - Automatically save on exit - Gem automatisk ved afslutning - - - Automatically save after every change - Gem automatisk ved ændringer - - - Automatically reload the database when modified externally - Load automatisk databasenn når den bliver ændret udefra - - - Minimize when copying to clipboard - Minimér ved kopiering til udklipsholder - - - Minimize window at application startup - Minimér vindue ved opstart - - - Use group icon on entry creation - Brug gruppeikon ved oprettelse af post - - - Don't mark database as modified for non-data changes (e.g., expanding groups) + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - Hide the Details view - Skjul detaljevisning + There was an error creating the QR code. + - Show a system tray icon - Vis et ikon i systembakken - - - Hide window to system tray when minimized - Skjul vindue i systembakken når det er minimeret - - - Hide window to system tray instead of app exit - Skjul vindue i systembakken når applikationen lukkes - - - Dark system tray icon - Mørk ikon i systembakken - - - Language - Sprog - - - Auto-Type - Auto-Indsæt - - - Use entry title to match windows for global Auto-Type - Brug post-titel til at matche vinduer for global Auto-Indsæt - - - Use entry URL to match windows for global Auto-Type - Brug post-URL til at matche vinduer for global Auto-Indsæt - - - Always ask before performing Auto-Type - Spørg altid for Auto-Indsæt udføres - - - Global Auto-Type shortcut - Global Auto-Indsæt genvej - - - Auto-Type delay - Auto-Indsæt forsinkelse - - - ms - Milliseconds - ms - - - Startup - Opstart - - - File Management - Filhåndtering - - - Safely save database files (may be incompatible with Dropbox, etc) - Gem databasefiler sikkert (kan være inkompatibelt med Dropbox, etc.) - - - Backup database file before saving - Lav backup af databasefil før der gemmes - - - Entry Management - Posthåndtering - - - General - Generelt + Closing in %1 seconds. + - SettingsWidgetSecurity - - Timeouts - Timeouts - - - Clear clipboard after - Ryd udklipsholder efter - - - sec - Seconds - sek - - - Lock databases after inactivity of - Lås databaserne efter inaktivitet i - - - Convenience - - - - Lock databases when session is locked or lid is closed - - - - Lock databases after minimizing the window - Lås databaser efter at minimere vinduet - - - Don't require password repeat when it is visible - Kræv ikke kodeord gentaget når det er synligt - - - Show passwords in cleartext by default - Vis kodeord i klartekst som standard - - - Hide passwords in the preview panel - - - - Hide entry notes by default - Skjul post-noter som standard - - - Privacy - Privatliv - - - Use Google as fallback for downloading website icons - Brug Google som nødløsning til at downloade website ikoner - - - Re-lock previously locked database after performing Auto-Type - Lås tidligere låste databaser efter udførsel af Auto-Indsæt - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Opsæt TOTP @@ -3990,59 +5310,84 @@ Lås den valgte database op eller vælg en anden som er åbnet. Brug brugerdefinerede indstillinger - Note: Change these settings only if you know what you are doing. - Note: Lav kun ændringer i disse indstillinger hvis du ved hvad du laver. + Custom Settings + Time step: Tidsinterval: - 8 digits - 8 cifre - - - 6 digits - 6 cifre + sec + Seconds + sek Code size: Kodestørrelse: - sec - Seconds - sek + 6 digits + 6 cifre - - - TotpDialog - Timed Password + 7 digits - 000000 - 000000 - - - Copy - Kopier - - - Expires in - Udløber om - - - seconds - sekunder + 8 digits + 8 cifre - UnlockDatabaseWidget + UpdateCheckDialog - Unlock database - Lås database op + Checking for updates + + + + Checking for updates... + + + + Close + Luk + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4077,42 +5422,26 @@ Lås den valgte database op eller vælg en anden som er åbnet. - main + YubiKeyEditWidget - Remove an entry from the database. - Fjern en post fra databasen. + Refresh + Genopfrisk - Path of the database. - Sti til databasen. - - - Path of the entry to remove. + YubiKey Challenge-Response - KeePassXC - cross-platform password manager - KeePassXC - password manager til flere platforme + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - filenames of the password databases to open (*.kdbx) - Filnavne på de kodeordsdatabaser som skal åbnes (*.kdbx) + No YubiKey detected, please ensure it's plugged in. + - path to a custom config file - sti til brugerdefineret indstillingsfil - - - key file of the database - databasens nøglefil - - - read password of the database from stdin - Læs kodeord til databasen fra stdin - - - Parent window handle - Forældrevindue handle + No YubiKey inserted. + \ No newline at end of file diff --git a/share/translations/keepassx_de.ts b/share/translations/keepassx_de.ts index 927f2878e..89b9f0b6e 100644 --- a/share/translations/keepassx_de.ts +++ b/share/translations/keepassx_de.ts @@ -11,7 +11,7 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Melden Sie Bugs auf: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Melden Sie Fehler auf: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. @@ -31,41 +31,11 @@ Include the following information whenever you report a bug: - Geben Sie folgende Informationen an, wenn Sie einen Bug melden: + Geben Sie folgende Informationen an, wenn Sie einen Fehler melden: Copy to clipboard - In Zwischenablage kopieren - - - Version %1 - - Version %1 - - - - Revision: %1 - Revision: %1 - - - Distribution: %1 - Distribution: %1 - - - Libraries: - Bibliotheken: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Betriebssystem: %1 -CPU-Architektur: %2 -Kernel: %3 %4 - - - Enabled extensions: - Aktivierte Erweiterungen: + In die Zwischenablage kopieren Project Maintainers: @@ -75,37 +45,6 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Das KeePassXC-Team möchte ganz besonders debfx danken für die Entwicklung des ursprünglichen KeePassX. - - Build Type: %1 - - Build-Typ: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Zugriff bestätigen - - - Remember this decision - Diese Entscheidung merken - - - Allow - Erlauben - - - Deny - Ablehnen - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 hat Zugriff auf Passwörter für folgende Element(e) angefordert. -Bitte wählen Sie, ob Sie den Zugriff erlauben möchten. - AgentSettingsWidget @@ -113,6 +52,277 @@ Bitte wählen Sie, ob Sie den Zugriff erlauben möchten. Enable SSH Agent (requires restart) SSH Agent aktivieren (Neustart erforderlich) + + Use OpenSSH for Windows instead of Pageant + OpenSSH für Windows statt Pageant benutzen + + + + ApplicationSettingsWidget + + Application Settings + Anwendungseinstellungen + + + General + Allgemein + + + Security + Sicherheit + + + Access error for config file %1 + Zugriffsfehler für Konfigurations-Datei %1 + + + Icon only + Nur Symbol + + + Text only + Nur Text + + + Text beside icon + Text neben Symbol + + + Text under icon + Text unter Symbol + + + Follow style + Stil beibehalten + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Grundeinstellungen + + + Startup + Programmstart + + + Start only a single instance of KeePassXC + Nur eine einzige KeePassXC-Instanz starten + + + Remember last databases + Letzte Datenbanken merken + + + Remember last key files and security dongles + Letzte Schlüsseldateien und Sicherheits-Dongles merken + + + Load previous databases on startup + Letzte Datenbank beim Start laden + + + Minimize window at application startup + Fenster beim Programmstart minimieren + + + File Management + Datei-Management + + + Safely save database files (may be incompatible with Dropbox, etc) + Datenbankdatei sicher speichern (ggf. inkompatibel mit Dropbox etc.) + + + Backup database file before saving + Vor Speichern Backup der Datenbank erstellen + + + Automatically save after every change + Automatisch nach jeder Änderung speichern + + + Automatically save on exit + Automatisch speichern beim Schließen + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Datenbank nicht als geändert markieren für geringfügige Änderungen (z.B. Ausklappen von Gruppen) + + + Automatically reload the database when modified externally + Datenbank nach externer Änderung automatisch neu laden. + + + Entry Management + Eintrags-Management + + + Use group icon on entry creation + Gruppensymbol für das Erstellen neuer Einträge verwenden + + + Minimize when copying to clipboard + Minimieren beim Kopieren in die Zwischenablage + + + Hide the entry preview panel + Eintrag in Vorschau-Panel verstecken + + + General + Allgemein + + + Hide toolbar (icons) + Werkzeugleiste ausblenden (Symbole) + + + Minimize instead of app exit + Minimieren statt die App zu beenden + + + Show a system tray icon + Taskleistensymbol anzeigen + + + Dark system tray icon + Dunkles Taskleistensymbol + + + Hide window to system tray when minimized + Fenster verstecken wenn minimiert + + + Language + Sprache + + + Auto-Type + Auto-Type + + + Use entry title to match windows for global Auto-Type + Verwende Eintragstitel, um entsprechende Fenster für globales Auto-Type zu finden + + + Use entry URL to match windows for global Auto-Type + Verwende URL, um Fenster für globales Auto-Type zu finden. + + + Always ask before performing Auto-Type + Immer vor einem Auto-Type fragen + + + Global Auto-Type shortcut + Globale Tastenkombination für Auto-Type + + + Auto-Type typing delay + Auto-Type Tastenanschlagverzögerung + + + ms + Milliseconds + ms + + + Auto-Type start delay + Auto-Type Startverzögerung + + + Check for updates at application startup + Beim Programmstart nach Updates suchen + + + Include pre-releases when checking for updates + Auch nach neuen Vorabversionen suchen + + + Movable toolbar + Bewegbare Werkzeugleiste + + + Button style + Knopfstil + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Timeouts + + + Clear clipboard after + Zwischenablage leeren nach + + + sec + Seconds + sek + + + Lock databases after inactivity of + Datenbank sperren nach einer Inaktivität von + + + min + min + + + Forget TouchID after inactivity of + TouchID vergessen nach einer Inaktivität von + + + Convenience + Komfort + + + Lock databases when session is locked or lid is closed + Datenbank schließen, wenn Sitzung geschlossen oder Deckel zugeklappt wird + + + Forget TouchID when session is locked or lid is closed + TouchID vergessen, wenn Sitzung gesperrt oder Deckel geschlossen wird + + + Lock databases after minimizing the window + Datenbank sperren nach Minimieren des Fensters + + + Re-lock previously locked database after performing Auto-Type + Datenbank nach Auto-Type automatisch wieder sperren. + + + Don't require password repeat when it is visible + Keine erneute Passworteingabe verlangen, wenn das Passwort sichtbar ist. + + + Don't hide passwords when editing them + Passwörter beim Bearbeiten nicht verstecken + + + Don't use placeholder for empty password fields + Keine Platzhalter für leere Passwortfelder verwenden + + + Hide passwords in the entry preview panel + Passwörter in Vorschau-Panel verstecken + + + Hide entry notes by default + Eintrags-Notizen standardmäßig verstecken + + + Privacy + Datenschutz + + + Use DuckDuckGo as fallback for downloading website icons + DuckDuckGo als Ersatz für das Herunterladen von Website-Symbolen verwenden + AutoType @@ -215,6 +425,27 @@ Please select whether you want to allow access. Bitte wählen Sie, ob Sie den Zugriff erlauben möchten. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Eintrag speichern + + + Ok + Ok + + + Cancel + Abbrechen + + + You have multiple databases open. +Please select the correct database for saving credentials. + Du hast mehrere Datenbanken geöffnet. +Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten. + + BrowserOptionDialog @@ -272,7 +503,7 @@ Bitte wählen Sie, ob Sie den Zugriff erlauben möchten. Only returns the best matches for a specific URL instead of all entries for the whole domain. - Zeige nur die am besten passenden Einträge für eine URL anstatt aller Einträge der ganzen Domäne. + Nur die am besten passenden Einträge für eine URL anstatt aller Einträge der ganzen Domäne anzeigen. &Return only best-matching credentials @@ -288,14 +519,6 @@ Bitte wählen Sie, ob Sie den Zugriff erlauben möchten. Credentials mean login data requested via browser extension Passende Anmeldedaten nach &Benutzernamen sortieren - - &Disconnect all browsers - Alle Browser &abmelden - - - Forget all remembered &permissions - Alle gemerkten Berechtigungen &vergessen - Advanced Fortgeschritten @@ -341,7 +564,7 @@ Bitte wählen Sie, ob Sie den Zugriff erlauben möchten. Use a &proxy application between KeePassXC and browser extension - Verwende eine &Proxy-Anwendungen zwischen KeePassXC und Browser-Erweiterung + &Proxy-Anwendung zwischen KeePassXC und Browser-Erweiterung verwenden Use a custom proxy location if you installed a proxy manually. @@ -361,21 +584,42 @@ Bitte wählen Sie, ob Sie den Zugriff erlauben möchten. <b>Warning:</b> The following options can be dangerous! <b>Warnung:</b> Die folgenden Optionen können gefährlich sein! - - Executable Files (*.exe);;All Files (*.*) - Ausführbare Dateien (*.exe);;Alle Dateien (*.*) - - - Executable Files (*) - Ausführbare Dateien (*) - Select custom proxy location Benutzerdefinierten Proxy-Pfad auswählen - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Sorry, aber KeePassXC-Browser wird derzeit für Snap-Releases nicht unterstützt. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Achtung</b>, die keepassxc-proxy Anwendung wurde nicht gefunden!<br />Bitte überprüfe den KeePassXC-Ordner oder bestätige den benutzerdefinierten Ort in den erweiterten Einstellungen.<br />Die Browseranbindung wird nicht funktionieren, wenn das Proxyprogramm nicht eingebunden ist.<br />Vermuteter Pfad: + + + Executable Files + Ausführbare Dateien + + + All Files + Alle Dateien + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Nicht nach HTTP Basic Auth fragen + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,152 +660,55 @@ Möchten Sie diesen überschreiben? Do you want to update the information in %1 - %2? Möchten Sie wirklich die Informationen in %1 - %2 aktualisieren? - - KeePassXC: Database locked! - KeePassXC: Datenbank gesperrt! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Die aktive Datenbank ist gesperrt! -Bitte entsperren Sie die ausgewählte Datenbank oder wählen Sie eine andere, die entsperrt ist. - - - KeePassXC: Settings not available! - KeePassXC: Einstellung nicht verfügbar! - - - The active database does not contain a settings entry. - Die aktive Datenbank enthält keinen Einstellungseintrag. - - - KeePassXC: No keys found - KeePassXC: Kein Schlüssel gefunden - - - No shared encryption keys found in KeePassXC Settings. - Kein geteilter Schlüssel in den KeePassXC-Einstellungen gefunden. - - - KeePassXC: Removed keys from database - KeePassXC: Schlüssel aus der Datenbank entfernt - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Es wurden erfolgreich %n Schlüssel aus den KeePassXC-Einstellungen entfernt.Es wurden erfolgreich %n Schlüssel aus den KeePassXC-Einstellungen entfernt. - - - Removing stored permissions… - Entferne gespeicherte Berechtigungen... - Abort Abbrechen - KeePassXC: Removed permissions - KeePassXC: Zugangsdaten entfernt + Converting attributes to custom data… + Attribute werden in zusätzliche Eigenschaften umgewandelt... + + + KeePassXC: Converted KeePassHTTP attributes + KeepassXC: KeePassHTTP-Attribute wurden umgewandelt + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1 Einträge wurden erfolgreich umgewandelt +%2 Schlüssel zu zusätzlichen Eigenschaften verschoben. - Successfully removed permissions from %n entry(s). - Gespeicherte Berechtigungen wurden erfolgreich aus %n Eintrag entfernt.Gespeicherte Berechtigungen wurden erfolgreich aus %n Einträgen entfernt. + Successfully moved %n keys to custom data. + %1 Einträge wurden erfolgreich umgewandelt%1 Einträge wurden erfolgreich umgewandelt - KeePassXC: No entry with permissions found! - KeePassXC: Kein Eintrag mit Zugangsdaten gefunden! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Keine KeePassHTTP-Einträge gefunden - The active database does not contain an entry with permissions. - The aktive Datenbank enthält keinen Eintrag mit Zugangsdaten. - - - - ChangeMasterKeyWidget - - Password - Passwort + The active database does not contain an entry with KeePassHTTP attributes. + Die aktive Datenbank enthält keinen Eintrag mit KeePassHTTP Einstellungen. - Enter password: - Passwort eingeben: + KeePassXC: Legacy browser integration settings detected + KeePassXC: native Browser-Integrations-Einstellungen gefunden - Repeat password: - Passwort wiederholen: + KeePassXC: Create a new group + - &Key file - &Schlüsseldatei + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Durchsuchen - - - Create - Erstellen - - - Cha&llenge Response - Cha&llenge-Response - - - Refresh - Neu laden - - - Key files - Schlüsseldateien - - - All files - Alle Dateien - - - Create Key File... - Schlüsseldatei erzeugen… - - - Unable to create Key File : - Erzeugen der Schlüsseldatei nicht möglich: - - - Select a key file - Schlüsseldatei auswählen - - - Empty password - Leeres Passwort - - - Do you really want to use an empty string as password? - Wollen Sie wirklich eine leere Zeichenkette als Passwort verwenden? - - - Different passwords supplied. - Unterschiedliche Passwörter eingegeben. - - - Failed to set %1 as the Key file: -%2 - Festlegen von %1 als Schlüsseldatei nicht möglich: %2 - - - Legacy key file format - Veraltetes Schlüsseldatei-Format - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Sie verwenden ein veraltetes Schlüsseldatei-Format, welches in Zukunft evtl. nicht mehr unterstützt wird. - -Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren. - - - Changing master key failed: no YubiKey inserted. - Ändern des Hauptschlüssels fehlgeschlagen: kein YubiKey eingesteckt. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -576,7 +723,7 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren. Replace username and password with references - Benutzernamen und Passwort mit Referencen ersetzen + Benutzernamen und Passwort mit Referenzen ersetzen Copy history @@ -641,14 +788,6 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.Not present in CSV file Nicht in CSV-Datei vorhanden - - Empty fieldname - Leerer Feldname - - - column - Spalte - Imported from CSV file Aus CSV-Datei importiert @@ -657,55 +796,96 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.Original data: Original-Daten: - - Error(s) detected in CSV file ! - Fehler in CSV-Datei gefunden! - - - more messages skipped] - weitere Fehler ausgeblendet] - Error Fehler + + Empty fieldname %1 + Leerer Feldname %1 + + + column %1 + Spalte %1 + + + Error(s) detected in CSV file! + Fehler in CSV-Datei gefunden! + + + [%n more message(s) skipped] + [zusätzlich %n Nachricht(en) übersprungen][zusätzlich %n Nachricht(en) übersprungen] + CSV import: writer has errors: - - CSV-Import: Fehler beim Schreiben: - - - - CsvImportWizard - - Error - Fehler - - - Unable to calculate master key - Berechnung des Hauptschlüssels gescheitert +%1 + CSV-Import: Fehler beim Schreiben: %1 CsvParserModel - - %n byte(s), - %n Byte,%n Byte, - - - %n row(s), - %n Zeile,%n Zeilen, - %n column(s) %n Spalte%n Spalten + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n Byte(s)%n Byte(s) + + + %n row(s) + %n Zeile(n)%n Zeile(n) + + + + Database + + Root + Root group name + Root + + + File %1 does not exist. + Datei %1 existiert nicht. + + + Unable to open file %1. + Öffnen der Datei %1 nicht möglich. + + + Error while reading the database: %1 + Fehler beim Öffnen der Datenbank: %1 + + + Could not save, database has no file name. + Speichern der Datenbank fehlgeschlagen, der Name fehlt + + + File cannot be written as it is opened in read-only mode. + Datei ist schreibgeschützt + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Datenbank entsperren - KeePassXC + DatabaseOpenWidget Enter master key - Hauptschlüssel eingeben + Master-Passwort eingeben Key File: @@ -727,14 +907,6 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.Challenge Response: Challenge-Response - - Unable to open the database. - Öffnen der Datenbank nicht möglich. - - - Can't open key file - Schlüsseldatei kann nicht geöffnet werden - Legacy key file format Veraltetes Schlüsseldatei-Format @@ -764,53 +936,254 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.Select key file Schlüsseldatei auswählen - - - DatabaseRepairWidget - Repair database - Datenbank reparieren + TouchID for quick unlock + TouchID zum schnellen Entsperren - Error - Fehler + Unable to open the database: +%1 + Öffnen der Datenbank nicht möglich: +%1 - Can't open key file - Schlüsseldatei kann nicht geöffnet werden - - - Unable to open the database. - Öffnen der Datenbank nicht möglich. - - - Database opened fine. Nothing to do. - Datenbank wurde ordnungsgemäß geöffnet. Es gibt nichts zu tun. - - - Success - Erfolg - - - The database has been successfully repaired -You can now save it. - Datenbank erfolgreich repariert -sie kann nun gespeichert werden. - - - Unable to repair the database. - Reparieren der Datenbank nicht möglich. + Can't open key file: +%1 + Schlüsseldatei kann nicht geöffnet werden: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Passwörter + + + + DatabaseSettingsDialog + + Advanced Settings + Fortgeschrittene Einstellungen + General Allgemein - Encryption - Verschlüsselung + Security + Sicherheit + + + Master Key + Master-Passwort + + + Encryption Settings + Verschlüsselungseinstellung + + + Browser Integration + Browser-Integration + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Browser-Einstellungen + + + &Disconnect all browsers + Alle Browser &abmelden + + + Forg&et all site-specific settings on entries + Alle auf die Internetseite bezogenen Einstellungen löschen + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + KeePassHTTP-Einstellungen zu KeePassXC-Browser übertragen. + + + Stored keys + Gespeicherte Schlüssel + + + Remove + Entfernen + + + Delete the selected key? + Die ausgewählten Schlüssel entfernen? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Möchtest du wirklich diese Browserverbindung entfernen? +Das wird die Verbindung zum Browser-Plugin verhindern. + + + Key + Schlüssel + + + Value + Wert + + + Enable Browser Integration to access these settings. + Um diese Einstellungen zu verändern, benötigst du einen verbundenen Browser. + + + Disconnect all browsers + Alle Browser trennen + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Möchtest du wirklich alle Browserverbindungen entfernen? +Das wird die Verbindung zu dem Browser-Plugin verhindern. + + + KeePassXC: No keys found + KeePassXC: Kein Schlüssel gefunden + + + No shared encryption keys found in KeePassXC settings. + Keine geteilten Schlüssel in den KeePassXC-Einstellungen gefunden. + + + KeePassXC: Removed keys from database + KeePassXC: Schlüssel aus der Datenbank entfernt + + + Successfully removed %n encryption key(s) from KeePassXC settings. + %n Schlüssel erfolgreich aus KeePassXC-Einstellungen entfernt.%n Schlüssel erfolgreich aus KeePassXC-Einstellungen entfernt. + + + Forget all site-specific settings on entries + Alle auf die Internetseite bezogenen Einstellungen löschen + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Alle auf jede Internetseite bezogenen Einstellungen löschen? +Zugriffserlaubnisse zu allen Einträgen werden gelöscht. + + + Removing stored permissions… + Entferne gespeicherte Berechtigungen... + + + Abort + Abbrechen + + + KeePassXC: Removed permissions + KeePassXC: Zugangsdaten entfernt + + + Successfully removed permissions from %n entry(s). + Zugriffsberechtigungen für %n Eintrag/Einträge erfolgreich gelöscht.Zugriffsberechtigungen für %n Eintrag/Einträge erfolgreich gelöscht. + + + KeePassXC: No entry with permissions found! + KeePassXC: Kein Eintrag mit Zugangsdaten gefunden! + + + The active database does not contain an entry with permissions. + Die aktive Datenbank enthält keinen Eintrag mit Zugangsdaten. + + + Move KeePassHTTP attributes to custom data + KeePassHTTP-Einstellungen zu KeePassXC-Browser übertragen. + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Sollen alle Einstellungen der veralteten Browserintegrationn zur aktuellen Version migriert werden? +Das ist nötig um das Browser-Plugin kompatibel zu halten. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Verschlüsselungs-Algorithmus: + + + AES: 256 Bit (default) + AES: 256 Bit (Standard) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Schlüssel-Ableitungsfunktion: + + + Transform rounds: + Verschlüsselungsdurchläufe: + + + Benchmark 1-second delay + 1-Sekunden-Verzögerung messen + + + Memory Usage: + Speicher-Verbrauch + + + Parallelism: + Parallelität: + + + Decryption Time: + Zeit zum Entschlüsseln: + + + ?? s + ?? s + + + Change + Veränderunge + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Höhere Werte sind sicherer, verlängern aber das Öffnen der Datenbank + + + Database format: + Datenbankformat: + + + This is only important if you need to use your database with other programs. + Nur wichtig, wenn die Datenbank mit anderen Programmen geöffnet wird + + + KDBX 4.0 (recommended) + KDBX 4.0 (empfohlen) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + unverändert Number of rounds too high @@ -857,47 +1230,22 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken MiB Abbreviation for Mebibytes (KDF settings) - MiB MiB + MiBMiB thread(s) Threads for parallel execution (KDF settings) - ThreadThreads + Thread(s)Thread(s) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Verschlüsselungs-Algorithmus. + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 Bit (Standard) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Schlüssel-Ableitungsfunktion - - - Transform rounds: - Verschlüsselungsdurchläufe: - - - Benchmark 1-second delay - 1-Sekunden-Verzögerung messen - - - Memory Usage: - Speicher-Verbrauch - - - Parallelism: - Parallelität: + + %1 s + seconds + %1 s%1 s @@ -948,12 +1296,85 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + Teilen + + Breadcrumb + Breadcrumb + + + Type + Typ + + + Path + Pfad + + + Last Signer + Letzte Unteschrift + + + Certificates + Zertifikate + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Zusätzlichen Schutz hinzufügen + + + No encryption key added + Kein Schlüssel zum Verschlüsseln hinzugefügt + + + You must add at least one encryption key to secure your database! + Du musst mindestens einen Schlüssel hinzufügen um die Datenbank abzusichern. + + + No password set + Kein Passwort eingestellt + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + WARNUNG! Du hast kein Passwort gesetzt. Eine Datenbank ohne Passwort zu benutzen ist absolut nicht empfohlen. + +Soll tatsächlich ohne Passwort fortgefahren werden? + + + Unknown error + Unbekannter Fehler + + + Failed to change master key + Ändern des Hauptschlüssels gescheitert + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Datenbankname: + + + Description: + Beschreibung: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 Datenbank @@ -966,73 +1387,21 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken Open database Datenbank öffnen - - File not found! - Datei nicht gefunden! - - - Unable to open the database. - Öffnen der Datenbank ist nicht möglich. - - - File opened in read only mode. - Datei ist schreibgeschützt - - - Open CSV file - CSV-Datei öffnen - CSV file CSV-Datei - - All files (*) - Alle Dateien (*) - Merge database Datenbank zusammenführen Open KeePass 1 database - KeePass 1 Datenbank öffnen + KeePass 1-Datenbank öffnen KeePass 1 database - KeePass 1 Datenbank - - - Close? - Schließen? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" wird bearbeitet. -Änderungen verwerfen und trotzdem schließen? - - - Save changes? - Änderungen speichern? - - - "%1" was modified. -Save changes? - "%1" wurde geändert. -Änderungen speichern? - - - Writing the database failed. - Schreiben der Datenbank fehlgeschlagen. - - - Passwords - Passwörter - - - Save database as - Datenbank speichern unter + KeePass 1-Datenbank Export database to CSV file @@ -1043,40 +1412,41 @@ Save changes? Die CSV Datei konnte nicht gespeichert werden. - New database + Database creation error + Datenbank konnte nicht erstellt werden. + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + Die erstellte Datenbank hat keinen Schlüssel oder KDF, sie kann nicht gespeichert werden. +Das ist definitiv ein Fehler, teile das bitte den Entwicklern mit. + + + The database file does not exist or is not accessible. + Die Datenbankdatei existiert nicht oder ist nicht zugreifbar. + + + Select CSV file + CSV-Datei auswählen + + + New Database Neue Datenbank - locked - gesperrt + %1 [New Database] + Database tab name modifier + %1 [Neue Datenbank] - Lock database - Datenbank sperren + %1 [Locked] + Database tab name modifier + %1 [Gesperrt] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Datenbank kann nicht gesperrt werden, da sie gerade bearbeitet wird. -Wählen sie „Abbrechen“, um die Änderungen zu speichern oder sie zurückzunehmen. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Dieses Datenbank wurde geändert. -Soll sie gespeichert werden bevor sie gesperrt wird? -Anderenfalls gehen Ihre Änderungen verloren. - - - Disable safe saves? - Sicheres Speichern deaktivieren? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC konnte die Datenbank nach mehrmaligem Versuch nicht erfolgreich speichern. Dies wird möglicherweise durch Synchronisierungsdienste verursacht, die die Datei geöffnet halten. -Sicheres Speichern deaktivieren und erneut versuchen? + %1 [Read-only] + Database tab name modifier + %1 [Schreibgeschützt] @@ -1085,41 +1455,17 @@ Sicheres Speichern deaktivieren und erneut versuchen? Searching... Suche… - - Change master key - Hauptschlüssel ändern - - - Delete entry? - Eintrag löschen? - Do you really want to delete the entry "%1" for good? Wollen Sie den Eintrag „%1“ wirklich löschen? - - Delete entries? - Einträge löschen? - - - Do you really want to delete %1 entries for good? - Wollen Sie die Einträge "%1" wirklich löschen? - - - Move entry to recycle bin? - Eintrag in den Papierkorb verschieben? - Do you really want to move entry "%1" to the recycle bin? Möchten Sie wirklich den Eintrag "%1" in den Papierkorb verschieben? - - Move entries to recycle bin? - Einträge in den Papierkorb verschieben? - Do you really want to move %n entry(s) to the recycle bin? - Wollen Sie wirklich %n Eintrag in den Papierkorb verschieben?Wollen Sie wirklich %n Einträge in den Papierkorb verschieben? + Möchten Sie wirklich %n Eintrag aus dem Papierkorb löschen?Möchten Sie wirklich %n Einträge aus dem Papierkorb löschen? Execute command? @@ -1133,18 +1479,10 @@ Sicheres Speichern deaktivieren und erneut versuchen? Remember my choice Meine Auswahl merken - - Delete group? - Gruppe löschen? - Do you really want to delete the group "%1" for good? Wollen Sie die Gruppe "%1" wirklich löschen? - - Unable to calculate master key - Berechnung des Hauptschlüssels gescheitert - No current database. Keine aktuelle Datenbank @@ -1179,10 +1517,6 @@ Do you want to merge your changes? Die Datenbank wurde verändert und Sie haben nicht gespeicherte Änderungen. Möchten Sie Ihre Änderungen zusammenführen? - - Could not open the new database file while attempting to autoreload this database. - Die neue Datenbankdatei konnte nicht geöffnet werden, während versucht wurde, diese neu zu laden. - Empty recycle bin? Papierkorb leeren? @@ -1191,88 +1525,112 @@ Möchten Sie Ihre Änderungen zusammenführen? Are you sure you want to permanently delete everything from your recycle bin? Sind Sie sicher, dass Sie den Inhalt des Papierkorbs unwiederbringlich löschen wollen? - - - DetailsWidget - - Generate TOTP Token - TOTP-Token generieren + + Do you really want to delete %n entry(s) for good? + Sollen tatsächlich %1 Einträge gelöscht werden?Sollen tatsächlich %1 Einträge gelöscht werden? + + + Delete entry(s)? + Eintrag/Einträge löschen?Eintrag/Einträge löschen? + + + Move entry(s) to recycle bin? + Eintrag/Einträge in den Papierkorb verschieben?Eintrag/Einträge in den Papierkorb verschieben? - Close - Schließen + File opened in read only mode. + Datei ist schreibgeschützt - General - Allgemein + Lock Database? + Datenbank sperren? - Password - Passwort + You are editing an entry. Discard changes and lock anyway? + Ein Eintrag wird bearbeitet. +Änderungen verwerfen und trotzdem sperren? - URL - URL + "%1" was modified. +Save changes? + "%1" wurde geändert. +Änderungen speichern? - Expiration - Ablaufdatum + Database was modified. +Save changes? + Datenbank wurde geändert. +Änderungen speichern? - Username - Benutzername + Save changes? + Änderungen speichern? - Autotype - Auto-Type + Could not open the new database file while attempting to autoreload. +Error: %1 + Datenbank konnte während einer automatischen Aktualisierung nicht geladen werden. +Fehler: %1 - Searching - Suche + Disable safe saves? + Sicheres Speichern deaktivieren? - Attributes - Attribute + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC konnte die Datenbank nach mehrmaligem Versuch nicht erfolgreich speichern. Dies wird möglicherweise durch Synchronisierungsdienste verursacht, die die Datei geöffnet halten. +Sicheres Speichern deaktivieren und erneut versuchen? - Attachments - Anhänge + Writing the database failed. +%1 + Schreiben der Datenbank fehlgeschlagen. +%1 - Notes - Notizen + Passwords + Passwörter - Window - Fenster + Save database as + Datenbank speichern als - Sequence - Sequenz + KeePass 2 Database + KeePass 2 Datenbank - Search - Suche + Replace references to entry? + Referenzeinträge ersetzen? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Eintrag "%1" hat %2 Referenz(en). Sollen die Referenzen mit den Werten überschrieben, der Eintrag überprungen oder trotzdem gelöscht werden?Eintrag "%1" hat %2 Referenz(en). Sollen die Referenzen mit den Werten überschrieben, der Eintrag überprungen oder trotzdem gelöscht werden? - Clear - Löschen + Delete group + Gruppe löschen - Never - Niemals + Move group to recycle bin? + Gruppe in den Papierkorb verschieben? - [PROTECTED] - [GESCHÜTZT] + Do you really want to move the group "%1" to the recycle bin? + Soll die Gruppe "%1" wirklich in den Papierkorb verschoben werden? - Disabled - Deaktiviert + Successfully merged the database files. + Datenbanken erfolgreich zusammengeführt - Enabled - Aktiviert + Database was not modified by merge operation. + Datenbank wurde nicht zusammengeführt + + + Shared group... + @@ -1323,7 +1681,7 @@ Möchten Sie Ihre Änderungen zusammenführen? Failed to open private key - Privatschlüsel konnte nicht geöffnet werden + Privatschlüssel konnte nicht geöffnet werden Entry history @@ -1339,43 +1697,27 @@ Möchten Sie Ihre Änderungen zusammenführen? Different passwords supplied. - Unterschiedliche Passwörter eingegeben. + Passwörter sind unterschiedlich New attribute Neue Eigenschaft - - Confirm Remove - Entfernen bestätigen - Are you sure you want to remove this attribute? Sind Sie sicher, dass Sie dieses Attribut entfernen möchten? - - [PROTECTED] - [GESCHÜTZT] - - - Press reveal to view or edit - Klicken zum Anzeigen oder Bearbeiten - Tomorrow Morgen %n week(s) - %n Woche%n Woche(n) + %n Woche%n Wochen %n month(s) - %n Monat%n Monat(en) - - - 1 year - 1 Jahr + %n Monat%n Monate Apply generated password? @@ -1389,6 +1731,26 @@ Möchten Sie Ihre Änderungen zusammenführen? Entry updated successfully. Eintrag erfolgreich aktualisiert. + + Entry has unsaved changes + Eintrag enthält nicht gespeicherte Änderungen + + + New attribute %1 + Neue Eigenschaft %1 + + + [PROTECTED] Press reveal to view or edit + [GESCHÜTZT] Klicken Sie „Zeigen“ zum Anzeigen oder Bearbeiten + + + %n year(s) + %n Jahre%n Jahre + + + Confirm Removal + Löschen bestätigen + EditEntryWidgetAdvanced @@ -1566,7 +1928,7 @@ Möchten Sie Ihre Änderungen zusammenführen? Copy to clipboard - In die Zwischenablage kopieren + In Zwischenablage kopieren Private key @@ -1633,6 +1995,97 @@ Möchten Sie Ihre Änderungen zusammenführen? Von der übergeordneten Gruppe (%1) erben + + EditGroupWidgetKeeShare + + Form + Formular + + + Type: + Typ: + + + Path: + Pfad: + + + ... + + + + Password: + Passwort: + + + Inactive + Inaktiv + + + Import from path + Aus Pfad importieren + + + Export to path + In Pfad exportieren + + + Synchronize with path + Mit Pfad synchronisieren + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Diese KeePassXC-Version unterstützt das gewählte Teilen nicht. Bitte benutze Version %1. + + + Database sharing is disabled + Teilen der Datenbank deaktiviert + + + Database export is disabled + Export der Datenbank deaktiviert + + + Database import is disabled + Import einer Datenbank deaktiviert + + + KeeShare unsigned container + KeeShare unbestätigter Container + + + KeeShare signed container + KeeShare bestätigter Container + + + Select import source + Importquelle wählen + + + Select export target + Exportziel wählen + + + Select import/export file + Wähle Datei für Import/Export + + + Clear + Löschen + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1645,7 +2098,7 @@ Möchten Sie Ihre Änderungen zusammenführen? Expires - Erlischt + Verfällt Search @@ -1690,10 +2143,6 @@ Möchten Sie Ihre Änderungen zusammenführen? Unable to fetch favicon. Abrufen des Favicons nicht möglich - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Tipp: Sie können Google als Fallback festlegen unter Werkzeuge>Einstellungen>Sicherheit - Images Bilder @@ -1702,14 +2151,6 @@ Möchten Sie Ihre Änderungen zusammenführen? All files Alle Dateien - - Select Image - Bild auswählen - - - Can't read icon - Icon kann nicht gelesen werden - Custom icon already exists Es gibt bereits ein eigenes Symbol @@ -1719,8 +2160,36 @@ Möchten Sie Ihre Änderungen zusammenführen? Löschen bestätigen - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Dieses Icon wird noch von %1 Einträgen verwendet und würde mit dem Standard-Icon ersetzt. Sind Sie sicher, dass die fortfahren wollen? + Custom icon successfully downloaded + Benutzerdefiniertes Symbol erfolgreich heruntergeladen + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Tipp: Sie können DuckDuckGo als Ersatz unter Werkzeuge>Einstellungen>Sicherheit aktivieren + + + Select Image(s) + Bild(er) auswählen + + + Successfully loaded %1 of %n icon(s) + %1 von %n Symbol(en) erfolgreiche heruntergeladen%1 von %n Symbol(en) erfolgreiche heruntergeladen + + + No icons were loaded + Keine Symbole wurden geladen + + + %n icon(s) already exist in the database + %n Symbol(e) gibt es bereits in der Datenbank%n Symbol(e) gibt es bereits in der Datenbank + + + The following icon(s) failed: + Das Laden der folgenden Symbole ist fehlgeschlagen:Das Laden der folgenden Symbole ist fehlgeschlagen: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Dieses Symbol wird von %n Eintrag benutzt und wird mit dem Standardsymbol ersetzt. Sind Sie sicher, dass es gelöscht werden soll?Dieses Symbol wird von %n Einträgen benutzt und wird mit dem Standardsymbol ersetzt. Sind Sie sicher, dass es gelöscht werden soll? @@ -1771,9 +2240,8 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Entry - - Clone - Suffix added to cloned entries - - Klon + %1 - Clone + %1 - Kopie @@ -1803,7 +2271,7 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Open - Öffnen + Offen Save @@ -1815,11 +2283,7 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Are you sure you want to remove %n attachment(s)? - Sind Sie sicher, dass Sie %n Anhang löschen wollen?Sind Sie sicher, dass Sie %n Anhänge löschen möchten? - - - Confirm Remove - Entfernen bestätigen + Sind Sie sicher, dass Sie einen Anhang löschen möchten?Sind Sie sicher, dass Sie %n Anhänge löschen möchten? Save attachments @@ -1854,13 +2318,19 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Unable to open attachments: %1 - Öffnen des Anhangs nicht möglich: + Öffnen der Anhänge nicht möglich: %1 - Unable to open files: + Confirm remove + Entfernen bestätigen + + + Unable to open file(s): %1 - Öffnen der Datei nicht möglich + Öffnen der Datei(en) nicht möglich: +%1Öffnen der Datei(en) nicht möglich: +%1 @@ -1944,6 +2414,106 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Attachments Anhänge + + Yes + Ja + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + TOTP-Token generieren + + + Close + Schließen + + + General + Allgemein + + + Username + Benutzername + + + Password + Passwort + + + Expiration + Ablaufdatum + + + URL + URL + + + Attributes + Attribute + + + Attachments + Anhänge + + + Notes + Notizen + + + Autotype + Auto-Type + + + Window + Fenster + + + Sequence + Sequenz + + + Searching + Suche + + + Search + Suche + + + Clear + Löschen + + + Never + Niemals + + + [PROTECTED] + [GESCHÜTZT] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Aktiviert + + + Disabled + Deaktiviert + + + Share + Teilen + EntryView @@ -1973,7 +2543,7 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Attachments (icon) - Anhänge (Icon) + Anhänge (Symbol) @@ -1982,6 +2552,11 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Recycle Bin Papierkorb + + [empty] + group has no children + [leer] + HostInstaller @@ -1994,61 +2569,6 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Speichern des Native-Messaging-Skripts nicht möglich. - - HttpPasswordGeneratorWidget - - Length: - Länge: - - - Character Types - Zeichenarten - - - Upper Case Letters - Großbuchstaben - - - A-Z - A-Z - - - Lower Case Letters - Kleinbuchstaben - - - a-z - a-z - - - Numbers - Zahlen - - - 0-9 - 0-9 - - - Special Characters - Sonderzeichen - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Gleich aussehende Zeichen ausschließen - - - Ensure that the password contains characters from every group - Sicherstellen, dass das Passwort Zeichen aus allen Gruppen enthält. - - - Extended ASCII - Erweitertes ASCII - - KMessageWidget @@ -2074,6 +2594,26 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni Wrong key or database file is corrupt. Falscher Schlüssel oder die Datenbank ist beschädigt. + + missing database headers + fehlende Datenbank-Header + + + Header doesn't match hash + Header stimmt nicht mit Hash überein + + + Invalid header id size + Ungültige Größe der Header-ID + + + Invalid header field length + Ungültiger Header-Feldlänge + + + Invalid header data length + Ungültige Header-Datenlänge + Kdbx3Writer @@ -2232,10 +2772,6 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni KdbxReader - - Invalid cipher uuid length - Ungültige Länge der Algorithmus-UUID - Unsupported cipher Nicht unterstützter Verschlüsselungsalgorithmus @@ -2290,6 +2826,18 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Unsupported KeePass 2 database version. Nicht unterstützte KeePass 2-Datenbank-Version + + Invalid cipher uuid length: %1 (length=%2) + Ungültige Länge der Cipher-UUID: %1 (Länge: %2) + + + Unable to parse UUID: %1 + UUID konnte nicht gelesen werden: %1 + + + Failed to read database file. + Datenbankdatei kann nicht gelesen werden. + KdbxXmlReader @@ -2303,7 +2851,7 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Missing icon uuid or data - Fehlende Icon-UUID oder -Daten + Fehlende Symbol-UUID oder -Daten Missing custom data key or value @@ -2319,7 +2867,7 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Invalid group icon number - Ungültige Gruppen-Icon-Anzahl + Ungültige Gruppen-Symbol-Anzahl Invalid EnableAutoType value @@ -2347,7 +2895,7 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Invalid entry icon number - Ungültige Eintrags-Icon-Anzahl + Ungültige Eintrags-Symbol-Anzahl History element in history entry @@ -2361,10 +2909,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann History element with different uuid Verlaufselement mit anderer UUID - - Unable to decrypt entry string - Eintrags-Zeichenfolge konnte nicht entschlüssel werden - Duplicate custom attribute found Doppelte Benutzerattribut gefunden @@ -2414,6 +2958,14 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Translator meant is a binary data inside an entry Binärdatei konnte nicht dekomprimiert werden + + XML error: +%1 +Line %2, column %3 + XML Fehler: +%1 +Zeile %2, Spalte %3 + KeePass1OpenWidget @@ -2423,7 +2975,7 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Unable to open the database. - Öffnen der Datenbank nicht möglich. + Öffnen der Datenbank ist nicht möglich. @@ -2479,7 +3031,7 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Unable to calculate master key - Berechnung des Hauptschlüssels gescheitert + Berechnung des Master-Passworts gescheitert Wrong key or database file is corrupt. @@ -2523,7 +3075,7 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Incorrect group icon field size - Falsche Feldgröße für Gruppen-Icon + Falsche Feldgröße für Gruppen-Symbol Incorrect group level field size @@ -2559,7 +3111,7 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Invalid entry icon field size - Falsche Feldgröße für Eintrags-Icon + Falsche Feldgröße für Eintrags-Symbol Invalid entry creation time field size @@ -2577,55 +3129,145 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Invalid entry field type Ungültiger Eintrags-Feldtyp - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – empfohlen) + unable to seek to content position + Kann nicht zur Inhaltsposition spulen - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Vorhandene einmal-Sperrdatei ist ungültig. Starte neuen Vorgang. + Disabled share + Deaktiviertes Teilen - The lock file could not be created. Single-instance mode disabled. - Lock-Datei konnte nicht erstellt werden. Einzelinstanzmodus ist deaktiviert. + Import from + Import von - Another instance of KeePassXC is already running. - Eine andere KeePassXC-Instanz läuft bereits + Export to + Export nach - Fatal error while testing the cryptographic functions. - Fataler Fehler beim Testen der kryptografischen Funktionen. + Synchronize with + Synchronisieren mit - KeePassXC - Error - KeePassXC - Fehler + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Schlüsselkomponente + + + Key Component Description + Schlüsselkomponentenbeschreibung + + + Cancel + Abbrechen + + + Key Component set, click to change or remove + Schlüsselkomponente wurde gewählt. Klicken um sie zu ändern oder zu löschen + + + Add %1 + Add a key component + %1 hinzufügen + + + Change %1 + Change a key component + %1 ändern + + + Remove %1 + Remove a key component + %1 entfernen + + + %1 set, click to change or remove + Change or remove a key component + %1 gewählt. Klicken um sie zu ändern oder zu löschen + + + + KeyFileEditWidget + + Browse + Durchsuchen + + + Generate + Generieren + + + Key File + Schlüsseldatei + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Für zusätzliche Sicherheit kann eine Schlüsseldatei aus zufälligen Zeichen hinzugefügt werden.</p><p>Sie muss geheim gehalten werden und darf niemals verloren gehen, ansonsten wird die Datenbank für immer gesperrt sein.</p> + + + Legacy key file format + Veraltetes Schlüsseldatei-Format + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Sie verwenden ein veraltetes Schlüsseldatei-Format, welches in Zukunft evtl. nicht mehr unterstützt wird. + +Bitte denken Sie darüber nach eine neue Schlüsseldatei zu generieren. + + + Error loading the key file '%1' +Message: %2 + Die Schlüsseldatei '%1' kann nicht geladen werden. +Fehler: %2 + + + Key files + Schlüsseldateien + + + All files + Alle Dateien + + + Create Key File... + Schlüsseldatei erzeugen… + + + Error creating key file + Fehler beim Erstellen der Schlüsseldatei + + + Unable to create key file: %1 + Schlüsseldatei kann nicht erstellt werden: %1 + + + Select a key file + Schlüsseldatei auswählen @@ -2638,10 +3280,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann &Recent databases &Zuletzt verwendete Datenbanken - - Import - Importieren - &Help &Hilfe @@ -2650,14 +3288,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann E&ntries Ei&nträge - - Copy att&ribute to clipboard - Feld in &Zwischenablage kopieren - - - Time-based one-time password - Zeitbasiertes Einmal-Passwort (TOTP) - &Groups &Gruppen @@ -2686,30 +3316,10 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann &Close database &Datenbank schließen - - &New database - &Neue Datenbank - - - Merge from KeePassX database - Aus KeePassXC-Datenbank zusammenführen - - - &Add new entry - Neuen Eintrag &hinzufügen - - - &View/Edit entry - Eintrag &anzeigen/bearbeiten - &Delete entry Eintrag &löschen - - &Add new group - &Neue Gruppe hinzufügen - &Edit group Gruppe b&earbeiten @@ -2722,14 +3332,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Sa&ve database as... Datenbank speichern unter... - - Change &master key... - Ha&uptschlüssel ändern... - - - &Database settings - &Datenbankeinstellungen - Database settings Datenbankeinstellungen @@ -2738,21 +3340,13 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann &Clone entry Eintrag &klonen - - &Find - &Suchen - Copy &username &Benutzernamen kopieren Copy username to clipboard - Benutzername in die Zwischenablage kopieren - - - Cop&y password - Passwort kop&ieren + Benutzernamen in die Zwischenablage kopieren Copy password to clipboard @@ -2766,17 +3360,9 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Password Generator Passwortgenerator - - &Perform Auto-Type - &Auto-Type ausführen - - - &Open URL - URL &öffnen - &Lock databases - Datenbanken &sperren + Datenbank &sperren &Title @@ -2806,22 +3392,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann &Export to CSV file... Als CSV-Datei &exportieren... - - Import KeePass 1 database... - KeePass 1-Datenbank importieren... - - - Import CSV file... - CSV-Datei importieren... - - - Re&pair database... - Datenbank repar&ieren... - - - Show TOTP - TOTP anzeigen - Set up TOTP... TOTP einrichten... @@ -2842,14 +3412,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Access error for config file %1 Zugriffsfehler für Konfigurations-Datei %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Es sie aus, als ob Sie KeePassHTTP für Browser-Integration nutzen. Dieses Feature is veraltet und wird in Zukunft entfernt. <br>Bitte wechseln Sie zu KeePassXC-Browser! Für Hilfe bei der Migration, lesen Sie unseren <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">Migrations-Leitfaden</a> (Warnung %1 von 3). - - - read-only - Nur Lesezugriff - Settings Einstellungen @@ -2862,26 +3424,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann Quit KeePassXC KeePassXC beenden - - KeePass 2 Database - KeePass 2 Datenbank - - - All files - Alle Dateien - - - Open database - Datenbank öffnen - - - Save repaired database - Reparierte Datenbank speichern - - - Writing the database failed. - Schreiben der Datenbank fehlgeschlagen. - Please touch the button on your YubiKey! Bitte drücken Sie den Button Ihres YubiKeys @@ -2894,6 +3436,269 @@ This version is not meant for production use. Es besteht ein hohes Risiko für Datenkorruption, pflegen Sie ein Backup Ihrer Datenbank. Diese Version ist nicht für den Produktiveinsatz gedacht. + + &Donate + &Spenden + + + Report a &bug + Einen &Fehler melden + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + WARNUNG: Deine Qt Version könnte KeePassXC mit einer Bildschirmtastatur zu abstürzen bringen! +Wir empfehlen dir die Verwendung des auf unserer Downloadseite verfügbaren AppImage. + + + &Import + Importieren + + + Copy att&ribute... + Attribut kopieren + + + TOTP... + TOTP... + + + &New database... + &Neue Datenbank… + + + Create a new database + Eine neue Datenbank erstellen + + + &Merge from database... + &Datenbank zusammenführen… + + + Merge from another KDBX database + Aus einer anderen KDBX-Datenbank zusammenführen + + + &New entry + &Neuer Eintrag + + + Add a new entry + Einen neuen Eintrag hinzufügen + + + &Edit entry + &Eintrag bearbeiten + + + View or edit entry + Eintrag anzeigen oder bearbeiten + + + &New group + &Neue Gruppe + + + Add a new group + Eine neue Gruppe hinzufügen + + + Change master &key... + Hauptschlüssel ändern ... + + + &Database settings... + &Datenbankeinstellungen... + + + Copy &password + Passwort kopieren + + + Perform &Auto-Type + Auto-Ausfüllen + + + Open &URL + &URL öffnen + + + KeePass 1 database... + KeePass 1-Datenbank… + + + Import a KeePass 1 database + KeePass 1-Datenbank importieren + + + CSV file... + CSV-Datei... + + + Import a CSV file + CSV-Datei importieren + + + Show TOTP... + TOTP anzeigen... + + + Show TOTP QR Code... + TOTP QR-Code anzeigen... + + + Check for Updates... + Suche nach Updates… + + + Share entry + Eintrag teilen + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + WARNUNG: Sie verwenden eine Vorabversion von KeePassXC! +Da sie Fehler beinhalten könnte, ist diese Version nicht für den Produktiveinsatz gedacht + + + Check for updates on startup? + Beim Programmstart nach Updates suchen? + + + Would you like KeePassXC to check for updates on startup? + Beim Programmstart nach Updates suchen? + + + You can always check for updates manually from the application menu. + Es kann auch immer manuell im Menü nach Updates gesucht werden. + + + + Merger + + Creating missing %1 [%2] + Erstelle fehlendes %1 [%2] + + + Relocating %1 [%2] + Verschiebe %1 [%2] + + + Overwriting %1 [%2] + Überschreibe %1 [%2] + + + older entry merged from database "%1" + Alter Eintrag "%1" aus Datenbank zusammengeführt + + + Adding backup for older target %1 [%2] + Backup für älteres Ziel %1 hinzugefügt [%2] + + + Adding backup for older source %1 [%2] + Backup für ältere Quelle %1 hinzugefügt [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Älterer Ziel-Eintrag wird auf neuere Quellen-Eintrag angewendet %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Älterer Quellen-Eintrag wird auf neueren Ziel-Eintrag angewendet %1 [%2] + + + Synchronizing from newer source %1 [%2] + Synchronisiere von neuerer Quelle %1 [%2] + + + Synchronizing from older source %1 [%2] + Synchronisiere von älterer Quelle %1 [%2] + + + Deleting child %1 [%2] + Lösche Untereintrag %1 [%2] + + + Deleting orphan %1 [%2] + Lösche verwaisten Eintrag %1 [%2] + + + Changed deleted objects + Gelöschte Einträge geändert + + + Adding missing icon %1 + Fehlendes Symbol hinzufügen %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Neue KeePassXC-Datenbank erstellen… + + + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage + Assistent + + + En&cryption Settings + Verschlüsselungseinstellungen + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Hier werden die Verschlüsselungseinstellungen angepasst. Sie können später in den Datenbankeinstellungen wieder geändert werden. + + + Advanced Settings + Fortgeschrittene Einstellungen + + + Simple Settings + Grundeinstellungen + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Verschlüsselungseinstellung + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Hier werden die Verschlüsselungseinstellungen angepasst. Sie können später in den Datenbankeinstellungen wieder geändert werden. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Datenbank-Master-Passwort + + + A master key known only to you protects your database. + Ein nur dir bekannter Schlüssel schützt die Datenbank. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Allgemeine Datenbankinformationen + + + Please fill in the display name and an optional description for your new database: + Bitte einen Namen und wahlweise eine Beschreibung der neuen Datenbank eingeben: + OpenSSHKey @@ -2915,7 +3720,7 @@ Diese Version ist nicht für den Produktiveinsatz gedacht. Key file magic header id invalid - Magic-Header-ID der Schlüsseldate ungültig + Magic-Header-ID der Schlüsseldatei ungültig Found zero keys @@ -2927,7 +3732,7 @@ Diese Version ist nicht für den Produktiveinsatz gedacht. Corrupted key file, reading private key failed - Korrupte Schlüsseldatei, lesen des Privatschlüssels fehlgeschlagen + Korrupte Schlüsseldatei, Lesen des Privatschlüssels fehlgeschlagen No private key payload to decrypt @@ -2995,125 +3800,30 @@ Diese Version ist nicht für den Produktiveinsatz gedacht. - OptionDialog + PasswordEditWidget - Dialog - Dialog + Enter password: + Passwort eingeben: - This is required for accessing your databases from ChromeIPass or PassIFox - Dies wird benötigt, um auf Ihre Datenbanken in ChromeIPass oder PassIFox zuzugreifen. + Confirm password: + Passwort bestätigen: - Enable KeePassHTTP server - KeePassHTTP-Server aktivieren + Password + Passwort - General - Allgemein + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Ein Passwort ist die primäre Methode, Ihre Datenbank abzusichern.</p><p>Gute Passwörter sind lang und einzigartig. KeepassXC kann eins für Sie generieren.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Zeig&e eine Benachrichtigung, wenn Anmeldedaten angefordert werden. + Passwords do not match. + Die Passwörter stimmen nicht überein. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Zeige nur die am besten passenden Einträge für eine URL anstatt aller Einträge der ganzen Domäne. - - - &Return only best matching entries - Nur beste Treffer anzeigen - - - Re&quest to unlock the database if it is locked - Verlange Entsperrung, wenn die Datenbank gesperrt ist. - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Nur Einträge mit dem gleichen Schema (http://, https://, ftp://, …) anzeigen - - - &Match URL schemes - URL-Schema verwenden - - - Sort matching entries by &username - Sortiere gefundene Einträge nach &Benutzername - - - Sort &matching entries by title - Sortiere gefundene Einträge nach Titel - - - R&emove all shared encryption keys from active database - &Entferne alle freigegebenen Chiffrierschlüssel aus der aktiven Datenbank - - - Re&move all stored permissions from entries in active database - Entferne alle gespeicherten Berechtigungen für Einträge in der aktiven Datenbank - - - Password Generator - Passwortgenerator - - - Advanced - Fortgeschritten - - - Always allow &access to entries - &Zugriff auf Einträge immer erlauben - - - Always allow &updating entries - &Aktualisierung von Einträgen immer erlauben - - - Only the selected database has to be connected with a client. - Nur die ausgewählte Datenbank muss mit dem Client verbunden sein. - - - Searc&h in all opened databases for matching entries - Suche in allen offenen Datenbanken nach übereinstimmenden Einträgen - - - Automatically creating or updating string fields is not supported. - Automatisches Erstellen und Aktualisieren von erweiterten Attributen wird nicht unterstützt! - - - &Return advanced string fields which start with "KPH: " - Zeige auch erweiterte Attribute, welche mit "KPH: " beginnen - - - HTTP Port: - HTTP-Port: - - - Default port: 19455 - Standard-Port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC überwacht diesen Port auf 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Warnung:</b> Die folgenden Optionen können gefährlich sein! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP ist veraltet und wird in Zukunft nicht mehr unterstützt. <br>Bitte wechseln Sie zu KeePassXC-Browser! Für Hilfe bei der Migration, lesen Sie unseren <a href="https://keepassxc.org/docs/keepassxc-browser-migration">Migrations-Leitfaden</a>.</p> - - - Cannot bind to privileged ports - Privilegierte Ports können nicht überwacht werden - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Privilegierte Ports unterhalb von 1024 können nicht überwacht werden. -Es wird der Standard-Port 19455 verwendet. + Generate master password + Masterpasswort erzeugen. @@ -3183,18 +3893,10 @@ Es wird der Standard-Port 19455 verwendet. Wordlist: Wortliste - - Word Count: - Wort-Anzahl - Word Separator: Wort-Trenner - - Generate - Generieren - Copy Kopieren @@ -3207,17 +3909,13 @@ Es wird der Standard-Port 19455 verwendet. Close Schließen - - Apply - Anwenden - Entropy: %1 bit Entropie: %1 bit Password Quality: %1 - Passwort Qualität: %1 + Passwort-Qualität: %1 Poor @@ -3239,6 +3937,171 @@ Es wird der Standard-Port 19455 verwendet. Password quality Ausgezeichnet + + ExtendedASCII + Erweitertes ASCII + + + Switch to advanced mode + Zum fortgeschrittenen Modus wechseln + + + Advanced + Fortgeschritten + + + Upper Case Letters A to F + Großbuchstaben A bis F + + + A-Z + A-Z + + + Lower Case Letters A to F + Kleinbuchstaben a bis f + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Klammern + + + {[( + {[( + + + Punctuation + Interpunktion + + + .,:; + .,:; + + + Quotes + Anführungszeichen + + + " ' + "' + + + Math + Mathematik + + + <*+!?= + <*+!?= + + + Dashes + Striche + + + \_|-/ + \_|-/ + + + Logograms + Kürzel + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Zum einfachen Modus wechseln + + + Simple + Einfach + + + Character set to exclude from generated password + Zeichen die nicht im Passwort enthalten sein sollen + + + Do not include: + Nicht einbeziehen: + + + Add non-hex letters to "do not include" list + Nicht-Hex-Buchstaben zu der "Nicht-Hinzufügen"-Liste hinzufügen + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Ausgeschlossene Zeichen: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Wortanzahl: + + + Regenerate + Neu erzeugen + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Auswählen + + + + QMessageBox + + Overwrite + Überschreiben + + + Delete + Löschen + + + Move + Verschieben + + + Empty + Leer + + + Remove + Entfernen + + + Skip + Überspringen + + + Disable + Deaktivieren + + + Merge + Zusammenführen + QObject @@ -3258,34 +4121,18 @@ Es wird der Standard-Port 19455 verwendet. Cannot decrypt message Nachricht konnte nicht entschlüsselt werden - - Timeout or cannot connect to KeePassXC - Timeout oder Verbindung zu KeePassXC fehlgeschlagen - Action cancelled or denied Aktion abgebrochen oder verweigert - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Nachricht konnte nicht entschlüsselt werden oder öffentlicher Schlüssel wurde nicht gefunden. Ist Native-Messaging in KeePassXC aktiviert ? - KeePassXC association failed, try again KeePassXC-Verbindung fehlgeschlagen, bitte erneut versuchen - - Key change was not successful - Schlüsselaustausch nicht erfolgreich - Encryption key is not recognized Schlüssel nicht erkannt - - No saved databases found - Keine gespeicherten Datenbanken gefunden - Incorrect action Falsche Aktion @@ -3324,11 +4171,11 @@ Es wird der Standard-Port 19455 verwendet. Username for the entry. - Nutzername für den Eintrag + Benutzername für den Eintrag username - Nutzername + Benutzername URL for the entry. @@ -3340,7 +4187,7 @@ Es wird der Standard-Port 19455 verwendet. Prompt for the entry's password. - Nach dem Passwort des Eintrags fragen + Nach dem Passwort des Eintrags fragen. Generate a password for the entry. @@ -3385,11 +4232,11 @@ Es wird der Standard-Port 19455 verwendet. Path of the entry to edit. - Pfad des zu bearbeitenden Eintrags + Pfad des zu bearbeitenden Eintrags. Estimate the entropy of a password. - Entropy des Passworts abschätzen + Entropie des Passworts abschätzen. Password for which to estimate the entropy. @@ -3411,10 +4258,6 @@ Es wird der Standard-Port 19455 verwendet. Insert password to unlock %1: Passwort eingeben, um %1 zu entsperren: - - Failed to load key file %1 : %2 - Schlüsseldatei %1: konnte nicht geladen werden: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3498,11 +4341,6 @@ Verfügbare Kommandos: error reading from device Fehler beim Lesen des Geräts - - file empty ! - - Datei ist leer - malformed string Ungültige Zeichenfolge @@ -3539,10 +4377,6 @@ Verfügbare Kommandos: Created Erstellt - - Legacy Browser Integration - Veraltete Browser-Integration - Browser Integration Browser-Integration @@ -3571,10 +4405,6 @@ Verfügbare Kommandos: Word count for the diceware passphrase. Wort-Anzahl für die Diceware-Passphrase. - - count - Anzahl - Wordlist for the diceware generator. [Default: EFF English] @@ -3586,28 +4416,445 @@ Verfügbare Kommandos: Neues zufälliges Passwort erzeugen. - Length of the generated password. - Länge des erzeugten Passworts. + Invalid value for password length %1. + Ungültiger Wert für Passwortlänge %1. - Use lowercase characters in the generated password. - Kleinbuchstaben zur Passwort-Erzeugung verwenden. + Could not create entry with path %1. + Eintrag mit dem Pfad %1 kann nicht erstellt werden. - Use uppercase characters in the generated password. - Großbuchstaben zur Passwort-Erzeugung verwenden. + Enter password for new entry: + Passwort für neuen Eintrag eingeben: - Use numbers in the generated password. - Zahlen zur Passwort-Erzeugung verwenden. + Writing the database failed %1. + Schreiben der Datenbank fehlgeschlagen: %1 - Use special characters in the generated password. - Sonderzeichen zur Passwort-Erzeugung verwenden. + Successfully added entry %1. + Eintrag %1 erfolgreich hinzugefügt - Use extended ASCII in the generated password. - Erweiterte ASCII-Zeichen zur Passwort-Erzeugung verwenden. + Copy the current TOTP to the clipboard. + Aktuelles TOTP in die Zwischenablage kopieren + + + Invalid timeout value %1. + Ungültiger Timeout-Wert %1 + + + Entry %1 not found. + Eintrag %1 nicht gefunden. + + + Entry with path %1 has no TOTP set up. + Zu Eintrag %1 wurde kein TOTP eingerichtet + + + Entry's current TOTP copied to the clipboard! + TOTP wurde in die Zwischenablage kopiert + + + Entry's password copied to the clipboard! + Passwort wurde in die Zwischenablage kopiert + + + Clearing the clipboard in %1 second(s)... + Zwischenablage wird in %1 Sekunde(n) geleert…Zwischenablage wird in %1 Sekunde(n) geleert… + + + Clipboard cleared! + Zwischenablage geleert! + + + Silence password prompt and other secondary outputs. + Passwortnachfrage und andere Ausgaben unterdrücken + + + count + CLI parameter + Anzahl + + + Invalid value for password length: %1 + Ungültiger Wert für Passwortlänge: %1 + + + Could not find entry with path %1. + Eintrag mit dem Pfad %1 nicht gefunden. + + + Not changing any field for entry %1. + Eintrag %1 wurde nicht geändert. + + + Enter new password for entry: + Neues Passwort für Eintrag eingeben: + + + Writing the database failed: %1 + Schreiben der Datenbank fehlgeschlagen: %1 + + + Successfully edited entry %1. + Eintrag %1 erfolgreich bearbeitet. + + + Length %1 + Länge: %1 + + + Entropy %1 + Entropie %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Multi-Wort-Zusätze %1 + + + Type: Bruteforce + Typ: Bruteforce + + + Type: Dictionary + Typ: Wörterbuch + + + Type: Dict+Leet + Typ: Wörterbuch und Leet + + + Type: User Words + Typ: Benutzerdefinierte Wörter + + + Type: User+Leet + Type: Benutzerdefinierte Wörter und Leet + + + Type: Repeated + Typ: Wiederholt + + + Type: Sequence + Typ: Sequenz + + + Type: Spatial + Typ: Räumlich + + + Type: Date + Typ: Datum + + + Type: Bruteforce(Rep) + Typ: Bruteforce + + + Type: Dictionary(Rep) + Typ: Wörterbuch + + + Type: Dict+Leet(Rep) + Typ: Wörterbuch und Leet + + + Type: User Words(Rep) + Typ: Benutzerdefinierte Wörter + + + Type: User+Leet(Rep) + Type: Benutzerdefinierte Wörter und Leet + + + Type: Repeated(Rep) + Typ: Wiederholt + + + Type: Sequence(Rep) + Typ: Sequenz + + + Type: Spatial(Rep) + Typ: Räumlich + + + Type: Date(Rep) + Typ: Datum + + + Type: Unknown%1 + Typ: Unbekannt%1 + + + Entropy %1 (%2) + Entropie %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Passwortlänge (%1) ist nicht die Summe ihrer Teile (%2) *** + + + Failed to load key file %1: %2 + Schlüsseldatei %1 konnte nicht geladen werden: %2 + + + File %1 does not exist. + Datei %1 existiert nicht. + + + Unable to open file %1. + Öffnen der Datei %1 nicht möglich. + + + Error while reading the database: +%1 + Fehler beim Öffnen der Datenbank: +%1 + + + Error while parsing the database: +%1 + Fehler beim Lesen der Datenbank: +%1 + + + Length of the generated password + Länge des erzeugten Passworts + + + Use lowercase characters + Kleinbuchstaben verwenden + + + Use uppercase characters + Großbuchstaben verwenden + + + Use numbers. + Ziffern verwenden. + + + Use special characters + Sonderzeichen verwenden + + + Use extended ASCII + Erweitertes ASCII verwenden + + + Exclude character set + Zeichensatz ausschließen + + + chars + Zeichen + + + Exclude similar looking characters + Gleich-aussehende Zeichen ausschließen + + + Include characters from every selected group + Zeichen aus allen Gruppen wählen + + + Recursively list the elements of the group. + Alle Elemente der Gruppe auflisten + + + Cannot find group %1. + Gruppe %1 nicht gefunden + + + Error reading merge file: +%1 + Fehler beim Öffnen der zu zusammenführenden Datei: +%1 + + + Unable to save database to file : %1 + Datenbank kann nicht gespeichert werden: %1 + + + Unable to save database to file: %1 + Datenbank kann nicht gespeichert werden: %1 + + + Successfully recycled entry %1. + Eintrag %1 erfolgreich in Papierkorb verschoben + + + Successfully deleted entry %1. + Eintrag %1 erfolgreich gelöscht. + + + Show the entry's current TOTP. + Aktuelles TOTP des Eintrags zeigen. + + + ERROR: unknown attribute %1. + FEHLER: Unbekanntes Attribute %1 + + + No program defined for clipboard manipulation + Kein Programm zur Manipulation der Zwischenablage angegeben. + + + Unable to start program %1 + Programm %1 kann nicht gestartet werden + + + file empty + Datei leer + + + %1: (row, col) %2,%3 + %1: (Zeile, Spalte) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – empfohlen) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Ungültige Einstellungen + + + Invalid Key + TOTP + Ungültiger Schlüssel + + + Message encryption failed. + Nachrichtenverschlüsselung fehlgeschlagen + + + No groups found + Keine Gruppe gefunden + + + Create a new database. + Neue Datenbank erstellen. + + + File %1 already exists. + Datei %1 existiert bereits. + + + Loading the key file failed + Schlüsseldatei kann nicht geladen werden + + + No key is set. Aborting database creation. + Kein Schlüssel gewählt. Datenbankerstellung wird abgebrochen. + + + Failed to save the database: %1. + Datenbank kann nicht gespeichert werden: %1. + + + Successfully created new database. + Datenbank erfolgreiche erstellt. + + + Insert password to encrypt database (Press enter to leave blank): + Passwort zur Datenbankverschlüsselung eingeben (Enter drücken, um es leer zu lassen): + + + Creating KeyFile %1 failed: %2 + Schlüsseldatei %1 konnte nicht erstellt werden: %2 + + + Loading KeyFile %1 failed: %2 + Schlüsseldatei %1 konnte geladen werden: %2 + + + Remove an entry from the database. + Eintrag aus der Datenbank entfernen + + + Path of the entry to remove. + Pfad des zu entfernenden Eintrags. + + + Existing single-instance lock file is invalid. Launching new instance. + Vorhandene einmal-Sperrdatei ist ungültig. Starte neuen Vorgang. + + + The lock file could not be created. Single-instance mode disabled. + Lock-Datei konnte nicht erstellt werden. Einzelinstanzmodus ist deaktiviert. + + + KeePassXC - cross-platform password manager + KeePassXC - Plattformübergreifender Passwortmanager + + + filenames of the password databases to open (*.kdbx) + Dateinamen der zu öffnenden Datenbanken (*.kdbx) + + + path to a custom config file + Pfad zu einer benutzerdefinierten Konfigurationsdatei + + + key file of the database + Schlüsseldatei der Datenbank + + + read password of the database from stdin + Passwort der Datenbank von stdin lesen + + + Parent window handle + Eltern-Fenster-Handle + + + Another instance of KeePassXC is already running. + Eine andere KeePassXC-Instanz läuft bereits + + + Fatal error while testing the cryptographic functions. + Fataler Fehler beim Testen der kryptografischen Funktionen. + + + KeePassXC - Error + KeePassXC - Fehler + + + Database password: + Datenbankpasswort: + + + Cannot create new group + @@ -3645,11 +4892,97 @@ Verfügbare Kommandos: - SearchWidget + SSHAgent - Search... - Suche… + Agent connection failed. + Agent-Verbindung fehlgeschlagen. + + Agent protocol error. + Agent-Protokollfehler. + + + No agent running, cannot add identity. + Kein Agent ausgeführt, kann keine Identität hinzufügen. + + + No agent running, cannot remove identity. + Kein Agent ausgeführt, kann keine Identität entfernen. + + + Agent refused this identity. Possible reasons include: + Agent lehnt diese Identität ab. Mögliche Gründe sind: + + + The key has already been added. + Der Schlüssel wurde bereits hinzugefügt. + + + Restricted lifetime is not supported by the agent (check options). + Eingeschränkte Lebensdauer wird durch den Agenten nicht unterstützt (Optionen prüfen). + + + A confirmation request is not supported by the agent (check options). + Eine Bestätigungsanfrage wird durch den Agenten nicht unterstützt (Optionen prüfen). + + + + SearchHelpWidget + + Search Help + Hilfe durchsuchen + + + Search terms are as follows: [modifiers][field:]["]term["] + Suchbegriffe: [Modifikator][Feld:]["]Suchwort["] + + + Every search term must match (ie, logical AND) + Jeder Suchbegriff muss zutreffen (logisches UND) + + + Modifiers + Modifikatoren + + + exclude term from results + Ausdruck von Ergebnissen ausschließen + + + match term exactly + Exakter Ausdruck + + + use regex in term + Reguläre Ausdrücke benutzen + + + Fields + Felder + + + Term Wildcards + Platzhalter + + + match anything + Entspreche irgendwas + + + match one + Entspreche einem + + + logical OR + logisches ODER + + + Examples + Beispiele + + + + SearchWidget Search Suche @@ -3658,316 +4991,332 @@ Verfügbare Kommandos: Clear Löschen - - Case Sensitive - Groß- /Kleinschreibung beachten - Limit search to selected group Suche auf ausgewählte Gruppe beschränken + + Search Help + Hilfe durchsuchen + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Suche (%1)… + + + Case sensitive + Groß-/Kleinschreibung unterscheiden + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Neue Schlüsselverbindungsanfrage + Active + Aktiv - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Sie haben eine Verbindungsanfrage für den obigen Schlüssel -erhalten. Wenn Sie den Zugriff auf Ihre KeePassXC-Datenbank -erlauben möchten, geben Sie der Verbindungen einen eindeutigen -Namen und akzeptieren Sie. + Allow export + Export aktivieren - KeePassXC: Overwrite existing key? - KeePassXC: Bestehenden Schlüssel überschreiben? + Allow import + Import aktivieren - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Ein freigegebener Chiffrierschlüssel mit dem Namen "%1" existiert schon. -Möchten Sie ihn überschreiben? + Own certificate + Eigenes Zertifikat - KeePassXC: Update Entry - KeePassXC: Eintrag aktualisiert + Fingerprint: + Fingerabdruck: - Do you want to update the information in %1 - %2? - Möchten Sie wirklich die Informationen in %1 - %2 aktualisieren? + Certificate: + Zertifikat: - KeePassXC: Database locked! - KeePassXC: Datenbank gesperrt! + Signer + Unterzeichner: - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Die aktive Datenbank ist gesperrt! -Bitte entsperren Sie die ausgewählte Datenbank oder wählen Sie eine andere, die entsperrt ist. + Key: + Schlüssel: - KeePassXC: Removed keys from database - KeePassXC: Schlüssel aus der Datenbank entfernt + Generate + Generieren + + + Import + Importieren + + + Export + Export + + + Imported certificates + Importierte Zertifikate + + + Trust + Vertrauen + + + Ask + Fragen + + + Untrust + Nicht vertrauen + + + Remove + Entfernen + + + Path + Pfad + + + Status + Status + + + Fingerprint + Fingerabdruck + + + Certificate + Zertifikat + + + Trusted + Vertraut + + + Untrusted + Nicht vertraut + + + Unknown + Unbekannt + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + KeeShare-Schlüsseldatei + + + All files + Alle Dateien + + + Select path + Pfad auswählen + + + Exporting changed certificate + Exportiere geändertes Zertifikat + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Das exportierte Zertifikat ist nicht das selbe wie das benutzte. Soll das aktuelle Zertifikat exportiert werden? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Von Container ohne Signatur importieren + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Die Quelle des geteilten Containers kann wegen einer fehlenden Unterschrift nicht verifiziert werden. Soll wirklich aus %1 importiert werden? + + + Import from container with certificate + Von Container mit Zertifikat importieren + + + Not this time + Nicht diesmal + + + Never + Niemals + + + Always + Immer + + + Just this time + Nur diesmal + + + Import from %1 failed (%2) + Import von %1 fehlgeschlagen (%2) + + + Import from %1 successful (%2) + Import von %1 erfolgreich (%2) + + + Imported from %1 + Importiert aus %1 + + + Signed share container are not supported - import prevented + Unterzeichnete geteilte Container werden nicht unterstützt. Import verhindert. + + + File is not readable + Datei ist nicht lesbar. + + + Invalid sharing container + Ungültiger geteilter Container + + + Untrusted import prevented + Unvertrauter Import verhindet + + + Successful signed import + Erfolgreicher unterzeichneter Import + + + Unexpected error + Unerwarteter Fehler + + + Unsigned share container are not supported - import prevented + Nicht unterzeichnete geteilte Container werden nicht unterstützt. Import verhindert. + + + Successful unsigned import + Erfolgreich unterzeichneter Import + + + File does not exist + Datei existiert nicht + + + Unknown share container type + Unbekannter geteilter Container-Typ + + + Overwriting signed share container is not supported - export prevented + Überschreiben von unterzeichneten geteilten Containern nicht unterstützt. Export verhindert. + + + Could not write export container (%1) + Export-Container (%1) kann nicht gespeichert werden + + + Overwriting unsigned share container is not supported - export prevented + Überschreiben von nicht unterzeichneten geteilten Containern nicht unterstützt. Export verhindert. + + + Could not write export container + Export-Container kann nicht gespeichert werden + + + Unexpected export error occurred + Unerwarteter Fehler ist aufgetreten + + + Export to %1 failed (%2) + Export zu %1 fehlgeschlagen (%2) + + + Export to %1 successful (%2) + Export zu %1 erfolgreich (%2) + + + Export to %1 + Export nach %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Möchten Sie %1 mit dem Fingerabdruck %2 von %3 vertrauen? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Zeitbasiertes Passwort + + + 000000 + 000000 + + + Copy + Kopieren - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - %n Schlüssel erfolgreich aus KeePassXC/HTTP-Einstellungen entfernt.%n Schlüssel erfolgreich aus KeePassXC/HTTP-Einstellungen entfernt. - - - KeePassXC: No keys found - KeePassXC: Kein Schlüssel gefunden - - - No shared encryption-keys found in KeePassHttp Settings. - Kein freigegebener Chiffrierschlüssel in den KeePassHTTP-Einstellungen gefunden. - - - KeePassXC: Settings not available! - KeePassXC: Einstellung nicht verfügbar! - - - The active database does not contain an entry of KeePassHttp Settings. - Die aktive Datenbank enthält keinen Eintrag für KeePassHTTP Einstellungen. - - - Removing stored permissions... - Gespeicherte Berechtigungen werden gelöscht... - - - Abort - Abbrechen - - - KeePassXC: Removed permissions - KeePassXC: Zugangsdaten entfernt - - - Successfully removed permissions from %n entries. - Gespeicherte Berechtigungen wurden erfolgreich aus %n Eintrag entfernt.Gespeicherte Berechtigungen wurden erfolgreich aus %n Einträgen entfernt. - - - KeePassXC: No entry with permissions found! - KeePassXC: Kein Eintrag mit Zugangsdaten gefunden! - - - The active database does not contain an entry with permissions. - The aktive Datenbank enthält keinen Eintrag mit Zugangsdaten. + Expires in <b>%n</b> second(s) + Läuft in <b>%n</b> Sekunde(n) abLäuft in <b>%n</b> Sekunde(n) ab - SettingsWidget + TotpExportSettingsDialog - Application Settings - Anwendungseinstellungen + Copy + Kopieren - General - Allgemein + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + Anmerkung: Diese speziellen TOTP-Einstellungen könnten nicht mit anderen Authentifikatoren funktionieren. - Security - Sicherheit + There was an error creating the QR code. + QR-Code konnte nicht erstellt werden. - Access error for config file %1 - Zugriffsfehler für Konfigurations-Datei %1 + Closing in %1 seconds. + Wird in %1 Sekunde(n) geschlossen… - SettingsWidgetGeneral - - Basic Settings - Grundeinstellungen - - - Start only a single instance of KeePassXC - Nur eine einzige KeePassXC-Instanz starten - - - Remember last databases - Letzte Datenbank merken - - - Remember last key files and security dongles - Letzte Schlüsseldateien und Sicherheits-Dongles merken - - - Load previous databases on startup - Letzte Datenbank beim Start laden - - - Automatically save on exit - Automatisch speichern beim Schließen - - - Automatically save after every change - Automatisch nach jeder Änderung speichern - - - Automatically reload the database when modified externally - Datenbank nach externer Änderung automatisch neu laden. - - - Minimize when copying to clipboard - Minimieren beim Kopieren in die Zwischenablage - - - Minimize window at application startup - Fenster beim Programmstart minimieren - - - Use group icon on entry creation - Gruppensymbol für das Erstellen neuer Einträge verwenden - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Datenbank nicht als geändert markieren für geringfügige Änderungen (z.B. Ausklappen von Gruppen) - - - Hide the Details view - Detailansicht verstecken - - - Show a system tray icon - Taskleistensymbol anzeigen - - - Hide window to system tray when minimized - Fenster verstecken wenn minimiert - - - Hide window to system tray instead of app exit - Fenster zur Taskleiste minimieren statt das Programm zu beenden - - - Dark system tray icon - Dunkles Taskleistensymbol - - - Language - Sprache - - - Auto-Type - Auto-Type - - - Use entry title to match windows for global Auto-Type - Verwende Eintragstitel, um entsprechende Fenster für globales Auto-Type zu finden - - - Use entry URL to match windows for global Auto-Type - Verwende URL, um Fenster für globales Auto-Type zu finden. - - - Always ask before performing Auto-Type - Immer vor einem Auto-Type fragen - - - Global Auto-Type shortcut - Globale Tastenkombination für Auto-Type - - - Auto-Type delay - Auto-Type-Verzögerung - - - ms - Milliseconds - ms - - - Startup - Programmstart - - - File Management - Datei-Management - - - Safely save database files (may be incompatible with Dropbox, etc) - Datenbankdatei sicher speichern (ggf. inkompatibel mit Dropbox etc.) - - - Backup database file before saving - Vor Speichern Backup der Datenbank erstellen - - - Entry Management - Eintrags-Management - - - General - Allgemein - - - - SettingsWidgetSecurity - - Timeouts - Timeouts - - - Clear clipboard after - Zwischenablage leeren nach - - - sec - Seconds - sek - - - Lock databases after inactivity of - Datenbank sperren nach einer Inaktivität von - - - Convenience - Komfort - - - Lock databases when session is locked or lid is closed - Datenbank schließen, wenn Sitzung geschlossen oder Deckel zugeklappt wird - - - Lock databases after minimizing the window - Datenbank sperren nach Minimieren des Fensters - - - Don't require password repeat when it is visible - Keine erneute Passworteingabe verlangen, wenn das Passwort sichtbar ist. - - - Show passwords in cleartext by default - Passwörter standardmäßig im Klartext anzeigen - - - Hide passwords in the preview panel - Passwörter in Vorschau-Panel verstecken - - - Hide entry notes by default - Eintrags-Notizen standardmäßig verstecken - - - Privacy - Datenschutz - - - Use Google as fallback for downloading website icons - Verwende Google als Fallback fürs Herunterladen von Website-Icons - - - Re-lock previously locked database after performing Auto-Type - Datenbank nach Auto-Type automatisch wieder sperren. - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP TOTP einrichten @@ -3989,59 +5338,84 @@ Bitte entsperren Sie die ausgewählte Datenbank oder wählen Sie eine andere, di Verwende eigene Einstellungen - Note: Change these settings only if you know what you are doing. - Hinweis: Ändern Sie diese Einstellungen nur, wenn Sie wissen, was Sie tun. + Custom Settings + Eigene Einstellungen Time step: Zeitschritt: - 8 digits - 8 Ziffern - - - 6 digits - 6 Ziffern + sec + Seconds + sek Code size: Code-Länge: - sec - Seconds - sek + 6 digits + 6 Ziffern + + + 7 digits + 7 Nummern + + + 8 digits + 8 Ziffern - TotpDialog + UpdateCheckDialog - Timed Password - Zeitbasiertes Passwort + Checking for updates + Suche nach Updates - 000000 - 000000 + Checking for updates... + Suche nach Updates - Copy - Kopieren + Close + Schließen - Expires in - Verfällt in + Update Error! + Fehler beim Update - seconds - Sekunden + An error occurred in retrieving update information. + Bei der Updatesuche ist ein Fehler aufgetreten - - - UnlockDatabaseWidget - Unlock database - Datenbank entsperren + Please try again later. + Bitte später noch einmal probieren. + + + Software Update + Softwareupdate + + + A new version of KeePassXC is available! + Eine neue Version ist verfügbar. + + + KeePassXC %1 is now available — you have %2. + KeepassXC %1 ist jetzt verfügbar — Sie haben %2. + + + Download it at keepassxc.org + Download bei keepassxc.org + + + You're up-to-date! + Version aktuel + + + KeePassXC %1 is currently the newest version available + Version %1 ist die aktuellste Version. @@ -4076,42 +5450,26 @@ Bitte entsperren Sie die ausgewählte Datenbank oder wählen Sie eine andere, di - main + YubiKeyEditWidget - Remove an entry from the database. - Eintrag aus der Datenbank entfernen + Refresh + Neu laden - Path of the database. - Pfad zur Datenbank. + YubiKey Challenge-Response + YubiKey Challenge-Response - Path of the entry to remove. - Pfad des zu entfernenden Eintrags. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Ein <a href="https://www.yubico.com/">YubiKey</a> kann für zusätzliche Sicherheit sorgen.</p><p>Der YubiKey muss in einem Slot das Verfahren <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Reponse</a> gesetzt haben.</p> - KeePassXC - cross-platform password manager - KeePassXC - Plattformübergreifender Passwortmanager + No YubiKey detected, please ensure it's plugged in. + Kein YubiKey erkannt. Ist er eingesteckt? - filenames of the password databases to open (*.kdbx) - Dateinamen der zu öffnenden Datenbanken (*.kdbx) - - - path to a custom config file - Pfad zu einer benutzerdefinierten Konfigurationsdatei - - - key file of the database - Schlüsseldatei der Datenbank - - - read password of the database from stdin - Passwort der Datenbank von stdin lesen - - - Parent window handle - Eltern-Fenster-Handle + No YubiKey inserted. + Kein YubiKey angeschlossen. \ No newline at end of file diff --git a/share/translations/keepassx_el.ts b/share/translations/keepassx_el.ts index a27baa6a8..5c1e9d8ff 100644 --- a/share/translations/keepassx_el.ts +++ b/share/translations/keepassx_el.ts @@ -37,12 +37,6 @@ Copy to clipboard Αντιγραφή στο πρόχειρο - - Version %1 - - Έκδοση %1 - - Revision: %1 Αναθεώρηση: %1 @@ -73,37 +67,51 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Η Ομάδα του KeePassXC ευχαριστεί ιδιαίτερα τον ή την debfx που δημιούργησε το πρώτο KeePassx. + + + Version %1 + Έκδοση %1 + + + Build Type: %1 + Τύπος build: %1 + + + Auto-Type + Αυτόματη-Γραφή + + + Browser Integration + Ενσωμάτωση Περιηγητή + + + SSH Agent + πράκτορας SSH + + + YubiKey + YubiKey + + + TouchID + TouchID + + + None + None + + + KeeShare (signed and unsigned sharing) - Build Type: %1 - + KeeShare (only signed sharing) - - - AccessControlDialog - KeePassXC HTTP Confirm Access - KeePassXC HTTP Επιβεβαίωση Πρόσβασης - - - Remember this decision - Να θυμάσαι αυτή την απόφαση - - - Allow - Αποδοχή - - - Deny - Άρνηση - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 έχει ζητήσει πρόσβαση σε κωδικούς για το/τα ακόλουθο/α αντικείμενο/α. -Παρακαλώ επιλέξετε εάν θέλετε να επιτρέψετε τη πρόσβαση. + KeeShare (only unsigned sharing) + @@ -112,6 +120,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) Ενεργοποίηση πράκτορα SSH (απαιτεί επανεκκίνηση) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Ρυθμίσεις Εφαρμογής + + + General + Γενικά + + + Security + Ασφάλεια + + + Access error for config file %1 + Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Βασικές Ρυθμίσεις + + + Startup + Startup + + + Start only a single instance of KeePassXC + Εκκίνηση μόνον μιας περίπτωσης KeePassXC + + + Remember last databases + Θυμηθείτε την τελευταία βάσεις δεδομένων + + + Remember last key files and security dongles + Να θυμάσαι το τελευταίο αρχείο κλειδιού και φορητές συσκευές ασφαλείας + + + Load previous databases on startup + Φόρτωμα προηγούμενων βάσεων δεδομένων κατά την εκκίνηση + + + Minimize window at application startup + Ελαχιστοποίηση παραθύρου κατά την εκκίνηση + + + File Management + Διαχείριση αρχείων + + + Safely save database files (may be incompatible with Dropbox, etc) + Ασφαλής αποθήκευση αρχείων βάσης δεδομένων (λειτουργία ίσως ασύμβατη με Dropbox, κλπ) + + + Backup database file before saving + Δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων πριν αποθηκεύσετε + + + Automatically save after every change + Αυτόματη Αποθήκευση μετά απο κάθε αλλαγή + + + Automatically save on exit + Αυτόματη αποθήκευση κατα την έξοδο + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Η βάση δεδομένων να μην σημαίνεται ως τροποποιημένη για αλλαγές που δεν αφορούν δεδομένα (π.χ. επέκταση ομάδων) + + + Automatically reload the database when modified externally + Αυτόματη επαναφόρτωση βάσης σε περίπτωση εξωτερικής τροποποίησης + + + Entry Management + Διαχείριση καταχώρισης + + + Use group icon on entry creation + Χρησιμοποίηση εικονιδίου ομάδας κατα την δημιουργία καταχώρησης + + + Minimize when copying to clipboard + Ελαχιστοποίηση οταν αντιγράφετε στο πρόχειρο + + + Hide the entry preview panel + Απόκρυψη του πλαισίου προεπισκόπισης καταχωρήσεων + + + General + Γενικά + + + Hide toolbar (icons) + Απόκρυψη εργαλειοθήκης (εικονιδίων) + + + Minimize instead of app exit + Ελλαχιστοποίηση αντί για έξοδος από την εφαρμογή + + + Show a system tray icon + Δείχνουν ένα εικονίδιο του δίσκου συστήματος + + + Dark system tray icon + Σκοτεινό εικονίδιο περιοχής συστήματος + + + Hide window to system tray when minimized + Απόκρυψη του παραθύρου στην περιοχή συστήματος όταν γίνεται ελλαχιστοποίηση + + + Language + Γλώσσα + + + Auto-Type + Αυτόματη-Γραφή + + + Use entry title to match windows for global Auto-Type + Να γίνεται χρήση του τίτλου για το ταίριασμα των παραθύρων της λειτουργίας Auto-Type + + + Use entry URL to match windows for global Auto-Type + Να γίνεται χρήση του URL του τίτλου για το ταίριασμα των παραθύρων λειτουργίας Auto-Type + + + Always ask before performing Auto-Type + Πάντα ερώτηση για την εκτέλεση του Auto-Type + + + Global Auto-Type shortcut + Συντόμευση για την λειτουργία Auto-Type + + + Auto-Type typing delay + Καθυστέρηση πληκτρολόγησης στο Auto-Type + + + ms + Milliseconds + ms + + + Auto-Type start delay + Καθυστέρηση έναρξης του Auto-Type + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Χρονικά όρια λήξης + + + Clear clipboard after + Εκκαθάριση πρόχειρου μετά από + + + sec + Seconds + δευτερόλεπτα + + + Lock databases after inactivity of + Κλείδωμα βάσης δεδομένων μετα απο ανενεργεία + + + min + min + + + Forget TouchID after inactivity of + Απενεργοποίηση του TouchID μετά από αδράνεια + + + Convenience + Ευκολία + + + Lock databases when session is locked or lid is closed + Κλείδωμα βάσεων δεδομένων κατά το κλείδωμα της συνεδρίας ή την αναδίπλωση της οθόνης + + + Forget TouchID when session is locked or lid is closed + Απενεργοποίηση του TouchID όταν η συνεδρία κλειδώνει ή το κάλυμα κλείνει + + + Lock databases after minimizing the window + Κλείδωμα της βάσης δεδομένων μετά την ελαχιστοποίηση του παραθύρου + + + Re-lock previously locked database after performing Auto-Type + Να κλειδώνει εκ νέου η προηγούμενα κλειδωμένη βάση δεδομένων μετά την χρήση του Auto-Type + + + Don't require password repeat when it is visible + Να μην απαιτείται επανάληψη του κωδικού όταν αυτός είναι ορατός + + + Don't hide passwords when editing them + Να μην αποκρύβονται οι κωδικοί όταν γίνεται επεξεργασία τους + + + Don't use placeholder for empty password fields + Να μην γίνεται χρήση συμβόλου υποκατάστασης για τα κενά πεδία κωδικών + + + Hide passwords in the entry preview panel + Απόκρυψη των κωδικών στο πλαίσιο προεπισκόπισης καταχωρήσεων + + + Hide entry notes by default + Να αποκρύπτονται εξ ορισμού οι σημειώσεις καταχωρήσεων + + + Privacy + Ιδιωτικότητα + + + Use DuckDuckGo as fallback for downloading website icons + Να γίνεται χρήση του DuckDuckGo ως εναλλακτικής πηγής για λήψη εικονιδίων ιστοσελίδων + AutoType @@ -129,19 +408,19 @@ Please select whether you want to allow access. The Syntax of your Auto-Type statement is incorrect! - + Η Σύνταξη της εντολής Auto-Type είναι εσφαλμένη! This Auto-Type command contains a very long delay. Do you really want to proceed? - + Αυτή η εντολή Auto-Type περιέχει μια πολύ μεγάλη καθυστέρηση. Θέλετε να προχωρήσετε; This Auto-Type command contains very slow key presses. Do you really want to proceed? - + Αυτή η εντολή Auto-Type περιέχει πολύ αργή πληκτρολόγηση. Θέλετε να προχωρήσετε; This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - + Αυτή η εντολή Auto-Type περιέχει λειτουργίες που επαναλαμβάνονται πολύ συχνά. Θέλετε να προχωρήσετε; @@ -193,7 +472,7 @@ Please select whether you want to allow access. BrowserAccessControlDialog KeePassXC-Browser Confirm Access - + Kee-PassXC-Browser Επιβεβαίωση πρόσβασης Remember this decision @@ -214,6 +493,27 @@ Please select whether you want to allow access. Παρακαλώ επιλέξετε εάν θέλετε να επιτρέψετε τη πρόσβαση. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Αποθήκευση καταχώρησης + + + Ok + ΟΚ + + + Cancel + Άκυρο + + + You have multiple databases open. +Please select the correct database for saving credentials. + Έχετε ανοικτές πολλές βάσεις δεδομένων +Παρακαλώ επιλέξτε την σωστή βάση για την αποθήκευση των διαπιστευτηρίων. + + BrowserOptionDialog @@ -222,11 +522,11 @@ Please select whether you want to allow access. This is required for accessing your databases with KeePassXC-Browser - + Αυτό απαιτείται για να έχετε πρόσβαση στις βάσεις δεδομένων με το KeePassXC-Browser Enable KeepassXC browser integration - + Ενεργοποίηση της συνεργασίας του περιηγητή ιστού και του KeePassXC General @@ -234,28 +534,28 @@ Please select whether you want to allow access. Enable integration for these browsers: - + Ενεργοποίηση της ενσωμάτωσης με τους ακόλουθους περιηγητές: &Google Chrome - + &Google Chrome &Firefox - + &Firefox &Chromium - + &Chromium &Vivaldi - + &Vivaldi Show a &notification when credentials are requested Credentials mean login data requested via browser extension - + Εμφάνιση &ειδοποίησης όταν απαιτούνται διαπιστευτήρια Re&quest to unlock the database if it is locked @@ -287,14 +587,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension - - &Disconnect all browsers - - - - Forget all remembered &permissions - - Advanced Για προχωρημένους @@ -360,14 +652,6 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! - - Executable Files (*.exe);;All Files (*.*) - - - - Executable Files (*) - - Select custom proxy location @@ -376,6 +660,31 @@ Please select whether you want to allow access. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + BrowserService @@ -411,149 +720,44 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Βάση δεδομένων κλειδωμένη! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - KeePassXC: Settings not available! - KeePassXC: Ρυθμισμένες μη διαθέσιμες! - - - The active database does not contain a settings entry. - - - - KeePassXC: No keys found - KeePassXC: Δε βρεθήκαν κλειδιά - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - KeePassXC: Κλειδιά αφαιρέθηκαν από τη βάση - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - - Abort Διακοπή - KeePassXC: Removed permissions - KeePassXC: Δικαιώματα αφαιρέθηκαν + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: Δε βρέθηκε καταχώρηση με δικαιώματα! - - - The active database does not contain an entry with permissions. - - - - - ChangeMasterKeyWidget - - Password - Κωδικός - - - Enter password: - Εισάγετε κωδικό: - - - Repeat password: - Επαναλάβετε τον κωδικό: - - - &Key file - &Αρχείο κλειδί - - - Browse - Αναζήτηση - - - Create - Δημιουργία - - - Cha&llenge Response + KeePassXC: No entry with KeePassHTTP attributes found! - Refresh - Ανανέωση - - - Key files - Αρχεία κλειδιά - - - All files - Όλα τα αρχεία - - - Create Key File... - Δημιουργεία αρχείου κλειδιού... - - - Unable to create Key File : - Αποτυχία δημιουργεία αρχείου κλειδιού: - - - Select a key file - Επιλέξτε ένα αρχείο κλειδί - - - Empty password - Κενός κωδικός - - - Do you really want to use an empty string as password? - Θέλετε στα αλήθεια να χρησιμοποιήσετε μια άδεια σειρά σαν κωδικό; - - - Different passwords supplied. - Έχετε εισάγει διαφορετικούς κωδικούς. - - - Failed to set %1 as the Key file: -%2 - Αποτυχία ορισμού του %1 ως αρχείου κλειδιού - - - Legacy key file format + The active database does not contain an entry with KeePassHTTP attributes. - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + KeePassXC: Legacy browser integration settings detected - Changing master key failed: no YubiKey inserted. - Η αλλαγή του πρωτεύοντος κλειδιού απέτυχε: δεν εισήχθη YubiKey. + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + @@ -627,20 +831,12 @@ Please consider generating a new key file. Column layout - + Διάταξη στηλών Not present in CSV file Δεν υπάρχει στο αρχείο CSV - - Empty fieldname - Κενό όνομα πεδίου - - - column - στήλη - Imported from CSV file Εισήχθη από αρχείο CSV @@ -649,49 +845,86 @@ Please consider generating a new key file. Original data: Αρχικά δεδομένα: - - Error(s) detected in CSV file ! - Σφάλμα/τα εντοπίστηκε/αν στο αρχείο CSV ! - - - more messages skipped] - Περισσότερα μηνύματα έχουν παραλειφθεί] - Error Σφάλμα + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - +%1 - - CsvImportWizard - - Error - Σφάλμα - - - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί - - CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + Ρίζα + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + DatabaseOpenWidget @@ -719,14 +952,6 @@ Please consider generating a new key file. Challenge Response: Απόκριση Πρόκλησης: - - Unable to open the database. - Αδύνατο να ανοιχτεί η βάση δεδομένων. - - - Can't open key file - Αποτυχία ανοίγματος αρχείο κλειδιού - Legacy key file format @@ -740,11 +965,11 @@ Please consider generating a new key file. Don't show this warning again - + Να μην εμφανιστεί ξανά αυτή η προειδοποίηση All files - Όλα τα αρχεία + Όλα τα αρχεία Key files @@ -754,57 +979,253 @@ Please consider generating a new key file. Select key file Επιλέξτε αρχείο κλειδί - - - DatabaseRepairWidget - Repair database - Επισκευή βάσης δεδομένων + TouchID for quick unlock + - Error - Σφάλμα + Unable to open the database: +%1 + - Can't open key file - Δεν είναι δυνατό να ανοίξει αρχείο κλειδιού - - - Unable to open the database. - Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων. - - - Database opened fine. Nothing to do. - Μια χαρά το άνοιγμα βάσης δεδομένων. Τίποτα να κάνει. - - - Success - Επιτυχία - - - The database has been successfully repaired -You can now save it. - Η βάση δεδομένων έχει επιδιορθωθεί με επιτυχία μπορείτε να το αποθηκεύσετε τώρα. - - - Unable to repair the database. - Δεν είναι δυνατή η επιδιόρθωση της βάσης δεδομένων. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Κωδικοί + + + + DatabaseSettingsDialog + + Advanced Settings + + General Γενικά - Encryption + Security + Ασφάλεια + + + Master Key + + + + Encryption Settings + + + + Browser Integration + Ενσωμάτωση Περιηγητή + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + Αφαίρεση + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: Δε βρεθήκαν κλειδιά + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: Κλειδιά αφαιρέθηκαν από τη βάση + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + Διακοπή + + + KeePassXC: Removed permissions + KeePassXC: Δικαιώματα αφαιρέθηκαν + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: Δε βρέθηκε καταχώρηση με δικαιώματα! + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Αλγόριθμος κρυπτογράφησης: + + + AES: 256 Bit (default) + AES: 256 Bit (προεπιλεγμένο) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + + + + Transform rounds: + Μετατρεπόμενοι γύροι: + + + Benchmark 1-second delay + + + + Memory Usage: + Χρήση μνήμης: + + + Parallelism: + Παραλληλισμός: + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged Number of rounds too high Key transformation rounds - + Αριθμός γύρων πάρα πολύ υψηλός You are using a very high number of key transform rounds with Argon2. @@ -818,12 +1239,12 @@ If you keep this number, your database may take hours or days (or even longer) t Cancel - + Άκυρο Number of rounds too low Key transformation rounds - + Αριθμός γύρων πάρα πολύ χαμηλός You are using a very low number of key transform rounds with AES-KDF. @@ -849,47 +1270,22 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - + + %1 ms + milliseconds + - - AES: 256 Bit (default) - AES: 256 Bit (προεπιλεγμένο) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - - - - Transform rounds: - Μετατρεπόμενοι γύροι: - - - Benchmark 1-second delay - - - - Memory Usage: - - - - Parallelism: - + + %1 s + seconds + DatabaseSettingsWidgetGeneral Database Meta Data - + Μετα-δεδομένα βάσης Database name: @@ -905,7 +1301,7 @@ If you keep this number, your database may be too easy to crack! History Settings - + Ρυθμίσεις ιστορικού Max. history items: @@ -925,7 +1321,7 @@ If you keep this number, your database may be too easy to crack! Additional Database Settings - + Πρόσθετες ρυθμίσεις βάσης δεδομένων Enable &compression (recommended) @@ -933,12 +1329,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Ρίζα + Sharing + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database Βάση Δεδομένων KeePass 2 @@ -949,32 +1416,12 @@ If you keep this number, your database may be too easy to crack! Open database - Άνοιγμα βάσης δεδομένων - - - File not found! - Αρχείο δεν βρέθηκε! - - - Unable to open the database. - Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων. - - - File opened in read only mode. - Αρχείο ανοιχτό μόνο για ανάγνωση. - - - Open CSV file - Άνοιγμα αρχείου CSV + Άνοιγμα Βάσης Δεδομένων CSV file αρχείο CSV - - All files (*) - Όλα τα αρχεία (*) - Merge database Συγχώνευση βάσης δεδομένων @@ -987,38 +1434,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database Βάση δεδομένων KeePass 1 - - Close? - Κλείσιμο; - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" είναι σε λειτουργεία επεξεργασίας. -Απόρριψη αλλαγών και κλείσιμο ούτως η άλλως; - - - Save changes? - Αποθήκευση αλλαγών; - - - "%1" was modified. -Save changes? - "%1" έχει τροποποιηθή. -Αποθήκευση αλλαγών; - - - Writing the database failed. - Εγγραφή της βάσης δεδομένων απέτυχε. - - - Passwords - Κωδικοί - - - Save database as - Αποθήκευση βάσης δεδομένων σαν - Export database to CSV file Εξαγωγή βάσης δεδομένων σε αρχείο CSV @@ -1028,38 +1443,39 @@ Save changes? Γράψιμο στο αρχείο CSV απέτυχε. - New database - Νέα βάση δεδομένων - - - locked - κλειδωμένο - - - Lock database - Κλείδωμα βάσης δεδομένων - - - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Η βάση δεδομένων δεν μπορεί να κλειδωθεί γιατί την επεξεργάζεται αυτην την στιγμή. -Παρακαλώ πατήστε άκυρο για να αποθηκεύσετε τις αλλαγές σας η να τις απορρίψετε. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Αυτή η βάση δεδομένων έχει αλλάξει. -Θέλετε να αποθηκεύσετε τις αλλαγές σας πρίν την κλειδώσετε: -Αλλιώς οι αλλαγές σας θα χαθούν. - - - Disable safe saves? + Database creation error - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier @@ -1069,38 +1485,14 @@ Disable safe saves and try again? Searching... Αναζήτηση... - - Change master key - Αλλαγή πρωτεύοντος κλειδιού - - - Delete entry? - Διαγραφή καταχώρησης; - Do you really want to delete the entry "%1" for good? Θέλετε πραγματικά να διαγράψετε την καταχώρηση "%1" μόνιμα; - - Delete entries? - Διαγραφή καταχωρήσεων; - - - Do you really want to delete %1 entries for good? - Θέλετε πραγματικά να διαγράψετε %1 καταχωρήσεις για πάντα; - - - Move entry to recycle bin? - Κίνηση εισόδου στον κάδο ανακύκλωσης; - Do you really want to move entry "%1" to the recycle bin? Θέλετε πραγματικά να κινηθεί εισόδου "%1" στον κάδο ανακύκλωσης; - - Move entries to recycle bin? - Μετακίνηση καταχωρήσεων στο καλάθι των αχρήστων; - Do you really want to move %n entry(s) to the recycle bin? @@ -1117,18 +1509,10 @@ Disable safe saves and try again? Remember my choice Να θυμάσαι αυτή την επιλογή - - Delete group? - Διαγραφή ομάδας; - Do you really want to delete the group "%1" for good? Θέλετε στα αλήθεια να διαγράψετε την ομάδα "%1" μόνιμα; - - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί - No current database. Καμία τρέχουσα βάση δεδομένων. @@ -1162,10 +1546,6 @@ Disable safe saves and try again? Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - Δεν ήταν δυνατό το άνοιγμα του νέου αρχείου βάσης δεδομένων κατά την προσπάθεια αυτόματης επαναφόρτωσης αυτής της βάσης δεδομένων. - Empty recycle bin? Άδειασμα κάδου ανακύκλωσης; @@ -1174,87 +1554,102 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? Είστε σίγουροι ότι θέλετε να διαγράψετε μόνιμα τα πάντα από το κάδο ανακύκλωσής σας; - - - DetailsWidget + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + - Generate TOTP Token + File opened in read only mode. + Αρχείο ανοιχτό μόνο για ανάγνωση. + + + Lock Database? - Close - Κλείσιμο - - - General - Γενικά - - - Password - Κωδικός - - - URL - URL - - - Expiration + You are editing an entry. Discard changes and lock anyway? - Username - Όνομα χρήστη + "%1" was modified. +Save changes? + "%1" έχει τροποποιηθή. +Αποθήκευση αλλαγών; - Autotype + Database was modified. +Save changes? - Searching + Save changes? + Αποθήκευση αλλαγών; + + + Could not open the new database file while attempting to autoreload. +Error: %1 - Attributes + Disable safe saves? - Attachments - Συνημμένα - - - Notes - Σημειώσεις - - - Window - Παράθυρο - - - Sequence - Ακολουθία - - - Search - Αναζήτηση - - - Clear + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? - Never + Writing the database failed. +%1 - [PROTECTED] + Passwords + Κωδικοί + + + Save database as + Αποθήκευση βάσης δεδομένων ως + + + KeePass 2 Database + Βάση Δεδομένων KeePass 2 + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + Διαγραφή ομάδας + + + Move group to recycle bin? - Disabled + Do you really want to move the group "%1" to the recycle bin? - Enabled + Successfully merged the database files. + + + + Database was not modified by merge operation. @@ -1328,22 +1723,10 @@ Do you want to merge your changes? New attribute Νέο χαρακτηριστικό - - Confirm Remove - Επιβεβαίωση Αφαίρεσης - Are you sure you want to remove this attribute? Είστε σίγουροι ότι θέλετε να αφαιρέσετε αυτό το χαρακτηριστικό. - - [PROTECTED] - - - - Press reveal to view or edit - - Tomorrow Αύριο @@ -1356,10 +1739,6 @@ Do you want to merge your changes? %n month(s) - - 1 year - 1 χρόνο - Apply generated password? @@ -1372,6 +1751,26 @@ Do you want to merge your changes? Entry updated successfully. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + [ΠΡΟΣΤΑΤΕΥΜΕΝΟ] Πατήστε αποκάλυψη για προβολή ή επεξεργασία + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1601,7 +2000,7 @@ Do you want to merge your changes? Edit group - Επεξεργασία ομάδας + Επεξεργασία Ομάδας Enable @@ -1616,6 +2015,81 @@ Do you want to merge your changes? Κληρονομούν από γονική ομάδα (%1) + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + Κωδικός: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + EditGroupWidgetMain @@ -1673,10 +2147,6 @@ Do you want to merge your changes? Unable to fetch favicon. Αδυναμία λήψης favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - - Images Εικόνες @@ -1685,14 +2155,6 @@ Do you want to merge your changes? All files Όλα τα αρχεία - - Select Image - Επιλογή εικόνας - - - Can't read icon - Αδυναμία ανάγνωσης εικονιδίου - Custom icon already exists @@ -1702,9 +2164,37 @@ Do you want to merge your changes? Επιβεβαίωση Διαγραφής - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + EditWidgetProperties @@ -1753,9 +2243,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Κλωνοποίηση + %1 - Clone + @@ -1799,10 +2288,6 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - Confirm Remove - Επιβεβαίωση Αφαίρεσης - Save attachments @@ -1836,10 +2321,14 @@ This may cause the affected plugins to malfunction. - Unable to open files: -%1 + Confirm remove + + Unable to open file(s): +%1 + + EntryAttributesModel @@ -1922,6 +2411,106 @@ This may cause the affected plugins to malfunction. Attachments Συνημμένα + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + Κλείσιμο + + + General + Γενικά + + + Username + Όνομα χρήστη + + + Password + Κωδικός + + + Expiration + + + + URL + URL + + + Attributes + + + + Attachments + Συνημμένα + + + Notes + Σημειώσεις + + + Autotype + + + + Window + Παράθυρο + + + Sequence + Ακολουθία + + + Searching + + + + Search + Αναζήτηση + + + Clear + + + + Never + + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + + + + Disabled + + + + Share + + EntryView @@ -1960,6 +2549,19 @@ This may cause the affected plugins to malfunction. Recycle Bin Καλάθι ανακύκλωσης + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + HostInstaller @@ -1972,61 +2574,6 @@ This may cause the affected plugins to malfunction. - - HttpPasswordGeneratorWidget - - Length: - Μήκος: - - - Character Types - Τύποι χαρακτήρων - - - Upper Case Letters - Κεφαλαία γράμματα - - - A-Z - Α-Ω - - - Lower Case Letters - Πεζά γράμματα - - - a-z - α-ω - - - Numbers - Αριθμοί - - - 0-9 - 0-9 - - - Special Characters - Ειδικοί χαρακτήρες - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Εξαίρεση χαρακτήρων που μοίαζουν - - - Ensure that the password contains characters from every group - Βεβαιωθείται οτι ο κωδικός περιέχει χαρακτήρες απο κάθε ομάδα - - - Extended ASCII - - - KMessageWidget @@ -2052,6 +2599,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Λάθος κλειδί ή βάση δεδομένων αρχείο είναι κατεστραμμένο. + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + Kdbx3Writer @@ -2210,10 +2777,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher @@ -2265,6 +2828,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2336,10 +2911,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid - - Unable to decrypt entry string - - Duplicate custom attribute found @@ -2389,6 +2960,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2398,7 +2975,7 @@ This is a one-way migration. You won't be able to open the imported databas Unable to open the database. - Αποτυχία ανοίγματος βάσης δεδομένων. + Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων. @@ -2409,7 +2986,7 @@ This is a one-way migration. You won't be able to open the imported databas Not a KeePass database. - Δεν ειναι βάση δεδομένων KeePass. + Δεν είναι βάση δεδομένων KeePass. Unsupported encryption algorithm. @@ -2552,55 +3129,126 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type - - - KeePass2 - AES: 256-bit - - - - Twofish: 256-bit - - - - ChaCha20: 256-bit - - - - AES-KDF (KDBX 4) - - - - AES-KDF (KDBX 3.1) - - - - Argon2 (KDBX 4 – recommended) + unable to seek to content position - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. + Disabled share - The lock file could not be created. Single-instance mode disabled. + Import from - Another instance of KeePassXC is already running. - Μία άλλη διεργασία του KeePassXC ήδη τρέχει. + Export to + - Fatal error while testing the cryptographic functions. - Ανεπανόρθωτο σφάλμα κατά τον έλεγχο των κρυπτογραφικών λειτουργιών. + Synchronize with + + + + + KeyComponentWidget + + Key Component + - KeePassXC - Error - KeePassXC - Σφάλμα + Key Component Description + + + + Cancel + Άκυρο + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Αναζήτηση + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Αρχεία κλειδιά + + + All files + Όλα τα αρχεία + + + Create Key File... + Δημιουργεία αρχείου κλειδιού... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Επιλέξτε ένα αρχείο κλειδί @@ -2613,10 +3261,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases &Πρόσφατες βάσεις δεδομένων - - Import - Εισαγωγή - &Help @@ -2625,14 +3269,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries Ε&γγραφές - - Copy att&ribute to clipboard - - - - Time-based one-time password - - &Groups &Ομάδες @@ -2661,30 +3297,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database &Κλείσιμο βάσης δεδομένων - - &New database - &Νέα βάση δεδομένων - - - Merge from KeePassX database - Συγχώνευση από βάση δεδομένων KeePassX - - - &Add new entry - &Προσθήκη νέας καταχώρησης - - - &View/Edit entry - &Προβολή/Επεξεργασία καταχώρησης - &Delete entry &Διαγραφή καταχώρησης - - &Add new group - &Προσθήκη νέας ομάδας - &Edit group &Επεξεργασία ομάδας @@ -2697,14 +3313,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... - - Change &master key... - - - - &Database settings - - Database settings Ρυθμίσεις βάσης δεδομένων @@ -2713,10 +3321,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry &Κλωνοποίηση καταχώρησης - - &Find - - Copy &username Αντιγραφή &ονόματος χρήστη @@ -2725,10 +3329,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard Αντιγραφή όνομα χρήστη στο πρόχειρο - - Cop&y password - Αντιγρα&φή κωδικού - Copy password to clipboard Αντιγραφή κωδικού στο πρόχειρο @@ -2741,14 +3341,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator Γεννήτρια Κωδικών - - &Perform Auto-Type - - - - &Open URL - &Άνοιγμα URL - &Lock databases &Κλείδωμα βάσεων δεδομένων @@ -2781,22 +3373,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... - - Import KeePass 1 database... - - - - Import CSV file... - - - - Re&pair database... - - - - Show TOTP - - Set up TOTP... @@ -2817,14 +3393,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - Μόνο για ανάγνωση - Settings Ρύθμίσεις @@ -2837,26 +3405,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC Κλείσιμο KeePassXC - - KeePass 2 Database - Βάση Δεδομένων KeePass 2 - - - All files - Όλα τα αρχεία - - - Open database - Άνοιγμα Βάσης Δεδομένων - - - Save repaired database - Αποθήκευση επιδιορθωμένη βάση δεδομένων - - - Writing the database failed. - Εγγραφή της βάσης δεδομένων απέτυχε. - Please touch the button on your YubiKey! Παρακαλώ αγγίξτε το κουμπί στο YubiKey σας! @@ -2867,6 +3415,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Ρίζα + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2968,123 +3777,33 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Διάλογος + Enter password: + Εισάγετε κωδικό: - This is required for accessing your databases from ChromeIPass or PassIFox - Αυτό είναι απαραίτητο για τη πρόσβαση στις βάσεις δεδομένων σας, από το ChromeIPass ή το PassIFox - - - Enable KeePassHTTP server - Ενεργοποίηση του εξυπηρετητή KeePassHTTP - - - General - Γενικά - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + Confirm password: - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Password + Κωδικός + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - &Return only best matching entries + Password cannot be empty. - Re&quest to unlock the database if it is locked + Passwords do not match. - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - - &Match URL schemes - - - - Sort matching entries by &username - - - - Sort &matching entries by title - - - - R&emove all shared encryption keys from active database - - - - Re&move all stored permissions from entries in active database - - - - Password Generator - Γεννήτρια Κωδικών - - - Advanced - Για προχωρημένους - - - Always allow &access to entries - - - - Always allow &updating entries - - - - Only the selected database has to be connected with a client. - - - - Searc&h in all opened databases for matching entries - - - - Automatically creating or updating string fields is not supported. - - - - &Return advanced string fields which start with "KPH: " - - - - HTTP Port: - HTTP Θύρα: - - - Default port: 19455 - Προεπιλεγμένη θύρα: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - Το KeePassXC θα ακούει σε αυτή τη θύρα στο 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password @@ -3155,18 +3874,10 @@ Using default port 19455. Wordlist: Λίστα Λέξεων: - - Word Count: - Αριθμός Λέξεων: - Word Separator: Διαχωριστικό Λέξεων: - - Generate - - Copy Αντιγραφή @@ -3179,10 +3890,6 @@ Using default port 19455. Close Κλείσιμο - - Apply - Εφαρμογή - Entropy: %1 bit @@ -3211,6 +3918,171 @@ Using default port 19455. Password quality Εξαιρετική + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Για προχωρημένους + + + Upper Case Letters A to F + + + + A-Z + Α-Ω + + + Lower Case Letters A to F + + + + a-z + α-ω + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Διαγραφή + + + Move + + + + Empty + + + + Remove + Αφαίρεση + + + Skip + + + + Disable + Απενεργοποίηση + + + Merge + + QObject @@ -3230,34 +4102,18 @@ Using default port 19455. Cannot decrypt message - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - - Encryption key is not recognized - - No saved databases found - - Incorrect action @@ -3383,10 +4239,6 @@ Using default port 19455. Insert password to unlock %1: - - Failed to load key file %1 : %2 - - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3465,12 +4317,6 @@ Available commands: error reading from device σφάλμα κατά την ανάγνωση από συσκευή - - file empty ! - - αρχείο κενό ! - - malformed string @@ -3507,10 +4353,6 @@ Available commands: Created - - Legacy Browser Integration - - Browser Integration Ενσωμάτωση Περιηγητή @@ -3539,10 +4381,6 @@ Available commands: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3553,27 +4391,437 @@ Available commands: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + ονόματα αρχείων των βάσεων δεδομένων κωδικών προς άνοιγμα (*.kdbx) + + + path to a custom config file + διαδρομή σε προσαρμοσμένο αρχείο ρυθμίσεων + + + key file of the database + Αρχείο κλειδί της βάσεως δεδομένων + + + read password of the database from stdin + Διάβασμα κωδικού βάσης από το stdin + + + Parent window handle + + + + Another instance of KeePassXC is already running. + Μία άλλη διεργασία του KeePassXC ήδη τρέχει. + + + Fatal error while testing the cryptographic functions. + Ανεπανόρθωτο σφάλμα κατά τον έλεγχο των κρυπτογραφικών λειτουργιών. + + + KeePassXC - Error + KeePassXC - Σφάλμα + + + Database password: @@ -3612,11 +4860,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - Αναζήτηση... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Αναζήτηση @@ -3625,311 +4959,317 @@ Available commands: Clear - - Case Sensitive - - Limit search to selected group Περιορισμός αναζήτησης στην επιλεγμένη ομάδα + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + Διάκριση πεζών-κεφαλαίων + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request + Active - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Allow export - KeePassXC: Overwrite existing key? - KeePassXC: Αντικατάσταση τρέχοντος κλειδιού; - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Allow import - KeePassXC: Update Entry - KeePassXC: Ενημέρωση Καταχώρησης - - - Do you want to update the information in %1 - %2? + Own certificate - KeePassXC: Database locked! - KeePassXC: Βάση δεδομένων κλειδωμένη! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Fingerprint: - KeePassXC: Removed keys from database - KeePassXC: Κλειδιά αφαιρέθηκαν από τη βάση + Certificate: + + + + Signer + + + + Key: + Κλειδί: + + + Generate + + + + Import + Εισαγωγή + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Αφαίρεση + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Όλα τα αρχεία + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + + + + 000000 + 000000 + + + Copy + Αντιγραφή - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) + + + TotpExportSettingsDialog - KeePassXC: No keys found - KeePassXC: Δε βρεθήκαν κλειδιά + Copy + Αντιγραφή - No shared encryption-keys found in KeePassHttp Settings. + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - KeePassXC: Settings not available! - KeePassXC: Ρυθμισμένες μη διαθέσιμες! - - - The active database does not contain an entry of KeePassHttp Settings. + There was an error creating the QR code. - Removing stored permissions... - Αφαίρεση αποθηκευμένων δικαιωμάτων... - - - Abort - Διακοπή - - - KeePassXC: Removed permissions - KeePassXC: Δικαιώματα αφαιρέθηκαν - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC: Δε βρέθηκε καταχώρηση με δικαιώματα! - - - The active database does not contain an entry with permissions. + Closing in %1 seconds. - SettingsWidget - - Application Settings - Ρυθμίσεις Εφαρμογής - - - General - Γενικά - - - Security - Ασφάλεια - - - Access error for config file %1 - Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 - - - - SettingsWidgetGeneral - - Basic Settings - Βασικές Ρυθμίσεις - - - Start only a single instance of KeePassXC - - - - Remember last databases - Θυμηθείτε την τελευταία βάσεις δεδομένων - - - Remember last key files and security dongles - - - - Load previous databases on startup - Φόρτωμα προηγούμενων βάσεων δεδομένων κατά την εκκίνηση - - - Automatically save on exit - Αυτόματη αποθήκευση κατα την έξοδο - - - Automatically save after every change - Αυτόματη Αποθήκευση μετά απο κάθε αλλαγή - - - Automatically reload the database when modified externally - Αυτόματη επαναφόρτωση βάσης σε περίπτωση εξωτερικής τροποποίησης - - - Minimize when copying to clipboard - Ελαχιστοποίηση οταν αντιγράφετε στο πρόχειρο - - - Minimize window at application startup - Ελαχιστοποίηση παραθύρου κατά την εκκίνηση - - - Use group icon on entry creation - Χρησιμοποίηση εικονιδίου ομάδας κατα την δημιουργία καταχώρησης - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Hide the Details view - - - - Show a system tray icon - Δείχνουν ένα εικονίδιο του δίσκου συστήματος - - - Hide window to system tray when minimized - - - - Hide window to system tray instead of app exit - - - - Dark system tray icon - - - - Language - Γλώσσα - - - Auto-Type - Αυτόματη-Γραφή - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - Πάντα ερώτηση για την εκτέλεση του Auto-Type - - - Global Auto-Type shortcut - - - - Auto-Type delay - Καθυστέρηση Auto-Type - - - ms - Milliseconds - ms - - - Startup - - - - File Management - - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - - - - Entry Management - - - - General - Γενικά - - - - SettingsWidgetSecurity - - Timeouts - - - - Clear clipboard after - Εκκαθάριση πρόχειρου μετά από - - - sec - Seconds - δευτερόλεπτα - - - Lock databases after inactivity of - Κλείδωμα βάσης δεδομένων μετα απο ανενεργεία - - - Convenience - Ευκολία - - - Lock databases when session is locked or lid is closed - Κλείδωμα βάσεων δεδομένων κατά το κλείδωμα της συνεδρίας ή την αναδίπλωση της οθόνης - - - Lock databases after minimizing the window - Κλείδωμα της βάσης δεδομένων μετά την ελαχιστοποίηση του παραθύρου - - - Don't require password repeat when it is visible - - - - Show passwords in cleartext by default - Εμφάνιση κωδίκων σε απλό κείμενο από προεπιλογή - - - Hide passwords in the preview panel - - - - Hide entry notes by default - - - - Privacy - - - - Use Google as fallback for downloading website icons - Χρήση Google ως εφεδρικό τρόπο κατεβάσματος εικονιδίων ιστοσελίδων - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP @@ -3951,59 +5291,84 @@ Please unlock the selected database or choose another one which is unlocked.Χρήση προσαρμοσμένων ρυθμίσεων - Note: Change these settings only if you know what you are doing. - Σημείωση: Αλλάξτε αυτές τις ρυθμίσεις μόνο εάν ξέρετε τι κάνετε. + Custom Settings + Time step: Βήμα χρόνου: - 8 digits - 8 Ψηφία - - - 6 digits - 6 Ψηφία + sec + Seconds + δευτερόλεπτα Code size: Μέγεθος κώδικα: - sec - Seconds - δευτερόλεπτα + 6 digits + 6 Ψηφία - - - TotpDialog - Timed Password + 7 digits - 000000 - 000000 - - - Copy - Αντιγραφή - - - Expires in - Λήγει σε - - - seconds - δευτερόλεπτα + 8 digits + 8 Ψηφία - UnlockDatabaseWidget + UpdateCheckDialog - Unlock database - Ξεκλείδωμα βάσης δεδομένων + Checking for updates + + + + Checking for updates... + + + + Close + Κλείσιμο + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4038,41 +5403,25 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. + Refresh + Ανανέωση + + + YubiKey Challenge-Response - Path of the database. - Διαδρομή της βάσης δεδομένων. - - - Path of the entry to remove. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager + No YubiKey detected, please ensure it's plugged in. - filenames of the password databases to open (*.kdbx) - ονόματα αρχείων των βάσεων δεδομένων κωδικών προς άνοιγμα (*.kdbx) - - - path to a custom config file - διαδρομή σε προσαρμοσμένο αρχείο ρυθμίσεων - - - key file of the database - Αρχείο κλειδί της βάσεως δεδομένων - - - read password of the database from stdin - Διάβασμα κωδικού βάσης από το stdin - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_en.ts b/share/translations/keepassx_en.ts index a0e1b99b2..1f6b00076 100644 --- a/share/translations/keepassx_en.ts +++ b/share/translations/keepassx_en.ts @@ -1,380 +1,626 @@ - + AboutDialog About KeePassXC - + About KeePassXC About - + About Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. Contributors - + Contributors <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> Debug Info - + Debug Info Include the following information whenever you report a bug: - + Include the following information whenever you report a bug: Copy to clipboard - - - - Version %1 - - - - - Revision: %1 - - - - Distribution: %1 - - - - Libraries: - - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - - - - Enabled extensions: - + Copy to clipboard Project Maintainers: - + Project Maintainers: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - - - - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - - - - Remember this decision - - - - Allow - - - - Deny - - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. AgentSettingsWidget Enable SSH Agent (requires restart) - + Enable SSH Agent (requires restart) + + + Use OpenSSH for Windows instead of Pageant + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget + + Application Settings + Application Settings + + + General + General + + + Security + Security + + + Access error for config file %1 + Access error for config file %1 + + + Icon only + Icon only + + + Text only + Text only + + + Text beside icon + Text beside icon + + + Text under icon + Text under icon + + + Follow style + Follow style + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Basic Settings + + + Startup + Startup + + + Start only a single instance of KeePassXC + Start only a single instance of KeePassXC + + + Remember last databases + Remember last databases + + + Remember last key files and security dongles + Remember last key files and security dongles + + + Load previous databases on startup + Load previous databases on startup + + + Minimize window at application startup + Minimize window at application startup + + + File Management + File Management + + + Safely save database files (may be incompatible with Dropbox, etc) + Safely save database files (may be incompatible with Dropbox, etc) + + + Backup database file before saving + Backup database file before saving + + + Automatically save after every change + Automatically save after every change + + + Automatically save on exit + Automatically save on exit + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + Automatically reload the database when modified externally + Automatically reload the database when modified externally + + + Entry Management + Entry Management + + + Use group icon on entry creation + Use group icon on entry creation + + + Minimize when copying to clipboard + Minimize when copying to clipboard + + + Hide the entry preview panel + Hide the entry preview panel + + + General + General + + + Hide toolbar (icons) + Hide toolbar (icons) + + + Minimize instead of app exit + Minimize instead of app exit + + + Show a system tray icon + Show a system tray icon + + + Dark system tray icon + Dark system tray icon + + + Hide window to system tray when minimized + Hide window to system tray when minimized + + + Language + Language + + + Auto-Type + Auto-Type + + + Use entry title to match windows for global Auto-Type + Use entry title to match windows for global Auto-Type + + + Use entry URL to match windows for global Auto-Type + Use entry URL to match windows for global Auto-Type + + + Always ask before performing Auto-Type + Always ask before performing Auto-Type + + + Global Auto-Type shortcut + Global Auto-Type shortcut + + + Auto-Type typing delay + Auto-Type typing delay + + + ms + Milliseconds + ms + + + Auto-Type start delay + Auto-Type start delay + + + Check for updates at application startup + Check for updates at application startup + + + Include pre-releases when checking for updates + Include pre-releases when checking for updates + + + Movable toolbar + Movable toolbar + + + Button style + Button style + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Timeouts + + + Clear clipboard after + Clear clipboard after + + + sec + Seconds + sec + + + Lock databases after inactivity of + Lock databases after inactivity of + + + min + min + + + Forget TouchID after inactivity of + Forget TouchID after inactivity of + + + Convenience + Convenience + + + Lock databases when session is locked or lid is closed + Lock databases when session is locked or lid is closed + + + Forget TouchID when session is locked or lid is closed + Forget TouchID when session is locked or lid is closed + + + Lock databases after minimizing the window + Lock databases after minimizing the window + + + Re-lock previously locked database after performing Auto-Type + Re-lock previously locked database after performing Auto-Type + + + Don't require password repeat when it is visible + Don't require password repeat when it is visible + + + Don't hide passwords when editing them + Don't hide passwords when editing them + + + Don't use placeholder for empty password fields + Don't use placeholder for empty password fields + + + Hide passwords in the entry preview panel + Hide passwords in the entry preview panel + + + Hide entry notes by default + Hide entry notes by default + + + Privacy + Privacy + + + Use DuckDuckGo as fallback for downloading website icons + Use DuckDuckGo as fallback for downloading website icons AutoType Couldn't find an entry that matches the window title: - + Couldn't find an entry that matches the window title: Auto-Type - KeePassXC - + Auto-Type - KeePassXC Auto-Type - + Auto-Type The Syntax of your Auto-Type statement is incorrect! - + The Syntax of your Auto-Type statement is incorrect! This Auto-Type command contains a very long delay. Do you really want to proceed? - + This Auto-Type command contains a very long delay. Do you really want to proceed? This Auto-Type command contains very slow key presses. Do you really want to proceed? - + This Auto-Type command contains very slow key presses. Do you really want to proceed? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? AutoTypeAssociationsModel Window - + Window Sequence - + Sequence Default sequence - + Default sequence AutoTypeMatchModel Group - + Group Title - + Title Username - + Username Sequence - + Sequence AutoTypeSelectDialog Auto-Type - KeePassXC - + Auto-Type - KeePassXC Select entry to Auto-Type: - + Select entry to Auto-Type: BrowserAccessControlDialog KeePassXC-Browser Confirm Access - + KeePassXC-Browser Confirm Access Remember this decision - + Remember this decision Allow - + Allow Deny - + Deny %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. - + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Save Entry + + + Ok + Ok + + + Cancel + Cancel + + + You have multiple databases open. +Please select the correct database for saving credentials. + You have multiple databases open. +Please select the correct database for saving credentials. BrowserOptionDialog Dialog - + Dialog This is required for accessing your databases with KeePassXC-Browser - + This is required for accessing your databases with KeePassXC-Browser Enable KeepassXC browser integration - + Enable KeepassXC browser integration General - + General Enable integration for these browsers: - + Enable integration for these browsers: &Google Chrome - + &Google Chrome &Firefox - + &Firefox &Chromium - + &Chromium &Vivaldi - + &Vivaldi Show a &notification when credentials are requested Credentials mean login data requested via browser extension - + Show a &notification when credentials are requested Re&quest to unlock the database if it is locked - + Re&quest to unlock the database if it is locked Only entries with the same scheme (http://, https://, ...) are returned. - + Only entries with the same scheme (http://, https://, ...) are returned. &Match URL scheme (e.g., https://...) - + &Match URL scheme (e.g., https://...) Only returns the best matches for a specific URL instead of all entries for the whole domain. - + Only returns the best matches for a specific URL instead of all entries for the whole domain. &Return only best-matching credentials - + &Return only best-matching credentials Sort &matching credentials by title Credentials mean login data requested via browser extension - + Sort &matching credentials by title Sort matching credentials by &username Credentials mean login data requested via browser extension - - - - &Disconnect all browsers - - - - Forget all remembered &permissions - + Sort matching credentials by &username Advanced - + Advanced Never &ask before accessing credentials Credentials mean login data requested via browser extension - + Never &ask before accessing credentials Never ask before &updating credentials Credentials mean login data requested via browser extension - + Never ask before &updating credentials Only the selected database has to be connected with a client. - + Only the selected database has to be connected with a client. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - + Searc&h in all opened databases for matching credentials Automatically creating or updating string fields is not supported. - + Automatically creating or updating string fields is not supported. &Return advanced string fields which start with "KPH: " - + &Return advanced string fields which start with "KPH: " Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. Update &native messaging manifest files at startup - + Update &native messaging manifest files at startup Support a proxy application between KeePassXC and browser extension. - + Support a proxy application between KeePassXC and browser extension. Use a &proxy application between KeePassXC and browser extension - + Use a &proxy application between KeePassXC and browser extension Use a custom proxy location if you installed a proxy manually. - + Use a custom proxy location if you installed a proxy manually. Use a &custom proxy location Meant is the proxy for KeePassXC-Browser - + Use a &custom proxy location Browse... Button for opening file dialog - + Browse... <b>Warning:</b> The following options can be dangerous! - - - - Executable Files (*.exe);;All Files (*.*) - - - - Executable Files (*) - + <b>Warning:</b> The following options can be dangerous! Select custom proxy location + Select custom proxy location + + + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + Executable Files + Executable Files + + + All Files + All Files + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Do not ask permission for HTTP &Basic Auth + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + Please see special instructions for browser extension use below - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 @@ -382,184 +628,91 @@ Please select whether you want to allow access. BrowserService KeePassXC: New key association request - + KeePassXC: New key association request You have received an association request for the above key. If you would like to allow it access to your KeePassXC database, give it a unique name to identify and accept it. - + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. Save and allow access - + Save and allow access KeePassXC: Overwrite existing key? - + KeePassXC: Overwrite existing key? A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? KeePassXC: Update Entry - + KeePassXC: Update Entry Do you want to update the information in %1 - %2? - - - - KeePassXC: Database locked! - - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - KeePassXC: Settings not available! - - - - The active database does not contain a settings entry. - - - - KeePassXC: No keys found - - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - - - - Removing stored permissions… - + Do you want to update the information in %1 - %2? Abort - + Abort - KeePassXC: Removed permissions - + Converting attributes to custom data… + Converting attributes to custom data… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. - Successfully removed permissions from %n entry(s). - - - + Successfully moved %n keys to custom data. + + Successfully moved %n keys to custom data. + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! + + + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. + + + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected + + + KeePassXC: Create a new group - The active database does not contain an entry with permissions. - - - - - ChangeMasterKeyWidget - - Password + A request for creating a new group "%1" has been received. +Do you want to create this group? + - Enter password: - - - - Repeat password: - - - - &Key file - - - - Browse - - - - Create - - - - Cha&llenge Response - - - - Refresh - - - - Key files - - - - All files - - - - Create Key File... - - - - Unable to create Key File : - - - - Select a key file - - - - Empty password - - - - Do you really want to use an empty string as password? - - - - Different passwords supplied. - - - - Failed to set %1 as the Key file: -%2 - - - - Legacy key file format - - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - - - - Changing master key failed: no YubiKey inserted. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? @@ -567,714 +720,967 @@ Please consider generating a new key file. CloneDialog Clone Options - + Clone Options Append ' - Clone' to title - + Append ' - Clone' to title Replace username and password with references - + Replace username and password with references Copy history - + Copy history CsvImportWidget Import CSV fields - + Import CSV fields filename - + filename size, rows, columns - + size, rows, columns Encoding - + Encoding Codec - + Codec Text is qualified by - + Text is qualified by Fields are separated by - + Fields are separated by Comments start with - + Comments start with First record has field names - + First record has field names Number of headers line to discard - + Number of headers line to discard Consider '\' an escape character - + Consider '\' an escape character Preview - + Preview Column layout - + Column layout Not present in CSV file - - - - Empty fieldname - - - - column - + Not present in CSV file Imported from CSV file - + Imported from CSV file Original data: - - - - Error(s) detected in CSV file ! - - - - more messages skipped] - + Original data: Error - + Error + + + Empty fieldname %1 + Empty fieldname %1 + + + column %1 + column %1 + + + Error(s) detected in CSV file! + Error(s) detected in CSV file! + + + [%n more message(s) skipped] + + [%n more message(s) skipped] + [%n more message(s) skipped] + CSV import: writer has errors: - - - - - - CsvImportWizard - - Error - - - - Unable to calculate master key - +%1 + CSV import: writer has errors: +%1 CsvParserModel - - %n byte(s), - - - - - - - %n row(s), - - - - - %n column(s) - - - + + %n column(s) + %n column(s) + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + + %n byte(s) + %n byte(s) + + + + %n row(s) + + %n row(s) + %n row(s) + + + + + Database + + Root + Root group name + Root + + + File %1 does not exist. + File %1 does not exist. + + + Unable to open file %1. + Unable to open file %1. + + + Error while reading the database: %1 + Error while reading the database: %1 + + + Could not save, database has no file name. + Could not save, database has no file name. + + + File cannot be written as it is opened in read-only mode. + File cannot be written as it is opened in read-only mode. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Unlock Database - KeePassXC + DatabaseOpenWidget Enter master key - + Enter master key Key File: - + Key File: Password: - + Password: Browse - + Browse Refresh - + Refresh Challenge Response: - - - - Unable to open the database. - - - - Can't open key file - + Challenge Response: Legacy key file format - + Legacy key file format You are using a legacy key file format which may become unsupported in the future. Please consider generating a new key file. - + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. Don't show this warning again - + Don't show this warning again All files - + All files Key files - + Key files Select key file - + Select key file + + + TouchID for quick unlock + TouchID for quick unlock + + + Unable to open the database: +%1 + Unable to open the database: +%1 + + + Can't open key file: +%1 + Can't open key file: +%1 - DatabaseRepairWidget + DatabaseSettingWidgetMetaData - Repair database - - - - Error - - - - Can't open key file - - - - Unable to open the database. - - - - Database opened fine. Nothing to do. - - - - Success - - - - The database has been successfully repaired -You can now save it. - - - - Unable to repair the database. - + Passwords + Passwords - DatabaseSettingsWidget + DatabaseSettingsDialog + + Advanced Settings + Advanced Settings + General - + General - Encryption - + Security + Security - Number of rounds too high - Key transformation rounds - + Master Key + Master Key - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! - + Encryption Settings + Encryption Settings - Understood, keep number - + Browser Integration + Browser Integration + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Browser settings - Cancel - + &Disconnect all browsers + &Disconnect all browsers - Number of rounds too low - Key transformation rounds - + Forg&et all site-specific settings on entries + Forg&et all site-specific settings on entries - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! - + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Move KeePassHTTP attributes to KeePassXC-Browser &custom data - KDF unchanged - + Stored keys + Stored keys - Failed to transform key with new KDF parameters; KDF unchanged. - + Remove + Remove + + + Delete the selected key? + Delete the selected key? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + Key + Key + + + Value + Value + + + Enable Browser Integration to access these settings. + Enable Browser Integration to access these settings. + + + Disconnect all browsers + Disconnect all browsers + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + KeePassXC: No keys found + KeePassXC: No keys found + + + No shared encryption keys found in KeePassXC settings. + No shared encryption keys found in KeePassXC settings. + + + KeePassXC: Removed keys from database + KeePassXC: Removed keys from database - MiB - Abbreviation for Mebibytes (KDF settings) - - - + Successfully removed %n encryption key(s) from KeePassXC settings. + + Successfully removed %n encryption key(s) from KeePassXC settings. + Successfully removed %n encryption key(s) from KeePassXC settings. + + Forget all site-specific settings on entries + Forget all site-specific settings on entries + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + Removing stored permissions… + Removing stored permissions… + + + Abort + Abort + + + KeePassXC: Removed permissions + KeePassXC: Removed permissions + - thread(s) - Threads for parallel execution (KDF settings) - - - + Successfully removed permissions from %n entry(s). + + Successfully removed permissions from %n entry(s). + Successfully removed permissions from %n entry(s). + + KeePassXC: No entry with permissions found! + KeePassXC: No entry with permissions found! + + + The active database does not contain an entry with permissions. + The active database does not contain an entry with permissions. + + + Move KeePassHTTP attributes to custom data + Move KeePassHTTP attributes to custom data + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + DatabaseSettingsWidgetEncryption Encryption Algorithm: - + Encryption Algorithm: AES: 256 Bit (default) - + AES: 256 Bit (default) Twofish: 256 Bit - + Twofish: 256 Bit Key Derivation Function: - + Key Derivation Function: Transform rounds: - + Transform rounds: Benchmark 1-second delay - + Benchmark 1-second delay Memory Usage: - + Memory Usage: Parallelism: - + Parallelism: + + + Decryption Time: + Decryption Time: + + + ?? s + ?? s + + + Change + Change + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Higher values offer more protection, but opening the database will take longer. + + + Database format: + Database format: + + + This is only important if you need to use your database with other programs. + This is only important if you need to use your database with other programs. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recommended) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + unchanged + + + Number of rounds too high + Key transformation rounds + Number of rounds too high + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + Understood, keep number + Understood, keep number + + + Cancel + Cancel + + + Number of rounds too low + Key transformation rounds + Number of rounds too low + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + KDF unchanged + KDF unchanged + + + Failed to transform key with new KDF parameters; KDF unchanged. + Failed to transform key with new KDF parameters; KDF unchanged. + + + MiB + Abbreviation for Mebibytes (KDF settings) + + MiB + MiB + + + + thread(s) + Threads for parallel execution (KDF settings) + + thread(s) + thread(s) + + + + %1 ms + milliseconds + + %1 ms + %1 ms + + + + %1 s + seconds + + %1 s + %1 s + DatabaseSettingsWidgetGeneral Database Meta Data - + Database Meta Data Database name: - + Database name: Database description: - + Database description: Default username: - + Default username: History Settings - + History Settings Max. history items: - + Max. history items: Max. history size: - + Max. history size: MiB - + MiB Use recycle bin - + Use recycle bin Additional Database Settings - + Additional Database Settings Enable &compression (recommended) - + Enable &compression (recommended) + + + + DatabaseSettingsWidgetKeeShare + + Sharing + Sharing + + + Breadcrumb + Breadcrumb + + + Type + Type + + + Path + Path + + + Last Signer + Last Signer + + + Certificates + Certificates + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Add additional protection... + + + No encryption key added + No encryption key added + + + You must add at least one encryption key to secure your database! + You must add at least one encryption key to secure your database! + + + No password set + No password set + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + Unknown error + Unknown error + + + Failed to change master key + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Database Name: + + + Description: + Description: DatabaseTabWidget - - Root - Root group - - KeePass 2 Database - + KeePass 2 Database All files - + All files Open database - - - - File not found! - - - - Unable to open the database. - - - - File opened in read only mode. - - - - Open CSV file - + Open database CSV file - - - - All files (*) - + CSV file Merge database - + Merge database Open KeePass 1 database - + Open KeePass 1 database KeePass 1 database - - - - Close? - - - - "%1" is in edit mode. -Discard changes and close anyway? - - - - Save changes? - - - - "%1" was modified. -Save changes? - - - - Writing the database failed. - - - - Passwords - - - - Save database as - + KeePass 1 database Export database to CSV file - + Export database to CSV file Writing the CSV file failed. - + Writing the CSV file failed. - New database - + Database creation error + Database creation error - locked - + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Lock database - + The database file does not exist or is not accessible. + The database file does not exist or is not accessible. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - + Select CSV file + Select CSV file - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - + New Database + New Database - Disable safe saves? - + %1 [New Database] + Database tab name modifier + %1 [New Database] - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - + %1 [Locked] + Database tab name modifier + %1 [Locked] + + + %1 [Read-only] + Database tab name modifier + %1 [Read-only] DatabaseWidget Searching... - - - - Change master key - - - - Delete entry? - + Searching... Do you really want to delete the entry "%1" for good? - - - - Delete entries? - - - - Do you really want to delete %1 entries for good? - - - - Move entry to recycle bin? - + Do you really want to delete the entry "%1" for good? Do you really want to move entry "%1" to the recycle bin? - - - - Move entries to recycle bin? - + Do you really want to move entry "%1" to the recycle bin? Do you really want to move %n entry(s) to the recycle bin? - - - + + Do you really want to move %n entry(s) to the recycle bin? + Do you really want to move %n entry(s) to the recycle bin? Execute command? - + Execute command? Do you really want to execute the following command?<br><br>%1<br> - + Do you really want to execute the following command?<br><br>%1<br> Remember my choice - - - - Delete group? - + Remember my choice Do you really want to delete the group "%1" for good? - - - - Unable to calculate master key - + Do you really want to delete the group "%1" for good? No current database. - + No current database. No source database, nothing to do. - + No source database, nothing to do. Search Results (%1) - + Search Results (%1) No Results - + No Results File has changed - + File has changed The database file has changed. Do you want to load the changes? - + The database file has changed. Do you want to load the changes? Merge Request - + Merge Request The database file has changed and you have unsaved changes. Do you want to merge your changes? - - - - Could not open the new database file while attempting to autoreload this database. - + The database file has changed and you have unsaved changes. +Do you want to merge your changes? Empty recycle bin? - + Empty recycle bin? Are you sure you want to permanently delete everything from your recycle bin? - + Are you sure you want to permanently delete everything from your recycle bin? - - - DetailsWidget - - Generate TOTP Token - + + Do you really want to delete %n entry(s) for good? + + Do you really want to delete %n entry(s) for good? + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + Delete entry(s)? + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + Move entry(s) to recycle bin? + Move entry(s) to recycle bin? + - Close - + File opened in read only mode. + File opened in read only mode. - General - + Lock Database? + Lock Database? - Password - + You are editing an entry. Discard changes and lock anyway? + You are editing an entry. Discard changes and lock anyway? - URL - + "%1" was modified. +Save changes? + "%1" was modified. +Save changes? - Expiration - + Database was modified. +Save changes? + Database was modified. +Save changes? - Username - + Save changes? + Save changes? - Autotype - + Could not open the new database file while attempting to autoreload. +Error: %1 + Could not open the new database file while attempting to autoreload. +Error: %1 - Searching - + Disable safe saves? + Disable safe saves? - Attributes - + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? - Attachments - + Writing the database failed. +%1 + Writing the database failed. +%1 - Notes - + Passwords + Passwords - Window - + Save database as + Save database as - Sequence - + KeePass 2 Database + KeePass 2 Database - Search - + Replace references to entry? + Replace references to entry? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Clear - + Delete group + Delete group - Never - + Move group to recycle bin? + Move group to recycle bin? - [PROTECTED] - + Do you really want to move the group "%1" to the recycle bin? + Do you really want to move the group "%1" to the recycle bin? - Disabled - + Successfully merged the database files. + Successfully merged the database files. - Enabled + Database was not modified by merge operation. + Database was not modified by merge operation. + + + Shared group... @@ -1282,363 +1688,461 @@ Do you want to merge your changes? EditEntryWidget Entry - + Entry Advanced - + Advanced Icon - + Icon Auto-Type - + Auto-Type Properties - + Properties History - + History SSH Agent - + SSH Agent n/a - + n/a (encrypted) - + (encrypted) Select private key - + Select private key File too large to be a private key - + File too large to be a private key Failed to open private key - + Failed to open private key Entry history - + Entry history Add entry - + Add entry Edit entry - + Edit entry Different passwords supplied. - + Different passwords supplied. New attribute - - - - Confirm Remove - + New attribute Are you sure you want to remove this attribute? - - - - [PROTECTED] - - - - Press reveal to view or edit - + Are you sure you want to remove this attribute? Tomorrow - + Tomorrow %n week(s) - - - + + %n week(s) + %n week(s) %n month(s) - - - + + %n month(s) + %n month(s) - - 1 year - - Apply generated password? - + Apply generated password? Do you want to apply the generated password to this entry? - + Do you want to apply the generated password to this entry? Entry updated successfully. - + Entry updated successfully. + + + Entry has unsaved changes + Entry has unsaved changes + + + New attribute %1 + New attribute %1 + + + [PROTECTED] Press reveal to view or edit + [PROTECTED] Press reveal to view or edit + + + %n year(s) + + %n year(s) + %n year(s) + + + + Confirm Removal + Confirm Removal EditEntryWidgetAdvanced Additional attributes - + Additional attributes Add - + Add Remove - + Remove Edit Name - + Edit Name Protect - + Protect Reveal - + Reveal Attachments - + Attachments Foreground Color: - + Foreground Color: Background Color: - + Background Color: EditEntryWidgetAutoType Enable Auto-Type for this entry - + Enable Auto-Type for this entry Inherit default Auto-Type sequence from the &group - + Inherit default Auto-Type sequence from the &group &Use custom Auto-Type sequence: - + &Use custom Auto-Type sequence: Window Associations - + Window Associations + - + + - - + - Window title: - + Window title: Use a specific sequence for this association: - + Use a specific sequence for this association: EditEntryWidgetHistory Show - + Show Restore - + Restore Delete - + Delete Delete all - + Delete all EditEntryWidgetMain URL: - + URL: Password: - + Password: Repeat: - + Repeat: Title: - + Title: Notes - + Notes Presets - + Presets Toggle the checkbox to reveal the notes section. - + Toggle the checkbox to reveal the notes section. Username: - + Username: Expires - + Expires EditEntryWidgetSSHAgent Form - + Form Remove key from agent after - + Remove key from agent after seconds - + seconds Fingerprint - + Fingerprint Remove key from agent when database is closed/locked - + Remove key from agent when database is closed/locked Public key - + Public key Add key to agent when database is opened/unlocked - + Add key to agent when database is opened/unlocked Comment - + Comment Decrypt - + Decrypt n/a - + n/a Copy to clipboard - + Copy to clipboard Private key - + Private key External file - + External file Browse... Button for opening file dialog - + Browse... Attachment - + Attachment Add to agent - + Add to agent Remove from agent - + Remove from agent Require user confirmation when this key is used - + Require user confirmation when this key is used EditGroupWidget Group - + Group Icon - + Icon Properties - + Properties Add group - + Add group Edit group - + Edit group Enable - + Enable Disable - + Disable Inherit from parent group (%1) + Inherit from parent group (%1) + + + + EditGroupWidgetKeeShare + + Form + Form + + + Type: + Type: + + + Path: + Path: + + + ... + ... + + + Password: + Password: + + + Inactive + Inactive + + + Import from path + Import from path + + + Export to path + Export to path + + + Synchronize with path + Synchronize with path + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Your KeePassXC version does not support sharing your container type. Please use %1. + + + Database sharing is disabled + Database sharing is disabled + + + Database export is disabled + Database export is disabled + + + Database import is disabled + Database import is disabled + + + KeeShare unsigned container + KeeShare unsigned container + + + KeeShare signed container + KeeShare signed container + + + Select import source + Select import source + + + Select export target + Select export target + + + Select import/export file + Select import/export file + + + Clear + Clear + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. @@ -1646,254 +2150,291 @@ Do you want to merge your changes? EditGroupWidgetMain Name - + Name Notes - + Notes Expires - + Expires Search - + Search Auto-Type - + Auto-Type &Use default Auto-Type sequence of parent group - + &Use default Auto-Type sequence of parent group Set default Auto-Type se&quence - + Set default Auto-Type se&quence EditWidgetIcons &Use default icon - + &Use default icon Use custo&m icon - + Use custo&m icon Add custom icon - + Add custom icon Delete custom icon - + Delete custom icon Download favicon - + Download favicon Unable to fetch favicon. - - - - Hint: You can enable Google as a fallback under Tools>Settings>Security - + Unable to fetch favicon. Images - + Images All files - - - - Select Image - - - - Can't read icon - + All files Custom icon already exists - + Custom icon already exists Confirm Delete - + Confirm Delete - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - + Custom icon successfully downloaded + Custom icon successfully downloaded + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + Select Image(s) + Select Image(s) + + + Successfully loaded %1 of %n icon(s) + + Successfully loaded %1 of %n icon(s) + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + No icons were loaded + + + %n icon(s) already exist in the database + + %n icon(s) already exist in the database + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + The following icon(s) failed: + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + EditWidgetProperties Created: - + Created: Modified: - + Modified: Accessed: - + Accessed: Uuid: - + Uuid: Plugin Data - + Plugin Data Remove - + Remove Delete plugin data? - + Delete plugin data? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. Key - + Key Value - + Value Entry - - Clone - Suffix added to cloned entries - + %1 - Clone + %1 - Clone EntryAttachmentsModel Name - + Name Size - + Size EntryAttachmentsWidget Form - + Form Add - + Add Remove - + Remove Open - + Open Save - + Save Select files - + Select files Are you sure you want to remove %n attachment(s)? - - - + + Are you sure you want to remove %n attachment(s)? + Are you sure you want to remove %n attachment(s)? - - Confirm Remove - - Save attachments - + Save attachments Unable to create directory: %1 - + Unable to create directory: +%1 Are you sure you want to overwrite the existing file "%1" with the attachment? - + Are you sure you want to overwrite the existing file "%1" with the attachment? Confirm overwrite - + Confirm overwrite Unable to save attachments: %1 - + Unable to save attachments: +%1 Unable to open attachment: %1 - + Unable to open attachment: +%1 Unable to open attachments: %1 - + Unable to open attachments: +%1 - Unable to open files: + Confirm remove + Confirm remove + + + Unable to open file(s): %1 - + + Unable to open file(s): +%1 + Unable to open file(s): +%1 + EntryAttributesModel Name - + Name EntryHistoryModel Last modified - + Last modified Title - + Title Username - + Username URL - + URL @@ -1901,1716 +2442,2501 @@ This may cause the affected plugins to malfunction. Ref: Reference abbreviation - + Ref: Group - + Group Title - + Title Username - + Username URL - + URL Never - + Never Password - + Password Notes - + Notes Expires - + Expires Created - + Created Modified - + Modified Accessed - + Accessed Attachments - + Attachments + + + Yes + Yes + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Generate TOTP Token + + + Close + Close + + + General + General + + + Username + Username + + + Password + Password + + + Expiration + Expiration + + + URL + URL + + + Attributes + Attributes + + + Attachments + Attachments + + + Notes + Notes + + + Autotype + Autotype + + + Window + Window + + + Sequence + Sequence + + + Searching + Searching + + + Search + Search + + + Clear + Clear + + + Never + Never + + + [PROTECTED] + [PROTECTED] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Enabled + + + Disabled + Disabled + + + Share + Share EntryView Customize View - + Customize View Hide Usernames - + Hide Usernames Hide Passwords - + Hide Passwords Fit to window - + Fit to window Fit to contents - + Fit to contents Reset to defaults - + Reset to defaults Attachments (icon) - + Attachments (icon) Group Recycle Bin - + Recycle Bin + + + [empty] + group has no children + [empty] HostInstaller KeePassXC: Cannot save file! - + KeePassXC: Cannot save file! Cannot save the native messaging script file. - - - - - HttpPasswordGeneratorWidget - - Length: - - - - Character Types - - - - Upper Case Letters - - - - A-Z - - - - Lower Case Letters - - - - a-z - - - - Numbers - - - - 0-9 - - - - Special Characters - - - - /*_& ... - - - - Exclude look-alike characters - - - - Ensure that the password contains characters from every group - - - - Extended ASCII - + Cannot save the native messaging script file. KMessageWidget &Close - + &Close Close message - + Close message Kdbx3Reader Unable to calculate master key - + Unable to calculate master key Unable to issue challenge-response. - + Unable to issue challenge-response. Wrong key or database file is corrupt. - + Wrong key or database file is corrupt. + + + missing database headers + missing database headers + + + Header doesn't match hash + Header doesn't match hash + + + Invalid header id size + Invalid header id size + + + Invalid header field length + Invalid header field length + + + Invalid header data length + Invalid header data length Kdbx3Writer Unable to issue challenge-response. - + Unable to issue challenge-response. Unable to calculate master key - + Unable to calculate master key Kdbx4Reader missing database headers - + missing database headers Unable to calculate master key - + Unable to calculate master key Invalid header checksum size - + Invalid header checksum size Header SHA256 mismatch - + Header SHA256 mismatch Wrong key or database file is corrupt. (HMAC mismatch) - + Wrong key or database file is corrupt. (HMAC mismatch) Unknown cipher - + Unknown cipher Invalid header id size - + Invalid header id size Invalid header field length - + Invalid header field length Invalid header data length - + Invalid header data length Failed to open buffer for KDF parameters in header - + Failed to open buffer for KDF parameters in header Unsupported key derivation function (KDF) or invalid parameters - + Unsupported key derivation function (KDF) or invalid parameters Legacy header fields found in KDBX4 file. - + Legacy header fields found in KDBX4 file. Invalid inner header id size - + Invalid inner header id size Invalid inner header field length - + Invalid inner header field length Invalid inner header binary size - + Invalid inner header binary size Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - + Unsupported KeePass variant map version. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - + Invalid variant map entry name length Invalid variant map entry name data Translation: variant map = data structure for storing meta data - + Invalid variant map entry name data Invalid variant map entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map entry value length Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - + Invalid variant map entry value data Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map Bool entry value length Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map Int32 entry value length Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map UInt32 entry value length Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map Int64 entry value length Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map UInt64 entry value length Invalid variant map entry type Translation: variant map = data structure for storing meta data - + Invalid variant map entry type Invalid variant map field type size Translation: variant map = data structure for storing meta data - + Invalid variant map field type size Kdbx4Writer Invalid symmetric cipher algorithm. - + Invalid symmetric cipher algorithm. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - + Invalid symmetric cipher IV size. Unable to calculate master key - + Unable to calculate master key Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - + Failed to serialize KDF parameters variant map KdbxReader - - Invalid cipher uuid length - - Unsupported cipher - + Unsupported cipher Invalid compression flags length - + Invalid compression flags length Unsupported compression algorithm - + Unsupported compression algorithm Invalid master seed size - + Invalid master seed size Invalid transform seed size - + Invalid transform seed size Invalid transform rounds size - + Invalid transform rounds size Invalid start bytes size - + Invalid start bytes size Invalid random stream id size - + Invalid random stream id size Invalid inner random stream cipher - + Invalid inner random stream cipher Not a KeePass database. - + Not a KeePass database. The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database...'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. - + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Unsupported KeePass 2 database version. - + Unsupported KeePass 2 database version. + + + Invalid cipher uuid length: %1 (length=%2) + Invalid cipher uuid length: %1 (length=%2) + + + Unable to parse UUID: %1 + Unable to parse UUID: %1 + + + Failed to read database file. + Failed to read database file. KdbxXmlReader XML parsing failure: %1 - + XML parsing failure: %1 No root group - + No root group Missing icon uuid or data - + Missing icon uuid or data Missing custom data key or value - + Missing custom data key or value Multiple group elements - + Multiple group elements Null group uuid - + Null group uuid Invalid group icon number - + Invalid group icon number Invalid EnableAutoType value - + Invalid EnableAutoType value Invalid EnableSearching value - + Invalid EnableSearching value No group uuid found - + No group uuid found Null DeleteObject uuid - + Null DeleteObject uuid Missing DeletedObject uuid or time - + Missing DeletedObject uuid or time Null entry uuid - + Null entry uuid Invalid entry icon number - + Invalid entry icon number History element in history entry - + History element in history entry No entry uuid found - + No entry uuid found History element with different uuid - + History element with different uuid Duplicate custom attribute found - + Duplicate custom attribute found Entry string key or value missing - + Entry string key or value missing Duplicate attachment found - + Duplicate attachment found Entry binary key or value missing - + Entry binary key or value missing Auto-type association window or sequence missing - + Auto-type association window or sequence missing Invalid bool value - + Invalid bool value Invalid date time value - + Invalid date time value Invalid color value - + Invalid color value Invalid color rgb part - + Invalid color rgb part Invalid number value - + Invalid number value Invalid uuid value - + Invalid uuid value Unable to decompress binary Translator meant is a binary data inside an entry - + Unable to decompress binary + + + XML error: +%1 +Line %2, column %3 + XML error: +%1 +Line %2, column %3 KeePass1OpenWidget Import KeePass1 database - + Import KeePass1 database Unable to open the database. - + Unable to open the database. KeePass1Reader Unable to read keyfile. - + Unable to read keyfile. Not a KeePass database. - + Not a KeePass database. Unsupported encryption algorithm. - + Unsupported encryption algorithm. Unsupported KeePass database version. - + Unsupported KeePass database version. Unable to read encryption IV IV = Initialization Vector for symmetric cipher - + Unable to read encryption IV Invalid number of groups - + Invalid number of groups Invalid number of entries - + Invalid number of entries Invalid content hash size - + Invalid content hash size Invalid transform seed size - + Invalid transform seed size Invalid number of transform rounds - + Invalid number of transform rounds Unable to construct group tree - + Unable to construct group tree Root - + Root Unable to calculate master key - + Unable to calculate master key Wrong key or database file is corrupt. - + Wrong key or database file is corrupt. Key transformation failed - + Key transformation failed Invalid group field type number - + Invalid group field type number Invalid group field size - + Invalid group field size Read group field data doesn't match size - + Read group field data doesn't match size Incorrect group id field size - + Incorrect group id field size Incorrect group creation time field size - + Incorrect group creation time field size Incorrect group modification time field size - + Incorrect group modification time field size Incorrect group access time field size - + Incorrect group access time field size Incorrect group expiry time field size - + Incorrect group expiry time field size Incorrect group icon field size - + Incorrect group icon field size Incorrect group level field size - + Incorrect group level field size Invalid group field type - + Invalid group field type Missing group id or level - + Missing group id or level Missing entry field type number - + Missing entry field type number Invalid entry field size - + Invalid entry field size Read entry field data doesn't match size - + Read entry field data doesn't match size Invalid entry uuid field size - + Invalid entry uuid field size Invalid entry group id field size - + Invalid entry group id field size Invalid entry icon field size - + Invalid entry icon field size Invalid entry creation time field size - + Invalid entry creation time field size Invalid entry modification time field size - + Invalid entry modification time field size Invalid entry expiry time field size - + Invalid entry expiry time field size Invalid entry field type + Invalid entry field type + + + unable to seek to content position + unable to seek to content position + + + + KeeShare + + Disabled share + Disabled share + + + Import from + Import from + + + Export to + Export to + + + Synchronize with + Synchronize with + + + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 - KeePass2 + KeyComponentWidget - AES: 256-bit - + Key Component + Key Component - Twofish: 256-bit - + Key Component Description + Key Component Description - ChaCha20: 256-bit - + Cancel + Cancel - AES-KDF (KDBX 4) - + Key Component set, click to change or remove + Key Component set, click to change or remove - AES-KDF (KDBX 3.1) - + Add %1 + Add a key component + Add %1 - Argon2 (KDBX 4 – recommended) - + Change %1 + Change a key component + Change %1 + + + Remove %1 + Remove a key component + Remove %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 set, click to change or remove - Main + KeyFileEditWidget - Existing single-instance lock file is invalid. Launching new instance. - + Browse + Browse - The lock file could not be created. Single-instance mode disabled. - + Generate + Generate - Another instance of KeePassXC is already running. - + Key File + Key File - Fatal error while testing the cryptographic functions. - + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> - KeePassXC - Error - + Legacy key file format + Legacy key file format - Database password: - + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + Error loading the key file '%1' +Message: %2 + Error loading the key file '%1' +Message: %2 + + + Key files + Key files + + + All files + All files + + + Create Key File... + Create Key File... + + + Error creating key file + Error creating key file + + + Unable to create key file: %1 + Unable to create key file: %1 + + + Select a key file + Select a key file MainWindow &Database - + &Database &Recent databases - - - - Import - + &Recent databases &Help - + &Help E&ntries - - - - Copy att&ribute to clipboard - - - - Time-based one-time password - + E&ntries &Groups - + &Groups &Tools - + &Tools &Quit - + &Quit &About - + &About &Open database... - + &Open database... &Save database - + &Save database &Close database - - - - &New database - - - - Merge from KeePassX database - - - - &Add new entry - - - - &View/Edit entry - + &Close database &Delete entry - - - - &Add new group - + &Delete entry &Edit group - + &Edit group &Delete group - + &Delete group Sa&ve database as... - - - - Change &master key... - - - - &Database settings - + Sa&ve database as... Database settings - + Database settings &Clone entry - + &Clone entry Copy &username - + Copy &username Copy username to clipboard - - - - Cop&y password - + Copy username to clipboard Copy password to clipboard - + Copy password to clipboard &Settings - + &Settings Password Generator - - - - &Perform Auto-Type - - - - &Open URL - + Password Generator &Lock databases - + &Lock databases &Title - + &Title Copy title to clipboard - + Copy title to clipboard &URL - + &URL Copy URL to clipboard - + Copy URL to clipboard &Notes - + &Notes Copy notes to clipboard - + Copy notes to clipboard &Export to CSV file... - - - - Import KeePass 1 database... - - - - Import CSV file... - - - - Re&pair database... - - - - Show TOTP - + &Export to CSV file... Set up TOTP... - + Set up TOTP... Copy &TOTP - + Copy &TOTP E&mpty recycle bin - + E&mpty recycle bin Clear history - + Clear history Access error for config file %1 - - - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - + Access error for config file %1 Settings - + Settings Toggle window - + Toggle window Quit KeePassXC - - - - KeePass 2 Database - - - - All files - - - - Open database - - - - Save repaired database - - - - Writing the database failed. - + Quit KeePassXC Please touch the button on your YubiKey! - + Please touch the button on your YubiKey! WARNING: You are using an unstable build of KeePassXC! There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. - + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. &Donate - + &Donate Report a &bug - + Report a &bug WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! We recommend you use the AppImage available on our downloads page. - + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + &Import + &Import + + + Copy att&ribute... + Copy att&ribute... + + + TOTP... + TOTP... + + + &New database... + &New database... + + + Create a new database + Create a new database + + + &Merge from database... + &Merge from database... + + + Merge from another KDBX database + Merge from another KDBX database + + + &New entry + &New entry + + + Add a new entry + Add a new entry + + + &Edit entry + &Edit entry + + + View or edit entry + View or edit entry + + + &New group + &New group + + + Add a new group + Add a new group + + + Change master &key... + Change master &key... + + + &Database settings... + &Database settings... + + + Copy &password + Copy &password + + + Perform &Auto-Type + Perform &Auto-Type + + + Open &URL + Open &URL + + + KeePass 1 database... + KeePass 1 database... + + + Import a KeePass 1 database + Import a KeePass 1 database + + + CSV file... + CSV file... + + + Import a CSV file + Import a CSV file + + + Show TOTP... + Show TOTP... + + + Show TOTP QR Code... + Show TOTP QR Code... + + + Check for Updates... + Check for Updates... + + + Share entry + Share entry + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + Check for updates on startup? + Check for updates on startup? + + + Would you like KeePassXC to check for updates on startup? + Would you like KeePassXC to check for updates on startup? + + + You can always check for updates manually from the application menu. + You can always check for updates manually from the application menu. + + + + Merger + + Creating missing %1 [%2] + Creating missing %1 [%2] + + + Relocating %1 [%2] + Relocating %1 [%2] + + + Overwriting %1 [%2] + Overwriting %1 [%2] + + + older entry merged from database "%1" + older entry merged from database "%1" + + + Adding backup for older target %1 [%2] + Adding backup for older target %1 [%2] + + + Adding backup for older source %1 [%2] + Adding backup for older source %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Reapplying older target entry on top of newer source %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Reapplying older source entry on top of newer target %1 [%2] + + + Synchronizing from newer source %1 [%2] + Synchronizing from newer source %1 [%2] + + + Synchronizing from older source %1 [%2] + Synchronizing from older source %1 [%2] + + + Deleting child %1 [%2] + Deleting child %1 [%2] + + + Deleting orphan %1 [%2] + Deleting orphan %1 [%2] + + + Changed deleted objects + Changed deleted objects + + + Adding missing icon %1 + Adding missing icon %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Create a new KeePassXC database... + + + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage + WizardPage + + + En&cryption Settings + En&cryption Settings + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + Advanced Settings + Advanced Settings + + + Simple Settings + Simple Settings + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Encryption Settings + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Database Master Key + + + A master key known only to you protects your database. + A master key known only to you protects your database. + + + + NewDatabaseWizardPageMetaData + + General Database Information + General Database Information + + + Please fill in the display name and an optional description for your new database: + Please fill in the display name and an optional description for your new database: OpenSSHKey Invalid key file, expecting an OpenSSH key - + Invalid key file, expecting an OpenSSH key PEM boundary mismatch - + PEM boundary mismatch Base64 decoding failed - + Base64 decoding failed Key file way too small. - + Key file way too small. Key file magic header id invalid - + Key file magic header id invalid Found zero keys - + Found zero keys Failed to read public key. - + Failed to read public key. Corrupted key file, reading private key failed - + Corrupted key file, reading private key failed No private key payload to decrypt - + No private key payload to decrypt Trying to run KDF without cipher - + Trying to run KDF without cipher Passphrase is required to decrypt this key - + Passphrase is required to decrypt this key Key derivation failed, key file corrupted? - + Key derivation failed, key file corrupted? Decryption failed, wrong passphrase? - + Decryption failed, wrong passphrase? Unexpected EOF while reading public key - + Unexpected EOF while reading public key Unexpected EOF while reading private key - + Unexpected EOF while reading private key Can't write public key as it is empty - + Can't write public key as it is empty Unexpected EOF when writing public key - + Unexpected EOF when writing public key Can't write private key as it is empty - + Can't write private key as it is empty Unexpected EOF when writing private key - + Unexpected EOF when writing private key Unsupported key type: %1 - + Unsupported key type: %1 Unknown cipher: %1 - + Unknown cipher: %1 Cipher IV is too short for MD5 kdf - + Cipher IV is too short for MD5 kdf Unknown KDF: %1 - + Unknown KDF: %1 Unknown key type: %1 - + Unknown key type: %1 - OptionDialog + PasswordEditWidget - Dialog - + Enter password: + Enter password: - This is required for accessing your databases from ChromeIPass or PassIFox - + Confirm password: + Confirm password: - Enable KeePassHTTP server - + Password + Password - General - + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - + Passwords do not match. + Passwords do not match. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - - - - &Return only best matching entries - - - - Re&quest to unlock the database if it is locked - - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - - &Match URL schemes - - - - Sort matching entries by &username - - - - Sort &matching entries by title - - - - R&emove all shared encryption keys from active database - - - - Re&move all stored permissions from entries in active database - - - - Password Generator - - - - Advanced - - - - Always allow &access to entries - - - - Always allow &updating entries - - - - Only the selected database has to be connected with a client. - - - - Searc&h in all opened databases for matching entries - - - - Automatically creating or updating string fields is not supported. - - - - &Return advanced string fields which start with "KPH: " - - - - HTTP Port: - - - - Default port: 19455 - - - - KeePassXC will listen to this port on 127.0.0.1 - - - - <b>Warning:</b> The following options can be dangerous! - - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - + Generate master password + Generate master password PasswordGeneratorWidget %p% - + %p% Password: - + Password: strength Password strength - + strength entropy - + entropy Password - + Password Character Types - + Character Types Upper Case Letters - + Upper Case Letters Lower Case Letters - + Lower Case Letters Numbers - + Numbers Special Characters - + Special Characters Extended ASCII - + Extended ASCII Exclude look-alike characters - + Exclude look-alike characters Pick characters from every group - + Pick characters from every group &Length: - + &Length: Passphrase - + Passphrase Wordlist: - - - - Word Count: - + Wordlist: Word Separator: - - - - Generate - + Word Separator: Copy - + Copy Accept - + Accept Close - - - - Apply - + Close Entropy: %1 bit - + Entropy: %1 bit Password Quality: %1 - + Password Quality: %1 Poor Password quality - + Poor Weak Password quality - + Weak Good Password quality - + Good Excellent Password quality - + Excellent + + + ExtendedASCII + ExtendedASCII + + + Switch to advanced mode + Switch to advanced mode + + + Advanced + Advanced + + + Upper Case Letters A to F + Upper Case Letters A to F + + + A-Z + A-Z + + + Lower Case Letters A to F + Lower Case Letters A to F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Braces + + + {[( + {[( + + + Punctuation + Punctuation + + + .,:; + .,:; + + + Quotes + Quotes + + + " ' + " ' + + + Math + Math + + + <*+!?= + <*+!?= + + + Dashes + Dashes + + + \_|-/ + \_|-/ + + + Logograms + Logograms + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Switch to simple mode + + + Simple + Simple + + + Character set to exclude from generated password + Character set to exclude from generated password + + + Do not include: + Do not include: + + + Add non-hex letters to "do not include" list + Add non-hex letters to "do not include" list + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Word Co&unt: + + + Regenerate + Regenerate + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Select + + + + QMessageBox + + Overwrite + Overwrite + + + Delete + Delete + + + Move + Move + + + Empty + Empty + + + Remove + Remove + + + Skip + Skip + + + Disable + Disable + + + Merge + Merge QObject Database not opened - + Database not opened Database hash not available - + Database hash not available Client public key not received - + Client public key not received Cannot decrypt message - - - - Timeout or cannot connect to KeePassXC - + Cannot decrypt message Action cancelled or denied - - - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - + Action cancelled or denied KeePassXC association failed, try again - - - - Key change was not successful - + KeePassXC association failed, try again Encryption key is not recognized - - - - No saved databases found - + Encryption key is not recognized Incorrect action - + Incorrect action Empty message received - + Empty message received No URL provided - + No URL provided No logins found - + No logins found Unknown error - + Unknown error Add a new entry to a database. - + Add a new entry to a database. Path of the database. - + Path of the database. Key file of the database. - + Key file of the database. path - + path Username for the entry. - + Username for the entry. username - + username URL for the entry. - + URL for the entry. URL - + URL Prompt for the entry's password. - + Prompt for the entry's password. Generate a password for the entry. - + Generate a password for the entry. Length for the generated password. - + Length for the generated password. length - + length Path of the entry to add. - + Path of the entry to add. Copy an entry's password to the clipboard. - + Copy an entry's password to the clipboard. Path of the entry to clip. clip = copy to clipboard - + Path of the entry to clip. Timeout in seconds before clearing the clipboard. - + Timeout in seconds before clearing the clipboard. Edit an entry. - + Edit an entry. Title for the entry. - + Title for the entry. title - + title Path of the entry to edit. - + Path of the entry to edit. Estimate the entropy of a password. - + Estimate the entropy of a password. Password for which to estimate the entropy. - + Password for which to estimate the entropy. Perform advanced analysis on the password. - + Perform advanced analysis on the password. Extract and print the content of a database. - + Extract and print the content of a database. Path of the database to extract. - + Path of the database to extract. Insert password to unlock %1: - - - - Failed to load key file %1 : %2 - + Insert password to unlock %1: WARNING: You are using a legacy key file format which may become unsupported in the future. Please consider generating a new key file. - + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. Available commands: - + + +Available commands: + Name of the command to execute. - + Name of the command to execute. List database entries. - + List database entries. Path of the group to list. Default is / - + Path of the group to list. Default is / Find entries quickly. - + Find entries quickly. Search term. - + Search term. Merge two databases. - + Merge two databases. Path of the database to merge into. - + Path of the database to merge into. Path of the database to merge from. - + Path of the database to merge from. Use the same credentials for both database files. - + Use the same credentials for both database files. Key file of the database to merge from. - + Key file of the database to merge from. Show an entry's information. - + Show an entry's information. Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. attribute - + attribute Name of the entry to show. - + Name of the entry to show. NULL device - + NULL device error reading from device - - - - file empty ! - - + error reading from device malformed string - + malformed string missing closing quote - + missing closing quote Group - + Group Title - + Title Username - + Username Password - + Password Notes - + Notes Last Modified - + Last Modified Created - - - - Legacy Browser Integration - + Created Browser Integration - + Browser Integration YubiKey[%1] Challenge Response - Slot %2 - %3 - + YubiKey[%1] Challenge Response - Slot %2 - %3 Press - + Press Passive - + Passive SSH Agent - + SSH Agent Generate a new random diceware passphrase. - + Generate a new random diceware passphrase. Word count for the diceware passphrase. - - - - count - + Word count for the diceware passphrase. Wordlist for the diceware generator. [Default: EFF English] - + Wordlist for the diceware generator. +[Default: EFF English] Generate a new random password. - + Generate a new random password. - Length of the generated password. - + Invalid value for password length %1. + Invalid value for password length %1. - Use lowercase characters in the generated password. - + Could not create entry with path %1. + Could not create entry with path %1. - Use uppercase characters in the generated password. - + Enter password for new entry: + Enter password for new entry: - Use numbers in the generated password. - + Writing the database failed %1. + Writing the database failed %1. - Use special characters in the generated password. - + Successfully added entry %1. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + Copy the current TOTP to the clipboard. + + + Invalid timeout value %1. + Invalid timeout value %1. + + + Entry %1 not found. + Entry %1 not found. + + + Entry with path %1 has no TOTP set up. + Entry with path %1 has no TOTP set up. + + + Entry's current TOTP copied to the clipboard! + Entry's current TOTP copied to the clipboard! + + + Entry's password copied to the clipboard! + Entry's password copied to the clipboard! + + + Clearing the clipboard in %1 second(s)... + + Clearing the clipboard in %1 second(s)... + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + Clipboard cleared! + + + Silence password prompt and other secondary outputs. + Silence password prompt and other secondary outputs. + + + count + CLI parameter + count + + + Invalid value for password length: %1 + Invalid value for password length: %1 + + + Could not find entry with path %1. + Could not find entry with path %1. + + + Not changing any field for entry %1. + Not changing any field for entry %1. + + + Enter new password for entry: + Enter new password for entry: + + + Writing the database failed: %1 + Writing the database failed: %1 + + + Successfully edited entry %1. + Successfully edited entry %1. + + + Length %1 + Length %1 + + + Entropy %1 + Entropy %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Multi-word extra bits %1 + + + Type: Bruteforce + Type: Bruteforce + + + Type: Dictionary + Type: Dictionary + + + Type: Dict+Leet + Type: Dict+Leet + + + Type: User Words + Type: User Words + + + Type: User+Leet + Type: User+Leet + + + Type: Repeated + Type: Repeated + + + Type: Sequence + Type: Sequence + + + Type: Spatial + Type: Spatial + + + Type: Date + Type: Date + + + Type: Bruteforce(Rep) + Type: Bruteforce(Rep) + + + Type: Dictionary(Rep) + Type: Dictionary(Rep) + + + Type: Dict+Leet(Rep) + Type: Dict+Leet(Rep) + + + Type: User Words(Rep) + Type: User Words(Rep) + + + Type: User+Leet(Rep) + Type: User+Leet(Rep) + + + Type: Repeated(Rep) + Type: Repeated(Rep) + + + Type: Sequence(Rep) + Type: Sequence(Rep) + + + Type: Spatial(Rep) + Type: Spatial(Rep) + + + Type: Date(Rep) + Type: Date(Rep) + + + Type: Unknown%1 + Type: Unknown%1 + + + Entropy %1 (%2) + Entropy %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Password length (%1) != sum of length of parts (%2) *** + + + Failed to load key file %1: %2 + Failed to load key file %1: %2 + + + File %1 does not exist. + File %1 does not exist. + + + Unable to open file %1. + Unable to open file %1. + + + Error while reading the database: +%1 + Error while reading the database: +%1 + + + Error while parsing the database: +%1 + Error while parsing the database: +%1 + + + Length of the generated password + Length of the generated password + + + Use lowercase characters + Use lowercase characters + + + Use uppercase characters + Use uppercase characters + + + Use numbers. + Use numbers. + + + Use special characters + Use special characters + + + Use extended ASCII + Use extended ASCII + + + Exclude character set + Exclude character set + + + chars + chars + + + Exclude similar looking characters + Exclude similar looking characters + + + Include characters from every selected group + Include characters from every selected group + + + Recursively list the elements of the group. + Recursively list the elements of the group. + + + Cannot find group %1. + Cannot find group %1. + + + Error reading merge file: +%1 + Error reading merge file: +%1 + + + Unable to save database to file : %1 + Unable to save database to file : %1 + + + Unable to save database to file: %1 + Unable to save database to file: %1 + + + Successfully recycled entry %1. + Successfully recycled entry %1. + + + Successfully deleted entry %1. + Successfully deleted entry %1. + + + Show the entry's current TOTP. + Show the entry's current TOTP. + + + ERROR: unknown attribute %1. + ERROR: unknown attribute %1. + + + No program defined for clipboard manipulation + No program defined for clipboard manipulation + + + Unable to start program %1 + Unable to start program %1 + + + file empty + file empty + + + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recommended) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Invalid Settings + + + Invalid Key + TOTP + Invalid Key + + + Message encryption failed. + Message encryption failed. + + + No groups found + No groups found + + + Create a new database. + Create a new database. + + + File %1 already exists. + File %1 already exists. + + + Loading the key file failed + Loading the key file failed + + + No key is set. Aborting database creation. + No key is set. Aborting database creation. + + + Failed to save the database: %1. + Failed to save the database: %1. + + + Successfully created new database. + Successfully created new database. + + + Insert password to encrypt database (Press enter to leave blank): + Insert password to encrypt database (Press enter to leave blank): + + + Creating KeyFile %1 failed: %2 + Creating KeyFile %1 failed: %2 + + + Loading KeyFile %1 failed: %2 + Loading KeyFile %1 failed: %2 + + + Remove an entry from the database. + Remove an entry from the database. + + + Path of the entry to remove. + Path of the entry to remove. + + + Existing single-instance lock file is invalid. Launching new instance. + Existing single-instance lock file is invalid. Launching new instance. + + + The lock file could not be created. Single-instance mode disabled. + The lock file could not be created. Single-instance mode disabled. + + + KeePassXC - cross-platform password manager + KeePassXC - cross-platform password manager + + + filenames of the password databases to open (*.kdbx) + filenames of the password databases to open (*.kdbx) + + + path to a custom config file + path to a custom config file + + + key file of the database + key file of the database + + + read password of the database from stdin + read password of the database from stdin + + + Parent window handle + Parent window handle + + + Another instance of KeePassXC is already running. + Another instance of KeePassXC is already running. + + + Fatal error while testing the cryptographic functions. + Fatal error while testing the cryptographic functions. + + + KeePassXC - Error + KeePassXC - Error + + + Database password: + Database password: + + + Cannot create new group @@ -3618,447 +4944,418 @@ Available commands: QtIOCompressor Internal zlib error when compressing: - + Internal zlib error when compressing: Error writing to underlying device: - + Error writing to underlying device: Error opening underlying device: - + Error opening underlying device: Error reading data from underlying device: - + Error reading data from underlying device: Internal zlib error when decompressing: - + Internal zlib error when decompressing: QtIOCompressor::open The gzip format not supported in this version of zlib. - + The gzip format not supported in this version of zlib. Internal zlib error: - + Internal zlib error: SSHAgent Agent connection failed. - + Agent connection failed. Agent protocol error. - + Agent protocol error. No agent running, cannot add identity. - + No agent running, cannot add identity. No agent running, cannot remove identity. - - - - Agent does not have this identity. - + No agent running, cannot remove identity. Agent refused this identity. Possible reasons include: - + Agent refused this identity. Possible reasons include: The key has already been added. - + The key has already been added. Restricted lifetime is not supported by the agent (check options). - + Restricted lifetime is not supported by the agent (check options). A confirmation request is not supported by the agent (check options). - + A confirmation request is not supported by the agent (check options). + + + + SearchHelpWidget + + Search Help + Search Help + + + Search terms are as follows: [modifiers][field:]["]term["] + Search terms are as follows: [modifiers][field:]["]term["] + + + Every search term must match (ie, logical AND) + Every search term must match (ie, logical AND) + + + Modifiers + Modifiers + + + exclude term from results + exclude term from results + + + match term exactly + match term exactly + + + use regex in term + use regex in term + + + Fields + Fields + + + Term Wildcards + Term Wildcards + + + match anything + match anything + + + match one + match one + + + logical OR + logical OR + + + Examples + Examples SearchWidget - - Search... - - Search - + Search Clear - - - - Case Sensitive - + Clear Limit search to selected group - + Limit search to selected group + + + Search Help + Search Help + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Search (%1)... + + + Case sensitive + Case sensitive - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - + Active + Active - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - + Allow export + Allow export - KeePassXC: Overwrite existing key? - + Allow import + Allow import - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - + Own certificate + Own certificate - KeePassXC: Update Entry - + Fingerprint: + Fingerprint: - Do you want to update the information in %1 - %2? - + Certificate: + Certificate: - KeePassXC: Database locked! - - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - KeePassXC: Removed keys from database - - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - - - - - - - KeePassXC: No keys found - - - - No shared encryption-keys found in KeePassHttp Settings. - - - - KeePassXC: Settings not available! - - - - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - - - - Abort - - - - KeePassXC: Removed permissions - - - - Successfully removed permissions from %n entries. - - - - - - - KeePassXC: No entry with permissions found! - - - - The active database does not contain an entry with permissions. - - - - - SettingsWidget - - Application Settings - - - - General - - - - Security - - - - Access error for config file %1 - - - - - SettingsWidgetGeneral - - Basic Settings - - - - Start only a single instance of KeePassXC - - - - Remember last databases - - - - Remember last key files and security dongles - - - - Load previous databases on startup - - - - Automatically save on exit - - - - Automatically save after every change - - - - Automatically reload the database when modified externally - - - - Minimize when copying to clipboard - - - - Minimize window at application startup - - - - Use group icon on entry creation - - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Hide the Details view - - - - Show a system tray icon - - - - Hide window to system tray when minimized - - - - Hide window to system tray instead of app exit - - - - Dark system tray icon - - - - Language - - - - Auto-Type - - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Global Auto-Type shortcut - - - - ms - Milliseconds - - - - Startup - - - - File Management - - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - - - - Entry Management - - - - General - - - - Auto-Type typing delay - - - - Auto-Type start delay - - - - - SettingsWidgetSecurity - - Timeouts - - - - Clear clipboard after - - - - sec - Seconds - - - - Lock databases after inactivity of - - - - Convenience - - - - Lock databases when session is locked or lid is closed - - - - Lock databases after minimizing the window - - - - Don't require password repeat when it is visible - - - - Show passwords in cleartext by default - - - - Hide passwords in the preview panel - - - - Hide entry notes by default - - - - Privacy - - - - Use Google as fallback for downloading website icons - - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog - - Setup TOTP - + Signer + Signer Key: + Key: + + + Generate + Generate + + + Import + Import + + + Export + Export + + + Imported certificates + Imported certificates + + + Trust + Trust + + + Ask + Ask + + + Untrust + Untrust + + + Remove + Remove + + + Path + Path + + + Status + Status + + + Fingerprint + Fingerprint + + + Certificate + Certificate + + + Trusted + Trusted + + + Untrusted + Untrusted + + + Unknown + Unknown + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + KeeShare key file + + + All files + All files + + + Select path + Select path + + + Exporting changed certificate + Exporting changed certificate + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Import from container without signature + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + Import from container with certificate + Import from container with certificate + + + Not this time + Not this time + + + Never + Never + + + Always + Always + + + Just this time + Just this time + + + Import from %1 failed (%2) + Import from %1 failed (%2) + + + Import from %1 successful (%2) + Import from %1 successful (%2) + + + Imported from %1 + Imported from %1 + + + Signed share container are not supported - import prevented + Signed share container are not supported - import prevented + + + File is not readable + File is not readable + + + Invalid sharing container + Invalid sharing container + + + Untrusted import prevented + Untrusted import prevented + + + Successful signed import + Successful signed import + + + Unexpected error + Unexpected error + + + Unsigned share container are not supported - import prevented + Unsigned share container are not supported - import prevented + + + Successful unsigned import + Successful unsigned import + + + File does not exist + File does not exist + + + Unknown share container type + Unknown share container type + + + Overwriting signed share container is not supported - export prevented + Overwriting signed share container is not supported - export prevented + + + Could not write export container (%1) + Could not write export container (%1) + + + Overwriting unsigned share container is not supported - export prevented + Overwriting unsigned share container is not supported - export prevented + + + Could not write export container + Could not write export container + + + Unexpected export error occurred + Unexpected export error occurred + + + Export to %1 failed (%2) + Export to %1 failed (%2) + + + Export to %1 successful (%2) + Export to %1 successful (%2) + + + Export to %1 + Export to %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Do you want to trust %1 with the fingerprint of %2 from %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 - Default RFC 6238 token settings + Conflicting export target path %1 in %2 - Steam token settings + Could not embed signature: Could not open file to write (%1) - Use custom settings + Could not embed signature: Could not write file (%1) - Note: Change these settings only if you know what you are doing. + Could not embed database: Could not open file to write (%1) - Time step: - - - - 8 digits - - - - 6 digits - - - - Code size: - - - - sec - Seconds + Could not embed database: Could not write file (%1) @@ -4066,111 +5363,199 @@ Please unlock the selected database or choose another one which is unlocked.TotpDialog Timed Password - + Timed Password 000000 - + 000000 Copy - + Copy - - Expires in - - - - seconds - + + Expires in <b>%n</b> second(s) + + Expires in <b>%n</b> second(s) + Expires in <b>%n</b> second(s) + - UnlockDatabaseWidget + TotpExportSettingsDialog - Unlock database - + Copy + Copy + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + NOTE: These TOTP settings are custom and may not work with other authenticators. + + + There was an error creating the QR code. + There was an error creating the QR code. + + + Closing in %1 seconds. + Closing in %1 seconds. - UrlFetchProgressDialog + TotpSetupDialog - Download Progress - + Setup TOTP + Setup TOTP - Downloading %1. - + Key: + Key: + + + Default RFC 6238 token settings + Default RFC 6238 token settings + + + Steam token settings + Steam token settings + + + Use custom settings + Use custom settings + + + Custom Settings + Custom Settings + + + Time step: + Time step: + + + sec + Seconds + sec + + + Code size: + Code size: + + + 6 digits + 6 digits + + + 7 digits + 7 digits + + + 8 digits + 8 digits + + + + UpdateCheckDialog + + Checking for updates + Checking for updates + + + Checking for updates... + Checking for updates... + + + Close + Close + + + Update Error! + Update Error! + + + An error occurred in retrieving update information. + An error occurred in retrieving update information. + + + Please try again later. + Please try again later. + + + Software Update + Software Update + + + A new version of KeePassXC is available! + A new version of KeePassXC is available! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 is now available — you have %2. + + + Download it at keepassxc.org + Download it at keepassxc.org + + + You're up-to-date! + You're up-to-date! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 is currently the newest version available WelcomeWidget Start storing your passwords securely in a KeePassXC database - + Start storing your passwords securely in a KeePassXC database Create new database - + Create new database Open existing database - + Open existing database Import from KeePass 1 - + Import from KeePass 1 Import from CSV - + Import from CSV Recent databases - + Recent databases Welcome to KeePassXC %1 - + Welcome to KeePassXC %1 - main + YubiKeyEditWidget - Remove an entry from the database. - + Refresh + Refresh - Path of the database. - + YubiKey Challenge-Response + YubiKey Challenge-Response - Path of the entry to remove. - + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager - + No YubiKey detected, please ensure it's plugged in. + No YubiKey detected, please ensure it's plugged in. - filenames of the password databases to open (*.kdbx) - - - - path to a custom config file - - - - key file of the database - - - - read password of the database from stdin - - - - Parent window handle - + No YubiKey inserted. + No YubiKey inserted. diff --git a/share/translations/keepassx_en_GB.ts b/share/translations/keepassx_en_GB.ts index 735921bbf..1918b2855 100644 --- a/share/translations/keepassx_en_GB.ts +++ b/share/translations/keepassx_en_GB.ts @@ -3,8 +3,7 @@ AboutDialog About KeePassXC - About KeePassXC - + About KeePassXC About @@ -38,36 +37,6 @@ Copy to clipboard Copy to clipboard - - Version %1 - - Version %1 - - - - Revision: %1 - Revision: %1 - - - Distribution: %1 - Distribution: %1 - - - Libraries: - Libraries: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - - - Enabled extensions: - Enabled extensions: - Project Maintainers: Project Maintainers: @@ -76,37 +45,6 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - - Build Type: %1 - - Build Type: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Confirm Access - - - Remember this decision - Remember this decision - - - Allow - Allow - - - Deny - Deny - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - AgentSettingsWidget @@ -114,6 +52,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) Enable SSH Agent (requires restart) + + Use OpenSSH for Windows instead of Pageant + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget + + Application Settings + Application Settings + + + General + General + + + Security + Security + + + Access error for config file %1 + Access error for config file %1 + + + Icon only + Icon only + + + Text only + Text only + + + Text beside icon + Text beside icon + + + Text under icon + Text under icon + + + Follow style + Follow style + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Basic Settings + + + Startup + Startup + + + Start only a single instance of KeePassXC + Start only a single instance of KeePassXC + + + Remember last databases + Remember last databases + + + Remember last key files and security dongles + Remember last key files and security dongles + + + Load previous databases on startup + Load previous databases on startup + + + Minimize window at application startup + Minimise window at application startup + + + File Management + File Management + + + Safely save database files (may be incompatible with Dropbox, etc) + Safely save database files (may be incompatible with Dropbox, etc) + + + Backup database file before saving + Backup database file before saving + + + Automatically save after every change + Automatically save after every change + + + Automatically save on exit + Automatically save on exit + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + Automatically reload the database when modified externally + Automatically reload the database when modified externally + + + Entry Management + Entry Management + + + Use group icon on entry creation + Use group icon on entry creation + + + Minimize when copying to clipboard + Minimise when copying to clipboard + + + Hide the entry preview panel + Hide the entry preview panel + + + General + General + + + Hide toolbar (icons) + Hide toolbar (icons) + + + Minimize instead of app exit + Minimise instead of app exit + + + Show a system tray icon + Show a system tray icon + + + Dark system tray icon + Dark system tray icon + + + Hide window to system tray when minimized + Hide window to system tray when minimised + + + Language + Language + + + Auto-Type + Auto-Type + + + Use entry title to match windows for global Auto-Type + Use entry title to match windows for global Auto-Type + + + Use entry URL to match windows for global Auto-Type + Use entry URL to match windows for global Auto-Type + + + Always ask before performing Auto-Type + Always ask before performing Auto-Type + + + Global Auto-Type shortcut + Global Auto-Type shortcut + + + Auto-Type typing delay + Auto-Type typing delay + + + ms + Milliseconds + ms + + + Auto-Type start delay + Auto-Type start delay + + + Check for updates at application startup + Check for updates at application startup + + + Include pre-releases when checking for updates + Include pre-releases when checking for updates + + + Movable toolbar + Movable toolbar + + + Button style + Button style + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Timeouts + + + Clear clipboard after + Clear clipboard after + + + sec + Seconds + sec + + + Lock databases after inactivity of + Lock databases after inactivity of + + + min + min + + + Forget TouchID after inactivity of + Forget TouchID after inactivity of + + + Convenience + Convenience + + + Lock databases when session is locked or lid is closed + Lock databases when session is locked or lid is closed + + + Forget TouchID when session is locked or lid is closed + Forget TouchID when session is locked or lid is closed + + + Lock databases after minimizing the window + Lock databases after minimising the window + + + Re-lock previously locked database after performing Auto-Type + Re-lock previously locked database after performing Auto-Type + + + Don't require password repeat when it is visible + Don't require password repeat when it is visible + + + Don't hide passwords when editing them + Don't hide passwords when editing them + + + Don't use placeholder for empty password fields + Don't use placeholder for empty password fields + + + Hide passwords in the entry preview panel + Hide passwords in the entry preview panel + + + Hide entry notes by default + Hide entry notes by default + + + Privacy + Privacy + + + Use DuckDuckGo as fallback for downloading website icons + Use DuckDuckGo as fallback for downloading website icons + AutoType @@ -216,6 +425,27 @@ Please select whether you want to allow access. Please select whether you want to allow access. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Save Entry + + + Ok + Ok + + + Cancel + Cancel + + + You have multiple databases open. +Please select the correct database for saving credentials. + You have multiple databases open. +Please select the correct database for saving credentials. + + BrowserOptionDialog @@ -289,14 +519,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension Sort matching credentials by &username - - &Disconnect all browsers - &Disconnect all browsers - - - Forget all remembered &permissions - Forget all remembered &permissions - Advanced Advanced @@ -334,7 +556,7 @@ Please select whether you want to allow access. Update &native messaging manifest files at startup - + Update &native messaging manifest files at startup Support a proxy application between KeePassXC and browser extension. @@ -362,21 +584,42 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>Warning:</b> The following options can be dangerous! - - Executable Files (*.exe);;All Files (*.*) - - - - Executable Files (*) - Executable Files (*) - Select custom proxy location Select custom proxy location - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + Executable Files + Executable Files + + + All Files + All Files + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Do not ask permission for HTTP &Basic Auth + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -417,151 +660,55 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? Do you want to update the information in %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Database locked! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - KeePassXC: Settings not available! - KeePassXC: Settings not available! - - - The active database does not contain a settings entry. - The active database does not contain a settings entry. - - - KeePassXC: No keys found - KeePassXC: No keys found - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - KeePassXC: Removed keys from database - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - Removing stored permissions… - Abort Abort - KeePassXC: Removed permissions - KeePassXC: Removed permissions + Converting attributes to custom data… + Converting attributes to custom data… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). - + Successfully moved %n keys to custom data. + Successfully moved %n key to custom data.Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: No entry with permissions found! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! - The active database does not contain an entry with permissions. - The active database does not contain an entry with permissions. - - - - ChangeMasterKeyWidget - - Password - Password + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. - Enter password: - Enter password: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected - Repeat password: - Repeat password: - - - &Key file + KeePassXC: Create a new group - Browse - Browser - - - Create - Create - - - Cha&llenge Response - Cha&llenge Response - - - Refresh - Refresh - - - Key files - Key files - - - All files - All files - - - Create Key File... + A request for creating a new group "%1" has been received. +Do you want to create this group? + - Unable to create Key File : + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? - - Select a key file - Select a key file - - - Empty password - Empty password - - - Do you really want to use an empty string as password? - - - - Different passwords supplied. - Different passwords supplied. - - - Failed to set %1 as the Key file: -%2 - - - - Legacy key file format - Legacy key file format - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - - - - Changing master key failed: no YubiKey inserted. - Changing master key failed: no YubiKey inserted. - CloneDialog @@ -586,43 +733,43 @@ Please consider generating a new key file. CsvImportWidget Import CSV fields - + Import CSV fields filename - + filename size, rows, columns - + size, rows, columns Encoding - + Encoding Codec - + Codec Text is qualified by - + Text is qualified by Fields are separated by - + Fields are separated by Comments start with - + Comments start with First record has field names - + First record has field names Number of headers line to discard - + Number of headers line to discard Consider '\' an escape character @@ -634,70 +781,104 @@ Please consider generating a new key file. Column layout - + Column layout Not present in CSV file - - - - Empty fieldname - - - - column - + Not present in CSV file Imported from CSV file - + Imported from CSV file Original data: - - - - Error(s) detected in CSV file ! - - - - more messages skipped] - + Original data: Error Error + + Empty fieldname %1 + Empty fieldname %1 + + + column %1 + column %1 + + + Error(s) detected in CSV file! + Error(s) detected in CSV file! + + + [%n more message(s) skipped] + [%n more message skipped][%n more messages skipped] + CSV import: writer has errors: - - - - - - CsvImportWizard - - Error - Error - - - Unable to calculate master key - Unable to calculate master key +%1 + CSV import: writer has errors: +%1 CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) - + %n column%n columns + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes + + + %n row(s) + %n row%n rows + + + + Database + + Root + Root group name + Root + + + File %1 does not exist. + File %1 does not exist. + + + Unable to open file %1. + Unable to open file %1. + + + Error while reading the database: %1 + Error while reading the database: %1 + + + Could not save, database has no file name. + Could not save, database has no file name. + + + File cannot be written as it is opened in read-only mode. + File cannot be written as it is opened in read-only mode. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Unlock Database - KeePassXC @@ -708,15 +889,15 @@ Please consider generating a new key file. Key File: - + Key File: Password: - + Password: Browse - Browser + Browse Refresh @@ -726,14 +907,6 @@ Please consider generating a new key file. Challenge Response: Challenge Response: - - Unable to open the database. - Unable to open the database. - - - Can't open key file - Can't open key file - Legacy key file format Legacy key file format @@ -743,7 +916,10 @@ Please consider generating a new key file. unsupported in the future. Please consider generating a new key file. - + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. Don't show this warning again @@ -761,52 +937,254 @@ Please consider generating a new key file. Select key file Select key file - - - DatabaseRepairWidget - Repair database - Repair database + TouchID for quick unlock + TouchID for quick unlock - Error - Error + Unable to open the database: +%1 + Unable to open the database: +%1 - Can't open key file - Can't open key file - - - Unable to open the database. - Unable to open the database. - - - Database opened fine. Nothing to do. - Database opened fine. Nothing to do. - - - Success - Success - - - The database has been successfully repaired -You can now save it. - - - - Unable to repair the database. - Unable to repair the database. + Can't open key file: +%1 + Can't open key file: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Passwords + + + + DatabaseSettingsDialog + + Advanced Settings + Advanced Settings + General General - Encryption - Encryption + Security + Security + + + Master Key + Master Key + + + Encryption Settings + Encryption Settings + + + Browser Integration + Browser Integration + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Browser settings + + + &Disconnect all browsers + &Disconnect all browsers + + + Forg&et all site-specific settings on entries + Forg&et all site-specific settings on entries + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + Stored keys + Stored keys + + + Remove + Remove + + + Delete the selected key? + Delete the selected key? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + Key + Key + + + Value + Value + + + Enable Browser Integration to access these settings. + Enable Browser Integration to access these settings. + + + Disconnect all browsers + Disconnect all browsers + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + KeePassXC: No keys found + KeePassXC: No keys found + + + No shared encryption keys found in KeePassXC settings. + No shared encryption keys found in KeePassXC settings. + + + KeePassXC: Removed keys from database + KeePassXC: Removed keys from database + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. + + + Forget all site-specific settings on entries + Forget all site-specific settings on entries + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + Removing stored permissions… + Removing stored permissions… + + + Abort + Abort + + + KeePassXC: Removed permissions + KeePassXC: Removed permissions + + + Successfully removed permissions from %n entry(s). + Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. + + + KeePassXC: No entry with permissions found! + KeePassXC: No entry with permissions found! + + + The active database does not contain an entry with permissions. + The active database does not contain an entry with permissions. + + + Move KeePassHTTP attributes to custom data + Move KeePassHTTP attributes to custom data + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Encryption Algorithm: + + + AES: 256 Bit (default) + AES: 256 Bit (default) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Key Derivation Function: + + + Transform rounds: + Transform rounds: + + + Benchmark 1-second delay + Benchmark 1-second delay + + + Memory Usage: + Memory Usage: + + + Parallelism: + Parallelism: + + + Decryption Time: + Decryption Time: + + + ?? s + ?? s + + + Change + Change + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Higher values offer more protection, but opening the database will take longer. + + + Database format: + Database format: + + + This is only important if you need to use your database with other programs. + This is only important if you need to use your database with other programs. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recommended) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + unchanged Number of rounds too high @@ -817,7 +1195,9 @@ You can now save it. You are using a very high number of key transform rounds with Argon2. If you keep this number, your database may take hours or days (or even longer) to open! - + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! Understood, keep number @@ -836,11 +1216,13 @@ If you keep this number, your database may take hours or days (or even longer) t You are using a very low number of key transform rounds with AES-KDF. If you keep this number, your database may be too easy to crack! - + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! KDF unchanged - + KDF unchanged Failed to transform key with new KDF parameters; KDF unchanged. @@ -849,54 +1231,29 @@ If you keep this number, your database may be too easy to crack! MiB Abbreviation for Mebibytes (KDF settings) - + MiB MiB thread(s) Threads for parallel execution (KDF settings) - + thread threads - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - - - - Twofish: 256 Bit - - - - Key Derivation Function: - - - - Transform rounds: - - - - Benchmark 1-second delay - - - - Memory Usage: - - - - Parallelism: - + + %1 s + seconds + %1 s%1 s DatabaseSettingsWidgetGeneral Database Meta Data - + Database Meta Data Database name: @@ -912,19 +1269,19 @@ If you keep this number, your database may be too easy to crack! History Settings - + History Settings Max. history items: - + Max. history items: Max. history size: - + Max. history size: MiB - + MiB Use recycle bin @@ -940,12 +1297,85 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + Sharing + + Breadcrumb + Breadcrumb + + + Type + Type + + + Path + Path + + + Last Signer + Last Signer + + + Certificates + Certificates + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Add additional protection... + + + No encryption key added + No encryption key added + + + You must add at least one encryption key to secure your database! + You must add at least one encryption key to secure your database! + + + No password set + No password set + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + Unknown error + Unknown error + + + Failed to change master key + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Database Name: + + + Description: + Description: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 Database @@ -958,29 +1388,9 @@ If you keep this number, your database may be too easy to crack! Open database Open database - - File not found! - File not found! - - - Unable to open the database. - Unable to open the database. - - - File opened in read only mode. - - - - Open CSV file - Open CSV file - CSV file - - - - All files (*) - + CSV file Merge database @@ -994,38 +1404,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 database - - Close? - - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" is in edit mode. -Discard changes and close anyway? - - - Save changes? - Save changes? - - - "%1" was modified. -Save changes? - "%1" was modified. -Save changes? - - - Writing the database failed. - Writing the database failed. - - - Passwords - - - - Save database as - - Export database to CSV file Export database to CSV file @@ -1035,38 +1413,41 @@ Save changes? Writing the CSV file failed. - New database - New database + Database creation error + Database creation error - locked - + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Lock database - Lock database + The database file does not exist or is not accessible. + The database file does not exist or is not accessible. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + Select CSV file + Select CSV file - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - + New Database + New Database - Disable safe saves? - Disable safe saves? + %1 [New Database] + Database tab name modifier + %1 [New Database] - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + %1 [Locked] + Database tab name modifier + %1 [Locked] + + + %1 [Read-only] + Database tab name modifier + %1 [Read-only] @@ -1075,41 +1456,17 @@ Disable safe saves and try again? Searching... Searching... - - Change master key - Change master key - - - Delete entry? - Delete entry? - Do you really want to delete the entry "%1" for good? Do you really want to delete the entry "%1" for good? - - Delete entries? - Delete entries? - - - Do you really want to delete %1 entries for good? - Do you really want to delete %1 entries for good? - - - Move entry to recycle bin? - Move entry to recycle bin? - Do you really want to move entry "%1" to the recycle bin? Do you really want to move entry "%1" to the recycle bin? - - Move entries to recycle bin? - Move entries to recycle bin? - Do you really want to move %n entry(s) to the recycle bin? - + Do you really want to move %n entry to the recycle bin?Do you really want to move %n entries to the recycle bin? Execute command? @@ -1117,24 +1474,16 @@ Disable safe saves and try again? Do you really want to execute the following command?<br><br>%1<br> - + Do you really want to execute the following command?<br><br>%1<br> Remember my choice Remember my choice - - Delete group? - Delete group? - Do you really want to delete the group "%1" for good? Do you really want to delete the group "%1" for good? - - Unable to calculate master key - Unable to calculate master key - No current database. No current database. @@ -1145,11 +1494,11 @@ Disable safe saves and try again? Search Results (%1) - + Search Results (%1) No Results - + No Results File has changed @@ -1169,10 +1518,6 @@ Do you want to merge your changes? The database file has changed and you have unsaved changes. Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - Could not open the new database file while attempting to autoreload this database. - Empty recycle bin? Empty recycle bin? @@ -1181,87 +1526,110 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? Are you sure you want to permanently delete everything from your recycle bin? - - - DetailsWidget - - Generate TOTP Token - + + Do you really want to delete %n entry(s) for good? + Do you really want to delete %n entry for good?Do you really want to delete %n entries for good? + + + Delete entry(s)? + Delete entry?Delete entries? + + + Move entry(s) to recycle bin? + Move entry to recycle bin?Move entries to recycle bin? - Close - Close + File opened in read only mode. + File opened in read only mode. - General - General + Lock Database? + Lock Database? - Password - Password + You are editing an entry. Discard changes and lock anyway? + You are editing an entry. Discard changes and lock anyway? - URL - URL + "%1" was modified. +Save changes? + "%1" was modified. +Save changes? - Expiration - + Database was modified. +Save changes? + Database was modified. +Save changes? - Username - Username + Save changes? + Save changes? - Autotype - + Could not open the new database file while attempting to autoreload. +Error: %1 + Could not open the new database file while attempting to autoreload. +Error: %1 - Searching - + Disable safe saves? + Disable safe saves? - Attributes - + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? - Attachments - Attachments + Writing the database failed. +%1 + Writing the database failed. +%1 - Notes - Notes + Passwords + Passwords - Window - Window + Save database as + Save database as - Sequence - Sequence + KeePass 2 Database + KeePass 2 Database - Search - Search + Replace references to entry? + Replace references to entry? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Entry "%1" has %2 reference. Do you want to overwrite references with values, skip this entry, or delete anyway?Entry "%1" has %2 references. Do you want to overwrite references with values, skip this entry, or delete anyway? - Clear - Clear + Delete group + Delete group - Never - Never + Move group to recycle bin? + Move group to recycle bin? - [PROTECTED] - + Do you really want to move the group "%1" to the recycle bin? + Do you really want to move the group "%1" to the recycle bin? - Disabled - + Successfully merged the database files. + Successfully merged the database files. - Enabled + Database was not modified by merge operation. + Database was not modified by merge operation. + + + Shared group... @@ -1269,7 +1637,7 @@ Do you want to merge your changes? EditEntryWidget Entry - + Entry Advanced @@ -1289,7 +1657,7 @@ Do you want to merge your changes? History - + History SSH Agent @@ -1297,11 +1665,11 @@ Do you want to merge your changes? n/a - + n/a (encrypted) - + (encrypted) Select private key @@ -1335,37 +1703,21 @@ Do you want to merge your changes? New attribute New attribute - - Confirm Remove - - Are you sure you want to remove this attribute? Are you sure you want to remove this attribute? - - [PROTECTED] - - - - Press reveal to view or edit - Press reveal to view or edit - Tomorrow - + Tomorrow %n week(s) - + %n week%n weeks %n month(s) - - - - 1 year - 1 year + %n month%n months Apply generated password? @@ -1379,6 +1731,26 @@ Do you want to merge your changes? Entry updated successfully. Entry updated successfully. + + Entry has unsaved changes + Entry has unsaved changes + + + New attribute %1 + New attribute %1 + + + [PROTECTED] Press reveal to view or edit + [PROTECTED] Press reveal to view or edit + + + %n year(s) + %n year%n years + + + Confirm Removal + Confirm Removal + EditEntryWidgetAdvanced @@ -1396,15 +1768,15 @@ Do you want to merge your changes? Edit Name - + Edit Name Protect - + Protect Reveal - + Reveal Attachments @@ -1412,46 +1784,46 @@ Do you want to merge your changes? Foreground Color: - + Foreground Colour: Background Color: - + Background Colour: EditEntryWidgetAutoType Enable Auto-Type for this entry - + Enable Auto-Type for this entry Inherit default Auto-Type sequence from the &group - + Inherit default Auto-Type sequence from the &group &Use custom Auto-Type sequence: - + &Use custom Auto-Type sequence: Window Associations - + Window Associations + - + + - - + - Window title: - + Window title: Use a specific sequence for this association: - + Use a specific sequence for this association: @@ -1477,19 +1849,19 @@ Do you want to merge your changes? EditEntryWidgetMain URL: - + URL: Password: - + Password: Repeat: - + Repeat: Title: - + Title: Notes @@ -1497,7 +1869,7 @@ Do you want to merge your changes? Presets - + Presets Toggle the checkbox to reveal the notes section. @@ -1505,7 +1877,7 @@ Do you want to merge your changes? Username: - + Username: Expires @@ -1516,19 +1888,19 @@ Do you want to merge your changes? EditEntryWidgetSSHAgent Form - + Form Remove key from agent after - + Remove key from agent after seconds - + seconds Fingerprint - + Fingerprint Remove key from agent when database is closed/locked @@ -1544,15 +1916,15 @@ Do you want to merge your changes? Comment - + Comment Decrypt - + Decrypt n/a - + n/a Copy to clipboard @@ -1620,6 +1992,97 @@ Do you want to merge your changes? Inherit from parent group (%1) + Inherit from parent group (%1) + + + + EditGroupWidgetKeeShare + + Form + Form + + + Type: + Type: + + + Path: + Path: + + + ... + ... + + + Password: + Password: + + + Inactive + Inactive + + + Import from path + Import from path + + + Export to path + Export to path + + + Synchronize with path + Synchronize with path + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Your KeePassXC version does not support sharing your container type. Please use %1. + + + Database sharing is disabled + Database sharing is disabled + + + Database export is disabled + Database export is disabled + + + Database import is disabled + Database import is disabled + + + KeeShare unsigned container + KeeShare unsigned container + + + KeeShare signed container + KeeShare signed container + + + Select import source + Select import source + + + Select export target + Select export target + + + Select import/export file + Select import/export file + + + Clear + Clear + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. @@ -1680,10 +2143,6 @@ Do you want to merge your changes? Unable to fetch favicon. Unable to fetch favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - - Images Images @@ -1692,48 +2151,68 @@ Do you want to merge your changes? All files All files - - Select Image - Select Image - - - Can't read icon - Can't read icon - Custom icon already exists Custom icon already exists Confirm Delete - + Confirm Delete - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded + Custom icon successfully downloaded + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + Select Image(s) + Select Image(s) + + + Successfully loaded %1 of %n icon(s) + Successfully loaded %1 of %n iconSuccessfully loaded %1 of %n icons + + + No icons were loaded + No icons were loaded + + + %n icon(s) already exist in the database + %n icon already exist in the database%n icons already exist in the database + + + The following icon(s) failed: + The following icon failed:The following icons failed: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + This icon is used by %n entry, and will be replaced by the default icon. Are you sure you want to delete it?This icon is used by %n entries, and will be replaced by the default icon. Are you sure you want to delete it? EditWidgetProperties Created: - + Created: Modified: - + Modified: Accessed: - + Accessed: Uuid: - + Uuid: Plugin Data - + Plugin Data Remove @@ -1751,19 +2230,18 @@ This may cause the affected plugins to malfunction. Key - + Key Value - + Value Entry - - Clone - Suffix added to cloned entries - + %1 - Clone + %1 - Clone @@ -1774,14 +2252,14 @@ This may cause the affected plugins to malfunction. Size - + Size EntryAttachmentsWidget Form - + Form Add @@ -1805,11 +2283,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - + Are you sure you want to remove %n attachment?Are you sure you want to remove %n attachments? Save attachments @@ -1848,10 +2322,15 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + Confirm remove + + + Unable to open file(s): %1 - Unable to open files: -%1 + Unable to open file: +%1Unable to open files: +%1 @@ -1865,7 +2344,7 @@ This may cause the affected plugins to malfunction. EntryHistoryModel Last modified - + Last modified Title @@ -1885,7 +2364,7 @@ This may cause the affected plugins to malfunction. Ref: Reference abbreviation - + Ref: Group @@ -1921,34 +2400,134 @@ This may cause the affected plugins to malfunction. Created - + Created Modified - + Modified Accessed - + Accessed Attachments Attachments + + Yes + Yes + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Generate TOTP Token + + + Close + Close + + + General + General + + + Username + Username + + + Password + Password + + + Expiration + Expiration + + + URL + URL + + + Attributes + Attributes + + + Attachments + Attachments + + + Notes + Notes + + + Autotype + Autotype + + + Window + Window + + + Sequence + Sequence + + + Searching + Searching + + + Search + Search + + + Clear + Clear + + + Never + Never + + + [PROTECTED] + [PROTECTED] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Enabled + + + Disabled + Disabled + + + Share + Share + EntryView Customize View - + Customize View Hide Usernames - + Hide Usernames Hide Passwords - + Hide Passwords Fit to window @@ -1956,15 +2535,15 @@ This may cause the affected plugins to malfunction. Fit to contents - + Fit to contents Reset to defaults - + Reset to defaults Attachments (icon) - + Attachments (icon) @@ -1973,71 +2552,21 @@ This may cause the affected plugins to malfunction. Recycle Bin Recycle Bin + + [empty] + group has no children + [empty] + HostInstaller KeePassXC: Cannot save file! - + KeePassXC: Cannot save file! Cannot save the native messaging script file. - - - - - HttpPasswordGeneratorWidget - - Length: - - - - Character Types - Character Types - - - Upper Case Letters - - - - A-Z - - - - Lower Case Letters - - - - a-z - - - - Numbers - - - - 0-9 - - - - Special Characters - - - - /*_& ... - - - - Exclude look-alike characters - Exclude look-alike characters - - - Ensure that the password contains characters from every group - Ensure that the password contains characters from every group - - - Extended ASCII - Extended ASCII + Cannot save the native messaging script file. @@ -2065,6 +2594,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Wrong key or database file is corrupt. + + missing database headers + missing database headers + + + Header doesn't match hash + Header doesn't match hash + + + Invalid header id size + Invalid header id size + + + Invalid header field length + Invalid header field length + + + Invalid header data length + Invalid header data length + Kdbx3Writer @@ -2081,7 +2630,7 @@ This may cause the affected plugins to malfunction. Kdbx4Reader missing database headers - + missing database headers Unable to calculate master key @@ -2089,11 +2638,11 @@ This may cause the affected plugins to malfunction. Invalid header checksum size - + Invalid header checksum size Header SHA256 mismatch - + Header SHA256 mismatch Wrong key or database file is corrupt. (HMAC mismatch) @@ -2105,7 +2654,7 @@ This may cause the affected plugins to malfunction. Invalid header id size - + Invalid header id size Invalid header field length @@ -2117,32 +2666,32 @@ This may cause the affected plugins to malfunction. Failed to open buffer for KDF parameters in header - + Failed to open buffer for KDF parameters in header Unsupported key derivation function (KDF) or invalid parameters - + Unsupported key derivation function (KDF) or invalid parameters Legacy header fields found in KDBX4 file. - + Legacy header fields found in KDBX4 file. Invalid inner header id size - + Invalid inner header id size Invalid inner header field length - + Invalid inner header field length Invalid inner header binary size - + Invalid inner header binary size Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - + Unsupported KeePass variant map version. Invalid variant map entry name length @@ -2152,64 +2701,64 @@ This may cause the affected plugins to malfunction. Invalid variant map entry name data Translation: variant map = data structure for storing meta data - + Invalid variant map entry name data Invalid variant map entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map entry value length Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - + Invalid variant map entry value data Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map Bool entry value length Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map Int32 entry value length Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map UInt32 entry value length Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map Int64 entry value length Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - + Invalid variant map UInt64 entry value length Invalid variant map entry type Translation: variant map = data structure for storing meta data - + Invalid variant map entry type Invalid variant map field type size Translation: variant map = data structure for storing meta data - + Invalid variant map field type size Kdbx4Writer Invalid symmetric cipher algorithm. - + Invalid symmetric cipher algorithm. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - + Invalid symmetric cipher IV size. Unable to calculate master key @@ -2218,54 +2767,50 @@ This may cause the affected plugins to malfunction. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - + Failed to serialize KDF parameters variant map KdbxReader - - Invalid cipher uuid length - - Unsupported cipher - + Unsupported cipher Invalid compression flags length - + Invalid compression flags length Unsupported compression algorithm - + Unsupported compression algorithm Invalid master seed size - + Invalid master seed size Invalid transform seed size - + Invalid transform seed size Invalid transform rounds size - + Invalid transform rounds size Invalid start bytes size - + Invalid start bytes size Invalid random stream id size - + Invalid random stream id size Invalid inner random stream cipher - + Invalid inner random stream cipher Not a KeePass database. - + Not a KeePass database. The selected file is an old KeePass 1 database (.kdb). @@ -2281,6 +2826,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + Invalid cipher uuid length: %1 (length=%2) + + + Unable to parse UUID: %1 + Unable to parse UUID: %1 + + + Failed to read database file. + Failed to read database file. + KdbxXmlReader @@ -2294,27 +2851,27 @@ This is a one-way migration. You won't be able to open the imported databas Missing icon uuid or data - + Missing icon uuid or data Missing custom data key or value - + Missing custom data key or value Multiple group elements - + Multiple group elements Null group uuid - + Null group uuid Invalid group icon number - + Invalid group icon number Invalid EnableAutoType value - + Invalid EnableAutoType value Invalid EnableSearching value @@ -2352,10 +2909,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid - - Unable to decrypt entry string - Unable to decrypt entry string - Duplicate custom attribute found Duplicate custom attribute found @@ -2386,11 +2939,11 @@ This is a one-way migration. You won't be able to open the imported databas Invalid color value - + Invalid colour value Invalid color rgb part - + Invalid colour rgb part Invalid number value @@ -2405,6 +2958,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2425,7 +2984,7 @@ This is a one-way migration. You won't be able to open the imported databas Not a KeePass database. - + Not a KeePass database. Unsupported encryption algorithm. @@ -2454,7 +3013,7 @@ This is a one-way migration. You won't be able to open the imported databas Invalid transform seed size - + Invalid transform seed size Invalid number of transform rounds @@ -2568,56 +3127,143 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type - - - KeePass2 - AES: 256-bit - - - - Twofish: 256-bit - - - - ChaCha20: 256-bit - - - - AES-KDF (KDBX 4) - - - - AES-KDF (KDBX 3.1) - - - - Argon2 (KDBX 4 – recommended) + unable to seek to content position - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Existing single-instance lock file is invalid. Launching new instance. - - - The lock file could not be created. Single-instance mode disabled. - The lock file could not be created. Single-instance mode disabled. - - - Another instance of KeePassXC is already running. - Another instance of KeePassXC is already running. - - - Fatal error while testing the cryptographic functions. - Fatal error while testing the cryptographic functions. - - - KeePassXC - Error + Disabled share + + Import from + + + + Export to + + + + Synchronize with + + + + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + Cancel + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Browse + + + Generate + Generate + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + Legacy key file format + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Key files + + + All files + All files + + + Create Key File... + + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Select a key file + MainWindow @@ -2629,10 +3275,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases &Recent databases - - Import - Import - &Help &Help @@ -2641,14 +3283,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries E&ntries - - Copy att&ribute to clipboard - Copy att&ribute to clipboard - - - Time-based one-time password - Time-based one-time password - &Groups &Groups @@ -2677,50 +3311,22 @@ This is a one-way migration. You won't be able to open the imported databas &Close database &Close database - - &New database - &New database - - - Merge from KeePassX database - - - - &Add new entry - &Add new entry - - - &View/Edit entry - - &Delete entry &Delete entry - - &Add new group - &Add new group - &Edit group &Edit group &Delete group - + &Delete group Sa&ve database as... Sa&ve database as... - - Change &master key... - Change &master key... - - - &Database settings - &Database settings - Database settings Database settings @@ -2729,10 +3335,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry &Clone entry - - &Find - &Find - Copy &username Copy &username @@ -2741,10 +3343,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard Copy username to clipboard - - Cop&y password - Cop&y password - Copy password to clipboard Copy password to clipboard @@ -2757,14 +3355,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator - - &Perform Auto-Type - - - - &Open URL - &Open URL - &Lock databases &Lock databases @@ -2797,22 +3387,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... &Export to CSV file... - - Import KeePass 1 database... - - - - Import CSV file... - Import CSV file... - - - Re&pair database... - Re&pair database... - - - Show TOTP - Show TOTP - Set up TOTP... Set up TOTP... @@ -2833,14 +3407,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 Access error for config file %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - - Settings Settings @@ -2853,26 +3419,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC Quit KeePassXC - - KeePass 2 Database - KeePass 2 Database - - - All files - All files - - - Open database - Open database - - - Save repaired database - Save repaired database - - - Writing the database failed. - Writing the database failed. - Please touch the button on your YubiKey! Please touch the button on your YubiKey! @@ -2883,6 +3429,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + Advanced Settings + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Encryption Settings + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2984,123 +3791,29 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Dialog + Enter password: + Enter password: - This is required for accessing your databases from ChromeIPass or PassIFox - This is required for accessing your databases from ChromeIPass or PassIFox - - - Enable KeePassHTTP server - Enable KeePassHTTP server - - - General - General - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Sh&ow a notification when credentials are requested - - - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - - - &Return only best matching entries - &Return only best matching entries - - - Re&quest to unlock the database if it is locked - Re&quest to unlock the database if it is locked - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + Confirm password: - &Match URL schemes - &Match URL schemes + Password + Password - Sort matching entries by &username - Sort matching entries by &username - - - Sort &matching entries by title - Sort &matching entries by title - - - R&emove all shared encryption keys from active database - R&emove all shared encryption keys from active database - - - Re&move all stored permissions from entries in active database - Re&move all stored permissions from entries in active database - - - Password Generator + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - Advanced - Advanced - - - Always allow &access to entries - Always allow &access to entries - - - Always allow &updating entries + Passwords do not match. - Only the selected database has to be connected with a client. - Only the selected database has to be connected with a client. - - - Searc&h in all opened databases for matching entries - Searc&h in all opened databases for matching entries - - - Automatically creating or updating string fields is not supported. - Automatically creating or updating string fields is not supported. - - - &Return advanced string fields which start with "KPH: " - &Return advanced string fields which start with "KPH: " - - - HTTP Port: - - - - Default port: 19455 - Default port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - - - - <b>Warning:</b> The following options can be dangerous! - <b>Warning:</b> The following options can be dangerous! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password @@ -3112,7 +3825,7 @@ Using default port 19455. Password: - + Password: strength @@ -3157,7 +3870,7 @@ Using default port 19455. Pick characters from every group - + Pick characters from every group &Length: @@ -3171,18 +3884,10 @@ Using default port 19455. Wordlist: - - Word Count: - - Word Separator: - - Generate - Generate - Copy Copy @@ -3195,10 +3900,6 @@ Using default port 19455. Close Close - - Apply - Apply - Entropy: %1 bit @@ -3227,6 +3928,171 @@ Using default port 19455. Password quality + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Advanced + + + Upper Case Letters A to F + + + + A-Z + + + + Lower Case Letters A to F + + + + a-z + + + + 0-9 + + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Delete + + + Move + + + + Empty + + + + Remove + Remove + + + Skip + + + + Disable + Disable + + + Merge + + QObject @@ -3246,34 +4112,18 @@ Using default port 19455. Cannot decrypt message Cannot decrypt message - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - Key change was not successful - Encryption key is not recognized Encryption key is not recognised - - No saved databases found - No saved databases found - Incorrect action @@ -3292,7 +4142,7 @@ Using default port 19455. Unknown error - + Unknown error Add a new entry to a database. @@ -3336,7 +4186,7 @@ Using default port 19455. Length for the generated password. - + Length for the generated password. length @@ -3399,10 +4249,6 @@ Using default port 19455. Insert password to unlock %1: - - Failed to load key file %1 : %2 - - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3481,11 +4327,6 @@ Available commands: error reading from device - - file empty ! - - - malformed string @@ -3520,11 +4361,7 @@ Available commands: Created - - - - Legacy Browser Integration - Legacy Browser Integration + Created Browser Integration @@ -3554,10 +4391,6 @@ Available commands: Word count for the diceware passphrase. Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3568,28 +4401,442 @@ Available commands: Generate a new random password. - Length of the generated password. - Length of the generated password. - - - Use lowercase characters in the generated password. - Use lowercase characters in the generated password. - - - Use uppercase characters in the generated password. + Invalid value for password length %1. - Use numbers in the generated password. - Use numbers in the generated password. + Could not create entry with path %1. + - Use special characters in the generated password. - Use special characters in the generated password. + Enter password for new entry: + - Use extended ASCII in the generated password. - Use extended ASCII in the generated password. + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + File %1 does not exist. + + + Unable to open file %1. + Unable to open file %1. + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Remove an entry from the database. + + + Path of the entry to remove. + Path of the entry to remove. + + + Existing single-instance lock file is invalid. Launching new instance. + Existing single-instance lock file is invalid. Launching new instance. + + + The lock file could not be created. Single-instance mode disabled. + The lock file could not be created. Single-instance mode disabled. + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + Another instance of KeePassXC is already running. + + + Fatal error while testing the cryptographic functions. + Fatal error while testing the cryptographic functions. + + + KeePassXC - Error + + + + Database password: + + + + Cannot create new group + @@ -3627,11 +4874,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - Search... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Search @@ -3640,313 +4973,332 @@ Available commands: Clear Clear - - Case Sensitive - - Limit search to selected group Limit search to selected group - - - Service - KeePassXC: New key association request - KeePassXC: New key association request - - - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Search Help - KeePassXC: Overwrite existing key? - KeePassXC: Overwrite existing key? + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Case sensitive + + + + + SettingsWidgetKeeShare + + Active + - KeePassXC: Update Entry - KeePassXC: Update Entry + Allow export + - Do you want to update the information in %1 - %2? - Do you want to update the information in %1 - %2? + Allow import + - KeePassXC: Database locked! - KeePassXC: Database locked! + Own certificate + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Fingerprint: + - KeePassXC: Removed keys from database - KeePassXC: Removed keys from database + Certificate: + + + + Signer + + + + Key: + + + + Generate + Generate + + + Import + Import + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Remove + + + Path + Path + + + Status + + + + Fingerprint + Fingerprint + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + All files + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + Never + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + + + + 000000 + + + + Copy + Copy - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) - - KeePassXC: No keys found - KeePassXC: No keys found - - - No shared encryption-keys found in KeePassHttp Settings. - - - - KeePassXC: Settings not available! - KeePassXC: Settings not available! - - - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - Removing stored permissions... - - - Abort - Abort - - - KeePassXC: Removed permissions - KeePassXC: Removed permissions - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC: No entry with permissions found! - - - The active database does not contain an entry with permissions. - The active database does not contain an entry with permissions. - - SettingsWidget + TotpExportSettingsDialog - Application Settings - Application Settings + Copy + Copy - General - General - - - Security - Security - - - Access error for config file %1 - Access error for config file %1 - - - - SettingsWidgetGeneral - - Basic Settings - Basic Settings - - - Start only a single instance of KeePassXC - Start only a single instance of KeePassXC - - - Remember last databases - Remember last databases - - - Remember last key files and security dongles + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - Load previous databases on startup - Load previous databases on startup - - - Automatically save on exit - Automatically save on exit - - - Automatically save after every change - Automatically save after every change - - - Automatically reload the database when modified externally - Automatically reload the database when modified externally - - - Minimize when copying to clipboard - Minimise when copying to clipboard - - - Minimize window at application startup - Minimise window at application startup - - - Use group icon on entry creation + There was an error creating the QR code. - Don't mark database as modified for non-data changes (e.g., expanding groups) - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - Hide the Details view - - - - Show a system tray icon - - - - Hide window to system tray when minimized - Hide window to system tray when minimised - - - Hide window to system tray instead of app exit - - - - Dark system tray icon - Dark system tray icon - - - Language - Language - - - Auto-Type - Auto-Type - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Global Auto-Type shortcut - - - - Auto-Type delay - - - - ms - Milliseconds - - - - Startup - Startup - - - File Management - File Management - - - Safely save database files (may be incompatible with Dropbox, etc) - Safely save database files (may be incompatible with Dropbox, etc) - - - Backup database file before saving - - - - Entry Management - - - - General - General - - - - SettingsWidgetSecurity - - Timeouts - - - - Clear clipboard after - - - - sec - Seconds - - - - Lock databases after inactivity of - - - - Convenience - - - - Lock databases when session is locked or lid is closed - Lock databases when session is locked or lid is closed - - - Lock databases after minimizing the window - Lock databases after minimising the window - - - Don't require password repeat when it is visible - Don't require password repeat when it is visible - - - Show passwords in cleartext by default - Show passwords in cleartext by default - - - Hide passwords in the preview panel - Hide passwords in the preview panel - - - Hide entry notes by default - Hide entry notes by default - - - Privacy - Privacy - - - Use Google as fallback for downloading website icons - Use Google as fallback for downloading website icons - - - Re-lock previously locked database after performing Auto-Type + Closing in %1 seconds. - SetupTotpDialog + TotpSetupDialog Setup TOTP @@ -3968,7 +5320,7 @@ Please unlock the selected database or choose another one which is unlocked.Use custom settings - Note: Change these settings only if you know what you are doing. + Custom Settings @@ -3976,7 +5328,12 @@ Please unlock the selected database or choose another one which is unlocked. - 8 digits + sec + Seconds + sec + + + Code size: @@ -3984,43 +5341,63 @@ Please unlock the selected database or choose another one which is unlocked. - Code size: + 7 digits - sec - Seconds + 8 digits - TotpDialog + UpdateCheckDialog - Timed Password + Checking for updates - 000000 + Checking for updates... - Copy - Copy + Close + Close - Expires in + Update Error! - seconds + An error occurred in retrieving update information. - - - UnlockDatabaseWidget - Unlock database - Unlock database + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4047,7 +5424,7 @@ Please unlock the selected database or choose another one which is unlocked. Recent databases - + Recent databases Welcome to KeePassXC %1 @@ -4055,41 +5432,25 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - Remove an entry from the database. + Refresh + Refresh - Path of the database. - Path of the database. - - - Path of the entry to remove. - Path of the entry to remove. - - - KeePassXC - cross-platform password manager + YubiKey Challenge-Response - filenames of the password databases to open (*.kdbx) + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - path to a custom config file + No YubiKey detected, please ensure it's plugged in. - key file of the database - - - - read password of the database from stdin - - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_en_US.ts b/share/translations/keepassx_en_US.ts index 97d1014f0..f443aefe6 100644 --- a/share/translations/keepassx_en_US.ts +++ b/share/translations/keepassx_en_US.ts @@ -37,36 +37,6 @@ Copy to clipboard Copy to clipboard - - Version %1 - - Version %1 - - - - Revision: %1 - Revision: %1 - - - Distribution: %1 - Distribution: %1 - - - Libraries: - Libraries: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - - - Enabled extensions: - Enabled extensions: - Project Maintainers: Project Maintainers: @@ -75,37 +45,6 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - - Build Type: %1 - - Build Type: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Confirm Access - - - Remember this decision - Remember this decision - - - Allow - Allow - - - Deny - Deny - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - AgentSettingsWidget @@ -113,6 +52,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) Enable SSH Agent (requires restart) + + Use OpenSSH for Windows instead of Pageant + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget + + Application Settings + Application Settings + + + General + General + + + Security + Security + + + Access error for config file %1 + Access error for config file %1 + + + Icon only + Icon only + + + Text only + Text only + + + Text beside icon + Text beside icon + + + Text under icon + Text under icon + + + Follow style + Follow style + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Basic Settings + + + Startup + Startup + + + Start only a single instance of KeePassXC + Start only a single instance of KeePassXC + + + Remember last databases + Remember last databases + + + Remember last key files and security dongles + Remember last key files and security dongles + + + Load previous databases on startup + Load previous databases on startup + + + Minimize window at application startup + Minimize window at application startup + + + File Management + File Management + + + Safely save database files (may be incompatible with Dropbox, etc) + Safely save database files (may be incompatible with Dropbox, etc) + + + Backup database file before saving + Backup database file before saving + + + Automatically save after every change + Automatically save after every change + + + Automatically save on exit + Automatically save on exit + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + Automatically reload the database when modified externally + Automatically reload the database when modified externally + + + Entry Management + Entry Management + + + Use group icon on entry creation + Use group icon on entry creation + + + Minimize when copying to clipboard + Minimize when copying to clipboard + + + Hide the entry preview panel + Hide the entry preview panel + + + General + General + + + Hide toolbar (icons) + Hide toolbar (icons) + + + Minimize instead of app exit + Minimize instead of app exit + + + Show a system tray icon + Show a system tray icon + + + Dark system tray icon + Dark system tray icon + + + Hide window to system tray when minimized + Hide window to system tray when minimized + + + Language + Language + + + Auto-Type + Auto-Type + + + Use entry title to match windows for global Auto-Type + Use entry title to match windows for global Auto-Type + + + Use entry URL to match windows for global Auto-Type + Use entry URL to match windows for global Auto-Type + + + Always ask before performing Auto-Type + Always ask before performing Auto-Type + + + Global Auto-Type shortcut + Global Auto-Type shortcut + + + Auto-Type typing delay + Auto-Type typing delay + + + ms + Milliseconds + ms + + + Auto-Type start delay + Auto-Type start delay + + + Check for updates at application startup + Check for updates at application startup + + + Include pre-releases when checking for updates + Include pre-releases when checking for updates + + + Movable toolbar + Movable toolbar + + + Button style + Button style + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Timeouts + + + Clear clipboard after + Clear clipboard after + + + sec + Seconds + sec + + + Lock databases after inactivity of + Lock databases after inactivity of + + + min + min + + + Forget TouchID after inactivity of + Forget TouchID after inactivity of + + + Convenience + Convenience + + + Lock databases when session is locked or lid is closed + Lock databases when session is locked or lid is closed + + + Forget TouchID when session is locked or lid is closed + Forget TouchID when session is locked or lid is closed + + + Lock databases after minimizing the window + Lock databases after minimizing the window + + + Re-lock previously locked database after performing Auto-Type + Re-lock previously locked database after performing Auto-Type + + + Don't require password repeat when it is visible + Don't require password repeat when it is visible + + + Don't hide passwords when editing them + Don't hide passwords when editing them + + + Don't use placeholder for empty password fields + Don't use placeholder for empty password fields + + + Hide passwords in the entry preview panel + Hide passwords in the entry preview panel + + + Hide entry notes by default + Hide entry notes by default + + + Privacy + Privacy + + + Use DuckDuckGo as fallback for downloading website icons + Use DuckDuckGo as fallback for downloading website icons + AutoType @@ -215,6 +425,27 @@ Please select whether you want to allow access. Please select whether you want to allow access. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Save Entry + + + Ok + Ok + + + Cancel + Cancel + + + You have multiple databases open. +Please select the correct database for saving credentials. + You have multiple databases open. +Please select the correct database for saving credentials. + + BrowserOptionDialog @@ -227,7 +458,7 @@ Please select whether you want to allow access. Enable KeepassXC browser integration - Enable KeePassXC browser integration + Enable KeepassXC browser integration General @@ -288,14 +519,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension Sort matching credentials by &username - - &Disconnect all browsers - &Disconnect all browsers - - - Forget all remembered &permissions - Forget all remembered &permissions - Advanced Advanced @@ -361,21 +584,42 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>Warning:</b> The following options can be dangerous! - - Executable Files (*.exe);;All Files (*.*) - Executable Files (*.exe);;All Files (*.*) - - - Executable Files (*) - Executable Files (*) - Select custom proxy location Select custom proxy location - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + Executable Files + Executable Files + + + All Files + All Files + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Do not ask permission for HTTP &Basic Auth + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + Please see special instructions for browser extension use below + Please see special instructions for browser extension use below + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 @@ -416,154 +660,59 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? Do you want to update the information in %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Database locked! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - KeePassXC: Settings not available! - KeePassXC: Settings not available! - - - The active database does not contain a settings entry. - The active database does not contain a settings entry. - - - KeePassXC: No keys found - KeePassXC: No keys found - - - No shared encryption keys found in KeePassXC Settings. - No shared encryption keys found in KeePassXC Settings. - - - KeePassXC: Removed keys from database - KeePassXC: Removed keys from database - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. - - - Removing stored permissions… - Removing stored permissions… - Abort Abort - KeePassXC: Removed permissions - KeePassXC: Removed permissions + Converting attributes to custom data… + Converting attributes to custom data… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. - Successfully removed permissions from %n entry(s). - Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. + Successfully moved %n keys to custom data. + Successfully moved %n keys to custom data.Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: No entry with permissions found! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! - The active database does not contain an entry with permissions. - The active database does not contain an entry with permissions. - - - - ChangeMasterKeyWidget - - Password - Password + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. - Enter password: - Enter password: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected - Repeat password: - Repeat password: + KeePassXC: Create a new group + KeePassXC: Create a new group - &Key file - &Key file + A request for creating a new group "%1" has been received. +Do you want to create this group? + + A request for creating a new group "%1" has been received. +Do you want to create this group? + - Browse - Browse - - - Create - Create - - - Cha&llenge Response - Cha&llenge Response - - - Refresh - Refresh - - - Key files - Key files - - - All files - All files - - - Create Key File... - Create Key File... - - - Unable to create Key File : - Unable to create Key File : - - - Select a key file - Select a key file - - - Empty password - Empty password - - - Do you really want to use an empty string as password? - Do you really want to use an empty string as password? - - - Different passwords supplied. - Different passwords supplied. - - - Failed to set %1 as the Key file: -%2 - Failed to set %1 as the Key file: -%2 - - - Legacy key file format - Legacy key file format - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - - - Changing master key failed: no YubiKey inserted. - Changing master key failed: no YubiKey inserted. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? @@ -643,14 +792,6 @@ Please consider generating a new key file. Not present in CSV file Not present in CSV file - - Empty fieldname - Empty fieldname - - - column - column - Imported from CSV file Imported from CSV file @@ -659,49 +800,90 @@ Please consider generating a new key file. Original data: Original data: - - Error(s) detected in CSV file ! - Error(s) detected in CSV file ! - - - more messages skipped] - more messages skipped] - Error Error + + Empty fieldname %1 + Empty fieldname %1 + + + column %1 + column %1 + + + Error(s) detected in CSV file! + Error(s) detected in CSV file! + + + [%n more message(s) skipped] + [%n more message(s) skipped][%n more message(s) skipped] + CSV import: writer has errors: - +%1 CSV import: writer has errors: - - - - - CsvImportWizard - - Error - Error - - - Unable to calculate master key - Unable to calculate master key +%1 CsvParserModel - - %n byte(s), - %n byte, %n bytes, - - - %n row(s), - %n row, %n rows, - %n column(s) - %n column%n columns + %n column(s)%n column(s) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte(s)%n byte(s) + + + %n row(s) + %n row(s)%n row(s) + + + + Database + + Root + Root group name + Root + + + File %1 does not exist. + File %1 does not exist. + + + Unable to open file %1. + Unable to open file %1. + + + Error while reading the database: %1 + Error while reading the database: %1 + + + Could not save, database has no file name. + Could not save, database has no file name. + + + File cannot be written as it is opened in read-only mode. + File cannot be written as it is opened in read-only mode. + + + Key not transformed. This is a bug, please report it to the developers! + Key not transformed. This is a bug, please report it to the developers! + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Unlock Database - KeePassXC @@ -730,14 +912,6 @@ Please consider generating a new key file. Challenge Response: Challenge Response: - - Unable to open the database. - Unable to open the database. - - - Can't open key file - Can't open key file - Legacy key file format Legacy key file format @@ -768,53 +942,254 @@ Please consider generating a new key file. Select key file Select key file - - - DatabaseRepairWidget - Repair database - Repair database + TouchID for quick unlock + TouchID for quick unlock - Error - Error + Unable to open the database: +%1 + Unable to open the database: +%1 - Can't open key file - Can't open key file - - - Unable to open the database. - Unable to open the database. - - - Database opened fine. Nothing to do. - Database opened fine. Nothing to do. - - - Success - Success - - - The database has been successfully repaired -You can now save it. - The database has been successfully repaired -You can now save it. - - - Unable to repair the database. - Unable to repair the database. + Can't open key file: +%1 + Can't open key file: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Passwords + + + + DatabaseSettingsDialog + + Advanced Settings + Advanced Settings + General General - Encryption - Encryption + Security + Security + + + Master Key + Master Key + + + Encryption Settings + Encryption Settings + + + Browser Integration + Browser Integration + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Browser settings + + + &Disconnect all browsers + &Disconnect all browsers + + + Forg&et all site-specific settings on entries + Forg&et all site-specific settings on entries + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + Stored keys + Stored keys + + + Remove + Remove + + + Delete the selected key? + Delete the selected key? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + Key + Key + + + Value + Value + + + Enable Browser Integration to access these settings. + Enable Browser Integration to access these settings. + + + Disconnect all browsers + Disconnect all browsers + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + KeePassXC: No keys found + KeePassXC: No keys found + + + No shared encryption keys found in KeePassXC settings. + No shared encryption keys found in KeePassXC settings. + + + KeePassXC: Removed keys from database + KeePassXC: Removed keys from database + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Successfully removed %n encryption key(s) from KeePassXC settings.Successfully removed %n encryption key(s) from KeePassXC settings. + + + Forget all site-specific settings on entries + Forget all site-specific settings on entries + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + Removing stored permissions… + Removing stored permissions… + + + Abort + Abort + + + KeePassXC: Removed permissions + KeePassXC: Removed permissions + + + Successfully removed permissions from %n entry(s). + Successfully removed permissions from %n entry(s).Successfully removed permissions from %n entry(s). + + + KeePassXC: No entry with permissions found! + KeePassXC: No entry with permissions found! + + + The active database does not contain an entry with permissions. + The active database does not contain an entry with permissions. + + + Move KeePassHTTP attributes to custom data + Move KeePassHTTP attributes to custom data + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Encryption Algorithm: + + + AES: 256 Bit (default) + AES: 256 Bit (default) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Key Derivation Function: + + + Transform rounds: + Transform rounds: + + + Benchmark 1-second delay + Benchmark 1-second delay + + + Memory Usage: + Memory Usage: + + + Parallelism: + Parallelism: + + + Decryption Time: + Decryption Time: + + + ?? s + ?? s + + + Change + Change + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Higher values offer more protection, but opening the database will take longer. + + + Database format: + Database format: + + + This is only important if you need to use your database with other programs. + This is only important if you need to use your database with other programs. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recommended) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + unchanged Number of rounds too high @@ -868,40 +1243,15 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) thread threads - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Encryption Algorithm: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 Bit (default) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Key Derivation Function: - - - Transform rounds: - Transform rounds: - - - Benchmark 1-second delay - Benchmark 1-second delay - - - Memory Usage: - Memory Usage: - - - Parallelism: - Parallelism: + + %1 s + seconds + %1 s%1 s @@ -952,12 +1302,85 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + Sharing + + Breadcrumb + Breadcrumb + + + Type + Type + + + Path + Path + + + Last Signer + Last Signer + + + Certificates + Certificates + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Add additional protection... + + + No encryption key added + No encryption key added + + + You must add at least one encryption key to secure your database! + You must add at least one encryption key to secure your database! + + + No password set + No password set + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + Unknown error + Unknown error + + + Failed to change master key + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Database Name: + + + Description: + Description: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 Database @@ -970,30 +1393,10 @@ If you keep this number, your database may be too easy to crack! Open database Open database - - File not found! - File not found! - - - Unable to open the database. - Unable to open the database. - - - File opened in read only mode. - File opened in read only mode. - - - Open CSV file - Open CSV file - CSV file CSV file - - All files (*) - All files (*) - Merge database Merge database @@ -1006,38 +1409,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 database - - Close? - Close? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" is in edit mode. -Discard changes and close anyway? - - - Save changes? - Save changes? - - - "%1" was modified. -Save changes? - "%1" was modified. -Save changes? - - - Writing the database failed. - Writing the database failed. - - - Passwords - Passwords - - - Save database as - Save database as - Export database to CSV file Export database to CSV file @@ -1047,40 +1418,41 @@ Save changes? Writing the CSV file failed. - New database - New database + Database creation error + Database creation error - locked - locked + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Lock database - Lock database + The database file does not exist or is not accessible. + The database file does not exist or is not accessible. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + Select CSV file + Select CSV file - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. + New Database + New Database - Disable safe saves? - Disable safe saves? + %1 [New Database] + Database tab name modifier + %1 [New Database] - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + %1 [Locked] + Database tab name modifier + %1 [Locked] + + + %1 [Read-only] + Database tab name modifier + %1 [Read-only] @@ -1089,41 +1461,17 @@ Disable safe saves and try again? Searching... Searching... - - Change master key - Change master key - - - Delete entry? - Delete entry? - Do you really want to delete the entry "%1" for good? Do you really want to delete the entry "%1" for good? - - Delete entries? - Delete entries? - - - Do you really want to delete %1 entries for good? - Do you really want to delete %1 entries for good? - - - Move entry to recycle bin? - Move entry to recycle bin? - Do you really want to move entry "%1" to the recycle bin? Do you really want to move entry "%1" to the recycle bin? - - Move entries to recycle bin? - Move entries to recycle bin? - Do you really want to move %n entry(s) to the recycle bin? - Do you really want to move %n entry(s) to the recycle bin?Do you really want to move %n entry(s) to the recycle bin? + Do you really want to move %n entry to the recycle bin?Do you really want to move %n entries to the recycle bin? Execute command? @@ -1137,18 +1485,10 @@ Disable safe saves and try again? Remember my choice Remember my choice - - Delete group? - Delete group? - Do you really want to delete the group "%1" for good? Do you really want to delete the group "%1" for good? - - Unable to calculate master key - Unable to calculate master key - No current database. No current database. @@ -1183,10 +1523,6 @@ Do you want to merge your changes? The database file has changed and you have unsaved changes. Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - Could not open the new database file while attempting to autoreload this database. - Empty recycle bin? Empty recycle bin? @@ -1195,88 +1531,111 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? Are you sure you want to permanently delete everything from your recycle bin? - - - DetailsWidget - - Generate TOTP Token - Generate TOTP Token + + Do you really want to delete %n entry(s) for good? + Do you really want to delete %n entry for good?Do you really want to delete %n entries for good? + + + Delete entry(s)? + Delete entry?Delete entries? + + + Move entry(s) to recycle bin? + Move entry to recycle bin?Move entries to recycle bin? - Close - Close + File opened in read only mode. + File opened in read only mode. - General - General + Lock Database? + Lock Database? - Password - Password + You are editing an entry. Discard changes and lock anyway? + You are editing an entry. Discard changes and lock anyway? - URL - URL + "%1" was modified. +Save changes? + "%1" was modified. +Save changes? - Expiration - Expiration + Database was modified. +Save changes? + Database was modified. +Save changes? - Username - Username + Save changes? + Save changes? - Autotype - Auto-Type + Could not open the new database file while attempting to autoreload. +Error: %1 + Could not open the new database file while attempting to autoreload. +Error: %1 - Searching - Searching + Disable safe saves? + Disable safe saves? - Attributes - Attributes + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? - Attachments - Attachments + Writing the database failed. +%1 + Writing the database failed. +%1 - Notes - Notes + Passwords + Passwords - Window - Window + Save database as + Save database as - Sequence - Sequence + KeePass 2 Database + KeePass 2 Database - Search - Search + Replace references to entry? + Replace references to entry? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Entry "%1" has %2 reference. Do you want to overwrite references with values, skip this entry, or delete anyway?Entry "%1" has %2 references. Do you want to overwrite references with values, skip this entry, or delete anyway? - Clear - Clear + Delete group + Delete group - Never - Never + Move group to recycle bin? + Move group to recycle bin? - [PROTECTED] - [PROTECTED] + Do you really want to move the group "%1" to the recycle bin? + Do you really want to move the group "%1" to the recycle bin? - Disabled - Disabled + Successfully merged the database files. + Successfully merged the database files. - Enabled - Enabled + Database was not modified by merge operation. + Database was not modified by merge operation. + + + Shared group... + Shared group... @@ -1349,37 +1708,21 @@ Do you want to merge your changes? New attribute New attribute - - Confirm Remove - Confirm Remove - Are you sure you want to remove this attribute? Are you sure you want to remove this attribute? - - [PROTECTED] - [PROTECTED] - - - Press reveal to view or edit - Press reveal to view or edit - Tomorrow Tomorrow %n week(s) - %n week(s)%n week(s) + %n week%n weeks %n month(s) - %n month(s)%n month(s) - - - 1 year - 1 year + %n month%n months Apply generated password? @@ -1393,6 +1736,26 @@ Do you want to merge your changes? Entry updated successfully. Entry updated successfully. + + Entry has unsaved changes + Entry has unsaved changes + + + New attribute %1 + New attribute %1 + + + [PROTECTED] Press reveal to view or edit + [PROTECTED] Press reveal to view or edit + + + %n year(s) + %n year%n years + + + Confirm Removal + Confirm Removal + EditEntryWidgetAdvanced @@ -1637,6 +2000,97 @@ Do you want to merge your changes? Inherit from parent group (%1) + + EditGroupWidgetKeeShare + + Form + Form + + + Type: + Type: + + + Path: + Path: + + + ... + ... + + + Password: + Password: + + + Inactive + Inactive + + + Import from path + Import from path + + + Export to path + Export to path + + + Synchronize with path + Synchronize with path + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Your KeePassXC version does not support sharing your container type. Please use %1. + + + Database sharing is disabled + Database sharing is disabled + + + Database export is disabled + Database export is disabled + + + Database import is disabled + Database import is disabled + + + KeeShare unsigned container + KeeShare unsigned container + + + KeeShare signed container + KeeShare signed container + + + Select import source + Select import source + + + Select export target + Select export target + + + Select import/export file + Select import/export file + + + Clear + Clear + + + The export container %1 is already referenced. + The export container %1 is already referenced. + + + The import container %1 is already imported. + The import container %1 is already imported. + + + The container %1 imported and export by different groups. + The container %1 imported and export by different groups. + + EditGroupWidgetMain @@ -1694,10 +2148,6 @@ Do you want to merge your changes? Unable to fetch favicon. Unable to fetch favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Hint: You can enable Google as a fallback under Tools>Settings>Security - Images Images @@ -1706,14 +2156,6 @@ Do you want to merge your changes? All files All files - - Select Image - Select Image - - - Can't read icon - Can't read icon - Custom icon already exists Custom icon already exists @@ -1723,8 +2165,36 @@ Do you want to merge your changes? Confirm Delete - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded + Custom icon successfully downloaded + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + Select Image(s) + Select Image(s) + + + Successfully loaded %1 of %n icon(s) + Successfully loaded %1 of %n iconSuccessfully loaded %1 of %n icons + + + No icons were loaded + No icons were loaded + + + %n icon(s) already exist in the database + %n icon already exist in the database%n icons already exist in the database + + + The following icon(s) failed: + The following icon failed:The following icons failed: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + This icon is used by %n entry, and will be replaced by the default icon. Are you sure you want to delete it?This icon is used by %n entries, and will be replaced by the default icon. Are you sure you want to delete it? @@ -1775,9 +2245,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Clone + %1 - Clone + %1 - Clone @@ -1819,11 +2288,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - Are you sure you want to remove %n attachments?Are you sure you want to remove %n attachments? - - - Confirm Remove - Confirm Remove + Are you sure you want to remove %n attachment?Are you sure you want to remove %n attachments? Save attachments @@ -1862,10 +2327,15 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + Confirm remove + + + Unable to open file(s): %1 - Unable to open files: -%1 + Unable to open file: +%1Unable to open files: +%1 @@ -1949,6 +2419,106 @@ This may cause the affected plugins to malfunction. Attachments Attachments + + Yes + Yes + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Generate TOTP Token + + + Close + Close + + + General + General + + + Username + Username + + + Password + Password + + + Expiration + Expiration + + + URL + URL + + + Attributes + Attributes + + + Attachments + Attachments + + + Notes + Notes + + + Autotype + Autotype + + + Window + Window + + + Sequence + Sequence + + + Searching + Searching + + + Search + Search + + + Clear + Clear + + + Never + Never + + + [PROTECTED] + [PROTECTED] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Enabled + + + Disabled + Disabled + + + Share + Share + EntryView @@ -1987,6 +2557,11 @@ This may cause the affected plugins to malfunction. Recycle Bin Recycle Bin + + [empty] + group has no children + [empty] + HostInstaller @@ -1999,61 +2574,6 @@ This may cause the affected plugins to malfunction. Cannot save the native messaging script file. - - HttpPasswordGeneratorWidget - - Length: - Length: - - - Character Types - Character Types - - - Upper Case Letters - Upper Case Letters - - - A-Z - A-Z - - - Lower Case Letters - Lower Case Letters - - - a-z - a-z - - - Numbers - Numbers - - - 0-9 - 0-9 - - - Special Characters - Special Characters - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Exclude look-alike characters - - - Ensure that the password contains characters from every group - Ensure that the password contains characters from every group - - - Extended ASCII - Extended ASCII - - KMessageWidget @@ -2079,6 +2599,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Wrong key or database file is corrupt. + + missing database headers + missing database headers + + + Header doesn't match hash + Header doesn't match hash + + + Invalid header id size + Invalid header id size + + + Invalid header field length + Invalid header field length + + + Invalid header data length + Invalid header data length + Kdbx3Writer @@ -2237,10 +2777,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - Invalid cipher UUID length - Unsupported cipher Unsupported cipher @@ -2295,6 +2831,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + Invalid cipher uuid length: %1 (length=%2) + + + Unable to parse UUID: %1 + Unable to parse UUID: %1 + + + Failed to read database file. + Failed to read database file. + KdbxXmlReader @@ -2308,7 +2856,7 @@ This is a one-way migration. You won't be able to open the imported databas Missing icon uuid or data - Missing icon UUID or data + Missing icon uuid or data Missing custom data key or value @@ -2320,7 +2868,7 @@ This is a one-way migration. You won't be able to open the imported databas Null group uuid - Null group UUID + Null group uuid Invalid group icon number @@ -2336,19 +2884,19 @@ This is a one-way migration. You won't be able to open the imported databas No group uuid found - No group UUID found + No group uuid found Null DeleteObject uuid - Null DeleteObject UUID + Null DeleteObject uuid Missing DeletedObject uuid or time - Missing DeletedObject UUID or time + Missing DeletedObject uuid or time Null entry uuid - Null entry UUID + Null entry uuid Invalid entry icon number @@ -2360,15 +2908,11 @@ This is a one-way migration. You won't be able to open the imported databas No entry uuid found - No entry UUID found + No entry uuid found History element with different uuid - History element with different UUID - - - Unable to decrypt entry string - Unable to decrypt entry string + History element with different uuid Duplicate custom attribute found @@ -2388,7 +2932,7 @@ This is a one-way migration. You won't be able to open the imported databas Auto-type association window or sequence missing - Auto-Type association window or sequence missing + Auto-type association window or sequence missing Invalid bool value @@ -2412,13 +2956,21 @@ This is a one-way migration. You won't be able to open the imported databas Invalid uuid value - Invalid UUID value + Invalid uuid value Unable to decompress binary Translator meant is a binary data inside an entry Unable to decompress binary + + XML error: +%1 +Line %2, column %3 + XML error: +%1 +Line %2, column %3 + KeePass1OpenWidget @@ -2582,55 +3134,146 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type Invalid entry field type - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – recommended) + unable to seek to content position + unable to seek to content position - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Existing single-instance lock file is invalid. Launching new instance. + Disabled share + Disabled share - The lock file could not be created. Single-instance mode disabled. - The lock file could not be created. Single-instance mode disabled. + Import from + Import from - Another instance of KeePassXC is already running. - Another instance of KeePassXC is already running. + Export to + Export to - Fatal error while testing the cryptographic functions. - Fatal error while testing the cryptographic functions. + Synchronize with + Synchronize with - KeePassXC - Error - KeePassXC - Error + Disabled share %1 + Disabled share %1 + + + Import from share %1 + Import from share %1 + + + Export to share %1 + Export to share %1 + + + Synchronize with share %1 + Synchronize with share %1 + + + + KeyComponentWidget + + Key Component + Key Component + + + Key Component Description + Key Component Description + + + Cancel + Cancel + + + Key Component set, click to change or remove + Key Component set, click to change or remove + + + Add %1 + Add a key component + Add %1 + + + Change %1 + Change a key component + Change %1 + + + Remove %1 + Remove a key component + Remove %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 set, click to change or remove + + + + KeyFileEditWidget + + Browse + Browse + + + Generate + Generate + + + Key File + Key File + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + Legacy key file format + Legacy key file format + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + Error loading the key file '%1' +Message: %2 + Error loading the key file '%1' +Message: %2 + + + Key files + Key files + + + All files + All files + + + Create Key File... + Create Key File... + + + Error creating key file + Error creating key file + + + Unable to create key file: %1 + Unable to create key file: %1 + + + Select a key file + Select a key file @@ -2643,10 +3286,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases &Recent databases - - Import - Import - &Help &Help @@ -2655,14 +3294,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries E&ntries - - Copy att&ribute to clipboard - Copy att&ribute to clipboard - - - Time-based one-time password - Time-based one-time password - &Groups &Groups @@ -2691,30 +3322,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database &Close database - - &New database - &New database - - - Merge from KeePassX database - Merge from KeePassXC database - - - &Add new entry - &Add new entry - - - &View/Edit entry - &View/Edit entry - &Delete entry &Delete entry - - &Add new group - &Add new group - &Edit group &Edit group @@ -2727,14 +3338,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... Sa&ve database as... - - Change &master key... - Change &master key... - - - &Database settings - &Database settings - Database settings Database settings @@ -2743,10 +3346,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry &Clone entry - - &Find - &Find - Copy &username Copy &username @@ -2755,10 +3354,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard Copy username to clipboard - - Cop&y password - Cop&y password - Copy password to clipboard Copy password to clipboard @@ -2771,14 +3366,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator Password Generator - - &Perform Auto-Type - &Perform Auto-Type - - - &Open URL - &Open URL - &Lock databases &Lock databases @@ -2811,22 +3398,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... &Export to CSV file... - - Import KeePass 1 database... - Import KeePass 1 database... - - - Import CSV file... - Import CSV file... - - - Re&pair database... - Re&pair database... - - - Show TOTP - Show TOTP - Set up TOTP... Set up TOTP... @@ -2847,14 +3418,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 Access error for config file %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - read-only - read-only - Settings Settings @@ -2867,26 +3430,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC Quit KeePassXC - - KeePass 2 Database - KeePass 2 Database - - - All files - All files - - - Open database - Open database - - - Save repaired database - Save repaired database - - - Writing the database failed. - Writing the database failed. - Please touch the button on your YubiKey! Please touch the button on your YubiKey! @@ -2899,6 +3442,269 @@ This version is not meant for production use. There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + &Donate + + + Report a &bug + Report a &bug + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + &Import + &Import + + + Copy att&ribute... + Copy att&ribute... + + + TOTP... + TOTP... + + + &New database... + &New database... + + + Create a new database + Create a new database + + + &Merge from database... + &Merge from database... + + + Merge from another KDBX database + Merge from another KDBX database + + + &New entry + &New entry + + + Add a new entry + Add a new entry + + + &Edit entry + &Edit entry + + + View or edit entry + View or edit entry + + + &New group + &New group + + + Add a new group + Add a new group + + + Change master &key... + Change master &key... + + + &Database settings... + &Database settings... + + + Copy &password + Copy &password + + + Perform &Auto-Type + Perform &Auto-Type + + + Open &URL + Open &URL + + + KeePass 1 database... + KeePass 1 database... + + + Import a KeePass 1 database + Import a KeePass 1 database + + + CSV file... + CSV file... + + + Import a CSV file + Import a CSV file + + + Show TOTP... + Show TOTP... + + + Show TOTP QR Code... + Show TOTP QR Code... + + + Check for Updates... + Check for Updates... + + + Share entry + Share entry + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + Check for updates on startup? + Check for updates on startup? + + + Would you like KeePassXC to check for updates on startup? + Would you like KeePassXC to check for updates on startup? + + + You can always check for updates manually from the application menu. + You can always check for updates manually from the application menu. + + + + Merger + + Creating missing %1 [%2] + Creating missing %1 [%2] + + + Relocating %1 [%2] + Relocating %1 [%2] + + + Overwriting %1 [%2] + Overwriting %1 [%2] + + + older entry merged from database "%1" + older entry merged from database "%1" + + + Adding backup for older target %1 [%2] + Adding backup for older target %1 [%2] + + + Adding backup for older source %1 [%2] + Adding backup for older source %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Reapplying older target entry on top of newer source %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Reapplying older source entry on top of newer target %1 [%2] + + + Synchronizing from newer source %1 [%2] + Synchronizing from newer source %1 [%2] + + + Synchronizing from older source %1 [%2] + Synchronizing from older source %1 [%2] + + + Deleting child %1 [%2] + Deleting child %1 [%2] + + + Deleting orphan %1 [%2] + Deleting orphan %1 [%2] + + + Changed deleted objects + Changed deleted objects + + + Adding missing icon %1 + Adding missing icon %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Create a new KeePassXC database... + + + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage + WizardPage + + + En&cryption Settings + En&cryption Settings + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + Advanced Settings + Advanced Settings + + + Simple Settings + Simple Settings + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Encryption Settings + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Database Master Key + + + A master key known only to you protects your database. + A master key known only to you protects your database. + + + + NewDatabaseWizardPageMetaData + + General Database Information + General Database Information + + + Please fill in the display name and an optional description for your new database: + Please fill in the display name and an optional description for your new database: + OpenSSHKey @@ -3000,125 +3806,30 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Dialog + Enter password: + Enter password: - This is required for accessing your databases from ChromeIPass or PassIFox - This is required for accessing your databases from ChromeIPass or PassIFox + Confirm password: + Confirm password: - Enable KeePassHTTP server - Enable KeePassHTTP server + Password + Password - General - General + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Sh&ow a notification when credentials are requested + Passwords do not match. + Passwords do not match. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - - - &Return only best matching entries - &Return only best matching entries - - - Re&quest to unlock the database if it is locked - Re&quest to unlock the database if it is locked - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - &Match URL schemes - &Match URL schemes - - - Sort matching entries by &username - Sort matching entries by &username - - - Sort &matching entries by title - Sort &matching entries by title - - - R&emove all shared encryption keys from active database - R&emove all shared encryption keys from active database - - - Re&move all stored permissions from entries in active database - Re&move all stored permissions from entries in active database - - - Password Generator - Password Generator - - - Advanced - Advanced - - - Always allow &access to entries - Always allow &access to entries - - - Always allow &updating entries - Always allow &updating entries - - - Only the selected database has to be connected with a client. - Only the selected database has to be connected with a client. - - - Searc&h in all opened databases for matching entries - Searc&h in all opened databases for matching entries - - - Automatically creating or updating string fields is not supported. - Automatically creating or updating string fields is not supported. - - - &Return advanced string fields which start with "KPH: " - &Return advanced string fields which start with "KPH: " - - - HTTP Port: - HTTP Port: - - - Default port: 19455 - Default port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC will listen to this port on 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Warning:</b> The following options can be dangerous! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - Cannot bind to privileged ports - Cannot bind to privileged ports - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password + Generate master password @@ -3188,18 +3899,10 @@ Using default port 19455. Wordlist: Wordlist: - - Word Count: - Word Count: - Word Separator: Word Separator: - - Generate - Generate - Copy Copy @@ -3212,10 +3915,6 @@ Using default port 19455. Close Close - - Apply - Apply - Entropy: %1 bit Entropy: %1 bit @@ -3244,6 +3943,171 @@ Using default port 19455. Password quality Excellent + + ExtendedASCII + ExtendedASCII + + + Switch to advanced mode + Switch to advanced mode + + + Advanced + Advanced + + + Upper Case Letters A to F + Upper Case Letters A to F + + + A-Z + A-Z + + + Lower Case Letters A to F + Lower Case Letters A to F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Braces + + + {[( + {[( + + + Punctuation + Punctuation + + + .,:; + .,:; + + + Quotes + Quotes + + + " ' + " ' + + + Math + Math + + + <*+!?= + <*+!?= + + + Dashes + Dashes + + + \_|-/ + \_|-/ + + + Logograms + Logograms + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Switch to simple mode + + + Simple + Simple + + + Character set to exclude from generated password + Character set to exclude from generated password + + + Do not include: + Do not include: + + + Add non-hex letters to "do not include" list + Add non-hex letters to "do not include" list + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Word Co&unt: + + + Regenerate + Regenerate + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Select + + + + QMessageBox + + Overwrite + Overwrite + + + Delete + Delete + + + Move + Move + + + Empty + Empty + + + Remove + Remove + + + Skip + Skip + + + Disable + Disable + + + Merge + Merge + QObject @@ -3263,34 +4127,18 @@ Using default port 19455. Cannot decrypt message Cannot decrypt message - - Timeout or cannot connect to KeePassXC - Timeout or cannot connect to KeePassXC - Action cancelled or denied Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - KeePassXC association failed, try again KeePassXC association failed, try again - - Key change was not successful - Key change was not successful - Encryption key is not recognized Encryption key is not recognized - - No saved databases found - No saved databases found - Incorrect action Incorrect action @@ -3416,10 +4264,6 @@ Using default port 19455. Insert password to unlock %1: Insert password to unlock %1: - - Failed to load key file %1 : %2 - Failed to load key file %1 : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3504,12 +4348,6 @@ Available commands: error reading from device error reading from device - - file empty ! - - file empty ! - - malformed string malformed string @@ -3546,10 +4384,6 @@ Available commands: Created Created - - Legacy Browser Integration - Legacy Browser Integration - Browser Integration Browser Integration @@ -3578,10 +4412,6 @@ Available commands: Word count for the diceware passphrase. Word count for the diceware passphrase. - - count - count - Wordlist for the diceware generator. [Default: EFF English] @@ -3593,28 +4423,445 @@ Available commands: Generate a new random password. - Length of the generated password. - Length of the generated password. + Invalid value for password length %1. + Invalid value for password length %1. - Use lowercase characters in the generated password. - Use lowercase characters in the generated password. + Could not create entry with path %1. + Could not create entry with path %1. - Use uppercase characters in the generated password. - Use uppercase characters in the generated password. + Enter password for new entry: + Enter password for new entry: - Use numbers in the generated password. - Use numbers in the generated password. + Writing the database failed %1. + Writing the database failed %1. - Use special characters in the generated password. - Use special characters in the generated password. + Successfully added entry %1. + Successfully added entry %1. - Use extended ASCII in the generated password. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + Copy the current TOTP to the clipboard. + + + Invalid timeout value %1. + Invalid timeout value %1. + + + Entry %1 not found. + Entry %1 not found. + + + Entry with path %1 has no TOTP set up. + Entry with path %1 has no TOTP set up. + + + Entry's current TOTP copied to the clipboard! + Entry's current TOTP copied to the clipboard! + + + Entry's password copied to the clipboard! + Entry's password copied to the clipboard! + + + Clearing the clipboard in %1 second(s)... + Clearing the clipboard in %1 second...Clearing the clipboard in %1 seconds... + + + Clipboard cleared! + Clipboard cleared! + + + Silence password prompt and other secondary outputs. + Silence password prompt and other secondary outputs. + + + count + CLI parameter + count + + + Invalid value for password length: %1 + Invalid value for password length: %1 + + + Could not find entry with path %1. + Could not find entry with path %1. + + + Not changing any field for entry %1. + Not changing any field for entry %1. + + + Enter new password for entry: + Enter new password for entry: + + + Writing the database failed: %1 + Writing the database failed: %1 + + + Successfully edited entry %1. + Successfully edited entry %1. + + + Length %1 + Length %1 + + + Entropy %1 + Entropy %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Multi-word extra bits %1 + + + Type: Bruteforce + Type: Bruteforce + + + Type: Dictionary + Type: Dictionary + + + Type: Dict+Leet + Type: Dict+Leet + + + Type: User Words + Type: User Words + + + Type: User+Leet + Type: User+Leet + + + Type: Repeated + Type: Repeated + + + Type: Sequence + Type: Sequence + + + Type: Spatial + Type: Spatial + + + Type: Date + Type: Date + + + Type: Bruteforce(Rep) + Type: Bruteforce(Rep) + + + Type: Dictionary(Rep) + Type: Dictionary(Rep) + + + Type: Dict+Leet(Rep) + Type: Dict+Leet(Rep) + + + Type: User Words(Rep) + Type: User Words(Rep) + + + Type: User+Leet(Rep) + Type: User+Leet(Rep) + + + Type: Repeated(Rep) + Type: Repeated(Rep) + + + Type: Sequence(Rep) + Type: Sequence(Rep) + + + Type: Spatial(Rep) + Type: Spatial(Rep) + + + Type: Date(Rep) + Type: Date(Rep) + + + Type: Unknown%1 + Type: Unknown%1 + + + Entropy %1 (%2) + Entropy %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Password length (%1) != sum of length of parts (%2) *** + + + Failed to load key file %1: %2 + Failed to load key file %1: %2 + + + File %1 does not exist. + File %1 does not exist. + + + Unable to open file %1. + Unable to open file %1. + + + Error while reading the database: +%1 + Error while reading the database: +%1 + + + Error while parsing the database: +%1 + Error while parsing the database: +%1 + + + Length of the generated password + Length of the generated password + + + Use lowercase characters + Use lowercase characters + + + Use uppercase characters + Use uppercase characters + + + Use numbers. + Use numbers. + + + Use special characters + Use special characters + + + Use extended ASCII + Use extended ASCII + + + Exclude character set + Exclude character set + + + chars + chars + + + Exclude similar looking characters + Exclude similar looking characters + + + Include characters from every selected group + Include characters from every selected group + + + Recursively list the elements of the group. + Recursively list the elements of the group. + + + Cannot find group %1. + Cannot find group %1. + + + Error reading merge file: +%1 + Error reading merge file: +%1 + + + Unable to save database to file : %1 + Unable to save database to file : %1 + + + Unable to save database to file: %1 + Unable to save database to file: %1 + + + Successfully recycled entry %1. + Successfully recycled entry %1. + + + Successfully deleted entry %1. + Successfully deleted entry %1. + + + Show the entry's current TOTP. + Show the entry's current TOTP. + + + ERROR: unknown attribute %1. + ERROR: unknown attribute %1. + + + No program defined for clipboard manipulation + No program defined for clipboard manipulation + + + Unable to start program %1 + Unable to start program %1 + + + file empty + file empty + + + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recommended) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Invalid Settings + + + Invalid Key + TOTP + Invalid Key + + + Message encryption failed. + Message encryption failed. + + + No groups found + No groups found + + + Create a new database. + Create a new database. + + + File %1 already exists. + File %1 already exists. + + + Loading the key file failed + Loading the key file failed + + + No key is set. Aborting database creation. + No key is set. Aborting database creation. + + + Failed to save the database: %1. + Failed to save the database: %1. + + + Successfully created new database. + Successfully created new database. + + + Insert password to encrypt database (Press enter to leave blank): + Insert password to encrypt database (Press enter to leave blank): + + + Creating KeyFile %1 failed: %2 + Creating KeyFile %1 failed: %2 + + + Loading KeyFile %1 failed: %2 + Loading KeyFile %1 failed: %2 + + + Remove an entry from the database. + Remove an entry from the database. + + + Path of the entry to remove. + Path of the entry to remove. + + + Existing single-instance lock file is invalid. Launching new instance. + Existing single-instance lock file is invalid. Launching new instance. + + + The lock file could not be created. Single-instance mode disabled. + The lock file could not be created. Single-instance mode disabled. + + + KeePassXC - cross-platform password manager + KeePassXC - cross-platform password manager + + + filenames of the password databases to open (*.kdbx) + filenames of the password databases to open (*.kdbx) + + + path to a custom config file + path to a custom config file + + + key file of the database + key file of the database + + + read password of the database from stdin + read password of the database from stdin + + + Parent window handle + Parent window handle + + + Another instance of KeePassXC is already running. + Another instance of KeePassXC is already running. + + + Fatal error while testing the cryptographic functions. + Fatal error while testing the cryptographic functions. + + + KeePassXC - Error + KeePassXC - Error + + + Database password: + Database password: + + + Cannot create new group + Cannot create new group @@ -3652,11 +4899,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - Search... + Agent connection failed. + Agent connection failed. + + Agent protocol error. + Agent protocol error. + + + No agent running, cannot add identity. + No agent running, cannot add identity. + + + No agent running, cannot remove identity. + No agent running, cannot remove identity. + + + Agent refused this identity. Possible reasons include: + Agent refused this identity. Possible reasons include: + + + The key has already been added. + The key has already been added. + + + Restricted lifetime is not supported by the agent (check options). + Restricted lifetime is not supported by the agent (check options). + + + A confirmation request is not supported by the agent (check options). + A confirmation request is not supported by the agent (check options). + + + + SearchHelpWidget + + Search Help + Search Help + + + Search terms are as follows: [modifiers][field:]["]term["] + Search terms are as follows: [modifiers][field:]["]term["] + + + Every search term must match (ie, logical AND) + Every search term must match (ie, logical AND) + + + Modifiers + Modifiers + + + exclude term from results + exclude term from results + + + match term exactly + match term exactly + + + use regex in term + use regex in term + + + Fields + Fields + + + Term Wildcards + Term Wildcards + + + match anything + match anything + + + match one + match one + + + logical OR + logical OR + + + Examples + Examples + + + + SearchWidget Search Search @@ -3665,315 +4998,332 @@ Available commands: Clear Clear - - Case Sensitive - Case Sensitive - Limit search to selected group Limit search to selected group + + Search Help + Search Help + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Search (%1)... + + + Case sensitive + Case sensitive + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: New key association request + Active + Active - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Allow export + Allow export - KeePassXC: Overwrite existing key? - KeePassXC: Overwrite existing key? + Allow import + Allow import - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Own certificate + Own certificate - KeePassXC: Update Entry - KeePassXC: Update Entry + Fingerprint: + Fingerprint: - Do you want to update the information in %1 - %2? - Do you want to update the information in %1 - %2? + Certificate: + Certificate: - KeePassXC: Database locked! - KeePassXC: Database locked! + Signer + Signer - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Key: + Key: - KeePassXC: Removed keys from database - KeePassXC: Removed keys from database + Generate + Generate + + + Import + Import + + + Export + Export + + + Imported certificates + Imported certificates + + + Trust + Trust + + + Ask + Ask + + + Untrust + Untrust + + + Remove + Remove + + + Path + Path + + + Status + Status + + + Fingerprint + Fingerprint + + + Certificate + Certificate + + + Trusted + Trusted + + + Untrusted + Untrusted + + + Unknown + Unknown + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + KeeShare key file + + + All files + All files + + + Select path + Select path + + + Exporting changed certificate + Exporting changed certificate + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + Signer: + Signer: + + + + ShareObserver + + Import from container without signature + Import from container without signature + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + Import from container with certificate + Import from container with certificate + + + Not this time + Not this time + + + Never + Never + + + Always + Always + + + Just this time + Just this time + + + Import from %1 failed (%2) + Import from %1 failed (%2) + + + Import from %1 successful (%2) + Import from %1 successful (%2) + + + Imported from %1 + Imported from %1 + + + Signed share container are not supported - import prevented + Signed share container are not supported - import prevented + + + File is not readable + File is not readable + + + Invalid sharing container + Invalid sharing container + + + Untrusted import prevented + Untrusted import prevented + + + Successful signed import + Successful signed import + + + Unexpected error + Unexpected error + + + Unsigned share container are not supported - import prevented + Unsigned share container are not supported - import prevented + + + Successful unsigned import + Successful unsigned import + + + File does not exist + File does not exist + + + Unknown share container type + Unknown share container type + + + Overwriting signed share container is not supported - export prevented + Overwriting signed share container is not supported - export prevented + + + Could not write export container (%1) + Could not write export container (%1) + + + Overwriting unsigned share container is not supported - export prevented + Overwriting unsigned share container is not supported - export prevented + + + Could not write export container + Could not write export container + + + Unexpected export error occurred + Unexpected export error occurred + + + Export to %1 failed (%2) + Export to %1 failed (%2) + + + Export to %1 successful (%2) + Export to %1 successful (%2) + + + Export to %1 + Export to %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Do you want to trust %1 with the fingerprint of %2 from %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + Multiple import source path to %1 in %2 + + + Conflicting export target path %1 in %2 + Conflicting export target path %1 in %2 + + + Could not embed signature: Could not open file to write (%1) + Could not embed signature: Could not open file to write (%1) + + + Could not embed signature: Could not write file (%1) + Could not embed signature: Could not write file (%1) + + + Could not embed database: Could not open file to write (%1) + Could not embed database: Could not open file to write (%1) + + + Could not embed database: Could not write file (%1) + Could not embed database: Could not write file (%1) + + + + TotpDialog + + Timed Password + Timed Password + + + 000000 + 000000 + + + Copy + Copy - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Successfully removed %n encryption key from KeePassHTTP Settings.Successfully removed %n encryption keys from KeePassHTTP Settings. - - - KeePassXC: No keys found - KeePassXC: No keys found - - - No shared encryption-keys found in KeePassHttp Settings. - No shared encryption-keys found in KeePassHttp Settings. - - - KeePassXC: Settings not available! - KeePassXC: Settings not available! - - - The active database does not contain an entry of KeePassHttp Settings. - The active database does not contain an entry of KeePassHttp Settings. - - - Removing stored permissions... - Removing stored permissions... - - - Abort - Abort - - - KeePassXC: Removed permissions - KeePassXC: Removed permissions - - - Successfully removed permissions from %n entries. - Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. - - - KeePassXC: No entry with permissions found! - KeePassXC: No entry with permissions found! - - - The active database does not contain an entry with permissions. - The active database does not contain an entry with permissions. + Expires in <b>%n</b> second(s) + Expires in <b>%n</b> secondExpires in <b>%n</b> seconds - SettingsWidget + TotpExportSettingsDialog - Application Settings - Application Settings + Copy + Copy - General - General + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + NOTE: These TOTP settings are custom and may not work with other authenticators. - Security - Security + There was an error creating the QR code. + There was an error creating the QR code. - Access error for config file %1 - Access error for config file %1 + Closing in %1 seconds. + Closing in %1 seconds. - SettingsWidgetGeneral - - Basic Settings - Basic Settings - - - Start only a single instance of KeePassXC - Start only a single instance of KeePassXC - - - Remember last databases - Remember last databases - - - Remember last key files and security dongles - Remember last key files and security dongles - - - Load previous databases on startup - Load previous databases on startup - - - Automatically save on exit - Automatically save on exit - - - Automatically save after every change - Automatically save after every change - - - Automatically reload the database when modified externally - Automatically reload the database when modified externally - - - Minimize when copying to clipboard - Minimize when copying to clipboard - - - Minimize window at application startup - Minimize window at application startup - - - Use group icon on entry creation - Use group icon on entry creation - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - Hide the Details view - Hide the Details view - - - Show a system tray icon - Show a system tray icon - - - Hide window to system tray when minimized - Hide window to system tray when minimized - - - Hide window to system tray instead of app exit - Hide window to system tray instead of app exit - - - Dark system tray icon - Dark system tray icon - - - Language - Language - - - Auto-Type - Auto-Type - - - Use entry title to match windows for global Auto-Type - Use entry title to match windows for global Auto-Type - - - Use entry URL to match windows for global Auto-Type - Use entry URL to match windows for global Auto-Type - - - Always ask before performing Auto-Type - Always ask before performing Auto-Type - - - Global Auto-Type shortcut - Global Auto-Type shortcut - - - Auto-Type delay - Auto-Type delay - - - ms - Milliseconds - ms - - - Startup - Startup - - - File Management - File Management - - - Safely save database files (may be incompatible with Dropbox, etc) - Safely save database files (may be incompatible with Dropbox, etc) - - - Backup database file before saving - Backup database file before saving - - - Entry Management - Entry Management - - - General - General - - - - SettingsWidgetSecurity - - Timeouts - Timeouts - - - Clear clipboard after - Clear clipboard after - - - sec - Seconds - sec - - - Lock databases after inactivity of - Lock databases after inactivity of - - - Convenience - Convenience - - - Lock databases when session is locked or lid is closed - Lock databases when session is locked or lid is closed - - - Lock databases after minimizing the window - Lock databases after minimizing the window - - - Don't require password repeat when it is visible - Don't require password repeat when it is visible - - - Show passwords in cleartext by default - Show passwords in cleartext by default - - - Hide passwords in the preview panel - Hide passwords in the preview panel - - - Hide entry notes by default - Hide entry notes by default - - - Privacy - Privacy - - - Use Google as fallback for downloading website icons - Use Google as fallback for downloading website icons - - - Re-lock previously locked database after performing Auto-Type - Re-lock previously locked database after performing Auto-Type - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Setup TOTP @@ -3995,59 +5345,84 @@ Please unlock the selected database or choose another one which is unlocked.Use custom settings - Note: Change these settings only if you know what you are doing. - Note: Change these settings only if you know what you are doing. + Custom Settings + Custom Settings Time step: Time step: - 8 digits - 8 digits - - - 6 digits - 6 digits + sec + Seconds + sec Code size: Code size: - sec - Seconds - sec + 6 digits + 6 digits + + + 7 digits + 7 digits + + + 8 digits + 8 digits - TotpDialog + UpdateCheckDialog - Timed Password - Timed Password + Checking for updates + Checking for updates - 000000 - 000000 + Checking for updates... + Checking for updates... - Copy - Copy + Close + Close - Expires in - Expires in + Update Error! + Update Error! - seconds - seconds + An error occurred in retrieving update information. + An error occurred in retrieving update information. - - - UnlockDatabaseWidget - Unlock database - Unlock database + Please try again later. + Please try again later. + + + Software Update + Software Update + + + A new version of KeePassXC is available! + A new version of KeePassXC is available! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 is now available — you have %2. + + + Download it at keepassxc.org + Download it at keepassxc.org + + + You're up-to-date! + You're up-to-date! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 is currently the newest version available @@ -4082,42 +5457,26 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - Remove an entry from the database. + Refresh + Refresh - Path of the database. - Path of the database. + YubiKey Challenge-Response + YubiKey Challenge-Response - Path of the entry to remove. - Path of the entry to remove. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - cross-platform password manager + No YubiKey detected, please ensure it's plugged in. + No YubiKey detected, please ensure it's plugged in. - filenames of the password databases to open (*.kdbx) - filenames of the password databases to open (*.kdbx) - - - path to a custom config file - path to a custom config file - - - key file of the database - key file of the database - - - read password of the database from stdin - read password of the database from stdin - - - Parent window handle - Parent window handle + No YubiKey inserted. + No YubiKey inserted. \ No newline at end of file diff --git a/share/translations/keepassx_es.ts b/share/translations/keepassx_es.ts index 092eada9f..99d394ff9 100644 --- a/share/translations/keepassx_es.ts +++ b/share/translations/keepassx_es.ts @@ -11,7 +11,7 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Reporte errores al: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Reporte errores en: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. @@ -27,7 +27,7 @@ Debug Info - Información de Depuración + Información de depuración Include the following information whenever you report a bug: @@ -37,74 +37,13 @@ Copy to clipboard Copiar al portapapeles - - Version %1 - - Versión %1 - - - - Revision: %1 - Revisión: %1 - - - Distribution: %1 - Distribución: %1 - - - Libraries: - Librerías: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operativo: %1 -Arquitectura de CPU: %2 -Núcleo: %3 %4 - - - Enabled extensions: - Extensiones habilitadas: - Project Maintainers: Mantenedores del proyecto: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Un agradecimiento especial del equipo de KeePassXC a debfx por crear el KeePassX original. - - - Build Type: %1 - - Tipo de compilación: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - Confirmar acceso para KeePassXC HTTP - - - Remember this decision - Recordar esta decisión - - - Allow - Permitir - - - Deny - Denegar - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 ha solicitado acceso a las contraseñas de los siguientes item(s). -Por favor seleccione si desea autorizar su acceso. + El equipo de KeePassXC quiere agradecer de manera especial el trabajo de debfx por la creación de KeePassX. @@ -113,6 +52,277 @@ Por favor seleccione si desea autorizar su acceso. Enable SSH Agent (requires restart) Habilitar el Agente SSH (requiere reinicio) + + Use OpenSSH for Windows instead of Pageant + Usar OpenSSH para Windows en lugar de Pageant + + + + ApplicationSettingsWidget + + Application Settings + Configuración de la aplicación + + + General + General + + + Security + Seguridad + + + Access error for config file %1 + Error de acceso al archivo de configuración %1 + + + Icon only + Solo icono + + + Text only + Solo texto + + + Text beside icon + Texto al lado del icono + + + Text under icon + Texto debajo del icono + + + Follow style + Seguir estilo + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Configuraciones Básicas + + + Startup + Inicio + + + Start only a single instance of KeePassXC + Inicie solo una instancia de KeePassXC + + + Remember last databases + Recordar última base de datos + + + Remember last key files and security dongles + Recordar los últimos archivos de llaves y el dongle de seguridad + + + Load previous databases on startup + Abrir base de datos anterior al inicio + + + Minimize window at application startup + Minimizar la ventana al iniciar + + + File Management + Administración de archivos + + + Safely save database files (may be incompatible with Dropbox, etc) + Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera) + + + Backup database file before saving + Hacer una copia de seguridad de la base de datos antes de guardar + + + Automatically save after every change + Guardar automáticamente después de cada cambio + + + Automatically save on exit + Guardar automáticamente al salir + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + No marcar la base de datos como modificada cuando los cambios no afecten a los datos (ej. expandir grupos) + + + Automatically reload the database when modified externally + Recargar automáticamente la base de datos cuando sea modificada externamente + + + Entry Management + Gestión de entrada + + + Use group icon on entry creation + Usar icono del grupo en la creación de entrada + + + Minimize when copying to clipboard + Minimizar al copiar al portapapeles + + + Hide the entry preview panel + Ocultar entrada del panel de vista previa + + + General + General + + + Hide toolbar (icons) + Ocultar barra de herramientas (iconos) + + + Minimize instead of app exit + Minimizar en lugar de cerrar la aplicación + + + Show a system tray icon + Mostrar icono en la bandeja de del sistema + + + Dark system tray icon + Icono de bandeja del sistema oscuro + + + Hide window to system tray when minimized + Ocultar la ventana a la bandeja del sistema cuando se minimiza + + + Language + Idioma + + + Auto-Type + Auto-Escritura + + + Use entry title to match windows for global Auto-Type + Use título de entrada para acertar ventanas en Auto-Tipeado global. + + + Use entry URL to match windows for global Auto-Type + Use URL para acertar ventanas en Auto-Tipedo global + + + Always ask before performing Auto-Type + Siempre preguntar antes de hacer Auto-Escritura + + + Global Auto-Type shortcut + Atajo global de Auto-Escritura + + + Auto-Type typing delay + Escribiendo retardo de la Auto-Escritura + + + ms + Milliseconds + Micro segundo + + + Auto-Type start delay + Iniciar retardo de Auto-Escritura + + + Check for updates at application startup + Buscar actualizaciones al inicio de la aplicación. + + + Include pre-releases when checking for updates + Incluir pre-lanzamientos al verificar actualizaciones + + + Movable toolbar + Barra de herramientas móvil + + + Button style + Estilo del botón + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Intervalos + + + Clear clipboard after + Limpiar el portapapeles después de + + + sec + Seconds + segundos + + + Lock databases after inactivity of + Bloquear base de datos tras un periodo de inactividad de + + + min + min + + + Forget TouchID after inactivity of + Olvidar TouchID después de una inactividad de + + + Convenience + Conveniencia + + + Lock databases when session is locked or lid is closed + Bloquear base de datos cuando la sesión está bloqueada o la pantalla esté cerrada + + + Forget TouchID when session is locked or lid is closed + Olvidar TouchID cuando la sesión está bloqueada o la tapa esté cerrada + + + Lock databases after minimizing the window + Bloquear base de datos al minimizar la ventana + + + Re-lock previously locked database after performing Auto-Type + Volver a bloquear la base de datos tras realizar una Auto-Escritura + + + Don't require password repeat when it is visible + No pedir repetición de la contraseña cuando está visible + + + Don't hide passwords when editing them + No ocultar las contraseñas durante la edición de ellas + + + Don't use placeholder for empty password fields + No utilice marcador de posición para los campos de contraseña vacíos + + + Hide passwords in the entry preview panel + Ocultar contraseñas en entrada del panel de vista previa + + + Hide entry notes by default + Ocultar notas de entrada por defecto + + + Privacy + Privacidad + + + Use DuckDuckGo as fallback for downloading website icons + Utilice DuckDuckGo como alternativa para descargar iconos de sitios web + AutoType @@ -130,19 +340,19 @@ Por favor seleccione si desea autorizar su acceso. The Syntax of your Auto-Type statement is incorrect! - ¡La sintaxis de la declaración de tu auto-escritura es incorrecta! + ¡La sintaxis de la declaración de su auto-escritura es incorrecta! This Auto-Type command contains a very long delay. Do you really want to proceed? - Este comando de Auto-Escritura contiene un retraso muy largo. ¿De verdad quieres continuar? + Este comando de Auto-Escritura contiene un retraso muy largo. ¿Realmente desea continuar? This Auto-Type command contains very slow key presses. Do you really want to proceed? - Este comando de Auto-Escritura contiene pulsaciones de teclas muy lentas. ¿De verdad quieres continuar? + Este comando de Auto-Escritura contiene pulsaciones de teclas muy lentas. ¿Realmente desea continuar? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - Este comando de Auto-Escritura contiene argumentos que se repiten muy a menudo. ¿De verdad quieres continuar? + Este comando de Auto-Escritura contiene argumentos que se repiten muy a menudo. ¿Realmente desea continuar? @@ -215,6 +425,27 @@ Please select whether you want to allow access. Por favor seleccione si desea autorizar su acceso. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Guardar Entrada + + + Ok + Listo + + + Cancel + Cancelar + + + You have multiple databases open. +Please select the correct database for saving credentials. + Tienes múltiples bases de datos abiertas. +Por favor, seleccione la base de datos correcta para guardar las credenciales. + + BrowserOptionDialog @@ -288,14 +519,6 @@ Por favor seleccione si desea autorizar su acceso. Credentials mean login data requested via browser extension Ordenar las credenciales por &usuario - - &Disconnect all browsers - &Desconectar todos los navegadores - - - Forget all remembered &permissions - Olvidar todos las &permisos recordados - Advanced Avanzado @@ -333,7 +556,7 @@ Por favor seleccione si desea autorizar su acceso. Update &native messaging manifest files at startup - Actualizar &native mensajes al inicear + Actualizar &native mensajes al iniciar Support a proxy application between KeePassXC and browser extension. @@ -361,21 +584,42 @@ Por favor seleccione si desea autorizar su acceso. <b>Warning:</b> The following options can be dangerous! <b>Advertencia:</b> Las siguientes opciones pueden ser peligrosas. - - Executable Files (*.exe);;All Files (*.*) - Archivos ejecutables (*.exe); Todos los archivos (*. *) - - - Executable Files (*) - Archivos ejecutables (*) - Select custom proxy location Elegir una ubicación de proxy personalizada - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Lo sentimos, pero KeePassXC-Browser no está soportado en las versiones Snap por el momento. + &Tor Browser + Navegador &Tor + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Advertencia</b>, no se encontró la aplicación keepassxc-proxy!<br />Verifique el directorio de instalación de KeePassXC o confirme la ruta personalizada en las opciones avanzadas.<br />La integración del navegador NO FUNCIONARÁ sin la aplicación proxy..<br />Ruta esperada: + + + Executable Files + Archivos ejecutables + + + All Files + Todos los archivos + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + No pedir permiso para Autenticación HTTP &Básica + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -391,9 +635,9 @@ If you would like to allow it access to your KeePassXC database, give it a unique name to identify and accept it. ¿Quiere asociar la base de datos al navegador? -Si quiere autirizar el acceso a la base de datos de KeePassXC -de un nombre único para identificar la autorización -(se guarda como una entrada más) +Si quiere autorizar el acceso a la base de datos de KeePassXC, +proporcione un nombre único para identificar la autorización +y acepte. Save and allow access @@ -417,154 +661,55 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? ¿Desea actualizar la información en %1 - %2? - - KeePassXC: Database locked! - KeePassXC: ¡Base de datos bloqueada! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - ¡La base de datos activa está bloqueada! -Por favor desbloquee la base de datos seleccionada o elija otra que esté desbloqueada. - - - KeePassXC: Settings not available! - KeePassXC: ¡Configuraciones no disponibles! - - - The active database does not contain a settings entry. - La base de datos activa no contiene una entrada de configuraciones. - - - KeePassXC: No keys found - KeePassXC: No se encontró ninguna clave - - - No shared encryption keys found in KeePassXC Settings. - No se encontraron claves de cifrado en las configuraciones de KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: Las claves se eliminaron de la base de datos - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Quitado con éxito %n llaves de cifrado de configuración KeePassXC.Quitado con éxito %n llaves de cifrado de configuración KeePassXC. - - - Removing stored permissions… - Eliminando permisos almacenados... - Abort Abortar - KeePassXC: Removed permissions - KeePassXC: Permisos eliminados + Converting attributes to custom data… + Convirtiendo atributos a datos personalizados ... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: atributos de KeePassHTTP convertidos + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Atributos exitosamente convertidos desde %1 entrada (s). +Movió %2 claves a datos personalizados. - Successfully removed permissions from %n entry(s). - Con éxito quitar permisos de %n ello.Removidos con éxito permisos de %n entrada(s). + Successfully moved %n keys to custom data. + %n llave(s) movida(s) a datos propios exitosamente.%n llave(s) movida(s) a datos propios exitosamente. - KeePassXC: No entry with permissions found! - KeePassXC: ¡No se encontró ninguna entrada con permisos! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: ¡No se encontró entrada con los atributos KeePassHTTP! - The active database does not contain an entry with permissions. - La base de datos activa no contiene una entrada con permisos. - - - - ChangeMasterKeyWidget - - Password - Contraseña + The active database does not contain an entry with KeePassHTTP attributes. + La base de datos activa no contiene una entrada con atributos de KeePassHTTP. - Enter password: - Ingrese la contraseña + KeePassXC: Legacy browser integration settings detected + KeePassXC: detectada configuración de integración del navegador heredada - Repeat password: - Repita la contraseña: + KeePassXC: Create a new group + - &Key file - &Archivo llave + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Abrir archivo - - - Create - Crear - - - Cha&llenge Response - Desa&fío/Respuesta - - - Refresh - Actualizar - - - Key files - Archivos llave - - - All files - Todos los archivos - - - Create Key File... - Crear un Archivo Llave .... - - - Unable to create Key File : - No se puede crear el Archivo Llave: - - - Select a key file - Seleccione un archivo llave - - - Empty password - Contraseña vacía - - - Do you really want to use an empty string as password? - ¿Realmente desea usar una cadena vacía como contraseña? - - - Different passwords supplied. - Las contraseñas ingresadas son distintas. - - - Failed to set %1 as the Key file: -%2 - No se pudo establecer %1 como el Archivo llave: -%2 - - - Legacy key file format - Formato de archivo llave heredado - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Está utilizando un formato de archivo llave heredado que puede convertirse - en no soportado en el futuro. - -Considere generar un nuevo archivo llave. - - - Changing master key failed: no YubiKey inserted. - Falla en el cambio de la clave maestra: no se insertó una llave Yubikey. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -579,7 +724,7 @@ Considere generar un nuevo archivo llave. Replace username and password with references - Reemplaza nombre de usuario y contraseña con referencias + Reemplace nombre de usuario y contraseña con referencias Copy history @@ -610,7 +755,7 @@ Considere generar un nuevo archivo llave. Text is qualified by - Los textos están rodeado por + Los textos están rodeados por Fields are separated by @@ -626,7 +771,7 @@ Considere generar un nuevo archivo llave. Number of headers line to discard - Cantidad de líneas a descartar del encabezado + Cantidad de líneas a descartar de la cabecera Consider '\' an escape character @@ -644,14 +789,6 @@ Considere generar un nuevo archivo llave. Not present in CSV file No presente en el archivo CSV - - Empty fieldname - Nombre de campo vacío - - - column - columna - Imported from CSV file Importado de un archivo CSV @@ -660,49 +797,90 @@ Considere generar un nuevo archivo llave. Original data: Dato original: - - Error(s) detected in CSV file ! - ¡Error(es) detectado(s) en el archivo CSV! - - - more messages skipped] - más mensajes salteados] - Error Error + + Empty fieldname %1 + Nombre de campo vacío %1 + + + column %1 + columna %1 + + + Error(s) detected in CSV file! + ¡Error(es) detectado(s) en el archivo CSV! + + + [%n more message(s) skipped] + [%n más mensaje(s) omitidos][%n más mensaje(s) omitidos] + CSV import: writer has errors: - - La importación CSV: la escritura tiene errores: - - - - - CsvImportWizard - - Error - Error - - - Unable to calculate master key - No se puede calcular la clave maestra +%1 + Importación CSV: la escritura tiene errores: +% 1 CsvParserModel - - %n byte(s), - %n byte(s), %n byte(s), - - - %n row(s), - filas de %n, %n fila(s), - %n column(s) - %n columnas%n columna(s) + %n columna(s)%n columna(s) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte(s)%n byte(s) + + + %n row(s) + %n fila(s)%n fila(s) + + + + Database + + Root + Root group name + Raíz + + + File %1 does not exist. + El archivo %1 no existe. + + + Unable to open file %1. + Incapaz de abrir el archivo %1. + + + Error while reading the database: %1 + Error al leer la base de datos: %1 + + + Could not save, database has no file name. + No se pudo guardar, la base de datos no tiene nombre de archivo. + + + File cannot be written as it is opened in read-only mode. + El archivo no se puede escribir, ya que se ha abierto en modo de solo lectura. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Desbloquear Base de Datos - KeePassXC @@ -731,14 +909,6 @@ Considere generar un nuevo archivo llave. Challenge Response: Desafío/respuesta: - - Unable to open the database. - Incapaz de abrir la base de datos. - - - Can't open key file - No se puede abrir el archivo llave - Legacy key file format Formato de archivo llave heredado @@ -769,53 +939,254 @@ Considere generar un nuevo archivo llave. Select key file Seleccionar archivo llave - - - DatabaseRepairWidget - Repair database - Reparar base de datos + TouchID for quick unlock + TouchID para desbloquear rápidamente - Error - Error + Unable to open the database: +%1 + Incapaz de abrir la base de datos: +%1 - Can't open key file - No se puede abrir el archivo llave - - - Unable to open the database. - No se pudo abrir la base de datos. - - - Database opened fine. Nothing to do. - Base de datos abierta correctamente. Nada que hacer. - - - Success - Éxito - - - The database has been successfully repaired -You can now save it. - La base de datos ha sido reparada correctamente -Ahora puede guardarla. - - - Unable to repair the database. - No se pudo reparar la base de datos. + Can't open key file: +%1 + No se puede abrir el archivo llave: +% 1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Contraseñas + + + + DatabaseSettingsDialog + + Advanced Settings + Configuraciones avanzadas + General General - Encryption - Cifrado + Security + Seguridad + + + Master Key + Clave Maestra + + + Encryption Settings + Configuraciones de Cifrado + + + Browser Integration + Integración con Navegadores + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Configuraciones del KeePassXC-Browser + + + &Disconnect all browsers + &Desconectar todos los navegadores + + + Forg&et all site-specific settings on entries + Olvíd&e todas las configuraciones específicas del sitio en las entradas + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Mueva los atributos de KeePassHTTP a los datos &personalizados de KeePassXC-Browser + + + Stored keys + Claves almacenadas + + + Remove + Eliminar + + + Delete the selected key? + ¿Eliminar la clave seleccionada? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + ¿Realmente quieres borrar la clave seleccionada? +Esto puede impedir la conexión con el complemento del navegador. + + + Key + Clave + + + Value + Valor + + + Enable Browser Integration to access these settings. + Habilitar la integración del navegador para acceder a esta configuración. + + + Disconnect all browsers + Desconectar todos los navegadores + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + ¿Realmente quieres desconectar todos los navegadores? +Esto puede impedir la conexión con el complemento del navegador. + + + KeePassXC: No keys found + KeePassXC: No se encontró ninguna clave + + + No shared encryption keys found in KeePassXC settings. + No se encontraron claves de cifrado compartidas en la configuración de KeePassXC. + + + KeePassXC: Removed keys from database + KeePassXC: Las claves se eliminaron de la base de datos + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Quitada(s) exitosamente %n llaves de cifrado de la configuración KeePassXC.Quitada(s) exitosamente %n llaves de cifrado de la configuración KeePassXC. + + + Forget all site-specific settings on entries + Olvíde todas las configuraciones específicas del sitio en las entradas + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + ¿Realmente quieres olvidar todas las configuraciones específicas del sitio en cada entrada? +Los permisos para acceder a las entradas serán revocados. + + + Removing stored permissions… + Eliminando permisos almacenados... + + + Abort + Abortar + + + KeePassXC: Removed permissions + KeePassXC: Permisos eliminados + + + Successfully removed permissions from %n entry(s). + Removidos con éxito permisos de %n entrada(s).Removidos con éxito permisos de %n entrada(s). + + + KeePassXC: No entry with permissions found! + KeePassXC: ¡No se encontró ninguna entrada con permisos! + + + The active database does not contain an entry with permissions. + La base de datos activa no contiene una entrada con permisos. + + + Move KeePassHTTP attributes to custom data + Mover los atributos KeePassHTTP a datos personalizados + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + ¿Realmente desea mover todos los datos de integración del navegador heredado al último estándar? +Esto es necesario para mantener la compatibilidad con el complemento del navegador. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algoritmo de cifrado: + + + AES: 256 Bit (default) + AES: 256-Bit (por defecto) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Función de derivación de la llave: + + + Transform rounds: + Rondas de transformación: + + + Benchmark 1-second delay + Medición de retraso de un segundo + + + Memory Usage: + Memoria utilizada: + + + Parallelism: + Paralelismo: + + + Decryption Time: + Tiempo de Descifrado: + + + ?? s + ?? s + + + Change + Cambiar + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Los valores más altos ofrecen más protección, pero la apertura de la base de datos llevará más tiempo. + + + Database format: + Formato de base de datos: + + + This is only important if you need to use your database with other programs. + Esto solo es importante si necesita usar su base de datos con otros programas. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recomendado) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + sin cambios Number of rounds too high @@ -867,42 +1238,17 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!< thread(s) Threads for parallel execution (KDF settings) - o de los hiloshilo(s) + hilo(s)hilo(s) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algoritmo de cifrado: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256-Bit (por defecto) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Función de derivación de la llave: - - - Transform rounds: - Rondas de transformación: - - - Benchmark 1-second delay - Medición de retraso de un segundo - - - Memory Usage: - Memoria utilizada: - - - Parallelism: - Paralelismo: + + %1 s + seconds + %1 s%1 s @@ -953,15 +1299,88 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!< - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Raíz + Sharing + Compartir + + Breadcrumb + Pista + + + Type + Tipo + + + Path + Ruta + + + Last Signer + Último firmante + + + Certificates + Certificados + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Añadir protección adicional... + + + No encryption key added + No se añadió clave de cifrado + + + You must add at least one encryption key to secure your database! + ¡Debe agregar al menos una clave de cifrado para proteger su base de datos! + + + No password set + Sin contraseña establecida + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + ¡ADVERTENCIA! No has establecido una contraseña. Se desaconseja el uso de una base de datos sin contraseña. + +¿Seguro que quieres continuar sin contraseña? + + + Unknown error + Error desconocido + + + Failed to change master key + Error al cambiar la clave maestra + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nombre de la base de datos: + + + Description: + Descripción: + + + + DatabaseTabWidget KeePass 2 Database - Base de datos KeePass 2 + Base de datos de KeePass 2 All files @@ -971,30 +1390,10 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!< Open database Abrir base de datos - - File not found! - ¡Archivo no encontrado! - - - Unable to open the database. - No se pudo abrir la base de datos. - - - File opened in read only mode. - Archivo abierto en modo sólo lectura. - - - Open CSV file - Abrir archivo CSV - CSV file Archivo CSV - - All files (*) - Todos los archivos (*) - Merge database Unir base de datos @@ -1007,38 +1406,6 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!< KeePass 1 database Base de datos KeePass 1 - - Close? - ¿Cerrar? - - - "%1" is in edit mode. -Discard changes and close anyway? - "% 1" está en el modo de edición. -¿Descartar cambios y cerrar de todos modos? - - - Save changes? - ¿Guardar cambios? - - - "%1" was modified. -Save changes? - "%1" ha sido modificado. -¿Guardar cambios? - - - Writing the database failed. - La escritura de la base de datos falló. - - - Passwords - Contraseñas - - - Save database as - Guardar base de datos como - Export database to CSV file Exportar base de datos a un archivo CSV @@ -1048,40 +1415,41 @@ Save changes? La escritura del archivo CSV falló. - New database - Nueva base de datos + Database creation error + Error en creación de la base de datos - locked - bloqueado + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + La base de datos creada no tiene clave o KDF, negándose a guardarla. +Esto es definitivamente un error, por favor repórtelo a los desarrolladores. - Lock database - Bloquear base de datos + The database file does not exist or is not accessible. + El archivo de base de datos no existe o no es accesible. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - No se puede bloquear la base de datos porque actualmente está editándola. -Por favor, pulse cancelar para terminar sus cambios o descartarlos. + Select CSV file + Seleccionar archivo CSV - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Esta base de datos ha sido modificada. -¿Desea guardar la base de datos antes de bloquearla? -De lo contrario se perderán los cambios. + New Database + Nueva Base de datos - Disable safe saves? - ¿Inhabilitar guardado seguro? + %1 [New Database] + Database tab name modifier + %1 [Nueva Base de Datos] - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC no ha podido guardar varias veces la base de datos. Es probable que esto se deba a que los servicios de sincronización de archivos mantienen un bloqueo en el archivo guardado. -¿Deshabilite las copias seguras y vuelva a intentarlo? + %1 [Locked] + Database tab name modifier + %1 [Bloqueada] + + + %1 [Read-only] + Database tab name modifier + %1 [Sólo lectura] @@ -1090,41 +1458,17 @@ Disable safe saves and try again? Searching... Buscando... - - Change master key - Cambiar la clave maestra - - - Delete entry? - ¿Eliminar la entrada? - Do you really want to delete the entry "%1" for good? ¿Realmente quiere eliminar la entrada "%1" de forma definitiva? - - Delete entries? - ¿Eliminar entradas? - - - Do you really want to delete %1 entries for good? - ¿Realmente quiere eliminar las entradas "%1" de forma definitiva? - - - Move entry to recycle bin? - ¿Mover entrada a la papelera de reciclaje? - Do you really want to move entry "%1" to the recycle bin? ¿Realmente quiere mover la entrada "%1" a la papelera de reciclaje? - - Move entries to recycle bin? - ¿Mover entradas a la papelera de reciclaje? - Do you really want to move %n entry(s) to the recycle bin? - ¿Realmente quiere mover la entrada "%1" a la papelera de reciclaje?¿Realmente quiere mover las entradas "%1" a la papelera de reciclaje? + ¿Estás seguro de mover %n entrada(s) a la papelera de reciclaje?¿Realmente desea mover %n entrada(s) a la papelera de reciclaje? Execute command? @@ -1138,18 +1482,10 @@ Disable safe saves and try again? Remember my choice Recordar mi elección - - Delete group? - ¿Eliminar grupo? - Do you really want to delete the group "%1" for good? ¿Realmente quiere eliminar el grupo "%1" de forma definitiva? - - Unable to calculate master key - No se puede calcular la llave maestra - No current database. No hay una base de datos actualmente. @@ -1183,10 +1519,6 @@ Disable safe saves and try again? Do you want to merge your changes? El archivo de la base de datos ha cambiado y usted tiene modificaciones sin guardar. ¿Desea unir sus modificaciones? - - Could not open the new database file while attempting to autoreload this database. - No se pudo abrir el nuevo archivo de la base de datos mientras se intentaba recargar la base de datos actual. - Empty recycle bin? ¿Vaciar papelera de reciclaje? @@ -1195,88 +1527,111 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? ¿Está seguro que quiere eliminar permanentemente todo de su papelera de reciclaje? - - - DetailsWidget - - Generate TOTP Token - Generar Token TOTP + + Do you really want to delete %n entry(s) for good? + ¿Realmente quiere eliminar %n entrada(s) de forma definitiva?¿Realmente quiere eliminar %n entrada(s) de forma definitiva? + + + Delete entry(s)? + ¿Borrar entrada(s)?¿Borrar entrada(s)? + + + Move entry(s) to recycle bin? + ¿Mover entrada(s) a la papelera de reciclaje?¿Mover entrada(s) a la papelera de reciclaje? - Close - Cerrar + File opened in read only mode. + Archivo abierto en modo sólo lectura. - General - General + Lock Database? + ¿Bloquear la Base de datos? - Password - Contraseña + You are editing an entry. Discard changes and lock anyway? + Estás editando una entrada. ¿Descartar los cambios y bloquear todos modos? - URL - URL + "%1" was modified. +Save changes? + "%1" ha sido modificado. +¿Guardar cambios? - Expiration - Vencimiento + Database was modified. +Save changes? + Se modificó la base de datos. +¿Guardar cambios? - Username - Nombre de usuario: + Save changes? + ¿Guardar cambios? - Autotype - Autoescritura + Could not open the new database file while attempting to autoreload. +Error: %1 + No se pudo abrir el nuevo archivo de base de datos al intentar cargar automáticamente. +Error: %1 - Searching - Buscando... + Disable safe saves? + ¿Deshabilitar guardados seguros? - Attributes - Atributos + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC no ha podido guardar la base de datos varias veces. Esto es probablemente causado por los servicios de sincronización de archivos manteniendo un bloqueo en el archivo. +¿Desactivar la guarda segura y volver a intentarlo? - Attachments - Adjuntos + Writing the database failed. +%1 + Fallo al escribir en la base de datos. +%1 - Notes - Notas + Passwords + Contraseñas - Window - Ventana + Save database as + Guardar base de datos como - Sequence - Secuencia + KeePass 2 Database + Base de datos de KeePass 2 - Search - Buscar + Replace references to entry? + ¿Reemplazar las referencias a la entrada? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + La(s) entrada(s) "%1" tiene(n) %2 referencia(s). ¿Desea sobrescribir la(s) referencia(s) con los valor(es), saltarse esta entrada o borrarla de todos modos?La(s) entrada(s) "%1" tiene(n) %2 referencia(s). ¿Desea sobrescribir la(s) referencia(s) con los valor(es), saltarse esta entrada o borrarla de todos modos? - Clear - Limpiar + Delete group + Eliminar grupo - Never - Nunca + Move group to recycle bin? + ¿Mover grupo a la papelera de reciclaje? - [PROTECTED] - [PROTEGIDO] + Do you really want to move the group "%1" to the recycle bin? + ¿Realmente desea mover el grupo "%1" a la papelera de reciclaje? - Disabled - Deshabilitado + Successfully merged the database files. + Unido correctamente los archivos de base de datos. - Enabled - Habilitado + Database was not modified by merge operation. + La base de datos no fue modificada por la operación de unir + + + Shared group... + @@ -1349,49 +1704,53 @@ Do you want to merge your changes? New attribute Nuevo atributo - - Confirm Remove - Confirmar eliminación - Are you sure you want to remove this attribute? ¿Está seguro que desea eliminar este atributo? - - [PROTECTED] - [PROTEGIDO] - - - Press reveal to view or edit - Presione revelar para ver o editar - Tomorrow Mañana %n week(s) - %n semana%n semana(s) + %n semana(s)%n semana(s) %n month(s) - %n mes%n mes(es) - - - 1 year - 1 año + %n mes(es)%n mes(es) Apply generated password? - ¿Aplicar la contraseña generada? + ¿Aplicar contraseña generada? Do you want to apply the generated password to this entry? - ¿Desea aplicar la contraseña generada a esta entrada? + ¿Desea aplicar la contraseña generada en esta entrada? Entry updated successfully. - Entrada actualizada con éxito. + Entrada actualizada. + + + Entry has unsaved changes + La entrada tiene cambios sin guardar + + + New attribute %1 + Nuevo atributo %1 + + + [PROTECTED] Press reveal to view or edit + [PROTEGIDO] Presione revelar para ver o editar + + + %n year(s) + %n año(s)%n año(s) + + + Confirm Removal + Confirmar la Eliminación @@ -1426,11 +1785,11 @@ Do you want to merge your changes? Foreground Color: - Color de Primer Plano: + Color de primer plano: Background Color: - Color de Segundo Plano: + Color de fondo: @@ -1465,7 +1824,7 @@ Do you want to merge your changes? Use a specific sequence for this association: - Usa una secuencia específica para esta asociación: + Utilizar una secuencia específica para esta asociación: @@ -1534,7 +1893,7 @@ Do you want to merge your changes? Remove key from agent after - Eliminar después la clave del agente + Retirar la llave del agente después seconds @@ -1637,6 +1996,97 @@ Do you want to merge your changes? Heredar del grupo padre (%1) + + EditGroupWidgetKeeShare + + Form + Forma + + + Type: + Tipo: + + + Path: + Ruta: + + + ... + ... + + + Password: + Contraseña: + + + Inactive + Inactivo + + + Import from path + Importar desde ruta + + + Export to path + Exportar a ruta + + + Synchronize with path + Sincronizar con ruta + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Su versión de KeePassXC no admite compartir su tipo de contenedor. Por favor use %1. + + + Database sharing is disabled + Compartir la base de datos está deshabilitado + + + Database export is disabled + La exportación de la base de datos está deshabilitada + + + Database import is disabled + La importación de la base de datos está deshabilitada + + + KeeShare unsigned container + Contenedor KeeShare sin firma + + + KeeShare signed container + Contenedor KeeShare firmado + + + Select import source + Seleccione el origen de la importación + + + Select export target + Seleccionar el destino de la exportación + + + Select import/export file + Seleccione el archivo de importación/exportación + + + Clear + Limpiar + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1694,10 +2144,6 @@ Do you want to merge your changes? Unable to fetch favicon. No se pudo descargar el favicon - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Consejo: Puede activar Google como una alternativa en Herramientas > Configuración > Seguridad - Images Imágenes @@ -1706,14 +2152,6 @@ Do you want to merge your changes? All files Todos los archivos - - Select Image - Seleccionar imagen - - - Can't read icon - No se puede leer el ícono - Custom icon already exists El icono personalizado ya existe @@ -1723,8 +2161,36 @@ Do you want to merge your changes? Confirmar Eliminación - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Este ícono se utiliza en %1 entradas, y será modificado por el ícono por defecto. ¿Está seguro que desea eliminarlo? + Custom icon successfully downloaded + Icono personalizado descargado exitosamente + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Sugerencia: puede habilitar DuckDuckGo como una alternativa en Herramientas> Configuración> Seguridad + + + Select Image(s) + Seleccionar imagen(es) + + + Successfully loaded %1 of %n icon(s) + Cargado(s) %1 de %n ícono(s) exitosamenteCargado(s) %1 de %n ícono(s) exitosamente + + + No icons were loaded + No se cargaron los iconos + + + %n icon(s) already exist in the database + El/Los ícono(s) %n ya existe(n) en la base de datosEl/Los ícono(s) %n ya existe(n) en la base de datos + + + The following icon(s) failed: + El/Los siguiente(s) ícono(s) fallaron:El/Los siguiente(s) ícono(s) fallaron: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Este ícono es usado en %1 entrada(s), y será remplazado por el ícono por defecto. ¿Está seguro que desea eliminarlo?Este ícono es usado en %1 entrada(s), y será remplazado por el ícono por defecto. ¿Está seguro que desea eliminarlo? @@ -1755,7 +2221,7 @@ Do you want to merge your changes? Delete plugin data? - Eliminar los datos del complemento? + ¿Eliminar los datos del complemento? Do you really want to delete the selected plugin data? @@ -1775,9 +2241,8 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Entry - - Clone - Suffix added to cloned entries - - Clon + %1 - Clone + %1 - Clonar @@ -1819,11 +2284,7 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Are you sure you want to remove %n attachment(s)? - ¿Está seguro que desea eliminar %n adjunto(s)?¿Está seguro que desea eliminar %n adjunto(s)? - - - Confirm Remove - Confirmar eliminación + ¿Confirma que desea quitar %n dato(s) adjunto(s)?¿Confirme que desea remover %n dato(s) adjunto(s)? Save attachments @@ -1837,7 +2298,7 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Are you sure you want to overwrite the existing file "%1" with the attachment? - ¿Seguro que quieres sobrescribir el archivo existente "%1" con el archivo adjunto? + ¿Está seguro que quiere sobrescribir el archivo existente "%1" con el archivo adjunto? Confirm overwrite @@ -1858,13 +2319,19 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Unable to open attachments: %1 - No se pueden abrir los datos adjuntos:%1 + No se pueden abrir los datos adjuntos: +%1 - Unable to open files: + Confirm remove + Confirmar eliminación + + + Unable to open file(s): %1 - No se pueden abrir los archivos: -%1 + No se puede(n) abrir el/los archivo(s): +%1No se puede(n) abrir el/los archivo(s): +%1 @@ -1886,7 +2353,7 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Username - Nombre de usuario + Nombre de usuario: URL @@ -1948,6 +2415,106 @@ Esto puede causar un mal funcionamiento de los complementos afectados.Attachments Adjuntos + + Yes + Si + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Generar Token TOTP + + + Close + Cerrar + + + General + General + + + Username + Nombre de usuario: + + + Password + Contraseña + + + Expiration + Vencimiento + + + URL + URL + + + Attributes + Atributos + + + Attachments + Adjuntos + + + Notes + Notas + + + Autotype + Autoescritura + + + Window + Ventana + + + Sequence + Secuencia + + + Searching + Buscando... + + + Search + Buscar + + + Clear + Limpiar + + + Never + Nunca + + + [PROTECTED] + [PROTEGIDO] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Habilitado + + + Disabled + Deshabilitado + + + Share + Compartir + EntryView @@ -1986,6 +2553,11 @@ Esto puede causar un mal funcionamiento de los complementos afectados.Recycle Bin Papelera de reciclaje + + [empty] + group has no children + [vacío] + HostInstaller @@ -1998,61 +2570,6 @@ Esto puede causar un mal funcionamiento de los complementos afectados.No se puede guardar el archivo de script de mensajería nativo. - - HttpPasswordGeneratorWidget - - Length: - Longitud: - - - Character Types - Tipos de caracteres - - - Upper Case Letters - Letras mayúsculas - - - A-Z - A-Z - - - Lower Case Letters - Letras minúsculas - - - a-z - a-z - - - Numbers - Números - - - 0-9 - 0-9 - - - Special Characters - Caracteres especiales - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Excluir caracteres similares - - - Ensure that the password contains characters from every group - Asegurar que la contraseña contiene caracteres de todos los grupos - - - Extended ASCII - ASCII Extendido - - KMessageWidget @@ -2078,6 +2595,26 @@ Esto puede causar un mal funcionamiento de los complementos afectados.Wrong key or database file is corrupt. La contraseña es incorrecta o el archivo de la base de datos está dañado. + + missing database headers + faltan las cabeceras de la base de datos + + + Header doesn't match hash + La cabecera no coincide con el hash + + + Invalid header id size + Tamaño id de la cabecera inválido + + + Invalid header field length + Longitud del campo en la cabecera inválido + + + Invalid header data length + Longitud del campo de datos en la cabecera incorrecto + Kdbx3Writer @@ -2185,32 +2722,32 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - Largo inválido en valor de entrada Int32 de mapeo de variante + Largo inválido en valor de entrada Int32 de mapa variante Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Largo inválido en valor de entrada UInt32 de mapeo de variante + Largo inválido en valor de entrada UInt32 de mapa variante Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Largo inválido en valor de entrada Int64 de mapeo de variante + Largo inválido en valor de entrada Int64 de mapa variante Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Largo inválido en valor de entrada UInt64 de mapeo de variante + Largo inválido en valor de entrada UInt64 de mapa variante Invalid variant map entry type Translation: variant map = data structure for storing meta data - Tipo de entrada inválida de mapeo devariante + Entrada inválida de mapa variante Invalid variant map field type size Translation: variant map = data structure for storing meta data - Mapei de variante inválido en campo de tipo tamaño + Tamaño inválido de mapa variante @@ -2236,17 +2773,13 @@ Esto puede causar un mal funcionamiento de los complementos afectados. KdbxReader - - Invalid cipher uuid length - Largo uuid de cifrado inválido - Unsupported cipher Cifrado no compatible Invalid compression flags length - Largo de banderas de compresión inválido + Tamaño de flags de compresión inválido Unsupported compression algorithm @@ -2292,7 +2825,19 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Unsupported KeePass 2 database version. - Version de la base de datos de KeePass 2 no soportada. + Versión de la base de datos de KeePass 2 no soportada. + + + Invalid cipher uuid length: %1 (length=%2) + Longitud de uuid de cifrado no válida: %1 (longitud =%2) + + + Unable to parse UUID: %1 + No se puede analizar UUID: %1 + + + Failed to read database file. + Error al leer el archivo de base de datos. @@ -2307,7 +2852,7 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Missing icon uuid or data - Datos o uuid del ícono faltantes + Falta icono uuid o datos Missing custom data key or value @@ -2351,11 +2896,11 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Invalid entry icon number - Número de ícono de entrada inválido + Número de icono de entrada no válida History element in history entry - Elemento de la historia en la entrada de la historia + Elemento del historial en la entrada del historial No entry uuid found @@ -2365,17 +2910,13 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada History element with different uuid Elemento del historial con uuid diferente - - Unable to decrypt entry string - No se puede descifrar la cadena de entrada - Duplicate custom attribute found Atributo personalizado duplicado encontrado Entry string key or value missing - Falta clave de entrada o valor + Falta clave de entrada de texto o valor Duplicate attachment found @@ -2418,6 +2959,14 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Translator meant is a binary data inside an entry No se puede descomprimir binario + + XML error: +%1 +Line %2, column %3 + Error XML: +%1 +Linea %2, columna %3 + KeePass1OpenWidget @@ -2427,7 +2976,7 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Unable to open the database. - Incapaz de abrir la base de datos. + No se pudo abrir la base de datos. @@ -2579,57 +3128,148 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Invalid entry field type - Tipo del campo de entrada inválido + Tipo de la entrada para el campo inválido + + + unable to seek to content position + incapaz de buscar la posición de contenido - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + Compartir deshabilitado - Twofish: 256-bit - Twofish: 256-bit + Import from + Importar desde - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + Exportar a - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Sincronizar con - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – recomendado) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - El archivo de bloqueo de instancia única existente no es válido. Lanzando nueva instancia. + Key Component + Componente de la Clave - The lock file could not be created. Single-instance mode disabled. - El archivo de bloqueo no pudo ser creado. Modo de instancia única deshabilitado. + Key Component Description + Descripción del componente de la Clave - Another instance of KeePassXC is already running. - Otra instancia de KeePassXC ya se está ejecutando. + Cancel + Cancelar - Fatal error while testing the cryptographic functions. - Error fatal comprobando las funciones criptográficas. + Key Component set, click to change or remove + Conjunto de componentes de la Clave, haga clic para cambiar o eliminar - KeePassXC - Error - KeePassXC - Error + Add %1 + Add a key component + Añadir %1 + + + Change %1 + Change a key component + Cambiar %1 + + + Remove %1 + Remove a key component + Eliminar %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 conjunto, haga clic para cambiar o eliminar + + + + KeyFileEditWidget + + Browse + Navegar + + + Generate + Generar + + + Key File + Fichero de claves + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Puede agregar un fichero de claves que contiene bytes aleatorios para seguridad adicional.</p><p>¡Debes mantenerlo en secreto y nunca perderlo o te bloquearán!</p> + + + Legacy key file format + Formato de archivo llave heredado + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Está utilizando un formato de fichero de claves heredado que puede convertirse +sin soporte en el futuro. + +Vaya a la configuración de la clave maestra y genere un nuevo fichero de claves. + + + Error loading the key file '%1' +Message: %2 + Error al cargar el fichero de claves '%1' +Mensaje: %2 + + + Key files + Archivos llave + + + All files + Todos los archivos + + + Create Key File... + Crear un Archivo Llave .... + + + Error creating key file + Error al crear el fichero de claves + + + Unable to create key file: %1 + No se puede crear el fichero de claves: %1 + + + Select a key file + Seleccione un archivo llave @@ -2642,10 +3282,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada &Recent databases Bases de datos &recientes - - Import - Importar - &Help &Ayuda @@ -2654,14 +3290,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada E&ntries E&ntradas - - Copy att&ribute to clipboard - Copiar at&ributo al portapapeles - - - Time-based one-time password - Contraseña temporal de un solo uso - &Groups &Grupos @@ -2690,30 +3318,10 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada &Close database &Cerrar base de datos - - &New database - &Nueva base de datos - - - Merge from KeePassX database - Unir base de datos KeePassX - - - &Add new entry - &Añadir nueva entrada - - - &View/Edit entry - &Ver/Editar entrada - &Delete entry &Eliminar entrada - - &Add new group - &Añadir nuevo grupo - &Edit group &Editar grupo @@ -2726,14 +3334,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Sa&ve database as... &Guardar base de datos como... - - Change &master key... - Cambiar la clave &maestra... - - - &Database settings - Configuración de la base de &datos - Database settings Configuración de la base de datos @@ -2742,10 +3342,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada &Clone entry &Clonar entrada - - &Find - &Buscar - Copy &username Copiar nombre de &usuario @@ -2754,10 +3350,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Copy username to clipboard Copiar nombre de usuario al portapapeles - - Cop&y password - Cop&iar contraseña - Copy password to clipboard Copiar contraseña al portapapeles @@ -2770,14 +3362,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Password Generator Generador de contraseñas - - &Perform Auto-Type - Realizar Auto-&Escritura - - - &Open URL - A&brir URL - &Lock databases &Bloquear las bases de datos @@ -2810,22 +3394,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada &Export to CSV file... &Exportar a un archivo CSV... - - Import KeePass 1 database... - Importat base de datos KeePass 1... - - - Import CSV file... - Importar archivo CSV... - - - Re&pair database... - &Reparar base de datos... - - - Show TOTP - Mostrar TOTP - Set up TOTP... Configurar TOTP... @@ -2846,14 +3414,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Access error for config file %1 Error de acceso al archivo de configuración %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Parece que utiliza KeePassHTTP para la integración del navegador. Esta característica ha quedado obsoleto y desaparecerá en el futuro. <br>Por favor, ¡pasa a KeePassXC-Browser en lugar de esto! Para obtener ayuda con la migración, visite nuestra <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">Guía de migración</a> (advertencia %1 de 3).</p> - - - read-only - sólo lectura - Settings Configuración @@ -2866,26 +3426,6 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Quit KeePassXC Salir de KeePassXC - - KeePass 2 Database - Base de datos de KeePass 2 - - - All files - Todos los archivos - - - Open database - Abrir base de datos - - - Save repaired database - Guardar base de datos reparada - - - Writing the database failed. - Fallo al escribir la base de datos. - Please touch the button on your YubiKey! Por favor presione el botón en su YubiKey! @@ -2898,12 +3438,275 @@ This version is not meant for production use. Hay un alto riesgo de corrupción, mantenga una copia de seguridad de sus bases de datos. Esta versión no es para uso de producción. + + &Donate + &Donar + + + Report a &bug + Reportar un &error + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + ADVERTENCIA: ¡Su versión de Qt puede hacer que KeePassXC se bloquee con un teclado virtual! +Le recomendamos que utilice la AppImage disponible en nuestra página de descargas. + + + &Import + &Importar + + + Copy att&ribute... + Copiar at&ributo... + + + TOTP... + TOTP... + + + &New database... + &Nueva base de datos... + + + Create a new database + Crear una nueva base de datos + + + &Merge from database... + &Unir desde la base de datos... + + + Merge from another KDBX database + Unir desde otra base de datos KDBX + + + &New entry + &Nueva entrada + + + Add a new entry + Añadir una nueva entrada + + + &Edit entry + &Editar entrada + + + View or edit entry + Ver o editar entrada + + + &New group + &Nuevo grupo + + + Add a new group + Añadir un nuevo grupo + + + Change master &key... + Cambiar la clave &maestra... + + + &Database settings... + Configuración de la base de &datos + + + Copy &password + Copiar &contraseña + + + Perform &Auto-Type + Relizar &Auto-Escritura + + + Open &URL + Abrir &URL + + + KeePass 1 database... + Base de datos KeePass 1... + + + Import a KeePass 1 database + Importar una base de datos KeePass 1 + + + CSV file... + Archivo CSV... + + + Import a CSV file + Importar un archivo CSV + + + Show TOTP... + Mostrar TOTP... + + + Show TOTP QR Code... + Mostrar código QR TOTP... + + + Check for Updates... + Buscar actualizaciones ... + + + Share entry + Compartir entrada + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + NOTA: ¡Está utilizando una versión preliminar de KeePassXC! +Espere algunos errores y problemas menores, esta versión no está destinada para uso de producción. + + + Check for updates on startup? + ¿Buscar actualizaciones en el inicio? + + + Would you like KeePassXC to check for updates on startup? + ¿Quieres KeePassXC para comprobar las actualizaciones en el arranque? + + + You can always check for updates manually from the application menu. + Siempre se puede comprobar si hay actualizaciones manualmente desde el menú de la aplicación. + + + + Merger + + Creating missing %1 [%2] + Creando %1 faltante [%2] + + + Relocating %1 [%2] + Reubicando %1 [%2] + + + Overwriting %1 [%2] + Sobrescribiendo %1 [%2] + + + older entry merged from database "%1" + la entrada más antigua se fusionó a la base de datos "%1" + + + Adding backup for older target %1 [%2] + Agregando copia de seguridad para el destino más antiguo %1 [%2] + + + Adding backup for older source %1 [%2] + Agregando copia de seguridad para la fuente anterior %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Volver a aplicar una entrada de destino más antigua sobre la fuente más nueva %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Volver a aplicar una entrada de origen anterior sobre el objetivo más nuevo %1 [%2] + + + Synchronizing from newer source %1 [%2] + Sincronización desde una fuente más nueva %1 [%2] + + + Synchronizing from older source %1 [%2] + Sincronización desde una fuente anterior %1 [%2] + + + Deleting child %1 [%2] + Borrando hijo %1[%2] + + + Deleting orphan %1 [%2] + Eliminando huérfano %1 [%2] + + + Changed deleted objects + cambiado objetos eliminados + + + Adding missing icon %1 + Añadiendo el icono faltante %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Crear una nueva base de datos KeePassXC ... + + + Root + Root group + Raíz + + + + NewDatabaseWizardPage + + WizardPage + PáginaAsistente + + + En&cryption Settings + Configuraciones de &Cifrado + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos. + + + Advanced Settings + Configuraciones avanzadas + + + Simple Settings + Ajustes simples + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Configuraciones de Cifrado + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Llave maestra de la base de datos + + + A master key known only to you protects your database. + Una llave maestra, conocida por usted únicamente, protege su base de datos. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Información general de la base de datos + + + Please fill in the display name and an optional description for your new database: + Por favor complete el nombre, y agregue una descripción opcional, para su nueva base de datos: + OpenSSHKey Invalid key file, expecting an OpenSSH key - Archivo de clave no válida, esperando una clave de OpenSSH + Archivo llave no válido, esperando una llave de OpenSSH PEM boundary mismatch @@ -2947,11 +3750,11 @@ Esta versión no es para uso de producción. Key derivation failed, key file corrupted? - Derivación de la llave falló, ¿archivo llave dañado? + La derivación de la clave falló, ¿archivo de claves dañado? Decryption failed, wrong passphrase? - ¿Error de descifrado, contraseña incorrecta? + ¿Error de descifrado, frase de contraseña incorrecta? Unexpected EOF while reading public key @@ -2999,125 +3802,30 @@ Esta versión no es para uso de producción. - OptionDialog + PasswordEditWidget - Dialog - Cuadro de diálogo + Enter password: + Ingrese la contraseña - This is required for accessing your databases from ChromeIPass or PassIFox - Esto se requiere para acceder a sus bases de datos desde ChromeIPass o PassIFox + Confirm password: + Confirme la contraseña - Enable KeePassHTTP server - Habilitar el servidor de KeePassHTTP + Password + Contraseña - General - General + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>La contraseña es el método principal para asegurar su base de datos.<p><p>Las contraseñas buenas son largas y únicas. KeePassXC puede generar una para usted.<p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - M&ostrar una notificación cuando se pidan credenciales + Passwords do not match. + Las contraseñas no coinciden. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Sólo devolver los resultados similares para una URL específica en vez de todas las entradas para todo el dominio. - - - &Return only best matching entries - &Devolver sólo las entradas más relevantes - - - Re&quest to unlock the database if it is locked - Solicitar el desblo&queo de la base de datos si se encuentra bloqueada - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Sólo se devuelven las entradas con el mismo esquema (http://, https://, ftp://, ...) - - - &Match URL schemes - &Validar los esquemas de las URL - - - Sort matching entries by &username - Ordenar entradas por nombre de &usuario - - - Sort &matching entries by title - Ordenar entradas por &título - - - R&emove all shared encryption keys from active database - &Eliminar todas las claves de cifrado compartidas de la base de datos activa - - - Re&move all stored permissions from entries in active database - Eli&minar todos los permisos guardados de las entradas de la base de datos activa - - - Password Generator - Generador de contraseñas - - - Advanced - Avanzado - - - Always allow &access to entries - Siempre permitir &acceso a las entradas - - - Always allow &updating entries - Siempre permitir act&ualizaciones de las entradas - - - Only the selected database has to be connected with a client. - Sólo las bases de datos seleccionadas se conectaran con el cliente. - - - Searc&h in all opened databases for matching entries - Busca&r entradas que coincidan en todas las bases de datos abiertas - - - Automatically creating or updating string fields is not supported. - No se permite crear o actualizar campos de caracteres automáticamente. - - - &Return advanced string fields which start with "KPH: " - Mostra&r campos de caracteres avanzados que comiencen con "KPH: " - - - HTTP Port: - Puerto HTTP: - - - Default port: 19455 - Puerto por defecto: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC escuchará por este puerto en 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Advertencia:</b> Las siguientes opciones pueden ser peligrosas. - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP ha quedado obsoleto y desaparecerá en el futuro. <br>Por favor, ¡pasa a KeePassXC-Browser en lugar de esto! Para obtener ayuda con la migración, visite nuestra <a href="https://keepassxc.org/docs/keepassxc-browser-migration">Guía de migración</a>.</p> - - - Cannot bind to privileged ports - No se puede asociar a puertos con privilegios - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - ¡No se puede asociar a puertos con privilegios debajo de 1024! -Usando el puerto por defecto 19455 + Generate master password + Generar contraseña maestra @@ -3161,7 +3869,7 @@ Usando el puerto por defecto 19455 Special Characters - Caracteres especiales: + Caracteres especiales Extended ASCII @@ -3187,18 +3895,10 @@ Usando el puerto por defecto 19455 Wordlist: Lista de palabras: - - Word Count: - Cantidad de Palabras: - Word Separator: Separador de Palabras: - - Generate - Generar - Copy Copiar @@ -3211,10 +3911,6 @@ Usando el puerto por defecto 19455 Close Cerrar - - Apply - Aplicar - Entropy: %1 bit Entropía: %1 bit @@ -3243,6 +3939,171 @@ Usando el puerto por defecto 19455 Password quality Excelente + + ExtendedASCII + ASCII extendido + + + Switch to advanced mode + Cambiar a modo avanzado + + + Advanced + Avanzado + + + Upper Case Letters A to F + Letras mayúsculas de la A hasta la F + + + A-Z + A-Z + + + Lower Case Letters A to F + Letras minúsculas de la A hasta la F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Llaves + + + {[( + {[( + + + Punctuation + Puntuación + + + .,:; + .,:; + + + Quotes + Comillas + + + " ' + " ' + + + Math + Matemáticas + + + <*+!?= + <*+!? = + + + Dashes + Guiones + + + \_|-/ + \_|-/ + + + Logograms + Logogramas + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Cambiar a modo sencillo + + + Simple + Sencillo + + + Character set to exclude from generated password + Conjunto de caracteres a excluir de la contraseña generada + + + Do not include: + No incluir: + + + Add non-hex letters to "do not include" list + Agregar letras no-hexadecimales a la lista de "no incluir" + + + Hex + Hexadecimal + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caracteres excluidos: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + C&uenta de palabras: + + + Regenerate + Regenerar + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Seleccionar + + + + QMessageBox + + Overwrite + Sobrescribir + + + Delete + Eliminar + + + Move + Mover + + + Empty + Vacío + + + Remove + Eliminar + + + Skip + Omitir + + + Disable + Deshabilitar + + + Merge + Unir + QObject @@ -3262,34 +4123,18 @@ Usando el puerto por defecto 19455 Cannot decrypt message No se puede descifrar el mensaje - - Timeout or cannot connect to KeePassXC - Tiempo de espera superado, o no se puede conectar a KeePassXC - Action cancelled or denied Acción cancelada o denegada - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - No se puede cifrar el mensaje o la clave pública no se encuentra. ¿Es habilitado el Native Messaging en KeePassXC? - KeePassXC association failed, try again No se pudo asociar con KeePassXC, inténtelo de nuevo - - Key change was not successful - Cambio de clave no fue exitoso - Encryption key is not recognized Clave de cifrado no es reconocida - - No saved databases found - Ninguna base de datos guardadas encontrada - Incorrect action Acción incorrecta @@ -3304,7 +4149,7 @@ Usando el puerto por defecto 19455 No logins found - No se encuentraron logins + No se encontraron logins Unknown error @@ -3401,7 +4246,7 @@ Usando el puerto por defecto 19455 Perform advanced analysis on the password. - Realizar análisis avanzado en la contraseña. + Realizar análisis avanzado sobre la contraseña. Extract and print the content of a database. @@ -3415,18 +4260,15 @@ Usando el puerto por defecto 19455 Insert password to unlock %1: Introduzca la contraseña para desbloquear %1: - - Failed to load key file %1 : %2 - Error al cargar el archivo llave %1 : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. Please consider generating a new key file. - ADVERTENCIA: Usted está utilizando un formato de archivo llave heredado que puede ser no compatible en el futuro. + ADVERTENCIA: Está usando un fichero de claves con un formato antiguo que puede ser +incompatible en el futuro. -Por favor considere generar un nuevo archivo de llave. +Por favor, considere generar un nuevo fichero. @@ -3502,12 +4344,6 @@ Comandos disponibles: error reading from device error leyendo del dispositivo - - file empty ! - - ¡archivo vacío! - - malformed string cadena de caracteres mal formada @@ -3544,10 +4380,6 @@ Comandos disponibles: Created Creado - - Legacy Browser Integration - Integración de navegador obsoleta - Browser Integration Integración con Navegadores @@ -3576,10 +4408,6 @@ Comandos disponibles: Word count for the diceware passphrase. Número de palabras para la frase de contraseña de diceware. - - count - Número - Wordlist for the diceware generator. [Default: EFF English] @@ -3591,28 +4419,445 @@ Comandos disponibles: Generar una nueva contraseña aleatoria. - Length of the generated password. - Longitud de la contraseña generada. + Invalid value for password length %1. + Valor inválido para el largo de contraseña %1. - Use lowercase characters in the generated password. - Utilizar caracteres en minúsculas en la contraseña generada. + Could not create entry with path %1. + No pudo crearse la entrada con ruta %1. - Use uppercase characters in the generated password. - Utilizar caracteres en mayúsculas en la contraseña generada. + Enter password for new entry: + Ingrese la contraseña para la nueva entrada: - Use numbers in the generated password. - Utilizar números en la contraseña generada. + Writing the database failed %1. + Falló escritura de la base de datos %1. - Use special characters in the generated password. - Utilizar caracteres especiales en la contraseña generada. + Successfully added entry %1. + La entrada se agregó exitosamente %1. - Use extended ASCII in the generated password. - Utilizar ASCII extendido en la contraseña generada. + Copy the current TOTP to the clipboard. + Copiar el TOTP actual al portapapeles. + + + Invalid timeout value %1. + Valor inválido para el "timeout" %1. + + + Entry %1 not found. + No se encontró la entrada %1. + + + Entry with path %1 has no TOTP set up. + La entrada con ruta %1 no tiene un TOTP configurado. + + + Entry's current TOTP copied to the clipboard! + ¡El TOTP de la entrada actual se ha copiado al portapapeles! + + + Entry's password copied to the clipboard! + ¡La contraseña de la entrada actual se ha copiado al portapapeles! + + + Clearing the clipboard in %1 second(s)... + Limpiar el portapapeles en %1 segundo(s)...Limpiar el portapapeles en %1 segundo(s)... + + + Clipboard cleared! + ¡El portapapeles se ha limpiado! + + + Silence password prompt and other secondary outputs. + Silenciar la solicitud de contraseña y demás productos secundarios. + + + count + CLI parameter + número + + + Invalid value for password length: %1 + Valor inválido para el largo de contraseña: %1 + + + Could not find entry with path %1. + No se pudo encontrar la entrada con la ruta %1. + + + Not changing any field for entry %1. + No cambiar cualquier campo de entrada de 1%. + + + Enter new password for entry: + Introduzca una nueva contraseña para la entrada: + + + Writing the database failed: %1 + Fallo al escribir la base de datos: %1 + + + Successfully edited entry %1. + Entrada %1 editada exitosamente. + + + Length %1 + Longitud %1 + + + Entropy %1 + Entropía: %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Multi-palabra extra bits %1 + + + Type: Bruteforce + Tipo: Fuerza Bruta + + + Type: Dictionary + Tipo: Diccionario + + + Type: Dict+Leet + Tipo: Dicc+Leet + + + Type: User Words + Tipo: Usuario Palabras + + + Type: User+Leet + Tipo: Usuario+Leet + + + Type: Repeated + Type: Repetido + + + Type: Sequence + Tipo: Secuencia + + + Type: Spatial + Tipo: Espacial + + + Type: Date + Tipo: Fecha + + + Type: Bruteforce(Rep) + Tipo: Fuerza Bruta(Rep) + + + Type: Dictionary(Rep) + Tipo: Diccionario(Rep) + + + Type: Dict+Leet(Rep) + Tipo: Dicc+Leet(Rep) + + + Type: User Words(Rep) + Tipo: Usuario Palabras(Rep) + + + Type: User+Leet(Rep) + Tipo: Usuario + Leet(Rep) + + + Type: Repeated(Rep) + Tipo: Repetido(Rep) + + + Type: Sequence(Rep) + Tipo: Secuencia(Rep) + + + Type: Spatial(Rep) + Tipo: Espacial(Rep) + + + Type: Date(Rep) + Tipo: Fecha(Rep) + + + Type: Unknown%1 + Tipo: Desconocido %1 + + + Entropy %1 (%2) + Entropía %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Longitud de la contraseña (%1) != Suma de la longitud de las partes (%2) *** + + + Failed to load key file %1: %2 + Error al cargar el fichero de claves %1: %2 + + + File %1 does not exist. + El archivo %1 no existe. + + + Unable to open file %1. + Incapaz de abrir el archivo %1. + + + Error while reading the database: +%1 + Error al leer la base de datos: +%1 + + + Error while parsing the database: +%1 + Error al analizar la base de datos: +%1 + + + Length of the generated password + Longitud de la contraseña generada + + + Use lowercase characters + Usar caracteres en minúscula + + + Use uppercase characters + Usar caracteres en mayúscula + + + Use numbers. + Usar números. + + + Use special characters + Usar caracteres especiales + + + Use extended ASCII + Usar ASCII extendido + + + Exclude character set + Excluir conjunto de caracteres + + + chars + caracteres + + + Exclude similar looking characters + Excluir caracteres de aspecto similar + + + Include characters from every selected group + Incluir caracteres de cada grupo seleccionado + + + Recursively list the elements of the group. + Listar recursivamente los elementos del grupo. + + + Cannot find group %1. + No se puede encontrar el grupo %1. + + + Error reading merge file: +%1 + Error al leer el archivo a unir: +%1 + + + Unable to save database to file : %1 + No se puede guardar la base de datos en el archivo: %1 + + + Unable to save database to file: %1 + No se puede guardar la base de datos en el archivo: %1 + + + Successfully recycled entry %1. + Entrada %1 reciclada exitosamente. + + + Successfully deleted entry %1. + Se eliminó correctamente la entrada %1. + + + Show the entry's current TOTP. + Muestra la entrada actual del TOTP. + + + ERROR: unknown attribute %1. + ERROR: atributo desconocido %1. + + + No program defined for clipboard manipulation + Ningún programa definido para la manipulación del portapapeles. + + + Unable to start program %1 + No se puede iniciar el programa %1 + + + file empty + archivo vacío + + + %1: (row, col) %2,%3 + %1: (fila, col) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recomendado) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Configuración inválida + + + Invalid Key + TOTP + Clave Inválida + + + Message encryption failed. + El cifrado del mensaje falló. + + + No groups found + No se encontraron grupos + + + Create a new database. + Crear una nueva base de datos. + + + File %1 already exists. + El archivo %1 ya existe. + + + Loading the key file failed + La carga del fichero de claves falló + + + No key is set. Aborting database creation. + No se establece ninguna clave. Anulando la creación de base de datos. + + + Failed to save the database: %1. + Error al guardar la base de datos: %1. + + + Successfully created new database. + Creación exitosa de nueva base de datos. + + + Insert password to encrypt database (Press enter to leave blank): + Introduzca la contraseña para cifrar la base de datos (Pulse enter para dejar en blanco): + + + Creating KeyFile %1 failed: %2 + Error al crear el archivo de clave %1: %2 + + + Loading KeyFile %1 failed: %2 + Error al cargar el archivo de claves %1: %2 + + + Remove an entry from the database. + Quitar una entrada de la base de datos. + + + Path of the entry to remove. + Camino de la entrada a quitar. + + + Existing single-instance lock file is invalid. Launching new instance. + El archivo de bloqueo de instancia única existente no es válido. Lanzando nueva instancia. + + + The lock file could not be created. Single-instance mode disabled. + El archivo de bloqueo no pudo ser creado. Modo de instancia única deshabilitado. + + + KeePassXC - cross-platform password manager + KeePassXC - gestor de claves multiplataforma + + + filenames of the password databases to open (*.kdbx) + nombre de archivo de la base de datos de contraseñas a abrir (*.kdbx) + + + path to a custom config file + ruta a un archivo de configuración personalizado + + + key file of the database + archivo llave de la base de datos + + + read password of the database from stdin + leer contraseña de la base de datos desde la entrada estándar + + + Parent window handle + Identificador de la ventana padre + + + Another instance of KeePassXC is already running. + Otra instancia de KeePassXC ya se está ejecutando. + + + Fatal error while testing the cryptographic functions. + Error fatal comprobando las funciones criptográficas. + + + KeePassXC - Error + KeePassXC - Error + + + Database password: + Contraseña de la Base de Datos: + + + Cannot create new group + @@ -3650,11 +4895,97 @@ Comandos disponibles: - SearchWidget + SSHAgent - Search... - Buscar... + Agent connection failed. + La conexión del agente falló. + + Agent protocol error. + Error de protocolo del agente. + + + No agent running, cannot add identity. + Ningún agente en ejecución, no se puede agregar identidad. + + + No agent running, cannot remove identity. + Ningún agente en ejecución, no puede eliminar identidad. + + + Agent refused this identity. Possible reasons include: + El agente rechazó esta identidad. Las posibles razones incluyen: + + + The key has already been added. + La clave ya ha sido añadida. + + + Restricted lifetime is not supported by the agent (check options). + La vida útil limitada no es soportada por el agente (verifique opciones). + + + A confirmation request is not supported by the agent (check options). + La solicitud de confirmación no es soportada por el agente (verifique opciones). + + + + SearchHelpWidget + + Search Help + Buscar Ayuda + + + Search terms are as follows: [modifiers][field:]["]term["] + Los términos de búsqueda son los siguientes: [modificadores] [campo:] ["] término ["] + + + Every search term must match (ie, logical AND) + Cada término de búsqueda debe coincidir (es decir, AND lógico) + + + Modifiers + Modificadores + + + exclude term from results + excluir término de resultados + + + match term exactly + coincidencia en término exactamente + + + use regex in term + usar expresiones regulares en término + + + Fields + Campos + + + Term Wildcards + Comodines en término + + + match anything + coincidir cualquier cosa + + + match one + coincidir uno + + + logical OR + OR lógico + + + Examples + Ejemplos + + + + SearchWidget Search Buscar @@ -3663,315 +4994,332 @@ Comandos disponibles: Clear Limpiar - - Case Sensitive - Distinguir mayúsculas/minúsculas - Limit search to selected group Limitar la búsqueda al grupo selecionado + + Search Help + Buscar Ayuda + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Buscar (%1) ... + + + Case sensitive + Distinguir mayúsculas/minúsculas + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Solicitud de asociación de nueva clave + Active + Activo - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Has recibido una solicitud de asociación para la clave de arriba. -Si desea permitir su acceso a su base de datos KeePassXC -asigne un nombre único para identificarla y acepte. + Allow export + Permitir la exportación - KeePassXC: Overwrite existing key? - KeePassXC: ¿Sobrescribir clave existente? + Allow import + Permitir la importación - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Ya existe una clave de cifrado con el nombre %1. -¿Desea sobrescribirla? + Own certificate + Certificado propio - KeePassXC: Update Entry - KeePassXC: Actualizar entrada + Fingerprint: + Huella dactilar: - Do you want to update the information in %1 - %2? - ¿Desea actualizar la información en %1 - %2? + Certificate: + Certificado: - KeePassXC: Database locked! - KeePassXC: ¡Base de datos bloqueada! + Signer + Firmante - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - ¡La base de datos activa está bloqueada! -Por favor desbloquee la base de datos seleccionada o elija otra que esté desbloqueada. + Key: + Clave: - KeePassXC: Removed keys from database - KeePassXC: Las claves se eliminaron de la base de datos + Generate + Generar + + + Import + Importar + + + Export + Exportar + + + Imported certificates + Certificados importados + + + Trust + Confianza + + + Ask + Preguntar + + + Untrust + Desconfianza + + + Remove + Eliminar + + + Path + Ruta + + + Status + Estado + + + Fingerprint + Huella dactilar + + + Certificate + Certificado + + + Trusted + De confianza + + + Untrusted + No es de confianza + + + Unknown + Desconocido + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + Archivo de clave de KeeShare + + + All files + Todos los archivos + + + Select path + Seleccione ruta + + + Exporting changed certificate + Exportando certificado modificado + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + El certificado exportado no es lo mismo que el que está en uso. ¿Desea exportar el certificado actual? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Importación de contenedores sin firma + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + No podemos verificar la fuente del contenedor compartido porque no está firmado. ¿Realmente desea importar desde %1? + + + Import from container with certificate + Importar desde contenedor con certificado + + + Not this time + No esta vez + + + Never + Nunca + + + Always + Siempre + + + Just this time + Sólo esta vez + + + Import from %1 failed (%2) + Importación de %1 fallida (%2) + + + Import from %1 successful (%2) + Importación de %1 exitosa (%2) + + + Imported from %1 + Importado de %1 + + + Signed share container are not supported - import prevented + No se soportan contenedores compartidos firmados - importación prevenida + + + File is not readable + El archivo no es legible + + + Invalid sharing container + Contenedor compartido no válido + + + Untrusted import prevented + Se previno importación no fiable + + + Successful signed import + Importación firmada exitosa + + + Unexpected error + Error inesperado + + + Unsigned share container are not supported - import prevented + No se soportan contenedores compartidos sin firmar - Importación prevenida + + + Successful unsigned import + Importación no firmada exitosa + + + File does not exist + El archivo no existe + + + Unknown share container type + Tipo de contenedor compartido desconocido + + + Overwriting signed share container is not supported - export prevented + No se soporta sobreescribir contenedor compartido - exportación prevenido + + + Could not write export container (%1) + No podría escribir el contenedor de exportación (%1) + + + Overwriting unsigned share container is not supported - export prevented + No se soporta la sobrescritura de contenedor compartido sin firmar - exportación prevenida + + + Could not write export container + No se puede escribir contenedor de exportación + + + Unexpected export error occurred + Ha ocurrido un error inesperado en la exportación + + + Export to %1 failed (%2) + Falló exportación a %1 (%2) + + + Export to %1 successful (%2) + Exportación a %1 existosa (%2) + + + Export to %1 + Exportar a %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + ¿Desea confiar a %1 con la huella digital de %2 de %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Contraseña Cronometrada + + + 000000 + 000000 + + + Copy + Copiar - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Quitado con éxito cifrado %n-llaves de KeePassX y Http.Quitadas con éxito %n- llaves de encriptación de las opciones de KeePassX/Http. - - - KeePassXC: No keys found - KeePassXC: No se encontró ninguna clave - - - No shared encryption-keys found in KeePassHttp Settings. - No se encontraron claves de cifrado en la configuración de KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: ¡Configuraciones no disponibles! - - - The active database does not contain an entry of KeePassHttp Settings. - La base de datos activa no contiene una entrada de configuración de KeePassHttp. - - - Removing stored permissions... - Eliminando los permisos guardados... - - - Abort - Abortar - - - KeePassXC: Removed permissions - KeePassXC: Permisos eliminados - - - Successfully removed permissions from %n entries. - Con éxito quitar permisos de entradas %n.Removidos permisos de %n entradas exitosamente. - - - KeePassXC: No entry with permissions found! - KeePassXC: ¡No se encontró ninguna entrada con permisos! - - - The active database does not contain an entry with permissions. - La base de datos activa no contiene una entrada con permisos. + Expires in <b>%n</b> second(s) + Caduca en <b>%n</b> segundo(s)Caduca en <b>%n</b> segundo (s) - SettingsWidget + TotpExportSettingsDialog - Application Settings - Configuración de la aplicación + Copy + Copiar - General - General + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + NOTA: Esta configuración de TOTP es personalizada y puede que no funcione con otros autenticadores. - Security - Seguridad + There was an error creating the QR code. + Se ha producido un error al crear el código QR. - Access error for config file %1 - Error de acceso al archivo de configuración %1 + Closing in %1 seconds. + Cernado en %1 segundos. - SettingsWidgetGeneral - - Basic Settings - Configuraciones Básicas - - - Start only a single instance of KeePassXC - Inicie sólo una instancia de KeePassXC - - - Remember last databases - Recordar última base de datos - - - Remember last key files and security dongles - Recordar los últimos archivos de llaves y el dongle de seguridad - - - Load previous databases on startup - Abrir base de datos anterior al inicio - - - Automatically save on exit - Guardar automáticamente al salir - - - Automatically save after every change - Guardar automáticamente después de cada cambio - - - Automatically reload the database when modified externally - Recargar automáticamente la base de datos cuando sea modificada externamente - - - Minimize when copying to clipboard - Minimizar al copiar al portapapeles - - - Minimize window at application startup - Minimizar la ventana al iniciar - - - Use group icon on entry creation - Usar icono del grupo en la creación de entrada - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - No marcar la base de datos como modificada cuando los cambios no afecten a los datos (ej. expandir grupos) - - - Hide the Details view - Ocultar la vista de detalles - - - Show a system tray icon - Mostrar icono en la bandeja de del sistema - - - Hide window to system tray when minimized - Ocultar la ventana a la bandeja del sistema cuando se minimiza - - - Hide window to system tray instead of app exit - Ocultar la ventana a la bandeja del sistema en vez de cerrar - - - Dark system tray icon - Icono de bandeja del sistema oscuro - - - Language - Idioma - - - Auto-Type - Auto-Escritura - - - Use entry title to match windows for global Auto-Type - Use título de entrada para acertar ventanas en Auto-Tipeado global. - - - Use entry URL to match windows for global Auto-Type - Use URL para acertar ventanas en Auto-Tipedo global - - - Always ask before performing Auto-Type - Siempre preguntar antes de hacer Auto-Escritura - - - Global Auto-Type shortcut - Atajo global de Auto-Escritura - - - Auto-Type delay - Retardo de Auto-Escritura - - - ms - Milliseconds - Micro segundo - - - Startup - Inicio - - - File Management - Administración de archivos - - - Safely save database files (may be incompatible with Dropbox, etc) - Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera) - - - Backup database file before saving - Hacer una copia de seguridad de la base de datos antes de guardar - - - Entry Management - Gestión de entrada - - - General - General - - - - SettingsWidgetSecurity - - Timeouts - Intervalos - - - Clear clipboard after - Limpiar el portapapeles después de - - - sec - Seconds - segundos - - - Lock databases after inactivity of - Bloquear base de datos tras un periodo de inactividad de - - - Convenience - Conveniencia - - - Lock databases when session is locked or lid is closed - Bloquear base de datos cuando la sesión está bloqueada o la pantalla esté cerrada - - - Lock databases after minimizing the window - Bloquear base de datos al minimizar la ventana - - - Don't require password repeat when it is visible - No pedir repetición de la contraseña cuando está visible - - - Show passwords in cleartext by default - Mostrar contraseñas en texto claro por defecto - - - Hide passwords in the preview panel - Ocultar contraseñas en el panel de vista previa - - - Hide entry notes by default - Ocultar notas de entrada por defecto - - - Privacy - Privacidad - - - Use Google as fallback for downloading website icons - Usar Google como una alternativa para descargar iconos de sitios web - - - Re-lock previously locked database after performing Auto-Type - Volver a bloquear la base de datos previamente bloqueada después de hacer Auto-Escritura - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Configurar TOTP @@ -3993,59 +5341,84 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Usar configuración personalizada - Note: Change these settings only if you know what you are doing. - Nota: Cambie estas configuraciones sólo si sabe lo que está haciendo. + Custom Settings + Configuración personalizada Time step: Paso del tiempo: - 8 digits - 8 dígitos - - - 6 digits - 6 dígitos + sec + Seconds + segundos Code size: Tamaño del código: - sec - Seconds - segundos + 6 digits + 6 dígitos + + + 7 digits + 7 digitos + + + 8 digits + 8 dígitos - TotpDialog + UpdateCheckDialog - Timed Password - Contraseña Cronometrada + Checking for updates + Comprobando actualizaciones - 000000 - 000000 + Checking for updates... + Comprobando actualizaciones... - Copy - Copiar + Close + Cerrar - Expires in - Expira en + Update Error! + ¡Error al Acualizar! - seconds - segundos + An error occurred in retrieving update information. + Se ha producido un error al recuperando la información de la actualización. - - - UnlockDatabaseWidget - Unlock database - Desbloquear base de datos + Please try again later. + Por favor Inténtalo más tarde. + + + Software Update + Actualización de software + + + A new version of KeePassXC is available! + ¡Una versión nueva de KeePassXC está disponible! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 ya está disponible — usted tiene %2. + + + Download it at keepassxc.org + Descargala en keepassxc.org + + + You're up-to-date! + ¡Estás al día! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 actualmente es la versión más reciente disponible @@ -4080,42 +5453,26 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo - main + YubiKeyEditWidget - Remove an entry from the database. - Quitar una entrada de la base de datos. + Refresh + Actualizar - Path of the database. - Ruta a la base de datos. + YubiKey Challenge-Response + Desafío/respuesta Yubikey - Path of the entry to remove. - Camino de la entrada a quitar. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Si posee una <a href="https://www.yubico.com/">YubiKey</a>, puede usarla para seguridad adicional.</p><p> La YubiKey requiere que una de sus ranuras esté programada como <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Desafío/respuesta HMAC-SHA1</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - gestor de claves multiplataforma + No YubiKey detected, please ensure it's plugged in. + No se ha detectado YubiKey, asegúrese de que esté conectado. - filenames of the password databases to open (*.kdbx) - nombre de archivo de la base de datos de contraseñas a abrir (*.kdbx) - - - path to a custom config file - ruta a un archivo de configuración personalizado - - - key file of the database - archivo llave de la base de datos - - - read password of the database from stdin - leer contraseña de la base de datos desde la entrada estándar - - - Parent window handle - Identificador de la ventana padre + No YubiKey inserted. + No hay YubiKey insertado. \ No newline at end of file diff --git a/share/translations/keepassx_eu.ts b/share/translations/keepassx_eu.ts index 2ac5f25b2..93fca6455 100644 --- a/share/translations/keepassx_eu.ts +++ b/share/translations/keepassx_eu.ts @@ -37,15 +37,9 @@ Copy to clipboard Kopiatu arbelera - - Version %1 - - %1 bertsioa - - Revision: %1 - Berrikuspena: + Berrikuspena: %1 Distribution: %1 @@ -76,32 +70,47 @@ Kernel: %3 %4 - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access + Version %1 - Remember this decision - Gogoratu erabaki hau + Build Type: %1 + - Allow - Onartu + Auto-Type + - Deny - Debekatu + Browser Integration + - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) @@ -111,6 +120,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Aplikazioaren ezarpenak + + + General + Orokorra + + + Security + Segurtasuna + + + Access error for config file %1 + + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Oinarrizko ezarpenak + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + Gogoratu azken datu-baseak + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + Automatikoki gorde aldaketa oro eta gero + + + Automatically save on exit + Automatikoki gorde irtetean + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + Erabili taldearen ikonoa sarrera sortzean + + + Minimize when copying to clipboard + Minimizatu arbelera kopiatzean + + + Hide the entry preview panel + + + + General + Orokorra + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + Erakutsi ikonoa sistema-erretiluan + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + Hizkuntza + + + Auto-Type + + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + ms + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + + + + sec + Seconds + + + + Lock databases after inactivity of + + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + Pribatasuna + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -212,6 +492,26 @@ Please select whether you want to allow access. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + Utzi + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -285,14 +585,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension - - &Disconnect all browsers - - - - Forget all remembered &permissions - - Advanced Aurreratua @@ -358,14 +650,6 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! - - Executable Files (*.exe);;All Files (*.*) - - - - Executable Files (*) - - Select custom proxy location @@ -374,6 +658,31 @@ Please select whether you want to allow access. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + BrowserService @@ -409,148 +718,43 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? - - KeePassXC: Database locked! - - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - KeePassXC: Settings not available! - - - - The active database does not contain a settings entry. - - - - KeePassXC: No keys found - KeePassXC: Ez da gakorik aurkitu - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - Gordetako baimenak kentzen... - Abort - KeePassXC: Removed permissions - KeePassXC: Kendutako baimenak + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! + KeePassXC: No entry with KeePassHTTP attributes found! - The active database does not contain an entry with permissions. - - - - - ChangeMasterKeyWidget - - Password - Pasahitza - - - Enter password: - Sartu pasahitza: - - - Repeat password: - Errepikatu pasahitza: - - - &Key file - &Gako fitxategia - - - Browse - Arakatu - - - Create - Sortu - - - Cha&llenge Response + The active database does not contain an entry with KeePassHTTP attributes. - Refresh - Freskatu - - - Key files - Gako fitxategiak - - - All files - Fitxategi guztiak - - - Create Key File... - Sortu gako fitxategia... - - - Unable to create Key File : - Ezin izan da gako fitxategia sortu : - - - Select a key file - Aukeratu gako fitxategia - - - Empty password - Hustu pasahitza - - - Do you really want to use an empty string as password? - Kate hutsa pasahitz modura erabili? - - - Different passwords supplied. - Pasahitz desberdinak paratu dira. - - - Failed to set %1 as the Key file: -%2 + KeePassXC: Legacy browser integration settings detected - Legacy key file format - - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - - - - Changing master key failed: no YubiKey inserted. + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. @@ -631,14 +835,6 @@ Please consider generating a new key file. Not present in CSV file - - Empty fieldname - - - - column - zutabea - Imported from CSV file @@ -648,48 +844,85 @@ Please consider generating a new key file. Jatorrizko datuak: - Error(s) detected in CSV file ! - Errorea(k) detektatu d(ir)a CSV fitxategian ! + Error + Errorea - more messages skipped] + Empty fieldname %1 - Error - Errorea + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + CSV import: writer has errors: - +%1 - - CsvImportWizard - - Error - Errorea - - - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu - - CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) + zutabe %n%n zutabe + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + %n row(s) + + + + + Database + + Root + Root group name + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + DatabaseOpenWidget @@ -717,14 +950,6 @@ Please consider generating a new key file. Challenge Response: - - Unable to open the database. - Ezin izan da datu-basea ireki. - - - Can't open key file - Ezin da gako fitxategia ireki - Legacy key file format @@ -752,53 +977,248 @@ Please consider generating a new key file. Select key file Aukeratu gako-fitxategia - - - DatabaseRepairWidget - Repair database - Konpondu datu-basea - - - Error - Errorea - - - Can't open key file - Ezin da gako fitxategia ireki - - - Unable to open the database. - Ezin izan da datu-basea ireki. - - - Database opened fine. Nothing to do. + TouchID for quick unlock - Success + Unable to open the database: +%1 - The database has been successfully repaired -You can now save it. - Datu-basea era egokian konpondu da -Gorde daiteke orain. - - - Unable to repair the database. - Ezin izan da datu-basea konpondu. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Pasahitzak + + + + DatabaseSettingsDialog + + Advanced Settings + + General Orokorra - Encryption - Zifraketa + Security + Segurtasuna + + + Master Key + + + + Encryption Settings + + + + Browser Integration + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + Kendu + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: Ez da gakorik aurkitu + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Gordetako baimenak kentzen... + + + Abort + + + + KeePassXC: Removed permissions + KeePassXC: Kendutako baimenak + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Zifraketa algoritmoa + + + AES: 256 Bit (default) + AES: 256 Bit (lehenetsia) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + + + + Transform rounds: + + + + Benchmark 1-second delay + + + + Memory Usage: + Memoria erabilera: + + + Parallelism: + Paralelismoa: + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -848,40 +1268,15 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Zifraketa algoritmoa + + %1 ms + milliseconds + - - AES: 256 Bit (default) - AES: 256 Bit (lehenetsia) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - - - - Transform rounds: - - - - Benchmark 1-second delay - - - - Memory Usage: - Memoria erabilera: - - - Parallelism: - Paralelismoa: + + %1 s + seconds + @@ -932,12 +1327,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group + Sharing + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 datu-basea @@ -950,30 +1416,10 @@ If you keep this number, your database may be too easy to crack! Open database Ireki datu-basea - - File not found! - Fitxategia ez da aurkitu! - - - Unable to open the database. - Ezin izan da datu-basea ireki. - - - File opened in read only mode. - - - - Open CSV file - Ireki CSV fitxategia - CSV file CSV fitxategia - - All files (*) - Fitxategi guztiak (*) - Merge database Bateratu datu-basea @@ -986,36 +1432,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 datu-basea - - Close? - Itxi? - - - "%1" is in edit mode. -Discard changes and close anyway? - - - - Save changes? - Aldaketak gorde? - - - "%1" was modified. -Save changes? - - - - Writing the database failed. - - - - Passwords - Pasahitzak - - - Save database as - Gorde datu-basea honela - Export database to CSV file Esportatu datu-basea CSV fitxategira @@ -1025,35 +1441,39 @@ Save changes? - New database - Datu-base berria - - - locked + Database creation error - Lock database + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + The database file does not exist or is not accessible. - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. + Select CSV file - Disable safe saves? + New Database - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier @@ -1063,41 +1483,17 @@ Disable safe saves and try again? Searching... Bilatzen... - - Change master key - Aldatu gako nagusia - - - Delete entry? - Ezabatu sarrera? - Do you really want to delete the entry "%1" for good? - - Delete entries? - Ezabatu sarrerak? - - - Do you really want to delete %1 entries for good? - - - - Move entry to recycle bin? - - Do you really want to move entry "%1" to the recycle bin? - - Move entries to recycle bin? - - Do you really want to move %n entry(s) to the recycle bin? - + Ziur zaude sarrera %n zakarrontzira mugitu nahi duzula?Ziur zaude %n sarrera zakarrontzira mugitu nahi dituzula? Execute command? @@ -1111,18 +1507,10 @@ Disable safe saves and try again? Remember my choice - - Delete group? - Ezabatu taldea? - Do you really want to delete the group "%1" for good? - - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu - No current database. @@ -1156,10 +1544,6 @@ Disable safe saves and try again? Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - - Empty recycle bin? @@ -1168,88 +1552,102 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? - - - DetailsWidget + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + - Generate TOTP Token + File opened in read only mode. - Close - Itxi - - - General - Orokorra - - - Password - Pasahitza - - - URL - URL - - - Expiration - Iraungitzea - - - Username - Erabiltzaile-izena - - - Autotype + Lock Database? - Searching - Bilatzen - - - Attributes + You are editing an entry. Discard changes and lock anyway? - Attachments + "%1" was modified. +Save changes? - Notes - Oharrak + Database was modified. +Save changes? + - Window - Leihoa + Save changes? + Aldaketak gorde? - Sequence - Sekuentzia + Could not open the new database file while attempting to autoreload. +Error: %1 + - Search - Bilatu + Disable safe saves? + - Clear - Garbitu + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + - Never - Inoiz + Writing the database failed. +%1 + - [PROTECTED] - [BABESTUA] + Passwords + Pasahitzak - Disabled - Ezgaitua + Save database as + Gorde datu-basea honela - Enabled - Gaitua + KeePass 2 Database + KeePass 2 datu-basea + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + @@ -1322,37 +1720,21 @@ Do you want to merge your changes? New attribute Gehitu ezaugarria - - Confirm Remove - Baieztatu kentzea - Are you sure you want to remove this attribute? - - [PROTECTED] - [BABESTUA] - - - Press reveal to view or edit - - Tomorrow Bihar %n week(s) - + aste %n%n aste %n month(s) - - - - 1 year - urte 1 + hilabete %n%n hilabete Apply generated password? @@ -1366,6 +1748,26 @@ Do you want to merge your changes? Entry updated successfully. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1434,7 +1836,7 @@ Do you want to merge your changes? Window title: - Leihoaren titulua: + Leihoaren izenburua: Use a specific sequence for this association: @@ -1610,6 +2012,81 @@ Do you want to merge your changes? + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + Pasahitza: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + EditGroupWidgetMain @@ -1667,10 +2144,6 @@ Do you want to merge your changes? Unable to fetch favicon. Ezin izan da favicon-a atzitu. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - - Images Irudiak @@ -1679,14 +2152,6 @@ Do you want to merge your changes? All files Fitxategi guztiak - - Select Image - Aukeratu irudia - - - Can't read icon - - Custom icon already exists @@ -1696,9 +2161,37 @@ Do you want to merge your changes? Baieztatu ezabaketa - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + EditWidgetProperties @@ -1747,9 +2240,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Klonatu + %1 - Clone + @@ -1791,11 +2283,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - Baieztatu kentzea + Ziur zaude eranskin %n kendu nahi duzula?Ziur zaude %n eranskin kendu nahi dituzula? Save attachments @@ -1830,10 +2318,14 @@ This may cause the affected plugins to malfunction. - Unable to open files: -%1 + Confirm remove + + Unable to open file(s): +%1 + + EntryAttributesModel @@ -1916,6 +2408,106 @@ This may cause the affected plugins to malfunction. Attachments + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + Itxi + + + General + Orokorra + + + Username + Erabiltzaile-izena + + + Password + Pasahitza + + + Expiration + Iraungitzea + + + URL + URL + + + Attributes + + + + Attachments + + + + Notes + Oharrak + + + Autotype + + + + Window + Leihoa + + + Sequence + Sekuentzia + + + Searching + Bilatzen + + + Search + Bilatu + + + Clear + Garbitu + + + Never + Inoiz + + + [PROTECTED] + [BABESTUA] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + Gaitua + + + Disabled + Ezgaitua + + + Share + + EntryView @@ -1954,6 +2546,19 @@ This may cause the affected plugins to malfunction. Recycle Bin Zakarrontzia + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + HostInstaller @@ -1966,61 +2571,6 @@ This may cause the affected plugins to malfunction. - - HttpPasswordGeneratorWidget - - Length: - Luzeera - - - Character Types - Karaktere motak - - - Upper Case Letters - Letra larriak - - - A-Z - A-Z - - - Lower Case Letters - Letra xeheak - - - a-z - a-z - - - Numbers - Zenbakiak - - - 0-9 - 0-9 - - - Special Characters - Karaktere bereziak - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - - - - Ensure that the password contains characters from every group - - - - Extended ASCII - - - KMessageWidget @@ -2046,6 +2596,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + Kdbx3Writer @@ -2204,10 +2774,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher @@ -2259,6 +2825,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2330,10 +2908,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid - - Unable to decrypt entry string - - Duplicate custom attribute found @@ -2383,6 +2957,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2546,55 +3126,126 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – gomendatua) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. + Disabled share - The lock file could not be created. Single-instance mode disabled. + Import from - Another instance of KeePassXC is already running. + Export to - Fatal error while testing the cryptographic functions. + Synchronize with + + + + + KeyComponentWidget + + Key Component - KeePassXC - Error - KeePassXC - Errorea + Key Component Description + + + + Cancel + Utzi + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Arakatu + + + Generate + Sortu + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Gako fitxategiak + + + All files + Fitxategi guztiak + + + Create Key File... + Sortu gako fitxategia... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Aukeratu gako fitxategia @@ -2607,10 +3258,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases - - Import - Inportatu - &Help &Laguntza @@ -2619,14 +3266,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries Sa&rrerak - - Copy att&ribute to clipboard - - - - Time-based one-time password - - &Groups &Taldeak @@ -2655,30 +3294,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database &Itxi datubasea - - &New database - &Datu-base berria - - - Merge from KeePassX database - - - - &Add new entry - &Gehitu sarrera berria - - - &View/Edit entry - &Ikusi/Editatu sarrera - &Delete entry &Ezabatu sarrera - - &Add new group - &Gehitu talde berria - &Edit group &Editatu taldea @@ -2691,14 +3310,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... - - Change &master key... - - - - &Database settings - &Datu-basearen ezarpenak - Database settings Datu-basearen ezarpenak @@ -2707,10 +3318,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry &Klonatu sarrera - - &Find - &Bilatu - Copy &username Kopiatu &erabiltzailea @@ -2719,10 +3326,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard Kopiatu erabiltzaile-izena arbelera - - Cop&y password - Kopiatu pasahitza - Copy password to clipboard Kopiatu pasahitza arbelera @@ -2735,14 +3338,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator Pasahitz sortzailea - - &Perform Auto-Type - - - - &Open URL - - &Lock databases @@ -2775,22 +3370,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... - - Import KeePass 1 database... - - - - Import CSV file... - - - - Re&pair database... - - - - Show TOTP - - Set up TOTP... @@ -2811,14 +3390,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - - Settings Ezarpenak @@ -2831,26 +3402,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC Irten KeePassXC-tik - - KeePass 2 Database - KeePass 2 datu-basea - - - All files - Fitxategi guztiak - - - Open database - Ireki datu-basea - - - Save repaired database - - - - Writing the database failed. - - Please touch the button on your YubiKey! @@ -2861,6 +3412,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2962,123 +3774,33 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Elkarrizketa + Enter password: + Sartu pasahitza: - This is required for accessing your databases from ChromeIPass or PassIFox - Hau beharrezkoa da ChromeIPass edo PassIFox erabilita datu-baseetara sarbidea izateko - - - Enable KeePassHTTP server - Gaitu KeePassHTTP zerbitzaria - - - General - Orokorra - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + Confirm password: - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Password + Pasahitza + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - &Return only best matching entries + Password cannot be empty. - Re&quest to unlock the database if it is locked + Passwords do not match. - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - - &Match URL schemes - - - - Sort matching entries by &username - - - - Sort &matching entries by title - - - - R&emove all shared encryption keys from active database - - - - Re&move all stored permissions from entries in active database - - - - Password Generator - Pasahitz sortzailea - - - Advanced - Aurreratua - - - Always allow &access to entries - - - - Always allow &updating entries - - - - Only the selected database has to be connected with a client. - - - - Searc&h in all opened databases for matching entries - - - - Automatically creating or updating string fields is not supported. - - - - &Return advanced string fields which start with "KPH: " - - - - HTTP Port: - HTTP portua: - - - Default port: 19455 - Portu lehenetsia: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - - - - <b>Warning:</b> The following options can be dangerous! - - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password @@ -3149,18 +3871,10 @@ Using default port 19455. Wordlist: Hitz zerrenda: - - Word Count: - Hitz kopurua: - Word Separator: Hitz banatzailea: - - Generate - Sortu - Copy Kopiatu @@ -3173,10 +3887,6 @@ Using default port 19455. Close Itxi - - Apply - Aplikatu - Entropy: %1 bit Entropia: %1 bit @@ -3205,6 +3915,171 @@ Using default port 19455. Password quality Bikaina + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Aurreratua + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Ezabatu + + + Move + + + + Empty + + + + Remove + Kendu + + + Skip + + + + Disable + Ezgaitu + + + Merge + + QObject @@ -3224,34 +4099,18 @@ Using default port 19455. Cannot decrypt message - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - - Encryption key is not recognized - - No saved databases found - - Incorrect action @@ -3377,10 +4236,6 @@ Using default port 19455. Insert password to unlock %1: - - Failed to load key file %1 : %2 - - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3459,11 +4314,6 @@ Available commands: error reading from device - - file empty ! - - fitxategia hutsik dago! - malformed string @@ -3500,10 +4350,6 @@ Available commands: Created - - Legacy Browser Integration - - Browser Integration @@ -3532,10 +4378,6 @@ Available commands: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3546,27 +4388,437 @@ Available commands: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – gomendatua) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + KeePassXC - plataforma anitzeko pasahitz kudeatzailea + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + datu-basearen gako-fitxategia + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + KeePassXC - Errorea + + + Database password: @@ -3605,11 +4857,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - Bilatu... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Bilatu @@ -3618,311 +4956,317 @@ Available commands: Clear Garbitu - - Case Sensitive - - Limit search to selected group + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request + Active - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Allow export - KeePassXC: Overwrite existing key? - KeePassXC: Gainidatzi aurreko gakoa? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Allow import - KeePassXC: Update Entry - KeePassXC: Eguneratu sarrera - - - Do you want to update the information in %1 - %2? + Own certificate - KeePassXC: Database locked! + Fingerprint: - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Certificate: - KeePassXC: Removed keys from database + Signer + + Key: + Gakoa: + + + Generate + Sortu + + + Import + Inportatu + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Kendu + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Fitxategi guztiak + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + Inoiz + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + + + + 000000 + 000000 + + + Copy + Kopiatu + - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) + + + TotpExportSettingsDialog - KeePassXC: No keys found - KeePassXC: Ez da gakorik aurkitu + Copy + Kopiatu - No shared encryption-keys found in KeePassHttp Settings. + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - KeePassXC: Settings not available! + There was an error creating the QR code. - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - Gordetako baimenak kentzen... - - - Abort - - - - KeePassXC: Removed permissions - KeePassXC: Kendutako baimenak - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - - - - The active database does not contain an entry with permissions. + Closing in %1 seconds. - SettingsWidget - - Application Settings - Aplikazioaren ezarpenak - - - General - Orokorra - - - Security - Segurtasuna - - - Access error for config file %1 - - - - - SettingsWidgetGeneral - - Basic Settings - Oinarrizko ezarpenak - - - Start only a single instance of KeePassXC - - - - Remember last databases - Gogoratu azken datu-baseak - - - Remember last key files and security dongles - - - - Load previous databases on startup - - - - Automatically save on exit - Automatikoki gorde irtetean - - - Automatically save after every change - Automatikoki gorde aldaketa oro eta gero - - - Automatically reload the database when modified externally - - - - Minimize when copying to clipboard - Minimizatu arbelera kopiatzean - - - Minimize window at application startup - - - - Use group icon on entry creation - Erabili taldearen ikonoa sarrera sortzean - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Hide the Details view - - - - Show a system tray icon - Erakutsi ikonoa sistema-erretiluan - - - Hide window to system tray when minimized - - - - Hide window to system tray instead of app exit - - - - Dark system tray icon - - - - Language - Hizkuntza - - - Auto-Type - - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Global Auto-Type shortcut - - - - Auto-Type delay - - - - ms - Milliseconds - ms - - - Startup - - - - File Management - - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - - - - Entry Management - - - - General - Orokorra - - - - SettingsWidgetSecurity - - Timeouts - - - - Clear clipboard after - - - - sec - Seconds - - - - Lock databases after inactivity of - - - - Convenience - - - - Lock databases when session is locked or lid is closed - - - - Lock databases after minimizing the window - - - - Don't require password repeat when it is visible - - - - Show passwords in cleartext by default - - - - Hide passwords in the preview panel - - - - Hide entry notes by default - - - - Privacy - Pribatasuna - - - Use Google as fallback for downloading website icons - - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP @@ -3944,7 +5288,7 @@ Please unlock the selected database or choose another one which is unlocked. - Note: Change these settings only if you know what you are doing. + Custom Settings @@ -3952,50 +5296,75 @@ Please unlock the selected database or choose another one which is unlocked. - 8 digits - 8 zifra - - - 6 digits - 6 zifra + sec + Seconds + Code size: - sec - Seconds + 6 digits + 6 zifra + + + 7 digits + + 8 digits + 8 zifra + - TotpDialog + UpdateCheckDialog - Timed Password + Checking for updates - 000000 - 000000 - - - Copy - Kopiatu - - - Expires in + Checking for updates... - seconds - segundu + Close + Itxi - - - UnlockDatabaseWidget - Unlock database + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available @@ -4031,41 +5400,25 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. + Refresh + Freskatu + + + YubiKey Challenge-Response - Path of the database. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - Path of the entry to remove. + No YubiKey detected, please ensure it's plugged in. - KeePassXC - cross-platform password manager - KeePassXC - plataforma anitzeko pasahitz kudeatzailea - - - filenames of the password databases to open (*.kdbx) - - - - path to a custom config file - - - - key file of the database - datu-basearen gako-fitxategia - - - read password of the database from stdin - - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_fi.ts b/share/translations/keepassx_fi.ts index 113927dcd..de8237ea5 100644 --- a/share/translations/keepassx_fi.ts +++ b/share/translations/keepassx_fi.ts @@ -37,36 +37,6 @@ Copy to clipboard Kopioi leikepöydälle - - Version %1 - - Versio %1 - - - - Revision: %1 - Revisio: %1 - - - Distribution: %1 - Jakelu: %1 - - - Libraries: - Kirjastot: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Käyttöjärjestelmä: %1 -Suoritinarkkitehtuuri: %2 -Kernel: %3 %4 - - - Enabled extensions: - Käytössä olevat laajennukset: - Project Maintainers: Projektin ylläpitäjät: @@ -75,36 +45,6 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. KeePassXC-tiimi antaa erityiskiitokset KeePassX-ohjelman alkuperäiselle luojalle debfx:lle - - Build Type: %1 - - Julkaisun tyyppi: %1 - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP - Vahvista pääsy - - - Remember this decision - Muista tämä valinta - - - Allow - Salli - - - Deny - Estä - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 pyytää pääsyä seuraavien tietueiden salasanoihin. -Ole hyvä ja valitse sallitaanko pääsy. - AgentSettingsWidget @@ -112,12 +52,283 @@ Ole hyvä ja valitse sallitaanko pääsy. Enable SSH Agent (requires restart) Käytä SSH-agenttia (vaatii uudelleenkäynnistyksen) + + Use OpenSSH for Windows instead of Pageant + Käytä Windowsissa OpenSSH:ta Pageant:in sijasta + + + + ApplicationSettingsWidget + + Application Settings + Sovelluksen asetukset + + + General + Yleistä + + + Security + Turvallisuus + + + Access error for config file %1 + Pääsyvirhe asetustiedostoon %1 + + + Icon only + Vain kuvake + + + Text only + Vain teksti + + + Text beside icon + Teksti kuvakkeen vieressä + + + Text under icon + Teksti kuvakkeen alla + + + Follow style + Seuraa tyyliä + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Perusasetukset + + + Startup + Käynnistys + + + Start only a single instance of KeePassXC + Käynnistä vain yksi KeePassXC-instanssi + + + Remember last databases + Muista viimeisimmät tietokannat + + + Remember last key files and security dongles + Muista viimeisimmät avaintiedostot ja tietoturva-avainlaitteet (donglet) + + + Load previous databases on startup + Lataa edelliset tietokannat käynnistäessä + + + Minimize window at application startup + Pienennä ikkuna ohjelman käynnistyessä + + + File Management + Tiedostohallinta + + + Safely save database files (may be incompatible with Dropbox, etc) + Tallenna tietokannat turvallisesti (voi olla epäyhteensopiva Dropboxin tmv. kanssa) + + + Backup database file before saving + Ota tietokannasta varmuuskopio ennen tallentamista + + + Automatically save after every change + Tallenna automaattisesti jokaisen muutoksen jälkeen + + + Automatically save on exit + Tallenna automaattisesti suljettaessa + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Älä merkitse tietokantaa muokatuksi mikäli tietueet eivät muutu (esim. ryhmien laajentamisen yhteydessä) + + + Automatically reload the database when modified externally + Lataa tietokanta automaattisesti uudelleen jos tietokantaa muokattiin muualla + + + Entry Management + Tietueiden hallinta + + + Use group icon on entry creation + Käytä ryhmän kuvaketta tietuetta luodessa + + + Minimize when copying to clipboard + Pienennä ikkuna kopioidessa leikepöydälle + + + Hide the entry preview panel + Piilota tietueen esikatselupaneeli + + + General + Yleistä + + + Hide toolbar (icons) + Piilota työkalurivi (ikonit) + + + Minimize instead of app exit + Minimoi ohjelma sulkemisen sijasta + + + Show a system tray icon + Näytä ilmoitusalueen kuvake + + + Dark system tray icon + Tumma ilmoitusalueen kuvake + + + Hide window to system tray when minimized + Piiloita pienennetty ikkuna ilmoitusalueelle + + + Language + Kieli + + + Auto-Type + Automaattisyöttö + + + Use entry title to match windows for global Auto-Type + Tietue on sopiva, jos sen nimi sisältyy kohdeikkunan otsikkoon yleisessä automaattisyötössä + + + Use entry URL to match windows for global Auto-Type + Tietue on sopiva, jos sen osoite sisältyy kohdeikkunan otsikkoon yleisessä automaattisyötössä + + + Always ask before performing Auto-Type + Kysy aina ennen automaattisyötön käyttämistä + + + Global Auto-Type shortcut + Yleisen automaattisyötön pikanäppäin + + + Auto-Type typing delay + Automaattisyötön kirjoituksen viive + + + ms + Milliseconds + ms + + + Auto-Type start delay + Automaattisyötön aloitusviive + + + Check for updates at application startup + Tarkista päivitykset sovelluksen käynnistyessä + + + Include pre-releases when checking for updates + Sisällytä esijulkaisut tarkistaessa päivityksiä + + + Movable toolbar + Siirrettävä työkalupalkki + + + Button style + Painiketyyli + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Aikakatkaisut + + + Clear clipboard after + Tyhjennä leikepöytä kun on kulunut + + + sec + Seconds + s + + + Lock databases after inactivity of + Lukitse tietokannat jos on oltu joutilaana + + + min + minuuttia + + + Forget TouchID after inactivity of + Unohda TouchID jos on oltu joutilaana + + + Convenience + Mukavuus + + + Lock databases when session is locked or lid is closed + Lukitse tietokannat kun istunto lukitaan tai kansi suljetaan + + + Forget TouchID when session is locked or lid is closed + Unohda TouchID kun istunto lukitaan tai kansi suljetaan + + + Lock databases after minimizing the window + Lukitse tietokanta ikkunan pienennyksen jälkeen + + + Re-lock previously locked database after performing Auto-Type + Uudelleenlukitse aikaisemmin lukittu tietokanta automaattisyötön jälkeen + + + Don't require password repeat when it is visible + Älä vaadi salasanan toistoa jos salasana on näkyvillä + + + Don't hide passwords when editing them + Älä piilota salasanoja muokkauksen aikana + + + Don't use placeholder for empty password fields + Älä näytä paikkamerkkiä tyhjissä salasanakentissä + + + Hide passwords in the entry preview panel + Piilota salasanat tietueiden esikatselupaneelissa + + + Hide entry notes by default + Piilota tietueiden muistiinpanot + + + Privacy + Yksityisyys + + + Use DuckDuckGo as fallback for downloading website icons + Käytä DuckDuckGo:ta sivustojen ikonien lataukseen + AutoType Couldn't find an entry that matches the window title: - Ikkunan nimeä vastaavaa merkintää ei löytynyt: + Ikkunan nimeä vastaavaa tietuetta ei löytynyt: Auto-Type - KeePassXC @@ -182,11 +393,11 @@ Ole hyvä ja valitse sallitaanko pääsy. AutoTypeSelectDialog Auto-Type - KeePassXC - Automaattitäydennys - KeePassXC + Automaattisyöttö - KeePassXC Select entry to Auto-Type: - Valitse merkintä automaattitäydennystä varten: + Valitse tietue automaattisyöttöä varten: @@ -210,10 +421,31 @@ Ole hyvä ja valitse sallitaanko pääsy. %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. - %1 pyytää pääsyä seuraavien tietueiden salasanoihin. + %1 pyytää pääsyä seuraavien kohteiden salasanoihin. Ole hyvä ja valitse sallitaanko pääsy. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser - Tallenna tietue + + + Ok + Ok + + + Cancel + Peruuta + + + You have multiple databases open. +Please select the correct database for saving credentials. + Useita tietokantoja on auki +Valitse oikea tietokanta tietueen tallentamiseksi + + BrowserOptionDialog @@ -287,14 +519,6 @@ Ole hyvä ja valitse sallitaanko pääsy. Credentials mean login data requested via browser extension Jä&rjestä vastaavat tilitiedot käyttäjätunnuksen mukaan - - &Disconnect all browsers - &Katkaise yhteys kaikkiin selaimiin - - - Forget all remembered &permissions - Unohda kaikki muistetut &oikeudet - Advanced Lisäasetukset @@ -360,21 +584,42 @@ Ole hyvä ja valitse sallitaanko pääsy. <b>Warning:</b> The following options can be dangerous! <b>Varoitus:</b> Seuraavat valinnat voivat olla vaarallisia! - - Executable Files (*.exe);;All Files (*.*) - Suoritettavat tiedostot (*.exe);;Kaikki tiedostot (*.*) - - - Executable Files (*) - Suoritettavat tiedostot (*) - Select custom proxy location Valitse mukautettu välitysohjelma - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Valitettavasti KeePassXC-Browser ei ole vielä tuettu Snap-julkaisuissa. + &Tor Browser + &Tor-selain + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Varoitus</b>, keepassxc-proxy -ohjelmaa ei löydy!<br />Ole hyvä ja tarkista KeePassXC:n asennushakemisto tai varmista mukautettu polku lisäasetuksista.<br />Selainintegraatio ei toimi ilman välitysohjelmaa.<br />Odotettu polku: + + + Executable Files + Suoritettavat tiedostot + + + All Files + Kaikki tiedostot + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Älä kysy lupaa HTTP-autentikointiin + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -414,161 +659,62 @@ Haluatko korvata sen? Do you want to update the information in %1 - %2? Haluatko päivittää tiedot osoitteesta %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Tietokanta lukittu! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Aktiivinen tietokanta on lukittu! -Avaa valittu tietokanta tai valitse toinen avattu tietokanta. - - - KeePassXC: Settings not available! - KeePassXC: Asetukset eivät ole käytettävissä! - - - The active database does not contain a settings entry. - Aktiivinen tietokanta ei sisällä asetustietuetta - - - KeePassXC: No keys found - KeePassXC: Avaimia ei löytynyt - - - No shared encryption keys found in KeePassXC Settings. - Jaettuja salausavaimia ei löytynyt KeePassXC-asetuksista - - - KeePassXC: Removed keys from database - KeePassXC: Poistettiin avaimet tietokannasta - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Poistettiin %n salausavain(ta) KeePassXC-asetuksista.Poistettiin %n salausavain(ta) KeePassXC-asetuksista. - - - Removing stored permissions… - Poistetaan talletettuja oikeuksia… - Abort Keskeytä - KeePassXC: Removed permissions - KeePassXC: Poistetut käyttöoikeudet + Converting attributes to custom data… + Muutetaan attribuutteja mukautetuiksi tiedoiksi... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Muutetut KeePassHTTP-attribuutit + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Mukautettiin attribuutit onnistuneesti %1 tietueesta. +Siirrettiin %2 avainta mukautettuihin tietoihin. - Successfully removed permissions from %n entry(s). - Poistettiin käyttöoikeudet %1:n tietueen tiedoista.Poistettiin käyttöoikeudet %1:n tietueen tiedoista. + Successfully moved %n keys to custom data. + Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin.Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin. - KeePassXC: No entry with permissions found! - KeePassXC: Tietuetta käyttöoikeuksilla ei löytynyt! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Tietueita KeePassHTTP-attribuuteilla ei löytynyt! - The active database does not contain an entry with permissions. - Aktiivinen tietokanta ei sisällä yhtään tietuetta käyttöoikeuksien kanssa. - - - - ChangeMasterKeyWidget - - Password - Salasana + The active database does not contain an entry with KeePassHTTP attributes. + Aktiivinen tietokanta ei sisällä tietueita KeePassHTTP-attribuuteilla. - Enter password: - Syötä salasana: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Vanhoja selainintegraatioasetuksia havaittu - Repeat password: - Toista salasana: + KeePassXC: Create a new group + - &Key file - Avaintiedosto + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Selaa - - - Create - Luo - - - Cha&llenge Response - &Haaste ja vastaus - - - Refresh - Päivitä - - - Key files - Avaintiedostot - - - All files - Kaikki tiedostot - - - Create Key File... - Luo avaintiedosto... - - - Unable to create Key File : - Avaintiedoston luonti ei onnistunut: - - - Select a key file - Valitse avaintiedosto - - - Empty password - Tyhjä salasana - - - Do you really want to use an empty string as password? - Haluatko varmasti asettaa tyhjän merkkijonon salasanaksi? - - - Different passwords supplied. - Annetut salasanat eivät täsmää. - - - Failed to set %1 as the Key file: -%2 - Kohteen %1 asettaminen avaintiedostoksi ei onnistunut: -%2 - - - Legacy key file format - Vanha avaintiedostomuoto - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Käytät vanhaa avaintiedostomuotoa joka ei ole -välttämättä tuettu tulevaisuudessa. - -Ole hyvä ja harkitse uuden avaintiedoston luomista. - - - Changing master key failed: no YubiKey inserted. - Pääsalasanan vaihtaminen epäonnistui: YubiKeyta ei ole liitetty. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + CloneDialog Clone Options - Kopiointiasetukset + Kloonausasetukset Append ' - Clone' to title @@ -641,65 +787,98 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista. Not present in CSV file Ei mukana CSV-tiedostossa - - Empty fieldname - Tyhjä kenttänimi - - - column - sarake - Imported from CSV file Tuotu CSV-tiedostosta Original data: - Alkuperäiset tiedot: - - - Error(s) detected in CSV file ! - Yksi tai useampi virhe havaittu CSV-tiedostossa! - - - more messages skipped] - viestiä lisää ohitettu] + Alkuperäiset tiedot: Error Virhe + + Empty fieldname %1 + Tyhjä kentän nimi %1 + + + column %1 + sarake %1 + + + Error(s) detected in CSV file! + CSV-tiedostossa havaittiin virhe/virheitä! + + + [%n more message(s) skipped] + [%n more message(s) skipped][%n kappaletta viestejä ohitettiin] + CSV import: writer has errors: - - CSV:n tuonti: kirjoittamisessa tapahtui virhe: - - - - - CsvImportWizard - - Error - Virhe - - - Unable to calculate master key - Pääavaimen laskeminen ei onnistu +%1 + CSV-tuonti: kirjoituksessa on virheitä: +%1 CsvParserModel - - %n byte(s), - %n tavua,%n tavua, - - - %n row(s), - %n riviä,%n riviä, - %n column(s) - %n saraketta%n saraketta + %n sarake.%n saraketta + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n tavu%n tavua + + + %n row(s) + %n rivi%n riviä + + + + Database + + Root + Root group name + Juuri + + + File %1 does not exist. + Tiedostoa %1 ei ole. + + + Unable to open file %1. + Tiedostoa %1 ei voitu avata. + + + Error while reading the database: %1 + Virhe tietokantaa luettaessa: %1 + + + Could not save, database has no file name. + Tallennus ei onnistu. Tietokannalla ei ole tiedostonimeä. + + + File cannot be written as it is opened in read-only mode. + Tiedostoa ei voitu tallentaa, sillä se on avattu vain lukuoikeuksin. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Avaa tietokanta - KeePassXC @@ -714,7 +893,7 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista. Password: - Salasana + Salasana: Browse @@ -728,14 +907,6 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista. Challenge Response: Haaste/vastaus: - - Unable to open the database. - Tietokannan avaaminen ei onnistunut. - - - Can't open key file - Avaintiedostoa ei voitu avata - Legacy key file format Vanha avaintiedostomuoto @@ -766,53 +937,254 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista. Select key file Valitse avaintiedosto - - - DatabaseRepairWidget - Repair database - Korjaa tietokanta + TouchID for quick unlock + TouchID pika-avaukseen - Error - Virhe + Unable to open the database: +%1 + Tietokantaa ei voitu avata: +%1 - Can't open key file - Avaintiedoston avaaminen epäonnistui - - - Unable to open the database. - Tietokannan avaaminen epäonnistui. - - - Database opened fine. Nothing to do. - Tietokannan avaaminen onnistui. Ei tehtävää. - - - Success - Onnistui! - - - The database has been successfully repaired -You can now save it. - Tietokanta korjattiin onnistuneesti. -Voit nyt tallentaa sen. - - - Unable to repair the database. - Tietokannan korjaus epäonnistui. + Can't open key file: +%1 + Avaintiedostoa ei voitu avata: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Salasanat + + + + DatabaseSettingsDialog + + Advanced Settings + Lisäasetukset + General Yleistä - Encryption - Salaus + Security + Turvallisuus + + + Master Key + Pääsalasana + + + Encryption Settings + Salausasetukset + + + Browser Integration + Selainintegraatio + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Browser -asetukset + + + &Disconnect all browsers + &Katkaise yhteys kaikkiin selaimiin + + + Forg&et all site-specific settings on entries + &Unohda kaikki tietueiden sivustokohtaiset asetukset + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Siirrä KeePassHTTP-attribuutit KeePassXC-Browser:in &mukautettuihin tietoihin + + + Stored keys + Tallennetut avaimet + + + Remove + Poista + + + Delete the selected key? + Poista valittu avain? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Haluatko poistaa valitun avaimen? +Tämä voi estää yhteyden selainlaajennukseen. + + + Key + Avain + + + Value + Arvo + + + Enable Browser Integration to access these settings. + Käytä selainintegraatiota käyttääksesi näitä asetuksia. + + + Disconnect all browsers + Unohda kaikki selaimet + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Haluatko todella unohtaa kaikki selaimet? +Tämä voi estää yhteyden selainlaajennukseen. + + + KeePassXC: No keys found + KeePassXC: Avaimia ei löytynyt + + + No shared encryption keys found in KeePassXC settings. + Jaettuja salausavaimia ei löytynyt KeePassXC:n asetuksista. + + + KeePassXC: Removed keys from database + KeePassXC: Poistettiin avaimet tietokannasta + + + Successfully removed %n encryption key(s) from KeePassXC settings. + %n salausavain poistettiin onnistuneesti KeePassXC:n asetuksista.%n salausavainta poistettiin onnistuneesti KeePassXC:n asetuksista. + + + Forget all site-specific settings on entries + Unohda kaikki sivustokohtaiset asetukset tietueilta + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Haluatko todella unohtaa sivustokohtaiset asetuksista joka tietueelta? +Pääsy tietueisiin evätään. + + + Removing stored permissions… + Poistetaan talletettuja oikeuksia… + + + Abort + Keskeytä + + + KeePassXC: Removed permissions + KeePassXC: Poistetut käyttöoikeudet + + + Successfully removed permissions from %n entry(s). + Poistettiin lupa %n tietueelta.Poistettiin lupa %n tietueelta. + + + KeePassXC: No entry with permissions found! + KeePassXC: Tietuetta käyttöoikeuksilla ei löytynyt! + + + The active database does not contain an entry with permissions. + Aktiivinen tietokanta ei sisällä yhtään tietuetta käyttöoikeuksien kanssa. + + + Move KeePassHTTP attributes to custom data + Siirrä KeePassHTTP-attribuutit mukautettuihin tietoihin. + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Haluatko todella siirtää vanhat selainlaajennustiedot uuteen muotoon? +Tämä on välttämätöntä selainintegraation yhteensopivuuden takaamiseksi. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Salausalgoritmi: + + + AES: 256 Bit (default) + AES: 256 Bit (oletus) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Avainmuunnosfunktio: + + + Transform rounds: + Muunnositeraatioita: + + + Benchmark 1-second delay + Laske parametrit 1:n sekunnin viiveelle + + + Memory Usage: + Muistin käyttö: + + + Parallelism: + Rinnakkaisuus: + + + Decryption Time: + Salauksen purkuun kulunut aika: + + + ?? s + ?? s + + + Change + Muuta + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Korkeat arvot lupaavat parempaa suojaa, mutta tietokannan avaus voi kestää pidempään. + + + Database format: + Tietokannan muoto: + + + This is only important if you need to use your database with other programs. + Tämä on tärkeää vain, jos käytät tietokantaa muissa ohjelmissa. + + + KDBX 4.0 (recommended) + KDBX 4.0 (suositeltu) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + muuttamaton Number of rounds too high @@ -859,47 +1231,22 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! MiB Abbreviation for Mebibytes (KDF settings) - Mt Mt + MiBMiB thread(s) Threads for parallel execution (KDF settings) - säie(ttä) säie(ttä) + säiesäiettä - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Salausalgoritmi: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 Bit (oletus) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Avainmuunnosfunktio: - - - Transform rounds: - Muunnositeraatioita: - - - Benchmark 1-second delay - Laske parametrit 1:n sekunnin viiveelle - - - Memory Usage: - Muistin käyttö: - - - Parallelism: - Rinnakkaisuus: + + %1 s + seconds + %1 s%1 s @@ -926,7 +1273,7 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! Max. history items: - Maks. historiamerkintöjen lukumäärä: + Maks. historia-kohteiden lukumäärä: Max. history size: @@ -950,12 +1297,85 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Juuri + Sharing + Jakaminen + + Breadcrumb + Leipätiedosto + + + Type + Tyyppi + + + Path + Polku + + + Last Signer + Viimeinen allekirjoittaja + + + Certificates + Varmenteet + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Lisäsuoja... + + + No encryption key added + Salausavainta ei ole lisätty + + + You must add at least one encryption key to secure your database! + Ainakin yksi salausavain täytyy lisätä, jotta tietokanta pysyy suojassa! + + + No password set + Salasanaa ei ole asetettu + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + VAROITUS! Et ole asettanut salasanaa. Tietokannan käyttöä ilman salasanaa ei suositella! + +Oletko varma, että haluat jatkaa ilman salasanaa? + + + Unknown error + Tuntematon virhe + + + Failed to change master key + Pääsalasanan muuttaminen ei onnistunut + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Tietokannan nimi: + + + Description: + Kuvaus: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 -tietokanta @@ -968,30 +1388,10 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! Open database Avaa tietokanta - - File not found! - Tiedostoa ei löytynyt! - - - Unable to open the database. - Tietokannan avaaminen ei onnistunut. - - - File opened in read only mode. - Tiedosto on avattu "vain luku"-tilassa. - - - Open CSV file - Avaa CSV-tiedosto - CSV file CSV-tiedosto - - All files (*) - Kaikki tiedostot(*) - Merge database Yhdistä tietokanta @@ -1004,38 +1404,6 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! KeePass 1 database KeePass 1 -tietokanta - - Close? - Sulje? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" on muokkaustilassa. -Hylkää muutokset ja sulje? - - - Save changes? - Tallenna muutokset? - - - "%1" was modified. -Save changes? - Kohdetta "%1" muokattiin. -Tallennetaanko muutokset? - - - Writing the database failed. - Tietokannan kirjoitus levylle epäonnistui. - - - Passwords - Salasanat - - - Save database as - Tallenna tietokanta nimellä - Export database to CSV file Vie tietokanta CSV-tiedostoon @@ -1045,40 +1413,41 @@ Tallennetaanko muutokset? CSV-tiedoston kirjoitus levylle epäonnistui. - New database + Database creation error + Tietokannan luomisvirhe + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + Luodulla tietokannalla ei ole avainta tai avainmuunnosfunktiota, joten sitä ei voida tallentaa. +Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin. + + + The database file does not exist or is not accessible. + Tietokantatiedostoa ei ole olemassa tai siihen ei ole pääsyä. + + + Select CSV file + Valitse CSV-tiedosto + + + New Database Uusi tietokanta - locked - Lukittu + %1 [New Database] + Database tab name modifier + %1 [Uusi tietokanta] - Lock database - Lukitse tietokanta + %1 [Locked] + Database tab name modifier + %1 [Lukittu] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Tietokantaa ei voida lukita, sillä se on muokkaustilassa. -Paina Peruuta jos haluat viimeistellä muutoksesi, muussa tapauksessa muutoksesi hylätään. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Tietokantaa on muokattu. -Haluatko tallentaa tietokannan ennen sen lukitsemista? -Jos et tallenna, muutokset hylätään. - - - Disable safe saves? - Ota turvallinen tallennus pois käytöstä? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC on epäonnistunut useaan otteeseen tietokannan tallentamisessa. Tämä johtuu luultavasti tiedostojen synkronoinnista, joka pitää tiedostoa lukittuna. -Ota turvallinen tallennus pois käytöstä ja yritä uudelleen? + %1 [Read-only] + Database tab name modifier + %1 [Vain luku] @@ -1087,41 +1456,17 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen? Searching... Etsitään... - - Change master key - Vaihda pääsalasana - - - Delete entry? - Poista tietue? - Do you really want to delete the entry "%1" for good? Haluatko varmasti poistaa tietueen "%1" lopullisesti? - - Delete entries? - Poista tietueet? - - - Do you really want to delete %1 entries for good? - Haluatko varmasti poistaa %1 tietuetta lopullisesti? - - - Move entry to recycle bin? - Siirrä tietue roskakoriin? - Do you really want to move entry "%1" to the recycle bin? Haluatko varmasti siirtää tietueen "%1" roskakoriin? - - Move entries to recycle bin? - Siirrä tietueet roskakoriin? - Do you really want to move %n entry(s) to the recycle bin? - Haluatko varmasti siirtää %n kappaletta alkioita roskakoriin?Haluatko varmasti siirtää %n tietuetta roskakoriin? + Haluatko varmasti siirtää %n tietueen roskakoriin?Haluatko varmasti siirtää %n tietuetta roskakoriin? Execute command? @@ -1135,18 +1480,10 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen? Remember my choice Muista valintani - - Delete group? - Poista ryhmä? - Do you really want to delete the group "%1" for good? Haluatko varmasti poistaa ryhmän "%1" lopullisesti? - - Unable to calculate master key - Pääavaimen laskeminen ei onnistu - No current database. Ei nykyistä tietokantaa. @@ -1181,10 +1518,6 @@ Do you want to merge your changes? Tietokantatiedosto on muuttunut, ja sinulla on tallentamattomia muutoksia. Haluatko yhdistää muutoksesi? - - Could not open the new database file while attempting to autoreload this database. - Uutta tietokantaa ei voitu avata, sillä tätä tietokantaa yritetään uudelleenavata samanaikaisesti. - Empty recycle bin? Tyhjennetäänkö roskakori? @@ -1193,88 +1526,111 @@ Haluatko yhdistää muutoksesi? Are you sure you want to permanently delete everything from your recycle bin? Haluatko varmasti tyhjentää kaiken pysyvästi roskakorista? - - - DetailsWidget - - Generate TOTP Token - Luo aikapohjaisen salasanan (TOTP) tunniste + + Do you really want to delete %n entry(s) for good? + Haluatko todella poistaa %n tietueen pysyvästi?Haluatko todella poistaa %n tietuetta pysyvästi? + + + Delete entry(s)? + Poista tietue?Poista tietueet? + + + Move entry(s) to recycle bin? + Siirrä tietue roskakoriin?Siirrä tietueet roskakoriin? - Close - Sulje + File opened in read only mode. + Tiedosto on avattu "vain luku"-tilassa. - General - Yleistä + Lock Database? + Lukitse tietokanta? - Password - Salasana + You are editing an entry. Discard changes and lock anyway? + Muokkaat tietuetta. Hylkää muutokset ja lukitse silti? - URL - URL + "%1" was modified. +Save changes? + Tietuetta "%1" muokattiin. +Tallennetaanko muutokset? - Expiration - Vanhentumisaika + Database was modified. +Save changes? + Tietokantaa on muokattu. +Tallenna muutokset? - Username - Käyttäjätunnus + Save changes? + Tallenna muutokset? - Autotype - Automaattitäydennys + Could not open the new database file while attempting to autoreload. +Error: %1 + Uutta tietokantaa ei voitu avata automaattisen uudelleenlatauksen yhteydessä. +Virhe: %1 - Searching - Etsitään + Disable safe saves? + Ota turvallinen tallennus pois käytöstä? - Attributes - Attribuutit + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC on epäonnistunut useaan otteeseen tietokannan tallentamisessa. Tämä johtuu luultavasti tiedostojen synkronoinnista, joka pitää tiedostoa lukittuna. +Ota turvallinen tallennus pois käytöstä ja yritä uudelleen? - Attachments - Liitteet + Writing the database failed. +%1 + Tietokantaan kirjoittaminen epäonnistui. +%1 - Notes - Muistiinpanot + Passwords + Salasanat - Window - Ikkuna + Save database as + Tallenna tietokanta nimellä - Sequence - Sekvenssi + KeePass 2 Database + KeePass 2 -tietokanta - Search - Etsi + Replace references to entry? + Korvaa tietueen viittaukset? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Tietueella "%1" on %2 viittaus. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen tai poistaa sen?Tietueella "%1" on %2 viittausta. Haluatko ylikirjoittaa viittaukset arvoilla, ohittaa tietueen tai poistaa sen? - Clear - Tyhjennä + Delete group + Poista ryhmä - Never - Ei koskaan + Move group to recycle bin? + Siirretäänkö ryhmä roskakoriin? - [PROTECTED] - [SUOJATTU] + Do you really want to move the group "%1" to the recycle bin? + Haluatko varmasti siirtää ryhmän "%1" roskakoriin? - Disabled - Pois käytöstä + Successfully merged the database files. + Tietokantatiedostot yhdistettiin onnistuneesti. - Enabled - Käytössä + Database was not modified by merge operation. + Tietokannan sisältö ei muuttunut yhdistämisen yhteydessä. + + + Shared group... + @@ -1293,7 +1649,7 @@ Haluatko yhdistää muutoksesi? Auto-Type - Automaattitäydennys + Automaattisyöttö Properties @@ -1347,37 +1703,21 @@ Haluatko yhdistää muutoksesi? New attribute Uusi attribuutti - - Confirm Remove - Vahvista poisto - Are you sure you want to remove this attribute? Haluatko varmasti poistaa tämän attribuutin? - - [PROTECTED] - [SUOJATTU] - - - Press reveal to view or edit - Paina Paljasta näyttääksesi tai muokataksesi - Tomorrow Huomenna %n week(s) - %n viikkoa%n viikkoa + %n viikko%n viikkoa %n month(s) - %n kuukautta%n kuukautta - - - 1 year - 1 vuosi + %n kuukausi%n kuukautta Apply generated password? @@ -1391,6 +1731,26 @@ Haluatko yhdistää muutoksesi? Entry updated successfully. Tietue päivitetty onnistuneesti. + + Entry has unsaved changes + Tietueella on tallentamattomia muutoksia + + + New attribute %1 + Uusi attribuutti %1 + + + [PROTECTED] Press reveal to view or edit + [SUOJATTU] Paina paljasta nähdäksesi tai muokataksesi + + + %n year(s) + %n vuosi%n vuotta + + + Confirm Removal + Vahvista poistaminen + EditEntryWidgetAdvanced @@ -1435,19 +1795,19 @@ Haluatko yhdistää muutoksesi? EditEntryWidgetAutoType Enable Auto-Type for this entry - Salli automaattitäydennys tälle merkinnälle + Salli automaattisyöttö tälle tietueelle Inherit default Auto-Type sequence from the &group - Peri automaattitäydennyksen oletussekvenssi &ryhmältä + Peri automaattisyötön oletussekvenssi &ryhmältä &Use custom Auto-Type sequence: - &Käytä mukautettua automaattitäydennyksen sekvenssiä: + &Käytä mukautettua automaattisyötön sekvenssiä: Window Associations - Ikkunoiden yhteysasetukset + Ikkunoiden liitokset + @@ -1509,11 +1869,11 @@ Haluatko yhdistää muutoksesi? Presets - Esiasetus + Esiasetukset Toggle the checkbox to reveal the notes section. - Ruksi valintaruutu näyttääksesi huomautusosio. + Ruksi valintaruutu näyttääksesi muistiinpano-osio. Username: @@ -1532,11 +1892,11 @@ Haluatko yhdistää muutoksesi? Remove key from agent after - Poista avain agentilta viiveellä + Poista avain agentista kun on kulunut seconds - s + sekuntia Fingerprint @@ -1544,7 +1904,7 @@ Haluatko yhdistää muutoksesi? Remove key from agent when database is closed/locked - Poista avain agentista kun tietokanta on suljettu/lukittu + Poista avain agentista kun tietokanta suljetaan/lukitaan Public key @@ -1552,7 +1912,7 @@ Haluatko yhdistää muutoksesi? Add key to agent when database is opened/unlocked - Lisää avain agenttiin kun tietokanta on avattu/lukitus avattu + Lisää avain agenttiin kun tietokanta avataan/lukitaan Comment @@ -1635,6 +1995,97 @@ Haluatko yhdistää muutoksesi? Peri ylemmältä ryhmältä (%1) + + EditGroupWidgetKeeShare + + Form + Lomake + + + Type: + Tyyppi: + + + Path: + Polku: + + + ... + ... + + + Password: + Salasana: + + + Inactive + Toimeton + + + Import from path + Tuo polusta + + + Export to path + Vie polkuun + + + Synchronize with path + Synkronoi polun kanssa + + + Your KeePassXC version does not support sharing your container type. Please use %1. + KeePassXC-versiosi ei tue jakamista tällä säiliötyypillä. Ole hyvä ja käytä tyyppiä %1. + + + Database sharing is disabled + Tietokannan jakaminen on poistettu käytöstä + + + Database export is disabled + Tietokannan vieminen on poistettu käytöstä + + + Database import is disabled + Tietokannan tuominen on poistettu käytöstä + + + KeeShare unsigned container + KeeSharen allekirjoittamaton säiliö + + + KeeShare signed container + KeeSharen allekirjoitettu säiliö + + + Select import source + Valitse tuonnin lähde + + + Select export target + Valitse viennin kohde + + + Select import/export file + Valitse tuonti-/vientitiedosto + + + Clear + Tyhjennä + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1655,15 +2106,15 @@ Haluatko yhdistää muutoksesi? Auto-Type - Automaattitäydennys + Automaattisyöttö &Use default Auto-Type sequence of parent group - &Peri auromaattitäydennyksen sekvenssi isäntäryhmältä + &Peri automaattisyötön sekvenssi emoryhmältä Set default Auto-Type se&quence - Aseta automaattitäydennyksen &oletussekvenssi + Aseta automaattisyötön &oletussekvenssi @@ -1692,10 +2143,6 @@ Haluatko yhdistää muutoksesi? Unable to fetch favicon. Faviconin noutaminen ei onnistu - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Vinkki: voit asettaa Googlen varajärjestelmäksi kohdassa Työkalut > Asetukset > Turvallisuus - Images Kuvat @@ -1704,14 +2151,6 @@ Haluatko yhdistää muutoksesi? All files Kaikki tiedostot - - Select Image - Valitse kuva - - - Can't read icon - Kuvaketta ei voida lukea - Custom icon already exists Mukautettu kuvake on jo olemassa @@ -1721,8 +2160,36 @@ Haluatko yhdistää muutoksesi? Vahvista poisto - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Tämä kuvake on %1 tietueen käytössä, ja se korvataan oletuskuvakkeella. Haluatko varmasti poistaa tämän kuvakkeen? + Custom icon successfully downloaded + Mukautettu ikoni ladattu onnistuneesti + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Vinkki: Voit asettaa DuckDuckGo:n ikonien lataukseen asetuksen Työkalut>Asetukset>Turvallisuus alta + + + Select Image(s) + Valitse kuva(t) + + + Successfully loaded %1 of %n icon(s) + %1 ikoni kaikista (%n) ladattiin onnistuneesti%1 ikonia kaikista (%n) ladattiin onnistuneesti + + + No icons were loaded + Yhtään ikonia ei ladattu + + + %n icon(s) already exist in the database + %n ikoni on jo tietokannassa%n ikonia on jo tietokannassa + + + The following icon(s) failed: + Seuraava ikoni epäonnistui:Seuraavat ikonit epäonnistuivat: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen?Ikonia käytetään %n tietueessa, ja se korvataan oletusikonilla. Oletko varma, että haluat poistaa sen? @@ -1773,9 +2240,8 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Entry - - Clone - Suffix added to cloned entries - - Klooni + %1 - Clone + %1 - Klooni @@ -1817,11 +2283,7 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Are you sure you want to remove %n attachment(s)? - Haluatko varmasti poistaa %n liitettä?Haluatko varmasti poistaa %n liitettä? - - - Confirm Remove - Vahvista poisto + Haluatko varmasti poistaa &n liitettä?Haluatko varmasti poistaa %n liitettä? Save attachments @@ -1860,10 +2322,15 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. %1 - Unable to open files: + Confirm remove + Vahvista poisto + + + Unable to open file(s): %1 - Tiedostojen avaaminen epäonnistui: -%1 + Tiedostoa ei voitu avata: +%1Tiedostoja ei voitu avata: +%1 @@ -1897,7 +2364,7 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Ref: Reference abbreviation - Viittaus: + Viittaus: Group @@ -1947,6 +2414,106 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Attachments Liitteet + + Yes + Kyllä + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Luo ajastetun kertakäyttöisen salasanan (TOTP) tunniste + + + Close + Sulje + + + General + Yleistä + + + Username + Käyttäjätunnus + + + Password + Salasana + + + Expiration + Vanhentumisaika + + + URL + URL + + + Attributes + Attribuutit + + + Attachments + Liitteet + + + Notes + Muistiinpanot + + + Autotype + Automaattisyöttö + + + Window + Ikkuna + + + Sequence + Sekvenssi + + + Searching + Hakeminen + + + Search + Etsi + + + Clear + Tyhjennä + + + Never + Ei koskaan + + + [PROTECTED] + [SUOJATTU] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Käytössä + + + Disabled + Pois käytöstä + + + Share + Jaa + EntryView @@ -1985,6 +2552,11 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Recycle Bin Roskakori + + [empty] + group has no children + [tyhjä] + HostInstaller @@ -1997,61 +2569,6 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Native messaging -skriptiä ei voitu tallentaa. - - HttpPasswordGeneratorWidget - - Length: - Pituus: - - - Character Types - Merkkityypit - - - Upper Case Letters - Isot kirjaimet - - - A-Z - A-Z - - - Lower Case Letters - Pienet kirjaimet - - - a-z - a-z - - - Numbers - Numerot - - - 0-9 - 0-9 - - - Special Characters - Erikoismerkit - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Poissulje samannäköiset merkit - - - Ensure that the password contains characters from every group - Varmista, että salasana sisältää merkkejä jokaisesta ryhmästä - - - Extended ASCII - Laajennettu ASCII - - KMessageWidget @@ -2077,6 +2594,26 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Wrong key or database file is corrupt. Väärä avain tai tietokanta on korruptoitunut. + + missing database headers + tietokannan otsaketiedot puuttuvat + + + Header doesn't match hash + Otsaketieto ei vastaa tiivistettä (hash) + + + Invalid header id size + Virheellinen otsaketietojen id:n koko + + + Invalid header field length + Virhellinen otsaketietojen kentän koko + + + Invalid header data length + Virheellinen otsaketietojen sisällön koko + Kdbx3Writer @@ -2235,10 +2772,6 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. KdbxReader - - Invalid cipher uuid length - Virheellinen salauksen uuid:n pituus - Unsupported cipher Salausta ei tueta @@ -2293,6 +2826,18 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Unsupported KeePass 2 database version. Ei-tuettu KeePass 2 -tietokantaversio. + + Invalid cipher uuid length: %1 (length=%2) + Virheellinen salauksen uuid:n pituus: %1 (pituus=%2) + + + Unable to parse UUID: %1 + UUID:tä ei voitu jäsentää: %1 + + + Failed to read database file. + Tietokantatiedoston lukeminen epäonnistui. + KdbxXmlReader @@ -2364,10 +2909,6 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant History element with different uuid Historiaelementti eri uuid:llä - - Unable to decrypt entry string - Tietueen merkkijonon salausta ei voitu purkaa - Duplicate custom attribute found Itse valittu attribuutti on jo olemassa @@ -2417,6 +2958,14 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Translator meant is a binary data inside an entry Binääriä ei voitu purkaa + + XML error: +%1 +Line %2, column %3 + XML-virhe: +%1 +Rivi %2, sarake %3 + KeePass1OpenWidget @@ -2426,7 +2975,7 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Unable to open the database. - Tietokannan avaaminen ei onnistunut. + Tietokannan avaaminen epäonnistui. @@ -2580,55 +3129,145 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Invalid entry field type Virheellinen tietueen kentän tyyppi - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – suositeltu) + unable to seek to content position + sisällön sijaintia ei voitu hakea - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Olemassa oleva yhden instanssin lukkotiedosto on virheellinen. Avataan uusi instanssi. + Disabled share + Jakaminen poistettu käytöstä - The lock file could not be created. Single-instance mode disabled. - Lukkotiedosto ei voitu luoda. Yhden instanssin tila otettu pois käytöstä. + Import from + Tuo - Another instance of KeePassXC is already running. - Toinen KeePassXC-instanssi on jo käynnissä. + Export to + Vie - Fatal error while testing the cryptographic functions. - Vakava virhe kryptografisia toimintoa testattaessa. + Synchronize with + Synkronoi - KeePassXC - Error - KeePassXC - Virhe + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Avainkomponentti + + + Key Component Description + Avainkomponentin kuvaus + + + Cancel + Peruuta + + + Key Component set, click to change or remove + Avainkomponentti asetettu, paina muokataksesi tai poistaaksesi + + + Add %1 + Add a key component + Lisätty %1 + + + Change %1 + Change a key component + Muutettu %1 + + + Remove %1 + Remove a key component + Poista %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 asetettu, paina muokataksesi tai poistaaksesi + + + + KeyFileEditWidget + + Browse + Selaa + + + Generate + Luo + + + Key File + Avaintiedosto + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Lisäturvaksi voit lisätä avaintiedoston, joka sisältää sattumanvaraista dataa.</p><p>Tämä tiedosto täytyy pitää salassa eikä sitä saa koskaan hävittää!</p> + + + Legacy key file format + Vanha avaintiedostomuoto + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Käytät vanhaa avaintiedoston muotoa joka ei ole välttämättä tuettu tulevaisuudessa. + +Ole hyvä ja mene pääsalasanan asetuksiin ja luo uusi avaintiedosto. + + + Error loading the key file '%1' +Message: %2 + Avaintiedostoa '%1' ei voitu avata +Viesti: %2 + + + Key files + Avaintiedostot + + + All files + Kaikki tiedostot + + + Create Key File... + Luo avaintiedosto... + + + Error creating key file + Virhe luotaessa avaintiedostoa + + + Unable to create key file: %1 + Avaintiedostoa ei voitu luoda: %1 + + + Select a key file + Valitse avaintiedosto @@ -2639,11 +3278,7 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant &Recent databases - &Viimeisimmät tietokannat - - - Import - Tuo + Viimeisimmät tietokannat &Help @@ -2653,17 +3288,9 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant E&ntries Ti&etueet - - Copy att&ribute to clipboard - Kopioi att&ribuutti leikepöydälle - - - Time-based one-time password - Ajastettu kertakäyttöinen salasana - &Groups - &Ryhmät + Ryhmät &Tools @@ -2671,7 +3298,7 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant &Quit - L&opeta + &Lopeta &About @@ -2689,30 +3316,10 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant &Close database &Sulje tietokanta - - &New database - &Uusi tietokanta - - - Merge from KeePassX database - Yhdistä KeePassX-tietokannasta - - - &Add new entry - &Lisää tietue - - - &View/Edit entry - Näytä/&muokkaa tietuetta - &Delete entry &Poista tietue - - &Add new group - Lisää uusi &ryhmä - &Edit group Muokkaa r&yhmää @@ -2725,14 +3332,6 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Sa&ve database as... Ta&llenna tietokanta nimellä... - - Change &master key... - Vaih&da pääsalasana... - - - &Database settings - Tietok&annan asetukset - Database settings Tietokannan asetukset @@ -2741,22 +3340,14 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant &Clone entry &Kloonaa tietue - - &Find - &Etsi - Copy &username - Kopioi &käyttäjätunnus + Kopioi käyttäjä&tunnus Copy username to clipboard Kopioi käyttäjätunnus leikepöydälle - - Cop&y password - Kopioi &salasana - Copy password to clipboard Kopioi salasana leikepöydälle @@ -2769,14 +3360,6 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Password Generator Salasanageneraattori - - &Perform Auto-Type - S&uorita automaattitäydennys - - - &Open URL - &Avaa URL - &Lock databases &Lukitse tietokannat @@ -2803,28 +3386,12 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Copy notes to clipboard - Kopioi huomautukset leikepöydälle + Kopioi muistiinpanot leikepöydälle &Export to CSV file... &Vie CSV-tiedostoon... - - Import KeePass 1 database... - Tuo KeePass 1 -tietokanta... - - - Import CSV file... - Tuo CSV-tiedosto... - - - Re&pair database... - Ko&rjaa tietokanta... - - - Show TOTP - Näytä TOTP - Set up TOTP... Aseta TOTP... @@ -2845,14 +3412,6 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Access error for config file %1 Pääsyvirhe asetustiedostoon %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Vaikuttaa siltä, että käytät KeePassHTTP:tä selaimesi kanssa. Tämä ominaisuus on vanhentunut ja tuki sille poistetaan tulevaisuudessa.<br>Ole hyvä ja vaihda selainlaajennus KeePassXC-Browser:iin! Mikäli tarvitset apua sen käyttöönottoon, vieraile <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">oppaassamme</a>(varoitus %1/3).</p> - - - read-only - vain-luku - Settings Asetukset @@ -2865,26 +3424,6 @@ Tämä muunnos toimii yhdensuuntaisesti. Et välttämättä saa enää tietokant Quit KeePassXC Sulje KeePassXC - - KeePass 2 Database - Keepass 2 -tietokanta - - - All files - Kaikki tiedostot - - - Open database - Avaa tietokanta - - - Save repaired database - Tallenna korjattu tietokanta - - - Writing the database failed. - Tietokannan kirjoitus levylle epäonnistui. - Please touch the button on your YubiKey! Kosketa YubiKeyssa olevaa painiketta! @@ -2897,6 +3436,269 @@ This version is not meant for production use. On mahdollista, että tietokantasi korruptoituu. Pidä huolta sen varmuuskopiosta. Tätä versiota ei ole tarkoitettu päivittäiseen käyttöön. + + &Donate + &Lahjoita + + + Report a &bug + Ilmoita &virheestä + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + VAROITUS: Qt-versiosi voi aiheuttaa KeePassXC:n kaatumisen näytön näppäimistöllä! +Suosittelemme, että käytät AppImagea, jonka voit hakea lataussivustoltamme. + + + &Import + &Tuo + + + Copy att&ribute... + Kopioi att&ribuutti... + + + TOTP... + TOTP... + + + &New database... + &Uusi tietokanta + + + Create a new database + Luo uusi tietokanta + + + &Merge from database... + &Yhdistä tietokannasta... + + + Merge from another KDBX database + Yhdistä toisesta KDBX-tietokannasta + + + &New entry + Uusi &tietue + + + Add a new entry + Lisää uusi tietue + + + &Edit entry + &Muokkaa tietuetta + + + View or edit entry + Katso tai muokkaa tietuetta + + + &New group + Uusi &ryhmä + + + Add a new group + Lisää uusi ryhmä + + + Change master &key... + Muuta &pääsalasanaa + + + &Database settings... + &Tietokannan asetukset + + + Copy &password + Kopioi &salasana + + + Perform &Auto-Type + Suorita &automaattitäydennys + + + Open &URL + &Avaa URL + + + KeePass 1 database... + KeePass 1 -tietokanta... + + + Import a KeePass 1 database + Tuo KeePass 1 -tietokanta + + + CSV file... + CSV-tiedosto... + + + Import a CSV file + Tuo CSV-tiedosto + + + Show TOTP... + Näytä TOTP... + + + Show TOTP QR Code... + Näytä TOTP QR-koodi... + + + Check for Updates... + Tarkista päivitykset... + + + Share entry + Jaa tietue + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + HUOM: Käytät KeePassXC:n esiversiota! +Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäiseen käyttöön. + + + Check for updates on startup? + Tarkistetaanko päivitykset käynnistyksen yhteydessä? + + + Would you like KeePassXC to check for updates on startup? + Haluatko että KeePassXC tarkistaa päivitykset käynnistyessään? + + + You can always check for updates manually from the application menu. + Voit tarkistaa päivitykset manuaalisesti sovellusvalikosta. + + + + Merger + + Creating missing %1 [%2] + Luodaan puuttunutta %1 [%2] + + + Relocating %1 [%2] + Uudelleensijoitetaan %1 [%2] + + + Overwriting %1 [%2] + Ylikirjoitetaan %1 [%2] + + + older entry merged from database "%1" + vanhempi tietue yhdistetty tietokannasta "%1" + + + Adding backup for older target %1 [%2] + Lisätään varmuuskopio vanhemmalle kohteelle %1 [%2] + + + Adding backup for older source %1 [%2] + Lisätään varmuuskopio vanhemmalle lähteelle %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Uudelleensijoitetaan vanhempi kohdetietue uuden lähteen päälle %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Uudelleensijoitetaan vanhempi lähdetietue uuden kohteen päälle %1 [%2] + + + Synchronizing from newer source %1 [%2] + Synkronoidaan uudemmasta lähteestä %1 [%2] + + + Synchronizing from older source %1 [%2] + Synkronoidaan vanhemmasta lähteestä %1 [%2] + + + Deleting child %1 [%2] + Poistetaan lasta %1 [%2] + + + Deleting orphan %1 [%2] + Poistetaan orpoa %1 [%2] + + + Changed deleted objects + Muutettiin poistettuja kohteita + + + Adding missing icon %1 + Lisätään puuttuva ikoni %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Luo uusi KeePassXC-tietokanta... + + + Root + Root group + Juuri + + + + NewDatabaseWizardPage + + WizardPage + Ohjattu sivu + + + En&cryption Settings + &Salausasetukset + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen. + + + Advanced Settings + Lisäasetukset + + + Simple Settings + Yksinkertaiset asetukset + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Salausasetukset + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Tietokannan pääsalasana + + + A master key known only to you protects your database. + Pääsalasana jonka vain sinä tiedät suojaa tietokantaasi. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Yleiset tietokannan tiedot + + + Please fill in the display name and an optional description for your new database: + Ole hyvä ja täytä tietokantasi nimi ja vapaaehtoinen kuvaus: + OpenSSHKey @@ -2922,7 +3724,7 @@ Tätä versiota ei ole tarkoitettu päivittäiseen käyttöön. Found zero keys - Yhtään avainta ei löytynyt + Löytyi nolla avainta Failed to read public key. @@ -2934,23 +3736,23 @@ Tätä versiota ei ole tarkoitettu päivittäiseen käyttöön. No private key payload to decrypt - Salauksen purku epäonnistui: salainen avain ei sisällä dataa + Salauksen purku epäonnistui: yksityisen avaimen sisältö on tyhjä Trying to run KDF without cipher - Yritetään tehdä avainderivaatiofunktiota ilman salausta + Yritetään tehdä avainmuunnosfunktiota ilman salausta Passphrase is required to decrypt this key - Avaimen purkuun vaaditaan tunnuslause + Avaimen purkuun vaaditaan salalause Key derivation failed, key file corrupted? - Avaimen derivointi epäonnistui. Onko avaintiedosto korruptoitunut? + Avaimen muuntaminen epäonnistui. Onko avaintiedosto korruptoitunut? Decryption failed, wrong passphrase? - Salauksen purku epäonnistui, väärä tunnuslause? + Salauksen purku epäonnistui, väärä salalause? Unexpected EOF while reading public key @@ -2998,125 +3800,30 @@ Tätä versiota ei ole tarkoitettu päivittäiseen käyttöön. - OptionDialog + PasswordEditWidget - Dialog - Dialogi + Enter password: + Syötä salasana: - This is required for accessing your databases from ChromeIPass or PassIFox - Tämä vaaditaan, jotta tietokantoja voidaan käyttää ChromeIPassilla or PassIFoxilla + Confirm password: + Vahvista salasana: - Enable KeePassHTTP server - Ota käyttöön KeePassHTTP-palvelin + Password + Salasana - General - Yleistä + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Salasana on kaikkein tärkein asia tietokannan suojauksessa.</p><p>Hyvät salasanat ovat pitkiä ja uniikkeja. KeePassXC voi luoda sellaisen sinulle.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Nä&ytä ilmoitus kun tilitietoja pyydetään + Passwords do not match. + Salasanat eivät ole samoja. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta - - - &Return only best matching entries - &Palauta vain parhaiten vastaavat tietueet - - - Re&quest to unlock the database if it is locked - Pyyd&ä tietokannan lukituksen avaamista jos se on lukittu - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Vain tietueet samalla skeemalla (http://, https://, ftp://, ...) palautetaan. - - - &Match URL schemes - Sovita verkko-osoitteen kaavaan - - - Sort matching entries by &username - Järjestä &vastaavat tietueet käyttäjätunnuksen mukaan - - - Sort &matching entries by title - Järjestä &vastaavat merkinnät otsikon mukaan - - - R&emove all shared encryption keys from active database - &Poista kaikki jaetut salausavaimet aktiivisesta tietokannasta - - - Re&move all stored permissions from entries in active database - &Poista kaikki jaetut salausavaimet aktiivisesta tietokannasta - - - Password Generator - Salasanageneraattori - - - Advanced - Lisää.. - - - Always allow &access to entries - Salli aina &pääsy tietueisiin - - - Always allow &updating entries - Salli aina tietueiden p&äivittäminen - - - Only the selected database has to be connected with a client. - Vain valittu tietokanta tulee olla yhdistetty asiakkaan kanssa. - - - Searc&h in all opened databases for matching entries - E&tsi kaikista avatuista tietokannoista vastaavia tietueita - - - Automatically creating or updating string fields is not supported. - Automaattinen lisäjonokenttien luonti tai päivittäminen ei ole tuettu - - - &Return advanced string fields which start with "KPH: " - Palauta lisämerkkijonokentät jotka alkavat "KPH: " - - - HTTP Port: - HTTP-portti: - - - Default port: 19455 - Oletusportti: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC kuuntelee tätä porttia osoitteessa 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Varoitus:</b> Seuraavat valinnat voivat olla vaarallisia! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP on vanhennettu ja se poistetaan tulevaisuudessa.<br>Vaihda KeePassXC-Browseriin! Ohjeita siirtymiseen on tarjolla <a href="https://keepassxc.org/docs/keepassxc-browser-migration">siirtymäohjeessa</a>.</p> - - - Cannot bind to privileged ports - Ei voida sitoutua etuoikeutettuihin portteihin - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Ei voida sitoutua etuoikeutettuihin portteihin, jotka ovat alle 1024! -Käytetään oletusporttia 19455. + Generate master password + Luo pääsalasana @@ -3180,24 +3887,16 @@ Käytetään oletusporttia 19455. Passphrase - Tunnuslause + Salalause Wordlist: Sanalista: - - Word Count: - Sanamäärä: - Word Separator: Sanaerotin: - - Generate - Generoi - Copy Kopioi @@ -3210,10 +3909,6 @@ Käytetään oletusporttia 19455. Close Sulje - - Apply - Käytä - Entropy: %1 bit Entropia: %1 bit @@ -3242,6 +3937,171 @@ Käytetään oletusporttia 19455. Password quality Erinomainen + + ExtendedASCII + Laajennettu ASCII + + + Switch to advanced mode + Vaihda kehittyneeseen tilaan + + + Advanced + Lisäasetukset + + + Upper Case Letters A to F + Isot kirjaimet A:sta F:ään + + + A-Z + A-Z + + + Lower Case Letters A to F + Pienet kirjaimet A:sta F:ään + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Sulut + + + {[( + {[( + + + Punctuation + Välimerkit + + + .,:; + .,:; + + + Quotes + Lainausmerkit + + + " ' + " ' + + + Math + Matemaattiset + + + <*+!?= + <*+!?= + + + Dashes + Viivat + + + \_|-/ + \_|-/ + + + Logograms + Erikoismerkit + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Vaihda yksinkertaiseen tilaan + + + Simple + Yksinkertainen + + + Character set to exclude from generated password + Kirjaimet joita ei käytetä salasanan muodostukseen + + + Do not include: + Älä sisällytä: + + + Add non-hex letters to "do not include" list + Lisää heksakoodia sisältämättömät kirjaimet "älä sisällytä" -listaan + + + Hex + Heksa + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Poissuljetut kirjaimet: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Sanojen &lukumäärä: + + + Regenerate + Luo uudelleen + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Valitse + + + + QMessageBox + + Overwrite + Korvaa + + + Delete + Poista + + + Move + Siirrä + + + Empty + Tyhjä + + + Remove + Poista + + + Skip + Ohita + + + Disable + Kytke pois päältä + + + Merge + Yhdistä + QObject @@ -3261,34 +4121,18 @@ Käytetään oletusporttia 19455. Cannot decrypt message Viestin salauksen purkaminen ei onnistu - - Timeout or cannot connect to KeePassXC - Aikakatkaisu tai yhteys KeePassXC:hen ei onnistu - Action cancelled or denied Toiminto peruttiin tai estettiin - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Viestin salauksen purkaminen ei onnistu tai julkista avainta ei löydy. Onko Native Messaging käytössä KeePassXC:ssä? - KeePassXC association failed, try again Liittäminen KeePassXC:hen epäonnistui, yritä uudelleen - - Key change was not successful - Avainvaihto ei onnistunut - Encryption key is not recognized Salausavainta ei tunnistettu - - No saved databases found - Tallennettuja tietokantoja ei löytynyt - Incorrect action Virheellinen toiminto @@ -3311,7 +4155,7 @@ Käytetään oletusporttia 19455. Add a new entry to a database. - Lisää uusi tietue tietokantaan + Lisää uusi tietue tietokantaan. Path of the database. @@ -3327,7 +4171,7 @@ Käytetään oletusporttia 19455. Username for the entry. - Tietueen käyttäjänimi + Tietueen käyttäjänimi. username @@ -3380,11 +4224,11 @@ Käytetään oletusporttia 19455. Title for the entry. - Tietueen otsikko. + Tietueen nimi title - otsikko + nimi Path of the entry to edit. @@ -3414,10 +4258,6 @@ Käytetään oletusporttia 19455. Insert password to unlock %1: Syötä salasana avataksesi %1: - - Failed to load key file %1 : %2 - Avaintiedoston %1 lataaminen epäonnistui : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3502,12 +4342,6 @@ Käytettävissä olevat komennot: error reading from device virhe laitteelta luettaessa - - file empty ! - - tiedosto tyhjä ! - - malformed string Viallinen merkkijono @@ -3544,10 +4378,6 @@ Käytettävissä olevat komennot: Created Luotu - - Legacy Browser Integration - Vanha selainintegraatio - Browser Integration Selainintegraatio @@ -3576,10 +4406,6 @@ Käytettävissä olevat komennot: Word count for the diceware passphrase. Sanamäärä noppaware-salalauseelle. - - count - määrä - Wordlist for the diceware generator. [Default: EFF English] @@ -3591,35 +4417,452 @@ Käytettävissä olevat komennot: Luo uusi satunnainen salasana. - Length of the generated password. - Luodun salasanan pituus. + Invalid value for password length %1. + Väärä arvo salasanan pituudeksi %1. - Use lowercase characters in the generated password. - Käytä pieniä kirjaimia luodussa salasanassa. + Could not create entry with path %1. + Tietuetta ei voitu luoda polun %1 kanssa. - Use uppercase characters in the generated password. - Käytä isoja kirjaimia luodussa salasanassa. + Enter password for new entry: + Anna uuden tietueen salasana: - Use numbers in the generated password. - Käytä numeroita luodussa salasanassa. + Writing the database failed %1. + Tietokantaan kirjoittaminen epäonnistui %1. - Use special characters in the generated password. - Käytä erikoismerkkejä luodussa salasanassa. + Successfully added entry %1. + Tietueen %1 lisäys onnistui. - Use extended ASCII in the generated password. - Käytä laajennettua ASCII-merkistöä luodussa salasanassa. + Copy the current TOTP to the clipboard. + Kopioi nykyinen TOTP leikepöydälle. + + + Invalid timeout value %1. + Virheellinen aikakatkaisun arvo %1. + + + Entry %1 not found. + Tietuetta %1 ei löytynyt. + + + Entry with path %1 has no TOTP set up. + Tietueella joka käyttää polkua %1 ei ole TOTP:ia asetettuna. + + + Entry's current TOTP copied to the clipboard! + Tietueen tämän hetkinen TOTP on kopioitu leikepöydälle! + + + Entry's password copied to the clipboard! + Tietueen salasana on kopioitu leikepöydälle! + + + Clearing the clipboard in %1 second(s)... + Tyhjennetään leikepöytä %1 sekunnissa...Tyhjennetään leikepöytä %1 sekunnissa... + + + Clipboard cleared! + Leikepöytä tyhjennetty! + + + Silence password prompt and other secondary outputs. + Hiljennä salasanamuistutus ja muut toissijaiset tulostukset. + + + count + CLI parameter + määrä + + + Invalid value for password length: %1 + Virheellinen arvo salasanan pituudelle: %1 + + + Could not find entry with path %1. + Tietuetta polulla %1 ei löydetty. + + + Not changing any field for entry %1. + Yhtään kenttää tietueelle %1 ei vaihdettu. + + + Enter new password for entry: + Anna tietueelle uusi salasana: + + + Writing the database failed: %1 + Tietokannan kirjoittaminen epäonnistui: %1 + + + Successfully edited entry %1. + Tietuetta %1 muokattiin onnistuneesti. + + + Length %1 + Pituus %1 + + + Entropy %1 + Entropia %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Monisanaiset ylimääräiset tavut %1 + + + Type: Bruteforce + Tyyppi: Väsytyshyökkäys + + + Type: Dictionary + Tyyppi: Sanakirja + + + Type: Dict+Leet + Tyyppi: Sanakirja + Leet + + + Type: User Words + Tyyppi: Käyttäjän sanat + + + Type: User+Leet + Tyyppi: Käyttäjän sanat + Leet + + + Type: Repeated + Tyyppi: Toistettu + + + Type: Sequence + Tyyppi: Sekvenssi + + + Type: Spatial + Tyyppi: Spatiaalinen + + + Type: Date + Tyyppi: Päivämäärä + + + Type: Bruteforce(Rep) + Tyyppi: Väsytyshyökkäys (toistettu) + + + Type: Dictionary(Rep) + Tyyppi: Sanakirja (toistettu) + + + Type: Dict+Leet(Rep) + Tyyppi: Sanakirja + Leet (toistettu) + + + Type: User Words(Rep) + Tyyppi: Käyttäjän sanat (toistettu) + + + Type: User+Leet(Rep) + Tyyppi: Käyttäjän sanat + Leet (toistettu) + + + Type: Repeated(Rep) + Tyyppi: Toistettu (toistettu) + + + Type: Sequence(Rep) + Tyyppi: Sekvenssi (toistettu) + + + Type: Spatial(Rep) + Tyyppi: Spatiaalinen (toistettu) + + + Type: Date(Rep) + Tyyppi: Päivämäärä (toistettu) + + + Type: Unknown%1 + Tyyppi: Tuntematon %1 + + + Entropy %1 (%2) + Entropia %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Salasanan pituus (%1) != osien (%2) summa *** + + + Failed to load key file %1: %2 + Avaintiedoston %1 lataaminen epäonnistui: %2 + + + File %1 does not exist. + Tiedostoa %1 ei ole. + + + Unable to open file %1. + Tiedostoa %1 ei voitu avata. + + + Error while reading the database: +%1 + Virhe tietokantaa luettaessa: +%1 + + + Error while parsing the database: +%1 + Virhe tietokantaa jäsennettäessä: +%1 + + + Length of the generated password + Luodun salasanan pituus + + + Use lowercase characters + Käytiä pieniä merkkejä + + + Use uppercase characters + Käytä isoja merkkejä + + + Use numbers. + Käytä numeroita. + + + Use special characters + Käytä erikoismerkkejä + + + Use extended ASCII + Käytä laajennettua ASCII-merkistöä + + + Exclude character set + Älä sisällytä merkkejä + + + chars + merkit + + + Exclude similar looking characters + Älä sisällytä samankaltaisilta vaikuttavia kirjaimia + + + Include characters from every selected group + Sisällytä kirjaimia jokaisesta valitusta ryhmästä + + + Recursively list the elements of the group. + Listaa ryhmän elementit rekursiivisesti + + + Cannot find group %1. + Ryhmää %1 ei löytynyt. + + + Error reading merge file: +%1 + Virhe lukiessa yhdistämiseen tarvittavaa tiedostoa: +%1 + + + Unable to save database to file : %1 + Tietokannan tallentaminen tiedostoon ei onnistu: %1 + + + Unable to save database to file: %1 + Tietokantaa ei voitu tallentaa tiedostoon: %1 + + + Successfully recycled entry %1. + Tietue %1 siirrettiin onnistuneesti roskakoriin. + + + Successfully deleted entry %1. + Tietue %1 poistettiin onnistuneesti. + + + Show the entry's current TOTP. + Näytä tietueen tämän hetkinen TOTP. + + + ERROR: unknown attribute %1. + VIRHE: Tuntematon attribuutti %1. + + + No program defined for clipboard manipulation + Ohjelmaa leikepöydän hallintaan ei ole määritelty. + + + Unable to start program %1 + Ohjelmaa %1 ei voitu käynnistää + + + file empty + tyhjä tiedosto + + + %1: (row, col) %2,%3 + %1: (rivi, sarake) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – suositeltu) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Virheelliset asetukset + + + Invalid Key + TOTP + Virheellinen avain + + + Message encryption failed. + Viestin salaus epäonnistui + + + No groups found + Ryhmiä ei löytynyt + + + Create a new database. + Luo uusi tietokanta. + + + File %1 already exists. + Tiedosto %1 on jo olemassa. + + + Loading the key file failed + Avaintiedoston lataaminen epäonnistui + + + No key is set. Aborting database creation. + Avainta ei ole asetettu. Perutaan tietokannan luominen. + + + Failed to save the database: %1. + Tietokannan tallentaminen epäonnistui: %1. + + + Successfully created new database. + Luotiin onnistuneesti uusi tietokanta. + + + Insert password to encrypt database (Press enter to leave blank): + Syötä salasana salataksesi tietokannan (Paina enter jättääksesi se tyhjäksi): + + + Creating KeyFile %1 failed: %2 + Avaintiedoston %1 luonti epäonnistui: %2 + + + Loading KeyFile %1 failed: %2 + Avaintiedoston %1 lataus epäonnistui: %2 + + + Remove an entry from the database. + Poista tietue tietokannasta. + + + Path of the entry to remove. + Poistettavan tietueen polku. + + + Existing single-instance lock file is invalid. Launching new instance. + Olemassa oleva yhden instanssin lukkotiedosto on virheellinen. Avataan uusi instanssi. + + + The lock file could not be created. Single-instance mode disabled. + Lukkotiedosto ei voitu luoda. Yhden instanssin tila otettu pois käytöstä. + + + KeePassXC - cross-platform password manager + KeePassXC - järjestelmäriippumaton salasanojen hallintasovellus + + + filenames of the password databases to open (*.kdbx) + avattavien salasanatietokantojen tiedostonimet (*.kdbx) + + + path to a custom config file + polku mukautettuun asetustiedostoon + + + key file of the database + tietokannan avaintiedosto + + + read password of the database from stdin + lue tietokannan salasana stdin:istä + + + Parent window handle + Ylemmän ikkunan kahva + + + Another instance of KeePassXC is already running. + Toinen KeePassXC-instanssi on jo käynnissä. + + + Fatal error while testing the cryptographic functions. + Vakava virhe kryptografisia toimintoa testattaessa. + + + KeePassXC - Error + KeePassXC - Virhe + + + Database password: + Tietokannan salasana: + + + Cannot create new group + QtIOCompressor Internal zlib error when compressing: - Sisäinen zlib-virhe pakatessa: + Sisäinen zlib virhe pakatessa: Error writing to underlying device: @@ -3646,15 +4889,101 @@ Käytettävissä olevat komennot: Internal zlib error: - Sisäinen zlib-virhe: + Sisäinen zlib-virhe: + + + + SSHAgent + + Agent connection failed. + Agentin yhteydenotto epäonnistui. + + + Agent protocol error. + Agentin protokollavirhe. + + + No agent running, cannot add identity. + Agentti ei ole käynnissä. Identiteettiä ei voitu lisätä. + + + No agent running, cannot remove identity. + Agentti ei ole käynnissä. Identiteettiä ei voitu poistaa. + + + Agent refused this identity. Possible reasons include: + Agentti hylkäsi tämän identiteetin. Mahdolliset syyt sisältävät: + + + The key has already been added. + Avain on jo lisätty. + + + Restricted lifetime is not supported by the agent (check options). + Agentti ei tue rajoitettua käyttöikää (tarkista asetukset). + + + A confirmation request is not supported by the agent (check options). + Agentti ei tue vahvistuspyyntöä (tarkista asetukset). + + + + SearchHelpWidget + + Search Help + Etsi apua + + + Search terms are as follows: [modifiers][field:]["]term["] + Hakutermit ovat seuraavat: [modifikaattorit][kenttä:]["]termi["] + + + Every search term must match (ie, logical AND) + Jokaisen hakutermin on sovittava yhteen (esim. looginen AND) + + + Modifiers + Modifikaattorit + + + exclude term from results + älä sisällytä termiä hakutuloksiin + + + match term exactly + termin on sovittava täysin yhteen + + + use regex in term + käytä termissä regex:iä + + + Fields + Kentät + + + Term Wildcards + Termin jokerimerkit (wildcards) + + + match anything + vastaa minkä tahansa kanssa + + + match one + vastaa yhtä + + + logical OR + looginen OR + + + Examples + Esimerkit SearchWidget - - Search... - Etsi... - Search Etsi @@ -3663,315 +4992,332 @@ Käytettävissä olevat komennot: Clear Tyhjennä - - Case Sensitive - Kirjainkoko on merkitsevä - Limit search to selected group Rajoita haku valittuun ryhmään + + Search Help + Etsi apua + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Etsi (%1)... + + + Case sensitive + Merkkikokoriippuvainen + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Uusi avaimenliittämispyyntö + Active + Aktiivinen - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Olet saanut avainlittämispyynnön yllä olevalle avaimelle -Jos haluat antaa sille pääsyoikeuden KeePassXC-tietokantaasi, -anna tunnisteelle nimi ja hyväksy. + Allow export + Salli vienti - KeePassXC: Overwrite existing key? - KeePassXC: Korvataanko olemassa oleva avain? + Allow import + Salli tuonti - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Jaettu salausavain nimeltä "%1" on jo olemassa. -Haluatko korvata sen? + Own certificate + Oma varmenne - KeePassXC: Update Entry - KeePassXC: Päivitä tietue + Fingerprint: + Sormenjälki: - Do you want to update the information in %1 - %2? - Haluatko päivittää tiedot osoitteesta %1 - %2? + Certificate: + Varmenne: - KeePassXC: Database locked! - KeePassXC: tietokanta lukittu! + Signer + Allekirjoittaja - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Aktiivinen tietokanta on lukittu! -Avaa valittu tietokanta tai valitse toinen avattu tietokanta. + Key: + Avain: - KeePassXC: Removed keys from database - KeePassXC: Poistettiin avaimet tietokannasta + Generate + Luo + + + Import + Tuo + + + Export + Vie + + + Imported certificates + Tuodut varmenteet + + + Trust + Luota + + + Ask + Kysy + + + Untrust + Älä luota + + + Remove + Poista + + + Path + Polku + + + Status + Tila + + + Fingerprint + Sormenjälki + + + Certificate + Varmenne + + + Trusted + Luotettu + + + Untrusted + Ei luotettu + + + Unknown + Tuntematon + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + KeeShare-avaintiedosto + + + All files + Kaikki tiedostot + + + Select path + Valitse polku + + + Exporting changed certificate + Viedään muuttuneita sertifikaatteja + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Viety sertifikaatti ei ole sama kuin käytössä oleva. Haluatko viedä tämän hetkisen sertifikaatin? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Tuo säiliöstä ilman allekirjoitusta + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Jaetun säiliön lähdettä ei voitu vahvistaa, sillä se ei ole allekirjoitettu. Haluatko todella tuoda sen kohteesta %1? + + + Import from container with certificate + Tuo säiliöstä sertifikaatin kanssa + + + Not this time + Ei tällä kertaa + + + Never + Ei koskaan + + + Always + Aina + + + Just this time + Vain tämän kerran + + + Import from %1 failed (%2) + Tuonti kohteesta %1 epäonnistui (%2) + + + Import from %1 successful (%2) + Tuonti kohteesta %1 onnistui (%2) + + + Imported from %1 + Tuotu kohteesta %1 + + + Signed share container are not supported - import prevented + Allekirjoitettu jaettu säiliö ei ole tuettu - tuonti estettiin + + + File is not readable + Tiedosto ei ole luettavissa + + + Invalid sharing container + Virheellinen jaettu säiliö + + + Untrusted import prevented + Ei-luotettu tuonti estettiin + + + Successful signed import + Onnistunut allekirjoitettu tuonti + + + Unexpected error + Odottamaton virhe + + + Unsigned share container are not supported - import prevented + Allekirjoittamattoman jaetut säiliöt eivät ole tuettu - tuonti estettiin + + + Successful unsigned import + Onnistunut allekirjoittamaton tuonti + + + File does not exist + Tiedostoa ei ole olemassa + + + Unknown share container type + Tuntematon jaetun säiliön tyyppi + + + Overwriting signed share container is not supported - export prevented + Allekirjoitetun jaetun säiliön ylikirjoittaminen ei ole tuettu - vienti estettiin + + + Could not write export container (%1) + Vietyä säiliötä ei voitu kirjoittaa (%1) + + + Overwriting unsigned share container is not supported - export prevented + Allekirjoittamattoman jaetun säiliön ylikirjoitus ei ole tuettu - vienti estettiin + + + Could not write export container + Vietyä säiliötä ei voitu kirjoittaa + + + Unexpected export error occurred + Tapahtui odottamaton vientivirhe + + + Export to %1 failed (%2) + Vienti kohteeseen %1 epäonnistui (%2) + + + Export to %1 successful (%2) + Vienti kohteeseen %1 onnistui (%2) + + + Export to %1 + Vie kohteeseen %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Ajastettu salasana + + + 000000 + 000000 + + + Copy + Kopioi - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Poistettiin %n salausavain KeePassX/Http-asetuksista.Poistettiin %n salausavainta KeePassX/Http-asetuksista. - - - KeePassXC: No keys found - KeePassXC: Avaimia ei löytynyt - - - No shared encryption-keys found in KeePassHttp Settings. - Jaettuja salausavaimia ei löytynyt KeePassHttp-asetuksista. - - - KeePassXC: Settings not available! - KeePassXC: Asetukset eivät ole käytettävissä! - - - The active database does not contain an entry of KeePassHttp Settings. - Aktiivinen tietokanta ei sisällä tietuetta KeePassHttp-asetuksilla. - - - Removing stored permissions... - Poistetaan talletettuja oikeuksia... - - - Abort - Keskeytä - - - KeePassXC: Removed permissions - KeePassXC: Poistetut käyttöoikeudet - - - Successfully removed permissions from %n entries. - Poistettiin käyttöoikeus %n tietueelta.Poistettiin käyttöoikeus %n tietueelta. - - - KeePassXC: No entry with permissions found! - KeePassXC: Merkintää käyttöoikeuksilla ei löytynyt! - - - The active database does not contain an entry with permissions. - Aktiivinen tietokanta ei sisällä yhtään tietuetta käyttöoikeuksien kanssa. + Expires in <b>%n</b> second(s) + Umpeutuu <b>%n</b> sekunnin kuluttuaUmpeutuu <b>%n</b> sekunnin kuluttua - SettingsWidget + TotpExportSettingsDialog - Application Settings - Sovelluksen asetukset + Copy + Kopioi - General - Yleistä + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + HUOM: Nämä TOTP-asetukset ovat mukautettuja eivätkä ne välttämättä toimi muiden autentikaattoreiden kanssa. - Security - Turvallisuus + There was an error creating the QR code. + QR-koodia luotaessa tapahtui virhe. - Access error for config file %1 - Pääsyvirhe asetustiedostoon %1 + Closing in %1 seconds. + Suljetaan %1 sekunnin kuluttua. - SettingsWidgetGeneral - - Basic Settings - Perusasetukset - - - Start only a single instance of KeePassXC - Käynnistä vain yksi KeePassXC-instanssi - - - Remember last databases - Muista viimeisimmät tietokannat - - - Remember last key files and security dongles - Muista viimeisimmät avaintiedostot ja tietoturva-avainlaitteet (donglet) - - - Load previous databases on startup - Lataa edelliset tietokannat käynnistäessä - - - Automatically save on exit - Tallenna automaattisesti suljettaessa - - - Automatically save after every change - Tallenna automaattisesti jokaisen muutoksen jälkeen - - - Automatically reload the database when modified externally - Lataa tietokanta automaattisesti uudelleen jos tietokantaa muokattiin muualla - - - Minimize when copying to clipboard - Pienennä ikkuna kopioidessa leikepöydälle - - - Minimize window at application startup - Pienennä ikkuna ohjelman käynnistyessä - - - Use group icon on entry creation - Käytä ryhmän kuvaketta tietuetta luodessa - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Älä merkitse tietokantaa muokatuksi mikäli tietueet eivät muutu (esim. ryhmien laajentamisen yhteydessä) - - - Hide the Details view - Piilota tarkemmat tiedot - - - Show a system tray icon - Näytä ilmoitusalueen kuvake - - - Hide window to system tray when minimized - Piiloita pienennetty ikkuna ilmoitusalueelle - - - Hide window to system tray instead of app exit - Piiloita ikkuna ilmoitusalueelle sulkemisen sijaan - - - Dark system tray icon - Tumma ilmoitusalueen kuvake - - - Language - Kieli - - - Auto-Type - Automaattitäydennys - - - Use entry title to match windows for global Auto-Type - Tietue on sopiva, jos sen nimi sisältyy kohdeikkunan otsikkoon yleisessä automaattitäydennyksessä - - - Use entry URL to match windows for global Auto-Type - Tietue on sopiva, jos sen osoite sisältyy kohdeikkunan otsikkoon yleisessä automaattitäydennyksessä - - - Always ask before performing Auto-Type - Kysy aina ennen automaattitäydennyksen käyttämistä - - - Global Auto-Type shortcut - Globaalin automaattitäydennyksen pikanäppäin - - - Auto-Type delay - Automaattitäydennyksen viive - - - ms - Milliseconds - ms - - - Startup - Käynnistys - - - File Management - Tiedostohallinta - - - Safely save database files (may be incompatible with Dropbox, etc) - Tallenna tietokannat turvallisesti (voi olla epäyhteensopiva Dropboxin tmv. kanssa) - - - Backup database file before saving - Ota tietokannasta varmuuskopio ennen tallentamista - - - Entry Management - Tietueiden hallinta - - - General - Yleistä - - - - SettingsWidgetSecurity - - Timeouts - Aikakatkaisut - - - Clear clipboard after - Tyhjennä leikepöytä kun on kulunut - - - sec - Seconds - s - - - Lock databases after inactivity of - Lukitse tietokannat jos on oltu joutilaana - - - Convenience - Mukavuus - - - Lock databases when session is locked or lid is closed - Lukitse tietokannat kun istunto lukitaan tai kansi suljetaan - - - Lock databases after minimizing the window - Lukitse tietokanta ikkunan pienennyksen jälkeen - - - Don't require password repeat when it is visible - Älä vaadi salasanan toistoa jos salasana on näkyvillä - - - Show passwords in cleartext by default - Näytä salasanat oletuksena selkokielisenä - - - Hide passwords in the preview panel - Piilota salasanat esikatselussa - - - Hide entry notes by default - Piilota tietueiden huomautukset - - - Privacy - Yksityisyys - - - Use Google as fallback for downloading website icons - Käytä Googlea varajärjestelmänä verkkosivustojen kuvakkeiden latausta varten - - - Re-lock previously locked database after performing Auto-Type - Uudelleenlukitse aikaisemmin lukittu tietokanta automaattisyötön jälkeen - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Määritä TOTP @@ -3993,59 +5339,84 @@ Avaa valittu tietokanta tai valitse toinen avattu tietokanta. Käytä mukautettuja asetuksia - Note: Change these settings only if you know what you are doing. - Huomautus: Muuta näitä asetuksia vain, jos tiedät mitä olet tekemässä. + Custom Settings + Mukautetut asetukset Time step: Aikaväli: - 8 digits - 8 numeroa - - - 6 digits - 6 numeroa + sec + Seconds + s Code size: Koodikoko: - sec - Seconds - s + 6 digits + 6 numeroa + + + 7 digits + 7 numeroa + + + 8 digits + 8 numeroa - TotpDialog + UpdateCheckDialog - Timed Password - Ajastettu salasana + Checking for updates + Tarkistetaan päivityksiä - 000000 - 000000 + Checking for updates... + Tarkistetaan päivityksiä... - Copy - Kopioi + Close + Sulje - Expires in - Vanhenee + Update Error! + Päivitysvirhe! - seconds - sekuntia + An error occurred in retrieving update information. + Päivitystietoja haettassa tapahtui virhe. - - - UnlockDatabaseWidget - Unlock database - Avaa tietokannan lukitus + Please try again later. + Yritä myöhemmin uudelleen. + + + Software Update + Ohjelmistopäivitys + + + A new version of KeePassXC is available! + Uusi versio KeePassXC:stä on saatavilla! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 on nyt saatavilla — käytössäsi on %2. + + + Download it at keepassxc.org + Lataa se osoitteesta keepassxc.org + + + You're up-to-date! + Olet ajan tasalla! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 on uusin saatavilla oleva versio @@ -4080,42 +5451,26 @@ Avaa valittu tietokanta tai valitse toinen avattu tietokanta. - main + YubiKeyEditWidget - Remove an entry from the database. - Poista tietue tietokannasta. + Refresh + Päivitä - Path of the database. - Tietokannan polku. + YubiKey Challenge-Response + YubiKeyn haaste/vastaus - Path of the entry to remove. - Poistettavan tietueen polku. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Jos omistat <a href="https://www.yubico.com/">YubiKey:n</a>, voit käyttää sitä lisäturvakeinona.</p><p>YubiKey vaatii yhden paikan asettamista <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Responseksi</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - järjestelmäriippumaton salasanojen hallintasovellus + No YubiKey detected, please ensure it's plugged in. + YubiKeyta ei ole valittu, varmista että se on liitetty. - filenames of the password databases to open (*.kdbx) - avattavien salasanatietokantojen tiedostonimet (*.kdbx) - - - path to a custom config file - polku mukautettuun asetustiedostoon - - - key file of the database - tietokannan avaintiedosto - - - read password of the database from stdin - lue tietokannan salasana stdin:istä - - - Parent window handle - Ylemmän ikkunan kahva + No YubiKey inserted. + YubiKey ei ole kiinni laittessa. \ No newline at end of file diff --git a/share/translations/keepassx_fr.ts b/share/translations/keepassx_fr.ts index 202d6c7b8..8384e1462 100644 --- a/share/translations/keepassx_fr.ts +++ b/share/translations/keepassx_fr.ts @@ -11,7 +11,7 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Signalez les bogues sur <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Signaler les bogues sur : <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. @@ -23,7 +23,7 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Voir Contributions sur GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Voir les contributions sur GitHub</a> Debug Info @@ -37,75 +37,14 @@ Copy to clipboard Copier dans le presse-papiers - - Version %1 - - Version %1 - - - - Revision: %1 - Révision : %1 - - - Distribution: %1 - Distribution : %1 - - - Libraries: - Bibliothèques : - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Système d’exploitation : %1 -Architecture processeur : %2 -Noyau : %3 %4 - - - Enabled extensions: - Extensions activées : - Project Maintainers: - Mainteneurs du projet : + Mainteneurs du projet : Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. L’équipe de KeePassXC remercie tout particulièrement debfx pour la création du KeePassX original. - - Build Type: %1 - - Genre de la version : %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - Confirmer l’accès à KeePassXC HTTP - - - Remember this decision - Mémoriser ce choix - - - Allow - Autoriser - - - Deny - Refuser - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 a demandé l’accès aux mots de passe pour l’élément suivant (ou les éléments suivants). -Veuillez indiquer si vous souhaitez autoriser l’accès. - AgentSettingsWidget @@ -113,12 +52,283 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. Enable SSH Agent (requires restart) Activer l’agent SSH (redémarrage nécessaire) + + Use OpenSSH for Windows instead of Pageant + Utiliser OpenSSH pour Windows au lieu de Pageant + + + + ApplicationSettingsWidget + + Application Settings + Paramètres de l’application + + + General + Général + + + Security + Sécurité + + + Access error for config file %1 + Erreur d’accès au fichier de configuration %1 + + + Icon only + Icône uniquement + + + Text only + Texte uniquement + + + Text beside icon + Texte à côté de l'icône + + + Text under icon + Texte sous l'icône + + + Follow style + Suivre le style + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Paramètres de base + + + Startup + Démarrage + + + Start only a single instance of KeePassXC + Démarrer une seule instance de KeePassXC + + + Remember last databases + Se souvenir des dernières bases de données + + + Remember last key files and security dongles + Mémoriser les derniers fichiers-clés et les clés électroniques de sécurité + + + Load previous databases on startup + Charger les bases de données précédentes au démarrage + + + Minimize window at application startup + Minimiser la fenêtre lors du démarrage de l’application + + + File Management + Gestion de fichiers + + + Safely save database files (may be incompatible with Dropbox, etc) + Enregistrer en toute sécurité les fichiers de base de données (peut être incompatible avec Dropbox, etc.) + + + Backup database file before saving + Sauvegarder le fichier de base de données avant d’enregistrer + + + Automatically save after every change + Enregistrer automatiquement après chaque changement + + + Automatically save on exit + Enregistrer automatiquement en quittant + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Ne pas indiquer la base de données comme modifiée pour les changements hors-données (par exemple : groupes développés) + + + Automatically reload the database when modified externally + Recharger automatiquement la base de données quand celle-ci est modifiée depuis l’extérieur + + + Entry Management + Gestion des entrées + + + Use group icon on entry creation + Utiliser l’icône de groupe à la création d’une entrée + + + Minimize when copying to clipboard + Minimiser après avoir copié dans le presse-papiers + + + Hide the entry preview panel + Masquer le panneau de prévisualisation de l'entrée + + + General + Général + + + Hide toolbar (icons) + Cacher la barre d'outils (icônes) + + + Minimize instead of app exit + Réduire au lieu de quitter l'application + + + Show a system tray icon + Afficher une icône dans la zone de notification + + + Dark system tray icon + Icône sombre dans la zone de notification + + + Hide window to system tray when minimized + Cacher la fenêtre dans la zone de notification une fois minimisée + + + Language + Langue + + + Auto-Type + Saisie automatique + + + Use entry title to match windows for global Auto-Type + Utiliser le titre de l’entrée dans la correspondance des fenêtres pour la saisie automatique globale. + + + Use entry URL to match windows for global Auto-Type + Utiliser l’URL de l’entrée dans la correspondance des fenêtres pour la saisie automatique globale. + + + Always ask before performing Auto-Type + Toujours demander avant de procéder à une saisie automatique + + + Global Auto-Type shortcut + Raccourci de la saisie automatique + + + Auto-Type typing delay + Délai de remplissage de la saisie automatique + + + ms + Milliseconds + ms + + + Auto-Type start delay + Délai de démarrage de la saisie automatique + + + Check for updates at application startup + Vérifier les mises à jour au démarrage de l'application + + + Include pre-releases when checking for updates + Inclure les versions préliminaires lors de la vérification des mises à jour + + + Movable toolbar + Barre d’outils mobile + + + Button style + Style de bouton + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Expirations + + + Clear clipboard after + Vider le presse-papiers après + + + sec + Seconds + s + + + Lock databases after inactivity of + Verrouiller les bases de données après une inactivité de + + + min + min + + + Forget TouchID after inactivity of + Oublier TouchID après inactivité + + + Convenience + Commodités + + + Lock databases when session is locked or lid is closed + Verrouiller les bases de données quand la session est verrouillée ou l’écran rabattu + + + Forget TouchID when session is locked or lid is closed + Oublier TouchID lorsque la session est verrouillée ou le capot fermé + + + Lock databases after minimizing the window + Verrouiller les bases de données lorsque la fenêtre est minimisée + + + Re-lock previously locked database after performing Auto-Type + Verrouiller à nouveau la base de données précédemment verrouillée après avoir effectué la saisie automatique + + + Don't require password repeat when it is visible + Ne pas demander de répéter le mot de passe lorsque celui-ci est visible + + + Don't hide passwords when editing them + Ne pas cacher les mots de passe pendant leur modification + + + Don't use placeholder for empty password fields + Ne pas utiliser d’élément de substitution pour des champs de mot de passe vides<br><br> + + + Hide passwords in the entry preview panel + Masquer les mots de passe dans le panneau de prévisualisation + + + Hide entry notes by default + Masquer les notes des entrées par défaut + + + Privacy + Confidentialité + + + Use DuckDuckGo as fallback for downloading website icons + Utiliser DuckDuckGo en second recours pour télécharger les icônes des sites Web + AutoType Couldn't find an entry that matches the window title: - Impossible de trouver une entrée qui corresponde au titre de la fenêtre : + Impossible de trouver une entrée qui corresponde au titre de la fenêtre : Auto-Type - KeePassXC @@ -187,7 +397,7 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. Select entry to Auto-Type: - Choisissez une entrée pour la saisie automatique : + Sélectionner une entrée à saisir automatiquement : @@ -215,6 +425,27 @@ Please select whether you want to allow access. Veuillez indiquer si vous souhaitez autoriser l’accès. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + Enregistrer l'entrée avec KeePassXC-Browser + + + Ok + Ok + + + Cancel + Annuler + + + You have multiple databases open. +Please select the correct database for saving credentials. + Plusieurs bases de données sont ouvertes. +Veuillez sélectionner la base de donnée souhaitée pour enregistrer les identifiants. + + BrowserOptionDialog @@ -223,7 +454,7 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. This is required for accessing your databases with KeePassXC-Browser - Ceci est obligatoire pour accéder à vos bases de données à partir de KeePassXC-Browser + Ceci est requis pour accéder à vos bases de données à partir de KeePassXC-Browser Enable KeepassXC browser integration @@ -256,7 +487,7 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. Show a &notification when credentials are requested Credentials mean login data requested via browser extension - Afficher une &notification lorsque les identifiants sont demandés + Afficher une &notification quand les identifiants sont demandés Re&quest to unlock the database if it is locked @@ -264,11 +495,11 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. Only entries with the same scheme (http://, https://, ...) are returned. - Seules les entrées avec le même schéma (http://, https://, …) sont retournées. + Seules les entrées répondant au même format (http://, https://, …) sont retournées. &Match URL scheme (e.g., https://...) - &Correspondance du format de l’URL (exemple https://…) + &Correspondre au format d’URL (p. ex. https://…) Only returns the best matches for a specific URL instead of all entries for the whole domain. @@ -276,25 +507,17 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. &Return only best-matching credentials - Retourner uniquement l’identifiant qui correspond le mieux + Ne &retourner que les meilleures correspondances d’identifiants Sort &matching credentials by title Credentials mean login data requested via browser extension - Trier les identifiants trouvés par titre + Trier par &titre les identifiants correspondants Sort matching credentials by &username Credentials mean login data requested via browser extension - Trier les identifiants trouvés par &nom d’utilisateur - - - &Disconnect all browsers - &Déconnecter tous les navigateurs - - - Forget all remembered &permissions - Oublier toutes les &autorisations accordées + Trier par nom d’&utilisateur les identifiants correspondants Advanced @@ -308,7 +531,7 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. Never ask before &updating credentials Credentials mean login data requested via browser extension - Ne &jamais demander avant de mettre à jour les identifiants + Ne jamais demander avant de &mettre à jour les identifiants Only the selected database has to be connected with a client. @@ -317,15 +540,15 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - Cherc&her des identifiants qui correspondent dans toutes les bases de données ouvertes + &Chercher les identifiants correspondants dans toutes les bases de données ouvertes Automatically creating or updating string fields is not supported. - La création ou la mise à jour automatiques ne sont pas prises en charge pour les champs textuels ! + La création ou la mise a jour automatique ne sont pas pris en charge pour les champs de chaînes de caractères ! &Return advanced string fields which start with "KPH: " - &Retourne les champs textuels avancés qui commencent par « KPH:  » + &Retourner les champs avancés de chaîne qui commencent par « KPH: » Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -337,7 +560,7 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. Support a proxy application between KeePassXC and browser extension. - Supporter une application proxy entre KeePassXC et l’extension pour navigateur web. + Supporter une application proxy entre KeePassXC et l’extension pour navigateur web Use a &proxy application between KeePassXC and browser extension @@ -355,27 +578,48 @@ Veuillez indiquer si vous souhaitez autoriser l’accès. Browse... Button for opening file dialog - Parcourir… + Parcourir... <b>Warning:</b> The following options can be dangerous! <b>Avertissement :</b> Les options suivantes peuvent être dangereuses ! - - Executable Files (*.exe);;All Files (*.*) - Fichiers exécutables (*.exe);;Tous les fichiers (*.*) - - - Executable Files (*) - Fichiers exécutables (*) - Select custom proxy location Sélectionner un proxy personnalisé - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Nous sommes désolés, mais KeePassXC-Browser n’est pas encore pris en charge pour les versions Snap. + &Tor Browser + &Navigateur Tor + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Attention</b>, l'application keepassxc-proxy n'a pas été trouvée !<br />Veuillez vérifier le répertoire d'installation de KeePassXC ou confirmez le chemin personnalisé dans les options avancées. <br />L'intégration au navigateur NE MARCHERA PAS sans l'application de serveur mandataire. <br />Chemin attendu : + + + Executable Files + Fichiers exécutables + + + All Files + Tous les fichiers + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Ne pas demander d'autorisation pour l'authentification HTTP &Basic + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,153 +660,55 @@ Voulez-vous la remplacer ? Do you want to update the information in %1 - %2? Voulez-vous mettre à jour les informations dans %1 - %2 ? - - KeePassXC: Database locked! - KeePassXC : La base de données est verrouillée ! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - La base de données active est verrouillée ! -Veuillez déverrouiller la base de données sélectionnée ou en choisir une autre déverrouillée. - - - KeePassXC: Settings not available! - KeePassXC : Les paramètres ne sont pas disponibles ! - - - The active database does not contain a settings entry. - La base de données active ne contient pas d’entrée pour les paramètres. - - - KeePassXC: No keys found - KeePassXC : Aucune clé n’a été trouvée - - - No shared encryption keys found in KeePassXC Settings. - Aucune clé de chiffrement n’a été trouvée dans les paramètres de KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC : Les clés ont été supprimées de la base de données - - - Successfully removed %n encryption key(s) from KeePassXC settings. - %n clé de chiffrement a été retirée avec succès des paramètres de KeePassXC.%n clés de chiffrement ont été retirées avec succès des paramètres de KeePassXC. - - - Removing stored permissions… - Retrait des autorisations enregistrées… - Abort Annuler - KeePassXC: Removed permissions - KeePassXC : Les autorisations ont été retirées + Converting attributes to custom data… + Conversion des attributs en données personnalisées… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC : Attributs KeePassHTTP convertis + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Les attributs de %1 entrées ont été converties avec succès. +%2 clés ont été déplacées vers les données personnalisées. - Successfully removed permissions from %n entry(s). - Les autorisations d’%n entrée ont été retirées avec succès.Les autorisations de %n entrées ont été retirées avec succès. + Successfully moved %n keys to custom data. + %n clé a été déplacée avec succès vers les données personnalisées.%n clés ont été déplacées avec succès vers les données personnalisées. - KeePassXC: No entry with permissions found! - KeePassXC : Aucune entrée avec autorisation n’a été trouvée ! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC : Aucune entrée contenant des attributs KeePassHTTP trouvée ! - The active database does not contain an entry with permissions. - La base de données active ne contient pas d’entrée avec des autorisations. - - - - ChangeMasterKeyWidget - - Password - Mot de passe + The active database does not contain an entry with KeePassHTTP attributes. + La base de données active ne contient pas d'entrée avec des attributs KeePassHTTP. - Enter password: - Saisir un mot de passe : + KeePassXC: Legacy browser integration settings detected + KeePassXC : Ancienne integration au navigateur détectée - Repeat password: - Répéter le mot de passe : + KeePassXC: Create a new group + - &Key file - &Fichier-clé + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Naviguer - - - Create - Créer - - - Cha&llenge Response - Cha&llenge-réponse - - - Refresh - Actualiser - - - Key files - Fichiers-clés - - - All files - Tous les fichiers - - - Create Key File... - Créer un fichier-clé… - - - Unable to create Key File : - Impossible de créer un fichier-clé : - - - Select a key file - Sélectionner un fichier-clé - - - Empty password - Mot de passe vide - - - Do you really want to use an empty string as password? - Voulez-vous vraiment laisser vide le champ de mot de passe ? - - - Different passwords supplied. - Les mots de passe que vous avez saisis sont différents. - - - Failed to set %1 as the Key file: -%2 - Échec de définition de %1 comme fichier-clé : -%2 - - - Legacy key file format - Format de fichier-clé hérité - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Vous utilisez un format de fichier-clé hérité qui pourrait ne plus être pris en charge à l’avenir. - -Veuillez envisager de générer un nouveau fichier-clé. - - - Changing master key failed: no YubiKey inserted. - Échec de changement de clé maîtresse : aucune YubiKey n’est insérée. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -573,7 +719,7 @@ Veuillez envisager de générer un nouveau fichier-clé. Append ' - Clone' to title - Ajouter « - Clone » au titre + Ajouter ' - Clone' au titre Replace username and password with references @@ -588,7 +734,7 @@ Veuillez envisager de générer un nouveau fichier-clé. CsvImportWidget Import CSV fields - Importer les champs CSV + Importer les champs du CSV filename @@ -624,11 +770,11 @@ Veuillez envisager de générer un nouveau fichier-clé. Number of headers line to discard - Nombre de lignes d’en-tête à ignorer + Nombre de lignes d’en-têtes à ignorer Consider '\' an escape character - Utiliser « \ » comme caractère d’échappement + Considère '\' comme un échappement Preview @@ -642,66 +788,99 @@ Veuillez envisager de générer un nouveau fichier-clé. Not present in CSV file Non présent dans le fichier CSV - - Empty fieldname - Nom de champ vide - - - column - colonne - Imported from CSV file - Importé du fichier CSV + Importé depuis un fichier CSV Original data: - Données originales : - - - Error(s) detected in CSV file ! - Des erreurs ont été détectées dans le fichier CSV ! - - - more messages skipped] - d’autres messages ont été cachés] + Données originales : Error Erreur + + Empty fieldname %1 + Nom de champ %1 vide + + + column %1 + colonne %1 + + + Error(s) detected in CSV file! + Des erreurs ont été détectées dans le fichier CSV ! + + + [%n more message(s) skipped] + [%n message supplémentaire ignoré][%n messages supplémentaires ignorés] + CSV import: writer has errors: - - Import CSV : erreurs d’écriture : - - - - - CsvImportWizard - - Error - Erreur - - - Unable to calculate master key - Impossible de calculer la clé maîtresse +%1 + Import CSV : scripteur a rencontré des erreurs : +%1 CsvParserModel - - %n byte(s), - %n octet, %n octets, - - - %n row(s), - %n ligne, %n lignes, - %n column(s) %n colonne%n colonnes + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n octet%n octets + + + %n row(s) + %n ligne%n lignes + + + + Database + + Root + Root group name + Racine + + + File %1 does not exist. + Le fichier %1 n'existe pas. + + + Unable to open file %1. + Impossible d'ouvrir le fichier %1. + + + Error while reading the database: %1 + Erreur lors de la lecture de la base de données : %1 + + + Could not save, database has no file name. + Impossible d'enregistrer car la base de données n'a pas de nom de fichier. + + + File cannot be written as it is opened in read-only mode. + Le fichier ne peut pas être enregistré car il est ouvert en lecture seule. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Déverrouiller la base de données - KeePassXC + DatabaseOpenWidget @@ -719,7 +898,7 @@ Veuillez envisager de générer un nouveau fichier-clé. Browse - Naviguer + Parcourir Refresh @@ -729,14 +908,6 @@ Veuillez envisager de générer un nouveau fichier-clé. Challenge Response: Question-réponse : - - Unable to open the database. - Impossible d’ouvrir la base de données. - - - Can't open key file - Impossible d’ouvrir le fichier-clé - Legacy key file format Format de fichier-clé hérité @@ -752,7 +923,7 @@ Veuillez envisager de générer un nouveau fichier-clé. Don't show this warning again - Ne plus afficher cet avertissement + Ne plus afficher cette avertissement All files @@ -766,53 +937,252 @@ Veuillez envisager de générer un nouveau fichier-clé. Select key file Sélectionner un fichier-clé - - - DatabaseRepairWidget - Repair database - Réparer la base de données + TouchID for quick unlock + TouchID pour déverrouiller rapidement - Error - Erreur + Unable to open the database: +%1 + Impossible d'ouvrir la base de données : +%1 - Can't open key file - Impossible d’ouvrir le fichier-clé - - - Unable to open the database. - Impossible d’ouvrir la base de données. - - - Database opened fine. Nothing to do. - La base de données s’est bien ouverte. Aucune action n’est nécéssaire. - - - Success - Réussite - - - The database has been successfully repaired -You can now save it. - La base de données a été réparée avec succès. -Vous pouvez maintenant l’enregistrer. - - - Unable to repair the database. - Impossible de réparer la base de données. + Can't open key file: +%1 + Impossible d’ouvrir le fichier-clé : +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Mots de passe + + + + DatabaseSettingsDialog + + Advanced Settings + Paramètres avancés + General Général - Encryption - Chiffrement + Security + Sécurité + + + Master Key + Clé maîtresse + + + Encryption Settings + Paramètres de chiffrement + + + Browser Integration + Intégration aux navigateurs + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Paramètres KeePassXC-Browser + + + &Disconnect all browsers + &Déconnecter tous les navigateurs + + + Forg&et all site-specific settings on entries + Oubli&er tous les paramètres d'entrée spécifiques aux sites + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Dépla&cer les attributs KeePassHTTP vers les données personnalisées KeePassXC-Browser + + + Stored keys + Clés stockées + + + Remove + Supprimer + + + Delete the selected key? + Supprimer la clé sélectionnée ? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Voulez-vous vraiment supprimer la clé sélectionnée ? +Cela peut empêcher la connexion avec l'extension de navigateur. + + + Key + Clé + + + Value + Valeur + + + Enable Browser Integration to access these settings. + Activez l'intégration avec le navigateur pour accéder à ces paramètres. + + + Disconnect all browsers + Déconnecter tous les navigateurs web + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Voulez-vous vraiment désactiver tous les navigateurs ? +Cela peut empêcher la connexion avec l'extension de navigateur. + + + KeePassXC: No keys found + KeePassXC : Aucune clé n’a été trouvée + + + No shared encryption keys found in KeePassXC settings. + Aucune clé de chiffrement trouvée dans les paramètres de KeePassXC. + + + KeePassXC: Removed keys from database + KeePassXC : Les clés ont été supprimées de la base de données + + + Successfully removed %n encryption key(s) from KeePassXC settings. + %n clé de chiffrement a été retirée avec succès des paramètres de KeePassXC.%n clés de chiffrement ont été retirées avec succès des paramètres de KeePassXC. + + + Forget all site-specific settings on entries + Oublier tous les paramètres d'entrée spécifiques aux sites + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Retrait des autorisations enregistrées… + + + Abort + Annuler + + + KeePassXC: Removed permissions + KeePassXC : Les autorisations ont été retirées + + + Successfully removed permissions from %n entry(s). + Les autorisations de %n entrée a été retirée avec succès.Les autorisations de %n entrées ont été retirées avec succès. + + + KeePassXC: No entry with permissions found! + KeePassXC : Aucune entrée avec autorisation n’a été trouvée ! + + + The active database does not contain an entry with permissions. + La base de données active ne contient pas d’entrée avec des autorisations. + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algorithme de chiffrement : + + + AES: 256 Bit (default) + AES : 256 bits (par défaut) + + + Twofish: 256 Bit + Twofish : 256 bits + + + Key Derivation Function: + Fonction de dérivation de clé (KDF) : + + + Transform rounds: + Cycles de transformation : + + + Benchmark 1-second delay + Benchmark avec 1 seconde de délai + + + Memory Usage: + Utilisation de la mémoire : + + + Parallelism: + Parallélisme : + + + Decryption Time: + Temps de déchiffrement : + + + ?? s + ?? s + + + Change + Modifier + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Une valeur plus élevée offre plus de sécurité mais l'ouverture de la base de données prendra plus de temps. + + + Database format: + Format de la base de données : + + + This is only important if you need to use your database with other programs. + Ce n'est important que si vous utilisez la base de données avec d'autres programmes. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recommandé) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + inchangé Number of rounds too high @@ -859,47 +1229,22 @@ Si vous conservez ce nombre, votre base de données pourrait être craquées tro MiB Abbreviation for Mebibytes (KDF settings) - MioMio + MiB MiB thread(s) Threads for parallel execution (KDF settings) - fil d’exécution fils d’exécution + fils d'exécutionfils d'exécution - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algorithme de chiffrement : + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES : 256 bits (par défaut) - - - Twofish: 256 Bit - Twofish : 256 bits - - - Key Derivation Function: - Fonction de dérivation de clé (KDF) : - - - Transform rounds: - Cycles de transformation : - - - Benchmark 1-second delay - Mesurer pour un délai d’une seconde - - - Memory Usage: - Utilisation de la mémoire : - - - Parallelism: - Parallélisme : + + %1 s + seconds + %1 s%1 s @@ -910,15 +1255,15 @@ Si vous conservez ce nombre, votre base de données pourrait être craquées tro Database name: - Nom de la base de données : + Nom de la base de données : Database description: - Description de la base de données : + Description de la base de données : Default username: - Nom d’utilisateur par défaut : + Nom d’utilisateur par défaut : History Settings @@ -934,7 +1279,7 @@ Si vous conservez ce nombre, votre base de données pourrait être craquées tro MiB - Mio + MiB Use recycle bin @@ -950,15 +1295,88 @@ Si vous conservez ce nombre, votre base de données pourrait être craquées tro - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Racine + Sharing + Partage + + Breadcrumb + Fil d'Ariane + + + Type + Type + + + Path + Chemin + + + Last Signer + Dernier signataire + + + Certificates + Certificats + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Ajouter une protection supplémentaire... + + + No encryption key added + Aucune clé de chiffrement ajoutée + + + You must add at least one encryption key to secure your database! + Vous devez ajouter au moins une clé de chiffrement pour protéger votre base de données ! + + + No password set + Aucun mot de passe défini + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + ATTENTION ! Vous n'avez pas défini de mot de passe. L'utilisation d'une base de données sans mot de passe est fortement découragée. + +Êtes-vous sûr de vouloir continuer sans mot de passe ? + + + Unknown error + Erreur inconnue + + + Failed to change master key + Impossible de modifier la clé maîtresse + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nom de la base de données : + + + Description: + Description : + + + + DatabaseTabWidget KeePass 2 Database - Base de données Keepass 2 + Base de données KeePass 2 All files @@ -968,30 +1386,10 @@ Si vous conservez ce nombre, votre base de données pourrait être craquées tro Open database Ouvrir la base de données - - File not found! - Le fichier est introuvable ! - - - Unable to open the database. - Impossible d’ouvrir la base de données. - - - File opened in read only mode. - Fichier ouvert en lecture seule. - - - Open CSV file - Ouvrir le fichier CSV - CSV file Fichier CSV - - All files (*) - Tous les fichiers (*) - Merge database Fusionner la base de données @@ -1002,39 +1400,7 @@ Si vous conservez ce nombre, votre base de données pourrait être craquées tro KeePass 1 database - Base de données Keepass 1 - - - Close? - Fermer ? - - - "%1" is in edit mode. -Discard changes and close anyway? - « %1 » est en mode édition. -Ignorer les changements et fermer quand même ? - - - Save changes? - Enregistrer les changements ? - - - "%1" was modified. -Save changes? - « %1 » a été modifié. -Enregistrer les changements ? - - - Writing the database failed. - Une erreur s’est produite lors de l’écriture de la base de données. - - - Passwords - Mots de passe - - - Save database as - Enregistrer la base de données sous + Base de données KeePass 1 Export database to CSV file @@ -1045,80 +1411,57 @@ Enregistrer les changements ? Échec de l’écriture du fichier CSV. - New database + Database creation error + Erreur de création de la base de données + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + La base de données créée n'a ni clé, ni KDF, elle ne peut pas être enregistrée. +Ceci est certainement un bogue, merci de le rapporter aux développeurs. + + + The database file does not exist or is not accessible. + Le fichier de base de données n'existe pas ou n'est pas accessible. + + + Select CSV file + Sélectionner un fichier CSV + + + New Database Nouvelle base de données - locked - verrouillée + %1 [New Database] + Database tab name modifier + %1 [Nouvelle base de données] - Lock database - Verrouiller la base de données + %1 [Locked] + Database tab name modifier + %1 [Verrouillé] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Impossible de verrouiller la base de données lors de changements. -Cliquez sur Annuler pour finir vos changements ou abandonnez-les. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Cette base de données a été modifiée. -Voulez-vous l’enregistrer avant de la verrouiller ? -Autrement, vos changements seront perdus - - - Disable safe saves? - Désactiver les enregistrements sécurisées ? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC n’a pas réussi, à plusieurs reprises, à enregistrer la base de données. Cela est probablement causé par le maintien d’un verrou sur le fichier enregistré par les services de synchronisation de fichiers. -Désactiver les enregistrements sécurisés et ressayer ? + %1 [Read-only] + Database tab name modifier + %1 [Lecture seule] DatabaseWidget Searching... - Recherche… - - - Change master key - Changer la clé maîtresse - - - Delete entry? - Supprimer l’entrée ? + Recherche... Do you really want to delete the entry "%1" for good? Voulez-vous vraiment supprimer définitivement l’entrée « %1 » ? - - Delete entries? - Supprimer les entrées ? - - - Do you really want to delete %1 entries for good? - Voulez-vous vraiment supprimer définitivement %1 entrées ? - - - Move entry to recycle bin? - Déplacer l’entrée vers la corbeille ? - Do you really want to move entry "%1" to the recycle bin? Voulez-vous vraiment déplacer l’entrée « %1 » vers la corbeille ? - - Move entries to recycle bin? - Déplacer les entrées vers la corbeille ? - Do you really want to move %n entry(s) to the recycle bin? Voulez-vous vraiment déplacer %n entrée vers la corbeille ?Voulez-vous vraiment déplacer %n entrées vers la corbeille ? @@ -1135,18 +1478,10 @@ Désactiver les enregistrements sécurisés et ressayer ? Remember my choice Se souvenir de mon choix - - Delete group? - Supprimer le groupe ? - Do you really want to delete the group "%1" for good? Voulez-vous vraiment supprimer définitivement le groupe « %1 » ? - - Unable to calculate master key - Impossible de calculer la clé maîtresse - No current database. Pas de base de données. @@ -1181,10 +1516,6 @@ Do you want to merge your changes? Le fichier de la base de données a été modifiée et vos changements ne sont pas enregistrés. Voulez-vous fusionner vos changements ? - - Could not open the new database file while attempting to autoreload this database. - La nouvelle base de données ne peut être ouverte pendant qu’un rafraîchissement automatique de l’actuelle est en cours. - Empty recycle bin? Vider la corbeille ? @@ -1193,88 +1524,111 @@ Voulez-vous fusionner vos changements ? Are you sure you want to permanently delete everything from your recycle bin? Êtes-vous certain de vouloir vider définitivement la corbeille ? - - - DetailsWidget - - Generate TOTP Token - Générer un code TOTP + + Do you really want to delete %n entry(s) for good? + Voulez-vous vraiment supprimer définitivement %1 entrée ?Voulez-vous vraiment supprimer définitivement %1 entrées ? + + + Delete entry(s)? + Supprimer l'entrée ?Supprimer les entrées ? + + + Move entry(s) to recycle bin? + Déplacer l’entrée vers la corbeille ?Déplacer les entrées vers la corbeille ? - Close - Fermer + File opened in read only mode. + Fichier ouvert en lecture seule. - General - Général + Lock Database? + Verrouiller la base de données ? - Password - Mot de passe + You are editing an entry. Discard changes and lock anyway? + Une entrée est en mode édition. Ignorer les changements et verrouiller quand même ? - URL - URL + "%1" was modified. +Save changes? + « %1 » a été modifié. +Enregistrer les changements ? - Expiration - Expiration + Database was modified. +Save changes? + La base de données a été modifiée. +Enregistrer les changements ? - Username - Nom d’utilisateur + Save changes? + Enregistrer les changements ? - Autotype - Saisie automatique + Could not open the new database file while attempting to autoreload. +Error: %1 + Impossible d'ouvrir le nouveau fichier de base de données lors du rafraîchissement automatique. +Erreur : %1 - Searching - Recherche… + Disable safe saves? + Désactiver les enregistrements sécurisées ? - Attributes - Attributs + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC n’a pas réussi, à plusieurs reprises, à enregistrer la base de données. Cela est probablement causé par le maintien d’un verrou sur le fichier enregistré par les services de synchronisation de fichiers. +Désactiver les enregistrements sécurisés et ressayer ? - Attachments - Pièces jointes + Writing the database failed. +%1 + Une erreur s’est produite lors de l’écriture de la base de données. +%1 - Notes - Notes + Passwords + Mots de passe - Window - Fenêtre + Save database as + Enregistrer la base de données sous - Sequence - Séquence + KeePass 2 Database + Base de données KeePass 2 - Search - Recherche + Replace references to entry? + Remplacer les références vers l'entrée ? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + L'entrée "%1" possède %2 référence. Voulez-vous écraser les références par les valeurs, ignorer cette entrée ou supprimer tout de même ?L'entrée « %1 » possède %2 références. Voulez-vous écraser les références par les valeurs, ignorer cette entrée ou supprimer tout de même ? - Clear - Effacer + Delete group + Supprimer le groupe - Never - Jamais + Move group to recycle bin? + Déplacer le groupe vers la corbeille ? - [PROTECTED] - [PROTÉGÉ] + Do you really want to move the group "%1" to the recycle bin? + Voulez-vous vraiment déplacer le groupe « %1 » vers la corbeille ? - Disabled - Désactivé + Successfully merged the database files. + Fusionné avec succès les fichiers de base de données. - Enabled - Activé + Database was not modified by merge operation. + La base de données n'a pas été modifiée par l'opération de fusion. + + + Shared group... + @@ -1341,28 +1695,16 @@ Voulez-vous fusionner vos changements ? Different passwords supplied. - Les mots de passe ne sont pas identiques. + Les mots de passe insérés sont différents. New attribute Nouvel attribut - - Confirm Remove - Confirmez la suppression - Are you sure you want to remove this attribute? Êtes-vous certain de vouloir supprimer cet attribut ? - - [PROTECTED] - [PROTÉGÉ] - - - Press reveal to view or edit - Appuyez sur Révéler pour voir ou éditer - Tomorrow Demain @@ -1375,10 +1717,6 @@ Voulez-vous fusionner vos changements ? %n month(s) %n mois%n mois - - 1 year - 1 an - Apply generated password? Appliquer le mot de passe généré ? @@ -1391,6 +1729,26 @@ Voulez-vous fusionner vos changements ? Entry updated successfully. Entrée mise à jour avec succès. + + Entry has unsaved changes + L'entrée contient des modifications non-enregistrées + + + New attribute %1 + Nouvel attribut %1 + + + [PROTECTED] Press reveal to view or edit + [PROTÉGÉ] Appuyez pour révéler ou éditer + + + %n year(s) + %n année%n années + + + Confirm Removal + Confirmer la suppression + EditEntryWidgetAdvanced @@ -1439,11 +1797,11 @@ Voulez-vous fusionner vos changements ? Inherit default Auto-Type sequence from the &group - Utiliser la séquence de saisie automatique par défaut du groupe + Utiliser la séquence par défaut de saisie automatique du &groupe &Use custom Auto-Type sequence: - Utiliser une séquence de saisie automatique personnalisée : + &Utiliser une séquence personnalisée de saisie automatique : Window Associations @@ -1459,7 +1817,7 @@ Voulez-vous fusionner vos changements ? Window title: - Titre de la fenêtre : + Titre de la fenêtre : Use a specific sequence for this association: @@ -1489,7 +1847,7 @@ Voulez-vous fusionner vos changements ? EditEntryWidgetMain URL: - URL : + URL : Password: @@ -1501,7 +1859,7 @@ Voulez-vous fusionner vos changements ? Title: - Titre : + Titre : Notes @@ -1517,7 +1875,7 @@ Voulez-vous fusionner vos changements ? Username: - Nom d’utilisateur : + Nom d’utilisateur : Expires @@ -1536,7 +1894,7 @@ Voulez-vous fusionner vos changements ? seconds - secondes + secondes Fingerprint @@ -1581,7 +1939,7 @@ Voulez-vous fusionner vos changements ? Browse... Button for opening file dialog - Parcourir… + Parcourir... Attachment @@ -1597,7 +1955,7 @@ Voulez-vous fusionner vos changements ? Require user confirmation when this key is used - Demander une confirmation de l’utilisateur lorsque cette clé est utilisée + Requiert une confirmation de l’utilisateur quand cette clé est utilisée @@ -1635,6 +1993,97 @@ Voulez-vous fusionner vos changements ? Hériter du groupe parent (%1) + + EditGroupWidgetKeeShare + + Form + Formulaire + + + Type: + Type : + + + Path: + Chemin : + + + ... + ... + + + Password: + Mot de passe : + + + Inactive + Inactif + + + Import from path + Importer depuis le chemin + + + Export to path + Exporter vers le chemin + + + Synchronize with path + Synchroniser avec le chemin + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + Le partage de base de données est désactivé + + + Database export is disabled + L'export de base de données est désactivé + + + Database import is disabled + L'import de base de données est désactivé + + + KeeShare unsigned container + KeeShare conteneur non signé + + + KeeShare signed container + KeeShare conteneur signé + + + Select import source + Sélectionner la source pour l'import + + + Select export target + Sélectionner la cible pour l'export + + + Select import/export file + Sélectionner le fichier d'import/export + + + Clear + Effacer + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1651,7 +2100,7 @@ Voulez-vous fusionner vos changements ? Search - Chercher + Recherche Auto-Type @@ -1659,7 +2108,7 @@ Voulez-vous fusionner vos changements ? &Use default Auto-Type sequence of parent group - &Utiliser la séquence de saisie automatique du groupe parent + &Utiliser la séquence par défaut de saisie automatique du groupe parent Set default Auto-Type se&quence @@ -1692,25 +2141,13 @@ Voulez-vous fusionner vos changements ? Unable to fetch favicon. Impossible de récupérer la favicône - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Astuce : Vous pouvez activer Google comme second recours sous Outils > Paramètres > Sécurité - Images Images All files - Tous les dossiers - - - Select Image - Choisir une image - - - Can't read icon - Impossible de lire l’icône + Tous les fichiers Custom icon already exists @@ -1721,27 +2158,55 @@ Voulez-vous fusionner vos changements ? Confirmer la suppression - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Cette icône est utilisée par %1 entrées et sera remplacée par l’icône par défaut. Êtes-vous certain de vouloir l’effacer ? + Custom icon successfully downloaded + Icône personnalisée téléchargée avec succès + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Astuce : Vous pouvez activer DuckDuckGo comme second recours sous Outils > Paramètres > Sécurité + + + Select Image(s) + Sélectionner des images + + + Successfully loaded %1 of %n icon(s) + %1 icône sur %n chargée avec succès%1 icônes sur %n chargées avec succès + + + No icons were loaded + Aucune icône n'a été chargée + + + %n icon(s) already exist in the database + %n icône existe déjà dans la base de données%n icônes existent déjà dans la base de données + + + The following icon(s) failed: + L'icône suivante a rencontré des erreurs :Les icônes suivantes ont rencontré des erreurs : + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Cette icône est utilisée par %1 entrée et sera remplacée par l’icône par défaut. Êtes-vous certain de vouloir l’effacer ?Cette icône est utilisée par %1 entrées et sera remplacée par l’icône par défaut. Êtes-vous certain de vouloir l’effacer ? EditWidgetProperties Created: - Créé le : + Créé : Modified: - Modifié le : + Modifié : Accessed: - Accédé le : + Consulté : Uuid: - UUID : + Uuid : Plugin Data @@ -1772,9 +2237,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Clone + %1 - Clone + %1 - Cloner @@ -1818,10 +2282,6 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? Êtes-vous certain de vouloir supprimer %n pièce jointe ?Êtes-vous certain de vouloir supprimer %n pièces jointes ? - - Confirm Remove - Confirmer la suppression - Save attachments Enregistrer les pièces jointes @@ -1829,7 +2289,7 @@ This may cause the affected plugins to malfunction. Unable to create directory: %1 - Impossible de créer le répertoire : + Impossible de créer le répertoire : %1 @@ -1859,10 +2319,15 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + Confirmer la suppression + + + Unable to open file(s): %1 - Impossible d’ouvrir le fichier : -%1 + Impossible d’ouvrir le fichier : +%1Impossible d’ouvrir les fichiers : +%1 @@ -1896,7 +2361,7 @@ This may cause the affected plugins to malfunction. Ref: Reference abbreviation - Réf : + Réf : Group @@ -1946,32 +2411,132 @@ This may cause the affected plugins to malfunction. Attachments Pièces jointes + + Yes + Oui + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Générer un code TOTP + + + Close + Fermer + + + General + Général + + + Username + Nom d’utilisateur + + + Password + Mot de passe + + + Expiration + Expiration + + + URL + URL + + + Attributes + Attributs + + + Attachments + Pièces jointes + + + Notes + Notes + + + Autotype + Saisie automatique + + + Window + Fenêtre + + + Sequence + Séquence + + + Searching + Recherche… + + + Search + Recherche + + + Clear + Effacer + + + Never + Jamais + + + [PROTECTED] + [PROTÉGÉ] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Activé + + + Disabled + Désactivé + + + Share + Partager + EntryView Customize View - Personnaliser la vue + Personnaliser l’affichage Hide Usernames - Cacher les noms d’utilisateurs + Masquer les noms d’utilisateur Hide Passwords - Cacher les mots de passe + Masquer les mots de passe Fit to window - Adapter à la fenêtre + Ajuster à la fenêtre Fit to contents - Adapter au contenu + Ajuster au contenu Reset to defaults - Remettre les paramètres par défaut + Réinitialiser aux valeurs par défaut Attachments (icon) @@ -1984,6 +2549,11 @@ This may cause the affected plugins to malfunction. Recycle Bin Corbeille + + [empty] + group has no children + [vide] + HostInstaller @@ -1996,61 +2566,6 @@ This may cause the affected plugins to malfunction. Impossible d’enregistrer le fichier de script de la messagerie native - - HttpPasswordGeneratorWidget - - Length: - Longueur : - - - Character Types - Types de caractères : - - - Upper Case Letters - Lettres majuscules - - - A-Z - A-Z - - - Lower Case Letters - Lettres minuscules - - - a-z - a-z - - - Numbers - Chiffres - - - 0-9 - 0-9 - - - Special Characters - Caractères spéciaux - - - /*_& ... - /*_& … - - - Exclude look-alike characters - Exclure les caractères qui se ressemblent - - - Ensure that the password contains characters from every group - S’assurer que le mot de passe contienne des caractères de chaque groupe - - - Extended ASCII - ASCII étendu - - KMessageWidget @@ -2076,6 +2591,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. La clé n’est pas la bonne ou le fichier de base de données est corrompu. + + missing database headers + les en-têtes de la base de données manquent + + + Header doesn't match hash + L'en-tête ne correspond pas à l'empreinte numérique + + + Invalid header id size + Taille de l’id de l’en-tête non valide + + + Invalid header field length + Longueur du champ de l’en-tête invalide + + + Invalid header data length + Longueur des données de l’en-tête non valide + Kdbx3Writer @@ -2100,7 +2635,7 @@ This may cause the affected plugins to malfunction. Invalid header checksum size - Taille de la somme de contrôle de l’en-tête invalide + Taille de la somme de contrôle de l’en-tête non valide Header SHA256 mismatch @@ -2116,15 +2651,15 @@ This may cause the affected plugins to malfunction. Invalid header id size - Taille de l’id de l’en-tête invalide + Taille de l’id de l’en-tête non valide Invalid header field length - Longueur du champ de l’en-tête invalide + Longueur du champ de l’en-tête non valide Invalid header data length - Longueur des données de l’en-tête invalide + Longueur des données de l’en-tête non valide Failed to open buffer for KDF parameters in header @@ -2132,7 +2667,7 @@ This may cause the affected plugins to malfunction. Unsupported key derivation function (KDF) or invalid parameters - Fonction de dérivation de clé (KDF) non supporté ou paramètres invalide + Fonction de dérivation de clé (KDF) non supporté ou paramètres non valides Legacy header fields found in KDBX4 file. @@ -2140,15 +2675,15 @@ This may cause the affected plugins to malfunction. Invalid inner header id size - Taille de l’id de l’en-tête interne invalide + Taille de l’id de l’en-tête interne non valide Invalid inner header field length - Longueur du champ de l’en-tête interne invalide + Longueur du champ de l’en-tête interne non valide Invalid inner header binary size - Taille binaire de l’en-tête interne invalide + Taille binaire de l’en-tête interne non valide Unsupported KeePass variant map version. @@ -2158,69 +2693,69 @@ This may cause the affected plugins to malfunction. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - Longueur du nom de la table des variantes invalide. + Longueur du nom de la table des variantes non valide. Invalid variant map entry name data Translation: variant map = data structure for storing meta data - Contenu du nom de la table des variantes invalide. + Contenu du nom de la table des variantes non valide. Invalid variant map entry value length Translation: variant map = data structure for storing meta data - Longueur de l’entrée dans la table des variantes invalide. + Longueur de l’entrée dans la table des variantes non valide. Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - Contenu de l’entrée dans la table des variantes invalide. + Contenu de l’entrée dans la table des variantes non valide. Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - Longueur de l’entrée de type Booléen dans la table des variantes invalide. + Longueur de l’entrée de type Booléen dans la table des variantes non valide. Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - Longueur de l’entrée de type Int32 dans la table des variantes invalide. + Longueur de l’entrée de type Int32 dans la table des variantes non valide. Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Longueur de l’entrée de type UInt32 dans la table des variantes invalide. + Longueur de l’entrée de type UInt32 dans la table des variantes non valide. Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Longueur de l’entrée de type Int64 dans la table des variantes invalide. + Longueur de l’entrée de type Int64 dans la table des variantes non valide. Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Longueur de l’entrée de type UInt64 dans la table des variantes invalide. + Longueur de l’entrée de type UInt64 dans la table des variantes non valide. Invalid variant map entry type Translation: variant map = data structure for storing meta data - Longueur de l’entrée dans la table des variantes invalide. + Longueur de l’entrée dans la table des variantes non valide. Invalid variant map field type size Translation: variant map = data structure for storing meta data - Longueur du type de champ dans la table des variantes invalide. + Longueur du type de champ dans la table des variantes non valide. Kdbx4Writer Invalid symmetric cipher algorithm. - Algorithme de chiffrement symétrique invalide. + Algorithme de chiffrement symétrique non valide. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Taille du vecteur d’initialisation du chiffrement symétrique invalide. + Taille du vecteur d’initialisation du chiffrement symétrique non valide. Unable to calculate master key @@ -2234,17 +2769,13 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - Longueur de l’UUID du chiffrement invalide - Unsupported cipher Chiffrement non supporté Invalid compression flags length - Longueur des paramètres de compression invalide. + Longueur des paramètres de compression non valides. Unsupported compression algorithm @@ -2252,11 +2783,11 @@ This may cause the affected plugins to malfunction. Invalid master seed size - Taille de la semence primaire invalide. + Taille de semence primaire non valide. Invalid transform seed size - Taille de la semence germée invalide. + Taille de la semence germée non valide. Invalid transform rounds size @@ -2264,15 +2795,15 @@ This may cause the affected plugins to malfunction. Invalid start bytes size - Taille des octets de début invalide + Taille des octets de début non valide Invalid random stream id size - Taille de l’identifiant du flux aléatoire invalide. + Taille de l’identifiant du flux aléatoire non valide. Invalid inner random stream cipher - Taille du chiffrement du flux intérieur aléatoire invalide. + Taille du chiffrement du flux intérieur aléatoire non valide. Not a KeePass database. @@ -2285,19 +2816,31 @@ You can import it by clicking on Database > 'Import KeePass 1 database...'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Le fichier sélectionné est une ancienne base de données KeePass 1 (.kdb). -Vous pouvez l’importer en cliquant sur Base de données>« Importer une base de données KeePass 1… » +Vous pouvez l’importer en cliquant sur Base de données>'Importer une base de données KeePass 1...' Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base de données importée avec l’ancienne version de KeePassX 0.4. Unsupported KeePass 2 database version. Version de la base de données KeePass 2 non pris en charge. + + Invalid cipher uuid length: %1 (length=%2) + Longueur de l’UUID du chiffrement invalide : %1 (longueur=%2) + + + Unable to parse UUID: %1 + Impossible de lire l'UUID : %1 + + + Failed to read database file. + Impossible de lire le fichier de base de données. + KdbxXmlReader XML parsing failure: %1 - Erreur d’analyse XML : %1 + Erreur d’analyse XML : %1 No root group @@ -2305,11 +2848,11 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Missing icon uuid or data - Données ou UUID de l’icône manquant + Données ou uuid de l’icône manquant Missing custom data key or value - Valeur ou clé de données personnalisée manquante + Valeur ou clé de donnée personnalisée manquante Multiple group elements @@ -2317,39 +2860,39 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Null group uuid - UUID du groupe sans valeur + Uuid du groupe sans valeur Invalid group icon number - Numéro de l’icône du groupe invalide + Numéro de l’icône du groupe non valide Invalid EnableAutoType value - Valeur EnableAutoType invalide + Valeur EnableAutoType non valide Invalid EnableSearching value - Valeur de EnableSearching invalide + Valeur de EnableSearching non valide No group uuid found - Aucun UUID de groupe trouvé + Aucun uuid de groupe trouvé Null DeleteObject uuid - UUID de DeleteObject sans valeur + Uuid de DeleteObject sans valeur Missing DeletedObject uuid or time - Temps ou UUID de DeletedObject manquant + Temps ou uuid de DeletedObject manquant Null entry uuid - UUID de l’entrée sans valeur + Uuid de l’entrée sans valeur Invalid entry icon number - Numéro de l’icône de l’entrée invalide + Numéro de l’icône de l’entrée non valide History element in history entry @@ -2357,15 +2900,11 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base No entry uuid found - Aucun UUID d’entrée trouvé + Aucun uuid d’entrée trouvé History element with different uuid - Élément de l’historique avec un UUID différent - - - Unable to decrypt entry string - Impossible de déchiffrer la chaîne de caractères de l’entrée + Élément de l’historique avec un uuid différent Duplicate custom attribute found @@ -2389,39 +2928,47 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Invalid bool value - Valeur booléenne invalide + Valeur bool non valide Invalid date time value - Valeur d’horodatage invalide + Valeur date time non valide Invalid color value - Valeur de couleur invalide + Valeur de couleur non valide Invalid color rgb part - Partie de couleur RVB invalide + Partie de couleur RVB non valide Invalid number value - Valeur de nombre invalide + Valeur de nombre non valide Invalid uuid value - Valeur UUID invalide + Valeur uuid non valide Unable to decompress binary Translator meant is a binary data inside an entry Impossible de décompresser le binaire + + XML error: +%1 +Line %2, column %3 + Erreur XML : +%1 +Ligne %2, colonne %3 + KeePass1OpenWidget Import KeePass1 database - Importer une base de données au format KeePass1 + Importer une base de données au format KeePass 1 Unable to open the database. @@ -2453,11 +3000,11 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Invalid number of groups - Nombre de groupes invalide + Nombre de groupes non valide Invalid number of entries - Nombre d’entrées invalide + Nombre d’entrées non valide Invalid content hash size @@ -2465,7 +3012,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Invalid transform seed size - Taille de la semence germée invalide. + Taille de la semence germée non valide. Invalid number of transform rounds @@ -2493,11 +3040,11 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Invalid group field type number - Numéro du type de champ groupe invalide. + Numéro du type de champ groupe non valide. Invalid group field size - Taille du champ groupe invalide + Taille du champ groupe non valide Read group field data doesn't match size @@ -2505,11 +3052,11 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Incorrect group id field size - Taille du champ « identifiant du groupe » incorrect + Taille du champ "identifiant du groupe" incorrect Incorrect group creation time field size - Taille du champ « date du la création du groupe » incorrect. + Taille du champ "date du la création du groupe" incorrect. Incorrect group modification time field size @@ -2517,15 +3064,15 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Incorrect group access time field size - Taille du champ « date d’accès au groupe » incorrect. + Taille du champ "date d’accès au groupe" incorrect. Incorrect group expiry time field size - Taille du champ « date d’expiration du groupe » incorrect. + Taille du champ "date d’expiration du groupe" incorrect. Incorrect group icon field size - Taille du champ « icône du groupe » incorrect. + Taille du champ "icône du groupe" incorrect. Incorrect group level field size @@ -2545,7 +3092,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Invalid entry field size - Taille du champ de l’entrée invalide + Taille du champ de l’entrée non valide Read entry field data doesn't match size @@ -2553,23 +3100,23 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Invalid entry uuid field size - Taille du champ UUID de l’entrée invalide + Taille du champ uuid de l’entrée non valide Invalid entry group id field size - Taille du champ id du groupe de l’entrée invalide + Taille du champ id du groupe de l’entrée non valide Invalid entry icon field size - Taille du champ icône de l’entrée invalide + Taille du champ icône de l’entrée non valide Invalid entry creation time field size - Taille du champ date de création de l’entrée invalide + Taille du champ date de création de l’entrée non valide Invalid entry modification time field size - Taille du champ date de modification de l’entrée invalide + Taille du champ date de modification de l’entrée non valide Invalid entry expiry time field size @@ -2579,55 +3126,145 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Invalid entry field type Champ d’entrée type est invalide - - - KeePass2 - AES: 256-bit - AES : 256 bits - - - Twofish: 256-bit - Twofish : 256 bits - - - ChaCha20: 256-bit - ChaCha20 : 256 bits - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – recommandé) + unable to seek to content position + incapable de se déplacer à la position du contenu - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Le fichier de verrouillage de l’instance unique existant est invalide. Lancement d’une nouvelle instance. + Disabled share + Partage désactivé - The lock file could not be created. Single-instance mode disabled. - Le fichier verrou ne peut pas être créé. Le mode instance-unique est désactivé. + Import from + Importer de - Another instance of KeePassXC is already running. - Une autre instance de KeePassXC est déjà en cours d’exécution. + Export to + Exporter vers - Fatal error while testing the cryptographic functions. - Erreur fatale lors des tests des fonctions cryptographiques. + Synchronize with + Synchroniser avec - KeePassXC - Error - KeePassXC - Erreur + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Élément clé + + + Key Component Description + Description de l’élément clé + + + Cancel + Annuler + + + Key Component set, click to change or remove + Composant clé définie, cliquez pour le modifier ou le supprimer + + + Add %1 + Add a key component + Ajouter %1 + + + Change %1 + Change a key component + Modifier %1 + + + Remove %1 + Remove a key component + Supprimer %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 configuré, cliquer pour modifier ou supprimer + + + + KeyFileEditWidget + + Browse + Parcourir + + + Generate + Générer + + + Key File + Fichier-clé + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Vous pouvez ajouter un fichier-clé contenant des bits aléatoires pour une sécurité accrue.</p><p>Vous devez le garder secret et ne jamais le perdre ou vous ne pourrez plus vous connecter !</p> + + + Legacy key file format + Format de fichier-clé hérité + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Vous utilisez un format de fichier-clé hérité qui pourrait ne plus être pris en charge à l’avenir. + +Veuillez ouvrir les paramètres de clé maîtresse et générer un nouveau fichier-clé. + + + Error loading the key file '%1' +Message: %2 + Erreur durant le chargement du fichier-clé '%1' +Message : %2 + + + Key files + Fichiers-clés + + + All files + Tous les fichiers + + + Create Key File... + Créer un fichier-clé… + + + Error creating key file + Erreur lors de la création du fichier-clé + + + Unable to create key file: %1 + Impossible de créer le fichier-clé : %1 + + + Select a key file + Sélectionner un fichier-clé @@ -2638,31 +3275,19 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base &Recent databases - Bases de données récentes - - - Import - Importer + &Bases de données récentes &Help - Aide + &Aide E&ntries - Entrées - - - Copy att&ribute to clipboard - Copier l’att&ribut dans le presse-papiers - - - Time-based one-time password - Mot de passe à usage unique basé sur le temps + E&ntrées &Groups - Groupes + &Groupes &Tools @@ -2682,35 +3307,15 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base &Save database - Enregistrer la base de données + &Enregistrer la base de données &Close database - Fermer la base de données - - - &New database - &Nouvelle base de données - - - Merge from KeePassX database - Fusionner depuis la base de données KeePassX - - - &Add new entry - Ajouter une nouvelle entrée - - - &View/Edit entry - Voir/Editer l’entrée + &Fermer la base de données &Delete entry - Supprimer l’entrée - - - &Add new group - &Ajouter un nouveau groupe + &Supprimer l’entrée &Edit group @@ -2722,15 +3327,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Sa&ve database as... - Sau&ver la base de données sous… - - - Change &master key... - Changer la clé &maîtresse… - - - &Database settings - Paramètres de la base de &données + En&registrer la base de données sous... Database settings @@ -2738,11 +3335,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base &Clone entry - Cloner l’entrée - - - &Find - Trouver + &Cloner l’entrée Copy &username @@ -2752,33 +3345,21 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Copy username to clipboard Copier le nom d’utilisateur dans le presse-papiers - - Cop&y password - Copier le mot de passe - Copy password to clipboard Copier le mot de passe dans le presse-papiers &Settings - Paramètres + &Paramètres Password Generator - Générateur de mot de passe - - - &Perform Auto-Type - Effectuer la saisie automatique - - - &Open URL - &Ouvrir l’URL + Générateur de mots de passe &Lock databases - Verrouiller les bases de données + &Verrouiller les bases de données &Title @@ -2806,27 +3387,11 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base &Export to CSV file... - &Exporter dans un fichier CSV… - - - Import KeePass 1 database... - Importer une base de données KeePass 1… - - - Import CSV file... - Importer un fichier CSV… - - - Re&pair database... - Ré&parer la base de données… - - - Show TOTP - Afficher TOTP + &Exporter dans un fichier CSV... Set up TOTP... - Configurer TOTP… + Configurer TOTP... Copy &TOTP @@ -2844,14 +3409,6 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Access error for config file %1 Erreur d’accès au fichier de configuration %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Il semble que vous utilisez KeePassHTTP pour l’intégration aux navigateurs. Cette fonction a été dépréciée et sera prochainement supprimée.<br>Veuillez plutôt utiliser KeePassXC-Browser ! Pour obtenir de l’aide à ce sujet, consultez notre<a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">guide de migration</a> (avertissement %1 sur 3).</p> - - - read-only - Lecture seulement - Settings Paramètres @@ -2862,27 +3419,7 @@ Il s’agit d’une migration à sens unique. Vous ne pourrez pas ouvrir la base Quit KeePassXC - Quitter KeePass XC - - - KeePass 2 Database - Base de données KeePass 2 - - - All files - Tous les fichiers - - - Open database - Ouvrir une base de données - - - Save repaired database - Enregistrer la base de données réparée - - - Writing the database failed. - Une erreur s’est produite lors de l’écriture de la base de données. + Quitter KeePassXC Please touch the button on your YubiKey! @@ -2896,6 +3433,269 @@ This version is not meant for production use. Le risque de corruption est élevé, conservez une sauvegarde de vos bases de données. Cette version n’est pas destinée à la production. + + &Donate + &Donner + + + Report a &bug + Signaler un &bug + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + ATTENTION : Votre version de Qt pourrait causer un crash de KeePassXC avec un clavier virtuel ! +Nous recommandons l'utilisation de l'AppImage disponible sur notre page de téléchargements. + + + &Import + &Importer + + + Copy att&ribute... + Copier l'att&ribut ... + + + TOTP... + TOTP... + + + &New database... + &Ńouvelle base de données... + + + Create a new database + Créer une nouvelle base de données + + + &Merge from database... + &Fusionner depuis la base de données... + + + Merge from another KDBX database + Fusionner depuis une autre base de données KDBX + + + &New entry + &Nouvelle entrée + + + Add a new entry + Ajouter une entrée + + + &Edit entry + Modifier l’entrée + + + View or edit entry + Voir ou modifier l'entrée + + + &New group + &Nouveau groupe + + + Add a new group + Ajouter un groupe + + + Change master &key... + Changer la clé &maîtresse… + + + &Database settings... + Paramètres de la base de &données ... + + + Copy &password + Copier le mot de &passe + + + Perform &Auto-Type + Effectuer un remplissage &automatique + + + Open &URL + Ouvrir l'&URL + + + KeePass 1 database... + Base de données KeePass 1 ... + + + Import a KeePass 1 database + Importer une base de données KeePass 1 + + + CSV file... + Fichier CSV ... + + + Import a CSV file + Importer un fichier CSV + + + Show TOTP... + Afficher TOTP ... + + + Show TOTP QR Code... + Afficher le QR Code TOTP ... + + + Check for Updates... + Vérifier les mises à jour... + + + Share entry + Partager l'entrée + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + AVERTISSEMENT : Vous utilisez une version préliminaire de KeePassXC  ! +Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas destinée à la production. + + + Check for updates on startup? + Vérifier les mises à jour au démarrage ? + + + Would you like KeePassXC to check for updates on startup? + Voulez-vous que KeePassXC vérifie les mises à jour au démarrage ? + + + You can always check for updates manually from the application menu. + Vous pouvez en tout temps vérifier les mises à jour manuellement depuis le menu de l'application. + + + + Merger + + Creating missing %1 [%2] + Création du %1 manquant [%2] + + + Relocating %1 [%2] + Déplacement de %1 [%2] + + + Overwriting %1 [%2] + Écrasement de %1 [%2] + + + older entry merged from database "%1" + ancienne entrée fusionnée de la base de données "%1" + + + Adding backup for older target %1 [%2] + Ajout d'une sauvegarde pour l'ancienne cible %1 [%2] + + + Adding backup for older source %1 [%2] + Ajout d'une sauvegarde pour l'ancienne source %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Ré-application de l'ancienne entrée cible sur la nouvelle source %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Ré-application de l'ancienne entrée source sur la nouvelle cible %1 [%2] + + + Synchronizing from newer source %1 [%2] + Synchronisation depuis une source plus récente %1 [%2] + + + Synchronizing from older source %1 [%2] + Synchronisation depuis une source plus ancienne %1 [%2] + + + Deleting child %1 [%2] + Suppression de l'enfant %1 [%2] + + + Deleting orphan %1 [%2] + Suppression de l'orphelin %1 [%2] + + + Changed deleted objects + Objets supprimés modifiés + + + Adding missing icon %1 + Ajout de l'icône manquante %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Créer une nouvelle base de données KeePassXC + + + Root + Root group + Racine + + + + NewDatabaseWizardPage + + WizardPage + Page d'aide + + + En&cryption Settings + Paramètres de &chiffrement + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Vous pouvez ajuster ici les paramètres de chiffrement de la base de données. Vous pourrez sans problèmes les changer plus tard dans les paramètres de la base de données. + + + Advanced Settings + Paramètres avancés + + + Simple Settings + Paramètres simplifiés + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Paramètres de chiffrement + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Vous pouvez ajuster ici les paramètres de chiffrement de la base de données. Vous pourrez sans problèmes les changer plus tard dans les paramètres de la base de données. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Clé maîtresse de la base de données + + + A master key known only to you protects your database. + Une clé maîtresse connue de vous uniquement qui protège votre base de données. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Informations générales de base de données + + + Please fill in the display name and an optional description for your new database: + Veuillez renseigner le nom et optionnellement une description pour votre nouvelle base de données : + OpenSSHKey @@ -2921,7 +3721,7 @@ Cette version n’est pas destinée à la production. Found zero keys - Acune clé n’a été trouvée + Zéro clés trouvées Failed to read public key. @@ -2929,7 +3729,7 @@ Cette version n’est pas destinée à la production. Corrupted key file, reading private key failed - Le fichier-clé est corrompu. Échec de lecture de la clé privée. + Le fichier-clé est corrompu, échec de lecture de la clé privée No private key payload to decrypt @@ -2953,11 +3753,11 @@ Cette version n’est pas destinée à la production. Unexpected EOF while reading public key - Fin de fichier inattendue lors de la lecture de la clé publique + End-of-file inattendu lors de la lecture de la clé publique Unexpected EOF while reading private key - Fin de fichier inattendue lors de la lecture de la clé privée + End-of-file inattendu lors de la lecture de la clé privée Can't write public key as it is empty @@ -2973,149 +3773,54 @@ Cette version n’est pas destinée à la production. Unexpected EOF when writing private key - Fin de fichier inattendue lors de l’écriture de la clé privée + End-of-file inattendu lors de l’écriture de la clé privée Unsupported key type: %1 - Type de clé non supporté : %1 + Type de clé non géré : %1 Unknown cipher: %1 - Chiffrement inconnu : %1 + Chiffrement inconnu : %1 Cipher IV is too short for MD5 kdf - Le vecteur d’initialisation du chiffrement est trop court pour la KDF MD5 + Le vecteur d’initialisation du chiffrage est trop court pour la KDF MD5 Unknown KDF: %1 - KDF inconnu : %1 + KDF inconnu : %1 Unknown key type: %1 - Type de clé inconnu : %1 + Type de clé inconnu : %1 - OptionDialog + PasswordEditWidget - Dialog - Dialogue + Enter password: + Saisir un mot de passe : - This is required for accessing your databases from ChromeIPass or PassIFox - Ceci est requis pour accéder à vos bases de données à partir de ChromeIPass ou PassIFox + Confirm password: + Confirmation du mot de passe : - Enable KeePassHTTP server - Activer le serveur KeePassHTTP + Password + Mot de passe - General - Général + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Le mot de passe est le moyen principal pour sécuriser votre base de données.</p><p>Un bon mot de passe est long et unique. KeePassXC peut en générer un pour vous.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Montrer une notification quand les références sont demandées + Passwords do not match. + Les mots de passe ne correspondent pas. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Ne renvoie que les meilleures correspondances pour une URL précise au lieu de toutes les entrées du domaine. - - - &Return only best matching entries - &Retourner seulement les meilleures entrées - - - Re&quest to unlock the database if it is locked - Demander de déverrouiller la base de données lorsque celle-ci est verrouillée - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Seules les entrées avec le même schéma (http://, https://, ftp://, …) sont retournées. - - - &Match URL schemes - &Schémas de correspondance URL - - - Sort matching entries by &username - Trier les entrées correspondantes par nom d’&utilisateur - - - Sort &matching entries by title - Trier les entrées correspondantes par titre - - - R&emove all shared encryption keys from active database - Supprimer toutes les clés de chiffrement partagées de la base de données active - - - Re&move all stored permissions from entries in active database - &Retirer toutes les autorisations enregistrées des entrées de la base de données active - - - Password Generator - Générateur de mot de passe - - - Advanced - Avancé - - - Always allow &access to entries - Toujours autoriser l’&accès aux entrées - - - Always allow &updating entries - Toujours autoriser la mise à jour des entrées - - - Only the selected database has to be connected with a client. - Seule la base de données sélectionnée doit être connectée avec un client. - - - Searc&h in all opened databases for matching entries - Cherc&her dans toutes les bases de données ouvertes les entrées correspondantes - - - Automatically creating or updating string fields is not supported. - La création ou la mise a jour automatiques ne sont pas prises en charge pour les champs textuels ! - - - &Return advanced string fields which start with "KPH: " - &Retourne les champs textuels avancés qui commencent par « KPH : » - - - HTTP Port: - Port HTTP : - - - Default port: 19455 - Port par défaut : 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeepassXC va écouter ce port sur 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Avertissement :</b> Les options suivantes peuvent être dangereuses ! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP a été déprécié et sera prochainement supprimé.<br>Veuillez plutôt utiliser KeePassXC-Browser ! Pour obtenir de l’aide à ce sujet, consultez notre <a href="https://keepassxc.org/docs/keepassxc-browser-migration">guide de migration</a>.</p> - - - Cannot bind to privileged ports - Liaison impossible avec les ports privilégiés - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Impossible de se lier aux ports privilégiés inférieurs à 1024 ! -Le port 19455 par défaut sera utilisé. + Generate master password + Générer un mot de passe maître @@ -3143,7 +3848,7 @@ Le port 19455 par défaut sera utilisé. Character Types - Types de caractères + Types de caractères: Upper Case Letters @@ -3155,7 +3860,7 @@ Le port 19455 par défaut sera utilisé. Numbers - Nombres + Chiffres Special Characters @@ -3167,7 +3872,7 @@ Le port 19455 par défaut sera utilisé. Exclude look-alike characters - Exclure les caractères se ressemblant + Exclure les caractères qui se ressemblent Pick characters from every group @@ -3175,7 +3880,7 @@ Le port 19455 par défaut sera utilisé. &Length: - &Longueur : + &Longueur : Passphrase @@ -3183,19 +3888,11 @@ Le port 19455 par défaut sera utilisé. Wordlist: - Liste de mots : - - - Word Count: - Nombre de mots : + Liste de mots : Word Separator: - Séparateur de mots : - - - Generate - Générer + Séparateur de mot : Copy @@ -3209,22 +3906,18 @@ Le port 19455 par défaut sera utilisé. Close Fermer - - Apply - Appliquer - Entropy: %1 bit Entropie : %1 bits Password Quality: %1 - Qualité du mot de passe : %1 + Qualité du mot de passe : %1 Poor Password quality - Mauvais + Pauvre Weak @@ -3241,6 +3934,171 @@ Le port 19455 par défaut sera utilisé. Password quality Excellent + + ExtendedASCII + ASCII étendu + + + Switch to advanced mode + Basculer vers le mode avancé + + + Advanced + Avancé + + + Upper Case Letters A to F + Lettres majuscules de A à F + + + A-Z + A-Z + + + Lower Case Letters A to F + Lettres minuscules de A à F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Accolades + + + {[( + {[( + + + Punctuation + Ponctuation + + + .,:; + .,:; + + + Quotes + Guillemets + + + " ' + " ' + + + Math + Math + + + <*+!?= + <*+!?= + + + Dashes + Tirets + + + \_|-/ + \_|-/ + + + Logograms + Logogramme + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Basculer vers le mode simplifié + + + Simple + Simple + + + Character set to exclude from generated password + Ensemble de caractères à exclure du mot de passe généré + + + Do not include: + Ne pas inclure : + + + Add non-hex letters to "do not include" list + Ajouter les lettres non-hexadécimales à la liste "Ne pas inclure" + + + Hex + Hexadécimal + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caractères exclus : "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + No&mbre de mot : + + + Regenerate + Régénérer + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Sélectionner + + + + QMessageBox + + Overwrite + Écraser + + + Delete + Supprimer + + + Move + Déplacer + + + Empty + Vide + + + Remove + Supprimer + + + Skip + Ignorer + + + Disable + Désactiver + + + Merge + Fusionner + QObject @@ -3260,34 +4118,18 @@ Le port 19455 par défaut sera utilisé. Cannot decrypt message Impossible de déchiffrer le message - - Timeout or cannot connect to KeePassXC - Connexion expirée ou impossible à KeePassXC - Action cancelled or denied Action annulée ou refusée - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Le chiffrement du message est impossible ou la clé publique est introuvable. La messagerie native est-elle activée dans KeePassXC ? - KeePassXC association failed, try again L’association à KeePassXC a échoué, veuillez réessayer - - Key change was not successful - Le changement de clé n’a pas réussi - Encryption key is not recognized La clé de chiffrement n’est pas reconnue - - No saved databases found - Aucune base de données enregistrée n’a été trouvée - Incorrect action Action incorrecte @@ -3302,7 +4144,7 @@ Le port 19455 par défaut sera utilisé. No logins found - Aucun identifiant trouvé + Aucuns identifiants trouvés Unknown error @@ -3367,7 +4209,7 @@ Le port 19455 par défaut sera utilisé. Path of the entry to clip. clip = copy to clipboard - Chemin de l’entrée à copier. + Chemin de l’entrée à épingler. Timeout in seconds before clearing the clipboard. @@ -3411,11 +4253,7 @@ Le port 19455 par défaut sera utilisé. Insert password to unlock %1: - Insérer le mot de passe pour déverrouiller %1 : - - - Failed to load key file %1 : %2 - Échec de chargement du fichier-clé %1 : %2 + Insérer le mot de passe pour déverrouiller %1 : WARNING: You are using a legacy key file format which may become @@ -3433,7 +4271,7 @@ Available commands: -Commandes disponibles : +Commandes disponibles : @@ -3446,7 +4284,7 @@ Commandes disponibles : Path of the group to list. Default is / - Chemin du groupe à lister. Par défaut : / + Chemin du groupe à lister. Par défaut : / Find entries quickly. @@ -3470,7 +4308,7 @@ Commandes disponibles : Use the same credentials for both database files. - Utiliser les mêmes identifiants pour les deux bases de données. + Utiliser les mêmes identifiants pour les deux fichiers de base de données. Key file of the database to merge from. @@ -3500,19 +4338,13 @@ Commandes disponibles : error reading from device Erreur de lecture sur le périphérique - - file empty ! - - le fichier est vide ! - - malformed string - chaîne mal formée + chaîne de caractères malformée missing closing quote - Guillemet fermant manquant + fermeture de citation manquante Group @@ -3542,10 +4374,6 @@ Commandes disponibles : Created Créée - - Legacy Browser Integration - Ancienne intégration aux navigateurs - Browser Integration Intégration aux navigateurs @@ -3568,529 +4396,419 @@ Commandes disponibles : Generate a new random diceware passphrase. - Créer une nouvelle phrase de passe générée au hasard par des dés. + Créer une nouvelle phrase de passe générée avec la méthode du lancer de dés. Word count for the diceware passphrase. - Nombre de mots de la phrase de passe générée par des dés. - - - count - Compte + Nombre de mots de la phrase de passe générée avec la méthode du lancer de dés. Wordlist for the diceware generator. [Default: EFF English] - Liste de mots pour le générateur par Diceware. -[par défaut : anglais EFF] + Liste de mots pour le générateur par dés. +[Par défaut : FFÉ anglais] Generate a new random password. Générer un nouveau mot de passe aléatoire. - Length of the generated password. - Longueur du mot de passe généré. + Invalid value for password length %1. + Valeur invalide pour la taille de mot de passe %1. - Use lowercase characters in the generated password. - Utiliser les caractères minuscules dans le mot de passe créé. + Could not create entry with path %1. + Impossible de créer une entrée avec le chemin %1. - Use uppercase characters in the generated password. - Utiliser les caractères majuscules dans le mot de passe créé. + Enter password for new entry: + Saisir un mot de passe pour la nouvelle entrée : - Use numbers in the generated password. - Utiliser les nombres dans le mot de passe créé. + Writing the database failed %1. + Échec de l'écriture de la base de données %1. - Use special characters in the generated password. - Utiliser les caractères spéciaux dans le mot de passe créé. + Successfully added entry %1. + Ajouté avec succès l'entrée %1. - Use extended ASCII in the generated password. - Utiliser les caractères ASCII étendus dans le mot de passe créé. - - - - QtIOCompressor - - Internal zlib error when compressing: - Erreur interne zlib lors de la compression : + Copy the current TOTP to the clipboard. + Copier le code TOTP courant dans le presse-papiers. - Error writing to underlying device: - Erreur d’écriture sur le périphérique concerné : + Invalid timeout value %1. + Valeur d'expiration non valide %1. - Error opening underlying device: - Erreur d’ouverture du périphérique concerné : + Entry %1 not found. + Entrée %1 non trouvée. - Error reading data from underlying device: - Erreur de lecture sur le périphérique concerné : + Entry with path %1 has no TOTP set up. + L'entrée avec le chemin %1 n'a pas de configuration TOTP. - Internal zlib error when decompressing: - Erreur interne zlib lors de la décompression : - - - - QtIOCompressor::open - - The gzip format not supported in this version of zlib. - Le format gzip n’est pas supporté dans cette version de zlib. + Entry's current TOTP copied to the clipboard! + Le code TOTP courant de l'entrée a été copié dans le presse-papiers ! - Internal zlib error: - Erreur interne zlib : - - - - SearchWidget - - Search... - Recherche… - - - Search - Chercher - - - Clear - Effacer - - - Case Sensitive - Sensible à la casse - - - Limit search to selected group - Limite la recherche au groupe sélectionné - - - - Service - - KeePassXC: New key association request - KeePassXC : Nouvelle demande d’association de touche - - - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Vous avez reçu une demande d’association pour la clé ci-dessus. -Si vous voulez autoriser cette clé à accéder à votre base de données KeePassXC, -attribuez lui un nom unique pour l’identifier et acceptez-la. - - - KeePassXC: Overwrite existing key? - KeePassXC : Remplacer la clé existante ? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Une clé de chiffrement partagée portant le nom « %1 » existe déjà. -Voulez-vous la remplacer ? - - - KeePassXC: Update Entry - KeePassXC : Mettre l’entrée à jour - - - Do you want to update the information in %1 - %2? - Voulez-vous mettre à jour l’information dans %1 - %2 ? - - - KeePassXC: Database locked! - KeePassXC : La base de données est verrouillée ! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - La base de données active est verrouillée ! -Veuillez déverrouiller la base de données sélectionnée ou en choisir une autre déverrouillée. - - - KeePassXC: Removed keys from database - KeePassXC : Les clés ont été supprimées de la base de données + Entry's password copied to the clipboard! + Mot de passe de l'entrée copié dans le presse-papiers ! - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - %n clé de chiffrement a été retirée avec succès des paramètres de KeePassXC/HTTP.%n clés chiffrement ont été retirées avec succès des paramètres KeePassXC/HTTP. + Clearing the clipboard in %1 second(s)... + Nettoyage du presse-papiers dans %1 seconde ...Nettoyage du presse-papiers dans %1 secondes ... - KeePassXC: No keys found - KeePassXC : Aucune clé n’a été trouvée + Clipboard cleared! + Presse-papiers vidé ! - No shared encryption-keys found in KeePassHttp Settings. - Aucune clé de chiffrement partagée trouvée dans les paramètres de KeePassHttp. + Silence password prompt and other secondary outputs. + Faire taire le champs mot de passe et les autres champs secondaires. - KeePassXC: Settings not available! - KeePassXC : Les paramètres ne sont pas disponibles ! + count + CLI parameter + Compte - The active database does not contain an entry of KeePassHttp Settings. - La base de données active ne contient pas d’entrée de paramètres KeePassHttp. + Invalid value for password length: %1 + Valeur invalide pour la taille de mot de passe : %1 - Removing stored permissions... - Retrait des autorisations enregistrées… + Could not find entry with path %1. + Impossible de trouver une entrée avec le chemin %1. - Abort - Annuler + Not changing any field for entry %1. + Aucun changement effectué dans les champs de l'entrée %1. - KeePassXC: Removed permissions - KeePassXC : Les autorisations ont été retirées - - - Successfully removed permissions from %n entries. - Les autorisations de %n entrées ont été correctement supprimées.Les autorisations de %n entrées ont été correctement supprimées. - - - KeePassXC: No entry with permissions found! - KeePassXC : Aucune entrée avec autorisation n’a été trouvée ! + Enter new password for entry: + Saisir le nouveau mot de passe pour l'entrée : - The active database does not contain an entry with permissions. - La base de données active ne contient pas d’entrée avec des autorisations. + Writing the database failed: %1 + Échec de l'écriture de la base de données : %1. - - - SettingsWidget - Application Settings - Paramètres de l’application + Successfully edited entry %1. + Édité l'entrée %1 avec succès. - General - Général + Length %1 + Longueur %1 - Security - Sécurité + Entropy %1 + Entropie %1 - Access error for config file %1 - Erreur d’accès au fichier de configuration %1 + Log10 %1 + Log10 %1 - - - SettingsWidgetGeneral - Basic Settings - Paramètres de base + Multi-word extra bits %1 + - Start only a single instance of KeePassXC - Démarrer une seule instance de KeePassXC + Type: Bruteforce + Type : Force brute - Remember last databases - Se souvenir des dernières bases de données + Type: Dictionary + Type : Dictionnaire - Remember last key files and security dongles - Mémoriser les derniers fichiers-clés et les clés électroniques de sécurité + Type: Dict+Leet + Type : Dictionnaire + Leet - Load previous databases on startup - Charger les bases de données précédentes au démarrage + Type: User Words + Type : Mots utilisateur - Automatically save on exit - Enregistrer automatiquement à la sortie + Type: User+Leet + Type : Utilisateur + Leet - Automatically save after every change - Enregistrer automatiquement après chaque changement + Type: Repeated + Type : Répétition - Automatically reload the database when modified externally - Recharger automatiquement la base de données quand celle-ci est modifiée depuis l’extérieur + Type: Sequence + Type : Séquence - Minimize when copying to clipboard - Minimiser après avoir copié dans le presse-papiers + Type: Spatial + Type : Spatial - Minimize window at application startup - Minimiser la fenêtre lors du démarrage de l’application + Type: Date + Type : Date - Use group icon on entry creation - Utiliser l’icône de groupe à la création d’une entrée + Type: Bruteforce(Rep) + Type : Bruteforce(Rep) - Don't mark database as modified for non-data changes (e.g., expanding groups) - Ne pas indiquer la base de données comme modifiée pour les changements hors-données (par exemple : groupes développés) + Type: Dictionary(Rep) + Type : Dictionnaire(Rep) - Hide the Details view - Masquer la Vue détaillée + Type: Dict+Leet(Rep) + - Show a system tray icon - Afficher une icône dans la zone de notification + Type: User Words(Rep) + Type : Mots Utilisateur(Rep) - Hide window to system tray when minimized - Cacher la fenêtre dans la zone de notification une fois minimisée + Type: User+Leet(Rep) + - Hide window to system tray instead of app exit - Envoyer la fenêtre dans la zone de notification au lieu de quitter l’application + Type: Repeated(Rep) + Type : Répétition(Rep) - Dark system tray icon - Icône sombre dans la zone de notification + Type: Sequence(Rep) + Type : Séquence(Rep) - Language - Langue + Type: Spatial(Rep) + Type : Spatial(Rep) - Auto-Type - Saisie automatique + Type: Date(Rep) + Type : Date(Rep) - Use entry title to match windows for global Auto-Type - Utiliser le titre de l’entrée dans la correspondance des fenêtres pour la saisie automatique globale. + Type: Unknown%1 + Type : Inconnu%1 - Use entry URL to match windows for global Auto-Type - Utiliser l’URL de l’entrée dans la correspondance des fenêtres pour la saisie automatique globale. + Entropy %1 (%2) + Entropie %1 (%2) - Always ask before performing Auto-Type - Toujours demander avant de procéder à une saisie automatique + *** Password length (%1) != sum of length of parts (%2) *** + - Global Auto-Type shortcut - Raccourci de la saisie automatique + Failed to load key file %1: %2 + Échec de chargement du fichier-clé %1 : %2 - Auto-Type delay - Délai de remplissage de la saisie automatique + File %1 does not exist. + Le fichier %1 n'existe pas. - ms - Milliseconds - ms + Unable to open file %1. + Impossible d'ouvrir le fichier %1. - Startup - Démarrage + Error while reading the database: +%1 + Erreur lors de la lecture de la base de données : +%1 - File Management - Gestion de fichiers + Error while parsing the database: +%1 + Erreur lors de l'analyse de la base de données : +%1 - Safely save database files (may be incompatible with Dropbox, etc) - Enregistrer en toute sécurité les fichiers de base de données (peut être incompatible avec Dropbox, etc.) + Length of the generated password + Taille du mot de passe généré - Backup database file before saving - Sauvegarder le fichier de base de données avant d’enregistrer + Use lowercase characters + Utiliser les caractères minuscules - Entry Management - Gestion des entrées + Use uppercase characters + Utiliser les caractères majuscules - General - Général + Use numbers. + Utiliser des nombres. - - - SettingsWidgetSecurity - Timeouts - Timeouts + Use special characters + Utiliser les caractères spéciaux - Clear clipboard after - Vider le presse-papiers après + Use extended ASCII + Utiliser l'ASCII étendu - sec - Seconds - s + Exclude character set + Exclure les caractères suivants - Lock databases after inactivity of - Verrouiller les bases de données après une inactivité de + chars + caractères - Convenience - Commodités + Exclude similar looking characters + Exclure les caractères qui se ressemblent - Lock databases when session is locked or lid is closed - Verrouiller les bases de données lorsque la session est verrouillée ou le capot fermé + Include characters from every selected group + Inclure des caractères de chaque groupe - Lock databases after minimizing the window - Verrouiller la base de données lorsque la fenêtre est minimisée + Recursively list the elements of the group. + Lister récursivement les éléments du groupe - Don't require password repeat when it is visible - Ne pas demander de répéter le mot de passe lorsque celui-ci est visible + Cannot find group %1. + Impossible de trouver le groupe %1. - Show passwords in cleartext by default - Afficher les mots de passe en clair par défaut + Error reading merge file: +%1 + Erreur lors de la lecture du fichier fusionner : +%1 - Hide passwords in the preview panel - Masquer les mots de passe dans le panneau de prévisualisation + Unable to save database to file : %1 + Impossible d'enregistrer la base de données dans le fichier : %1 - Hide entry notes by default - Masquer les notes des entrées par défaut + Unable to save database to file: %1 + Impossible d'enregistrer la base de données dans le fichier : %1 - Privacy - Confidentialité + Successfully recycled entry %1. + - Use Google as fallback for downloading website icons - Utiliser Google en second recours pour télécharger les icônes des sites Web + Successfully deleted entry %1. + Supprimé l'entrée %1 avec succès. - Re-lock previously locked database after performing Auto-Type - Verrouiller à nouveau la base de données précédemment verrouillée après avoir effectué la saisie automatique + Show the entry's current TOTP. + Afficher le TOTP courant pour l'entrée. - - - SetupTotpDialog - Setup TOTP - Configuration TOTP + ERROR: unknown attribute %1. + ERREUR : attribut %1 inconnu. - Key: - Clé : + No program defined for clipboard manipulation + Aucun logiciel configuré pour la manipulation du presse-papiers - Default RFC 6238 token settings - Paramètres de base des codes RFC 6238 + Unable to start program %1 + Impossible de démarrer le logiciel %1 - Steam token settings - Paramètres du code éphémère Steam + file empty + Fichier vide - Use custom settings - Utiliser les paramètres personnalisés + %1: (row, col) %2,%3 + %1: (ligne,colonne) %2,%3 - Note: Change these settings only if you know what you are doing. - Attention : modifiez ces paramètres seulement si vous savez ce que vous faites. + AES: 256-bit + AES : 256 bits - Time step: - Période de temps : + Twofish: 256-bit + Twofish : 256 bits - 8 digits - 8 chiffres + ChaCha20: 256-bit + ChaCha20 : 256 bits - 6 digits - 6 chiffres + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recommandé) - Code size: - Taille du code : + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - sec - Seconds - s + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - - - TotpDialog - Timed Password - Mot de passe programmé + Invalid Settings + TOTP + Paramètres invalides - 000000 - 000000 + Invalid Key + TOTP + Clé invalide - Copy - Copie + Message encryption failed. + Erreur lors du chiffrement du message. - Expires in - Expire dans + No groups found + Aucun groupe trouvé - seconds - secondes + Create a new database. + Créer un nouvelle base de données. - - - UnlockDatabaseWidget - Unlock database - Déverrouiller la base de données + File %1 already exists. + Le fichier %1 existe déjà. - - - WelcomeWidget - Start storing your passwords securely in a KeePassXC database - Gardez vos mots de passe en sécurité dans une base de données KeePassXC + Loading the key file failed + Échec du chargement du fichier-clé - Create new database - Créer une nouvelle base de données + No key is set. Aborting database creation. + Aucune clé définie. Abandon de la création de la base de données. - Open existing database - Ouvrir une base de données existante + Failed to save the database: %1. + Impossible d'enregistrer la base de données: %1. - Import from KeePass 1 - Importer depuis KeePass 1 + Successfully created new database. + Créé avec succès la nouvelle base de données. - Import from CSV - Import depuis un fichier CSV + Insert password to encrypt database (Press enter to leave blank): + - Recent databases - Bases de données récentes + Creating KeyFile %1 failed: %2 + Creation du fichier clé %1 échoué : %2 - Welcome to KeePassXC %1 - Bienvenue dans KeePassXC %1 + Loading KeyFile %1 failed: %2 + Chargement du fichier clé %1 échoué : %2 - - - main Remove an entry from the database. Supprimer une entrée de la base de données. - - Path of the database. - Chemin d’accès de la base de données. - Path of the entry to remove. Chemin de l’entrée à supprimer. + + Existing single-instance lock file is invalid. Launching new instance. + Le fichier de verrouillage de l’instance unique existant n’est pas valide. Lancement d’une nouvelle instance. + + + The lock file could not be created. Single-instance mode disabled. + Le fichier de verrouillage ne peut pas être créé. Le mode d’instance unique est désactivé. + KeePassXC - cross-platform password manager KeePassXC - Gestionnaire de mots de passe multiplateforme @@ -4115,5 +4833,640 @@ Veuillez déverrouiller la base de données sélectionnée ou en choisir une aut Parent window handle Poignée de la fenêtre parent + + Another instance of KeePassXC is already running. + Une autre instance de KeePassXC est déjà en cours d’exécution. + + + Fatal error while testing the cryptographic functions. + Erreur fatale lors des tests des fonctions cryptographiques. + + + KeePassXC - Error + KeePassXC - Erreur + + + Database password: + Mot de passe de la base de données : + + + Cannot create new group + + + + + QtIOCompressor + + Internal zlib error when compressing: + Erreur interne zlib lors de la compression : + + + Error writing to underlying device: + Erreur d’écriture sur le périphérique concerné : + + + Error opening underlying device: + Erreur d’ouverture du périphérique concerné : + + + Error reading data from underlying device: + Erreur de lecture sur le périphérique concerné : + + + Internal zlib error when decompressing: + Erreur interne zlib lors de la décompression : + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Le format gzip n’est pas supporté dans cette version de zlib. + + + Internal zlib error: + Erreur interne zlib : + + + + SSHAgent + + Agent connection failed. + Connexion à l'agent impossible. + + + Agent protocol error. + Erreur de protocole avec l'agent + + + No agent running, cannot add identity. + Aucun agent en cours d'exécution, impossible d'ajouter l'identité. + + + No agent running, cannot remove identity. + Aucun agent en cours d'exécution, impossible de supprimer l'identité. + + + Agent refused this identity. Possible reasons include: + L'agent a refusé cette identité. Les raisons possibles sont : + + + The key has already been added. + La clé a déjà été ajoutée. + + + Restricted lifetime is not supported by the agent (check options). + Une durée de vie limitée n'est pas supporté par l'agent (vérifier les paramètres). + + + A confirmation request is not supported by the agent (check options). + Une demande de confirmation n'est pas supportée par l'agent (vérifier les paramètres). + + + + SearchHelpWidget + + Search Help + Chercher dans l'aide + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + Modificateurs + + + exclude term from results + + + + match term exactly + correspondance exacte + + + use regex in term + + + + Fields + Champs + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + OU logique + + + Examples + Exemples + + + + SearchWidget + + Search + Recherche + + + Clear + Effacer + + + Limit search to selected group + Limite la recherche au groupe sélectionné + + + Search Help + Chercher dans l'aide + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Recherche (%1)... + + + Case sensitive + Sensible à la casse + + + + SettingsWidgetKeeShare + + Active + Actif + + + Allow export + Autoriser l'export + + + Allow import + Autoriser l'import + + + Own certificate + Propre certificat + + + Fingerprint: + Empreinte : + + + Certificate: + Certificat : + + + Signer + Signataire + + + Key: + Clé : + + + Generate + Générer + + + Import + Importer + + + Export + Exporter + + + Imported certificates + Certificats importés + + + Trust + Approuver + + + Ask + Demander + + + Untrust + Désapprouver + + + Remove + Supprimer + + + Path + Chemin + + + Status + Statut + + + Fingerprint + Empreinte + + + Certificate + Certificat + + + Trusted + Approuvé + + + Untrusted + Non-approuvé + + + Unknown + Inconnu + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Tous les fichiers + + + Select path + Sélectionner le chemin + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + Pas cette fois + + + Never + Jamais + + + Always + Toujours + + + Just this time + Cette fois uniquement + + + Import from %1 failed (%2) + Échec de l'import depuis %1 (%2) + + + Import from %1 successful (%2) + Importé avec succès depuis %1 (%2) + + + Imported from %1 + Imprté depuis %1 + + + Signed share container are not supported - import prevented + + + + File is not readable + Le fichier n'est pas lisible + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + Erreur inattendue + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + Le fichier n'existe pas + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Mot de passe programmé + + + 000000 + 000000 + + + Copy + Copie + + + Expires in <b>%n</b> second(s) + Expiration dans <b>%n</b>secondeExpiration dans <b>%n</b>secondes + + + + TotpExportSettingsDialog + + Copy + Copie + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + NOTE: Les paramètres TOTP sont personnalisés et peuvent ne pas être compatibles avec d'autres logiciels. + + + There was an error creating the QR code. + Une erreur est survenue lors de la création du QR Code. + + + Closing in %1 seconds. + Fermeture dans %1 secondes. + + + + TotpSetupDialog + + Setup TOTP + Configuration TOTP + + + Key: + Clé : + + + Default RFC 6238 token settings + Paramètres de base des codes RFC 6238 + + + Steam token settings + Paramètres du code éphémère Steam + + + Use custom settings + Utiliser les paramètres personnalisés + + + Custom Settings + Paramètres personnalisés + + + Time step: + Période de temps : + + + sec + Seconds + s + + + Code size: + Taille du code : + + + 6 digits + 6 chiffres + + + 7 digits + 7 chiffres + + + 8 digits + 8 chiffres + + + + UpdateCheckDialog + + Checking for updates + Vérification des mises à jour + + + Checking for updates... + Vérification des mises à jour ... + + + Close + Fermer + + + Update Error! + Erreur de mise à jour ! + + + An error occurred in retrieving update information. + Une erreur est survenue lors de la récupération des informations de mise à jour. + + + Please try again later. + Veuillez réessayer plus tard. + + + Software Update + Mise à jour du logiciel + + + A new version of KeePassXC is available! + Une nouvelle version de KeePassXC est disponible ! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 est disponible — vous avez actuellement %2. + + + Download it at keepassxc.org + Télécharger-la sur keepassxc.org + + + You're up-to-date! + Votre version est à jour ! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 est la dernière version disponible. + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + Gardez vos mots de passe en sécurité dans une base de données KeePassXC + + + Create new database + Créer une nouvelle base de données + + + Open existing database + Ouvrir une base de données existante + + + Import from KeePass 1 + Importer depuis KeePass 1 + + + Import from CSV + Importer depuis un CSV + + + Recent databases + Bases de données récentes + + + Welcome to KeePassXC %1 + Bienvenue sur KeePassXC %1 + + + + YubiKeyEditWidget + + Refresh + Actualiser + + + YubiKey Challenge-Response + Question-réponse YubiKey + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Si vous possédez une <a href="https://www.yubico.com/">YubiKey</a>, vous pouvez l'utiliser afin d'améliorer la sécurité.</p><p>Cela nécessite qu'un slot de votre YubiKey soit programmé comme <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">Question-réponse HMAC-SHA1</a>.</p> + + + No YubiKey detected, please ensure it's plugged in. + Aucune YubiKey détectée, veuillez vérifier qu'elle soit bien branchée. + + + No YubiKey inserted. + Aucune YubiKey insérée. + \ No newline at end of file diff --git a/share/translations/keepassx_he.ts b/share/translations/keepassx_he.ts new file mode 100644 index 000000000..309bf7626 --- /dev/null +++ b/share/translations/keepassx_he.ts @@ -0,0 +1,5423 @@ + + + AboutDialog + + About KeePassXC + + + + About + + + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + + + + Contributors + + + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + + + + Debug Info + + + + Include the following information whenever you report a bug: + + + + Copy to clipboard + + + + Revision: %1 + + + + Distribution: %1 + + + + Libraries: + + + + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + + + + Enabled extensions: + + + + Project Maintainers: + + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + + + + Version %1 + + + + Build Type: %1 + + + + Auto-Type + + + + Browser Integration + + + + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) + + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + + + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + + + + General + + + + Security + + + + Access error for config file %1 + + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + + + + Automatically save on exit + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + + + + Hide the entry preview panel + + + + General + + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + + + + Auto-Type + + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + + + + sec + Seconds + + + + Lock databases after inactivity of + + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + + + + Use DuckDuckGo as fallback for downloading website icons + + + + + AutoType + + Couldn't find an entry that matches the window title: + + + + Auto-Type - KeePassXC + + + + Auto-Type + + + + The Syntax of your Auto-Type statement is incorrect! + + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + + + + AutoTypeAssociationsModel + + Window + + + + Sequence + + + + Default sequence + + + + + AutoTypeMatchModel + + Group + + + + Title + + + + Username + + + + Sequence + + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + + + + Select entry to Auto-Type: + + + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + + + + Remember this decision + + + + Allow + + + + Deny + + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + + + BrowserOptionDialog + + Dialog + + + + This is required for accessing your databases with KeePassXC-Browser + + + + Enable KeepassXC browser integration + + + + General + + + + Enable integration for these browsers: + + + + &Google Chrome + + + + &Firefox + + + + &Chromium + + + + &Vivaldi + + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + + + + Re&quest to unlock the database if it is locked + + + + Only entries with the same scheme (http://, https://, ...) are returned. + + + + &Match URL scheme (e.g., https://...) + + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + + + + &Return only best-matching credentials + + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + + + + Advanced + + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + + + + Only the selected database has to be connected with a client. + + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + + + + Automatically creating or updating string fields is not supported. + + + + &Return advanced string fields which start with "KPH: " + + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + + + + Update &native messaging manifest files at startup + + + + Support a proxy application between KeePassXC and browser extension. + + + + Use a &proxy application between KeePassXC and browser extension + + + + Use a custom proxy location if you installed a proxy manually. + + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + + + + Browse... + Button for opening file dialog + + + + <b>Warning:</b> The following options can be dangerous! + + + + Select custom proxy location + + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + + BrowserService + + KeePassXC: New key association request + + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + + + + Save and allow access + + + + KeePassXC: Overwrite existing key? + + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + + KeePassXC: Update Entry + + + + Do you want to update the information in %1 - %2? + + + + Abort + + + + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + + + + KeePassXC: No entry with KeePassHTTP attributes found! + + + + The active database does not contain an entry with KeePassHTTP attributes. + + + + KeePassXC: Legacy browser integration settings detected + + + + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + CloneDialog + + Clone Options + + + + Append ' - Clone' to title + + + + Replace username and password with references + + + + Copy history + + + + + CsvImportWidget + + Import CSV fields + + + + filename + + + + size, rows, columns + + + + Encoding + + + + Codec + + + + Text is qualified by + + + + Fields are separated by + + + + Comments start with + + + + First record has field names + + + + Number of headers line to discard + + + + Consider '\' an escape character + + + + Preview + + + + Column layout + + + + Not present in CSV file + + + + Imported from CSV file + + + + Original data: + + + + Error + + + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + + + CSV import: writer has errors: +%1 + + + + + CsvParserModel + + %n column(s) + + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + + + + DatabaseOpenWidget + + Enter master key + + + + Key File: + + + + Password: + + + + Browse + + + + Refresh + + + + Challenge Response: + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + Don't show this warning again + + + + All files + + + + Key files + + + + Select key file + + + + TouchID for quick unlock + + + + Unable to open the database: +%1 + + + + Can't open key file: +%1 + + + + + DatabaseSettingWidgetMetaData + + Passwords + + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + + + + Security + + + + Master Key + + + + Encryption Settings + + + + Browser Integration + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + + + + AES: 256 Bit (default) + + + + Twofish: 256 Bit + + + + Key Derivation Function: + + + + Transform rounds: + + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + + + + Number of rounds too high + Key transformation rounds + + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + + Understood, keep number + + + + Cancel + + + + Number of rounds too low + Key transformation rounds + + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + + KDF unchanged + + + + Failed to transform key with new KDF parameters; KDF unchanged. + + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + + + + Database description: + + + + Default username: + + + + History Settings + + + + Max. history items: + + + + Max. history size: + + + + MiB + + + + Use recycle bin + + + + Additional Database Settings + + + + Enable &compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget + + KeePass 2 Database + + + + All files + + + + Open database + + + + CSV file + + + + Merge database + + + + Open KeePass 1 database + + + + KeePass 1 database + + + + Export database to CSV file + + + + Writing the CSV file failed. + + + + Database creation error + + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + + + + + DatabaseWidget + + Searching... + + + + Do you really want to delete the entry "%1" for good? + + + + Do you really want to move entry "%1" to the recycle bin? + + + + Do you really want to move %n entry(s) to the recycle bin? + + + + Execute command? + + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + + + + Do you really want to delete the group "%1" for good? + + + + No current database. + + + + No source database, nothing to do. + + + + Search Results (%1) + + + + No Results + + + + File has changed + + + + The database file has changed. Do you want to load the changes? + + + + Merge Request + + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + + + + Empty recycle bin? + + + + Are you sure you want to permanently delete everything from your recycle bin? + + + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + + + File opened in read only mode. + + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + + + + Database was modified. +Save changes? + + + + Save changes? + + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords + + + + Save database as + + + + KeePass 2 Database + + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + + + + + EditEntryWidget + + Entry + + + + Advanced + + + + Icon + + + + Auto-Type + + + + Properties + + + + History + + + + SSH Agent + + + + n/a + + + + (encrypted) + + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + + + Entry history + + + + Add entry + + + + Edit entry + + + + Different passwords supplied. + + + + New attribute + + + + Are you sure you want to remove this attribute? + + + + Tomorrow + + + + %n week(s) + + + + %n month(s) + + + + Apply generated password? + + + + Do you want to apply the generated password to this entry? + + + + Entry updated successfully. + + + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + + + + EditEntryWidgetAdvanced + + Additional attributes + + + + Add + + + + Remove + + + + Edit Name + + + + Protect + + + + Reveal + + + + Attachments + + + + Foreground Color: + + + + Background Color: + + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + + + + Inherit default Auto-Type sequence from the &group + + + + &Use custom Auto-Type sequence: + + + + Window Associations + + + + + + + + + - + + + + Window title: + + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + + + + Restore + + + + Delete + + + + Delete all + + + + + EditEntryWidgetMain + + URL: + + + + Password: + + + + Repeat: + + + + Title: + + + + Notes + + + + Presets + + + + Toggle the checkbox to reveal the notes section. + + + + Username: + + + + Expires + + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + + + + Add key to agent when database is opened/unlocked + + + + Comment + + + + Decrypt + + + + n/a + + + + Copy to clipboard + + + + Private key + + + + External file + + + + Browse... + Button for opening file dialog + + + + Attachment + + + + Add to agent + + + + Remove from agent + + + + Require user confirmation when this key is used + + + + + EditGroupWidget + + Group + + + + Icon + + + + Properties + + + + Add group + + + + Edit group + + + + Enable + + + + Disable + + + + Inherit from parent group (%1) + + + + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + + EditGroupWidgetMain + + Name + + + + Notes + + + + Expires + + + + Search + + + + Auto-Type + + + + &Use default Auto-Type sequence of parent group + + + + Set default Auto-Type se&quence + + + + + EditWidgetIcons + + &Use default icon + + + + Use custo&m icon + + + + Add custom icon + + + + Delete custom icon + + + + Download favicon + + + + Unable to fetch favicon. + + + + Images + + + + All files + + + + Custom icon already exists + + + + Confirm Delete + + + + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + + + + EditWidgetProperties + + Created: + + + + Modified: + + + + Accessed: + + + + Uuid: + + + + Plugin Data + + + + Remove + + + + Delete plugin data? + + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + + + + Key + + + + Value + + + + + Entry + + %1 - Clone + + + + + EntryAttachmentsModel + + Name + + + + Size + + + + + EntryAttachmentsWidget + + Form + + + + Add + + + + Remove + + + + Open + + + + Save + + + + Select files + + + + Are you sure you want to remove %n attachment(s)? + + + + Save attachments + + + + Unable to create directory: +%1 + + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + + + + Unable to save attachments: +%1 + + + + Unable to open attachment: +%1 + + + + Unable to open attachments: +%1 + + + + Confirm remove + + + + Unable to open file(s): +%1 + + + + + EntryAttributesModel + + Name + + + + + EntryHistoryModel + + Last modified + + + + Title + + + + Username + + + + URL + + + + + EntryModel + + Ref: + Reference abbreviation + + + + Group + + + + Title + + + + Username + + + + URL + + + + Never + + + + Password + + + + Notes + + + + Expires + + + + Created + + + + Modified + + + + Accessed + + + + Attachments + + + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + + + + General + + + + Username + + + + Password + + + + Expiration + + + + URL + + + + Attributes + + + + Attachments + + + + Notes + + + + Autotype + + + + Window + + + + Sequence + + + + Searching + + + + Search + + + + Clear + + + + Never + + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + + + + Disabled + + + + Share + + + + + EntryView + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + + + + + Group + + Recycle Bin + + + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + + + + HostInstaller + + KeePassXC: Cannot save file! + + + + Cannot save the native messaging script file. + + + + + KMessageWidget + + &Close + + + + Close message + + + + + Kdbx3Reader + + Unable to calculate master key + + + + Unable to issue challenge-response. + + + + Wrong key or database file is corrupt. + + + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + + Kdbx3Writer + + Unable to issue challenge-response. + + + + Unable to calculate master key + + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + + + + Invalid header checksum size + + + + Header SHA256 mismatch + + + + Wrong key or database file is corrupt. (HMAC mismatch) + + + + Unknown cipher + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + Failed to open buffer for KDF parameters in header + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + Not a KeePass database. + + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + + + + Unsupported KeePass 2 database version. + + + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + + + + KdbxXmlReader + + XML parsing failure: %1 + + + + No root group + + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + Invalid EnableAutoType value + + + + Invalid EnableSearching value + + + + No group uuid found + + + + Null DeleteObject uuid + + + + Missing DeletedObject uuid or time + + + + Null entry uuid + + + + Invalid entry icon number + + + + History element in history entry + + + + No entry uuid found + + + + History element with different uuid + + + + Duplicate custom attribute found + + + + Entry string key or value missing + + + + Duplicate attachment found + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + XML error: +%1 +Line %2, column %3 + + + + + KeePass1OpenWidget + + Import KeePass1 database + + + + Unable to open the database. + + + + + KeePass1Reader + + Unable to read keyfile. + + + + Not a KeePass database. + + + + Unsupported encryption algorithm. + + + + Unsupported KeePass database version. + + + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + + + + Invalid number of groups + + + + Invalid number of entries + + + + Invalid content hash size + + + + Invalid transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + + + + Root + + + + Unable to calculate master key + + + + Wrong key or database file is corrupt. + + + + Key transformation failed + + + + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + unable to seek to content position + + + + + KeeShare + + Disabled share + + + + Import from + + + + Export to + + + + Synchronize with + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + + + + All files + + + + Create Key File... + + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + + + + + MainWindow + + &Database + + + + &Recent databases + + + + &Help + + + + E&ntries + + + + &Groups + + + + &Tools + + + + &Quit + + + + &About + + + + &Open database... + + + + &Save database + + + + &Close database + + + + &Delete entry + + + + &Edit group + + + + &Delete group + + + + Sa&ve database as... + + + + Database settings + + + + &Clone entry + + + + Copy &username + + + + Copy username to clipboard + + + + Copy password to clipboard + + + + &Settings + + + + Password Generator + + + + &Lock databases + + + + &Title + + + + Copy title to clipboard + + + + &URL + + + + Copy URL to clipboard + + + + &Notes + + + + Copy notes to clipboard + + + + &Export to CSV file... + + + + Set up TOTP... + + + + Copy &TOTP + + + + E&mpty recycle bin + + + + Clear history + + + + Access error for config file %1 + + + + Settings + + + + Toggle window + + + + Quit KeePassXC + + + + Please touch the button on your YubiKey! + + + + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. + + + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key + + + + PEM boundary mismatch + + + + Base64 decoding failed + + + + Key file way too small. + + + + Key file magic header id invalid + + + + Found zero keys + + + + Failed to read public key. + + + + Corrupted key file, reading private key failed + + + + No private key payload to decrypt + + + + Trying to run KDF without cipher + + + + Passphrase is required to decrypt this key + + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + + + + Unexpected EOF while reading private key + + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + + + + Unsupported key type: %1 + + + + Unknown cipher: %1 + + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + + + + + PasswordEditWidget + + Enter password: + + + + Confirm password: + + + + Password + + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Password cannot be empty. + + + + Passwords do not match. + + + + Generate master password + + + + + PasswordGeneratorWidget + + %p% + + + + Password: + + + + strength + Password strength + + + + entropy + + + + Password + + + + Character Types + + + + Upper Case Letters + + + + Lower Case Letters + + + + Numbers + + + + Special Characters + + + + Extended ASCII + + + + Exclude look-alike characters + + + + Pick characters from every group + + + + &Length: + + + + Passphrase + + + + Wordlist: + + + + Word Separator: + + + + Copy + + + + Accept + + + + Close + + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + + + + Upper Case Letters A to F + + + + A-Z + + + + Lower Case Letters A to F + + + + a-z + + + + 0-9 + + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + + + + Move + + + + Empty + + + + Remove + + + + Skip + + + + Disable + + + + Merge + + + + + QObject + + Database not opened + + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + + + + Action cancelled or denied + + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + + + + Incorrect action + + + + Empty message received + + + + No URL provided + + + + No logins found + + + + Unknown error + + + + Add a new entry to a database. + + + + Path of the database. + + + + Key file of the database. + + + + path + + + + Username for the entry. + + + + username + + + + URL for the entry. + + + + URL + + + + Prompt for the entry's password. + + + + Generate a password for the entry. + + + + Length for the generated password. + + + + length + + + + Path of the entry to add. + + + + Copy an entry's password to the clipboard. + + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + + + + Edit an entry. + + + + Title for the entry. + + + + title + + + + Path of the entry to edit. + + + + Estimate the entropy of a password. + + + + Password for which to estimate the entropy. + + + + Perform advanced analysis on the password. + + + + Extract and print the content of a database. + + + + Path of the database to extract. + + + + Insert password to unlock %1: + + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + + +Available commands: + + + + + Name of the command to execute. + + + + List database entries. + + + + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + + + + Path of the database to merge into. + + + + Path of the database to merge from. + + + + Use the same credentials for both database files. + + + + Key file of the database to merge from. + + + + Show an entry's information. + + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + + + + attribute + + + + Name of the entry to show. + + + + NULL device + + + + error reading from device + + + + malformed string + + + + missing closing quote + + + + Group + + + + Title + + + + Username + + + + Password + + + + Notes + + + + Last Modified + + + + Created + + + + Browser Integration + + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + + + + Press + + + + Passive + + + + SSH Agent + + + + Generate a new random diceware passphrase. + + + + Word count for the diceware passphrase. + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + + + + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + + + + Database password: + + + + + QtIOCompressor + + Internal zlib error when compressing: + + + + Error writing to underlying device: + + + + Error opening underlying device: + + + + Error reading data from underlying device: + + + + Internal zlib error when decompressing: + + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + + + + Internal zlib error: + + + + + SSHAgent + + Agent connection failed. + + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget + + Search + + + + Clear + + + + Limit search to selected group + + + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + + + + SettingsWidgetKeeShare + + Active + + + + Allow export + + + + Allow import + + + + Own certificate + + + + Fingerprint: + + + + Certificate: + + + + Signer + + + + Key: + + + + Generate + + + + Import + + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + + + + 000000 + + + + Copy + + + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. + + + + + TotpSetupDialog + + Setup TOTP + + + + Key: + + + + Default RFC 6238 token settings + + + + Steam token settings + + + + Use custom settings + + + + Custom Settings + + + + Time step: + + + + sec + Seconds + + + + Code size: + + + + 6 digits + + + + 7 digits + + + + 8 digits + + + + + UpdateCheckDialog + + Checking for updates + + + + Checking for updates... + + + + Close + + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + + + + Create new database + + + + Open existing database + + + + Import from KeePass 1 + + + + Import from CSV + + + + Recent databases + + + + Welcome to KeePassXC %1 + + + + + YubiKeyEditWidget + + Refresh + + + + YubiKey Challenge-Response + + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + + + No YubiKey detected, please ensure it's plugged in. + + + + No YubiKey inserted. + + + + \ No newline at end of file diff --git a/share/translations/keepassx_hr_HR.ts b/share/translations/keepassx_hr_HR.ts new file mode 100644 index 000000000..4a497ba5c --- /dev/null +++ b/share/translations/keepassx_hr_HR.ts @@ -0,0 +1,5423 @@ + + + AboutDialog + + About KeePassXC + + + + About + + + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + + + + Contributors + + + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + + + + Debug Info + + + + Include the following information whenever you report a bug: + + + + Copy to clipboard + + + + Revision: %1 + + + + Distribution: %1 + + + + Libraries: + + + + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + + + + Enabled extensions: + + + + Project Maintainers: + + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + + + + Version %1 + + + + Build Type: %1 + + + + Auto-Type + + + + Browser Integration + + + + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) + + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + + + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + + + + General + + + + Security + + + + Access error for config file %1 + + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + + + + Automatically save on exit + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + + + + Hide the entry preview panel + + + + General + + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + + + + Auto-Type + + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + + + + sec + Seconds + + + + Lock databases after inactivity of + + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + + + + Use DuckDuckGo as fallback for downloading website icons + + + + + AutoType + + Couldn't find an entry that matches the window title: + + + + Auto-Type - KeePassXC + + + + Auto-Type + + + + The Syntax of your Auto-Type statement is incorrect! + + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + + + + AutoTypeAssociationsModel + + Window + + + + Sequence + + + + Default sequence + + + + + AutoTypeMatchModel + + Group + + + + Title + + + + Username + + + + Sequence + + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + + + + Select entry to Auto-Type: + + + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + + + + Remember this decision + + + + Allow + + + + Deny + + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + + + BrowserOptionDialog + + Dialog + + + + This is required for accessing your databases with KeePassXC-Browser + + + + Enable KeepassXC browser integration + + + + General + + + + Enable integration for these browsers: + + + + &Google Chrome + + + + &Firefox + + + + &Chromium + + + + &Vivaldi + + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + + + + Re&quest to unlock the database if it is locked + + + + Only entries with the same scheme (http://, https://, ...) are returned. + + + + &Match URL scheme (e.g., https://...) + + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + + + + &Return only best-matching credentials + + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + + + + Advanced + + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + + + + Only the selected database has to be connected with a client. + + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + + + + Automatically creating or updating string fields is not supported. + + + + &Return advanced string fields which start with "KPH: " + + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + + + + Update &native messaging manifest files at startup + + + + Support a proxy application between KeePassXC and browser extension. + + + + Use a &proxy application between KeePassXC and browser extension + + + + Use a custom proxy location if you installed a proxy manually. + + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + + + + Browse... + Button for opening file dialog + + + + <b>Warning:</b> The following options can be dangerous! + + + + Select custom proxy location + + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + + BrowserService + + KeePassXC: New key association request + + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + + + + Save and allow access + + + + KeePassXC: Overwrite existing key? + + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + + KeePassXC: Update Entry + + + + Do you want to update the information in %1 - %2? + + + + Abort + + + + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + + + + KeePassXC: No entry with KeePassHTTP attributes found! + + + + The active database does not contain an entry with KeePassHTTP attributes. + + + + KeePassXC: Legacy browser integration settings detected + + + + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + CloneDialog + + Clone Options + + + + Append ' - Clone' to title + + + + Replace username and password with references + + + + Copy history + + + + + CsvImportWidget + + Import CSV fields + + + + filename + + + + size, rows, columns + + + + Encoding + + + + Codec + + + + Text is qualified by + + + + Fields are separated by + + + + Comments start with + + + + First record has field names + + + + Number of headers line to discard + + + + Consider '\' an escape character + + + + Preview + + + + Column layout + + + + Not present in CSV file + + + + Imported from CSV file + + + + Original data: + + + + Error + + + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + + + CSV import: writer has errors: +%1 + + + + + CsvParserModel + + %n column(s) + + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + + + + DatabaseOpenWidget + + Enter master key + + + + Key File: + + + + Password: + + + + Browse + + + + Refresh + + + + Challenge Response: + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + Don't show this warning again + + + + All files + + + + Key files + + + + Select key file + + + + TouchID for quick unlock + + + + Unable to open the database: +%1 + + + + Can't open key file: +%1 + + + + + DatabaseSettingWidgetMetaData + + Passwords + + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + + + + Security + + + + Master Key + + + + Encryption Settings + + + + Browser Integration + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + + + + AES: 256 Bit (default) + + + + Twofish: 256 Bit + + + + Key Derivation Function: + + + + Transform rounds: + + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + + + + Number of rounds too high + Key transformation rounds + + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + + Understood, keep number + + + + Cancel + + + + Number of rounds too low + Key transformation rounds + + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + + KDF unchanged + + + + Failed to transform key with new KDF parameters; KDF unchanged. + + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + + + + Database description: + + + + Default username: + + + + History Settings + + + + Max. history items: + + + + Max. history size: + + + + MiB + + + + Use recycle bin + + + + Additional Database Settings + + + + Enable &compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget + + KeePass 2 Database + + + + All files + + + + Open database + + + + CSV file + + + + Merge database + + + + Open KeePass 1 database + + + + KeePass 1 database + + + + Export database to CSV file + + + + Writing the CSV file failed. + + + + Database creation error + + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + + + + + DatabaseWidget + + Searching... + + + + Do you really want to delete the entry "%1" for good? + + + + Do you really want to move entry "%1" to the recycle bin? + + + + Do you really want to move %n entry(s) to the recycle bin? + + + + Execute command? + + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + + + + Do you really want to delete the group "%1" for good? + + + + No current database. + + + + No source database, nothing to do. + + + + Search Results (%1) + + + + No Results + + + + File has changed + + + + The database file has changed. Do you want to load the changes? + + + + Merge Request + + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + + + + Empty recycle bin? + + + + Are you sure you want to permanently delete everything from your recycle bin? + + + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + + + File opened in read only mode. + + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + + + + Database was modified. +Save changes? + + + + Save changes? + + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords + + + + Save database as + + + + KeePass 2 Database + + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + + + + + EditEntryWidget + + Entry + + + + Advanced + + + + Icon + + + + Auto-Type + + + + Properties + + + + History + + + + SSH Agent + + + + n/a + + + + (encrypted) + + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + + + Entry history + + + + Add entry + + + + Edit entry + + + + Different passwords supplied. + + + + New attribute + + + + Are you sure you want to remove this attribute? + + + + Tomorrow + + + + %n week(s) + + + + %n month(s) + + + + Apply generated password? + + + + Do you want to apply the generated password to this entry? + + + + Entry updated successfully. + + + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + + + + EditEntryWidgetAdvanced + + Additional attributes + + + + Add + + + + Remove + + + + Edit Name + + + + Protect + + + + Reveal + + + + Attachments + + + + Foreground Color: + + + + Background Color: + + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + + + + Inherit default Auto-Type sequence from the &group + + + + &Use custom Auto-Type sequence: + + + + Window Associations + + + + + + + + + - + + + + Window title: + + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + + + + Restore + + + + Delete + + + + Delete all + + + + + EditEntryWidgetMain + + URL: + + + + Password: + + + + Repeat: + + + + Title: + + + + Notes + + + + Presets + + + + Toggle the checkbox to reveal the notes section. + + + + Username: + + + + Expires + + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + + + + Add key to agent when database is opened/unlocked + + + + Comment + + + + Decrypt + + + + n/a + + + + Copy to clipboard + + + + Private key + + + + External file + + + + Browse... + Button for opening file dialog + + + + Attachment + + + + Add to agent + + + + Remove from agent + + + + Require user confirmation when this key is used + + + + + EditGroupWidget + + Group + + + + Icon + + + + Properties + + + + Add group + + + + Edit group + + + + Enable + + + + Disable + + + + Inherit from parent group (%1) + + + + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + + EditGroupWidgetMain + + Name + + + + Notes + + + + Expires + + + + Search + + + + Auto-Type + + + + &Use default Auto-Type sequence of parent group + + + + Set default Auto-Type se&quence + + + + + EditWidgetIcons + + &Use default icon + + + + Use custo&m icon + + + + Add custom icon + + + + Delete custom icon + + + + Download favicon + + + + Unable to fetch favicon. + + + + Images + + + + All files + + + + Custom icon already exists + + + + Confirm Delete + + + + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + + + + EditWidgetProperties + + Created: + + + + Modified: + + + + Accessed: + + + + Uuid: + + + + Plugin Data + + + + Remove + + + + Delete plugin data? + + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + + + + Key + + + + Value + + + + + Entry + + %1 - Clone + + + + + EntryAttachmentsModel + + Name + + + + Size + + + + + EntryAttachmentsWidget + + Form + + + + Add + + + + Remove + + + + Open + + + + Save + + + + Select files + + + + Are you sure you want to remove %n attachment(s)? + + + + Save attachments + + + + Unable to create directory: +%1 + + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + + + + Unable to save attachments: +%1 + + + + Unable to open attachment: +%1 + + + + Unable to open attachments: +%1 + + + + Confirm remove + + + + Unable to open file(s): +%1 + + + + + EntryAttributesModel + + Name + + + + + EntryHistoryModel + + Last modified + + + + Title + + + + Username + + + + URL + + + + + EntryModel + + Ref: + Reference abbreviation + + + + Group + + + + Title + + + + Username + + + + URL + + + + Never + + + + Password + + + + Notes + + + + Expires + + + + Created + + + + Modified + + + + Accessed + + + + Attachments + + + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + + + + General + + + + Username + + + + Password + + + + Expiration + + + + URL + + + + Attributes + + + + Attachments + + + + Notes + + + + Autotype + + + + Window + + + + Sequence + + + + Searching + + + + Search + + + + Clear + + + + Never + + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + + + + Disabled + + + + Share + + + + + EntryView + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + + + + + Group + + Recycle Bin + + + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + + + + HostInstaller + + KeePassXC: Cannot save file! + + + + Cannot save the native messaging script file. + + + + + KMessageWidget + + &Close + + + + Close message + + + + + Kdbx3Reader + + Unable to calculate master key + + + + Unable to issue challenge-response. + + + + Wrong key or database file is corrupt. + + + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + + Kdbx3Writer + + Unable to issue challenge-response. + + + + Unable to calculate master key + + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + + + + Invalid header checksum size + + + + Header SHA256 mismatch + + + + Wrong key or database file is corrupt. (HMAC mismatch) + + + + Unknown cipher + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + Failed to open buffer for KDF parameters in header + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + Not a KeePass database. + + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + + + + Unsupported KeePass 2 database version. + + + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + + + + KdbxXmlReader + + XML parsing failure: %1 + + + + No root group + + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + Invalid EnableAutoType value + + + + Invalid EnableSearching value + + + + No group uuid found + + + + Null DeleteObject uuid + + + + Missing DeletedObject uuid or time + + + + Null entry uuid + + + + Invalid entry icon number + + + + History element in history entry + + + + No entry uuid found + + + + History element with different uuid + + + + Duplicate custom attribute found + + + + Entry string key or value missing + + + + Duplicate attachment found + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + XML error: +%1 +Line %2, column %3 + + + + + KeePass1OpenWidget + + Import KeePass1 database + + + + Unable to open the database. + + + + + KeePass1Reader + + Unable to read keyfile. + + + + Not a KeePass database. + + + + Unsupported encryption algorithm. + + + + Unsupported KeePass database version. + + + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + + + + Invalid number of groups + + + + Invalid number of entries + + + + Invalid content hash size + + + + Invalid transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + + + + Root + + + + Unable to calculate master key + + + + Wrong key or database file is corrupt. + + + + Key transformation failed + + + + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + unable to seek to content position + + + + + KeeShare + + Disabled share + + + + Import from + + + + Export to + + + + Synchronize with + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + + + + All files + + + + Create Key File... + + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + + + + + MainWindow + + &Database + + + + &Recent databases + + + + &Help + + + + E&ntries + + + + &Groups + + + + &Tools + + + + &Quit + + + + &About + + + + &Open database... + + + + &Save database + + + + &Close database + + + + &Delete entry + + + + &Edit group + + + + &Delete group + + + + Sa&ve database as... + + + + Database settings + + + + &Clone entry + + + + Copy &username + + + + Copy username to clipboard + + + + Copy password to clipboard + + + + &Settings + + + + Password Generator + + + + &Lock databases + + + + &Title + + + + Copy title to clipboard + + + + &URL + + + + Copy URL to clipboard + + + + &Notes + + + + Copy notes to clipboard + + + + &Export to CSV file... + + + + Set up TOTP... + + + + Copy &TOTP + + + + E&mpty recycle bin + + + + Clear history + + + + Access error for config file %1 + + + + Settings + + + + Toggle window + + + + Quit KeePassXC + + + + Please touch the button on your YubiKey! + + + + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. + + + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key + + + + PEM boundary mismatch + + + + Base64 decoding failed + + + + Key file way too small. + + + + Key file magic header id invalid + + + + Found zero keys + + + + Failed to read public key. + + + + Corrupted key file, reading private key failed + + + + No private key payload to decrypt + + + + Trying to run KDF without cipher + + + + Passphrase is required to decrypt this key + + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + + + + Unexpected EOF while reading private key + + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + + + + Unsupported key type: %1 + + + + Unknown cipher: %1 + + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + + + + + PasswordEditWidget + + Enter password: + + + + Confirm password: + + + + Password + + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Password cannot be empty. + + + + Passwords do not match. + + + + Generate master password + + + + + PasswordGeneratorWidget + + %p% + + + + Password: + + + + strength + Password strength + + + + entropy + + + + Password + + + + Character Types + + + + Upper Case Letters + + + + Lower Case Letters + + + + Numbers + + + + Special Characters + + + + Extended ASCII + + + + Exclude look-alike characters + + + + Pick characters from every group + + + + &Length: + + + + Passphrase + + + + Wordlist: + + + + Word Separator: + + + + Copy + + + + Accept + + + + Close + + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + + + + Upper Case Letters A to F + + + + A-Z + + + + Lower Case Letters A to F + + + + a-z + + + + 0-9 + + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + + + + Move + + + + Empty + + + + Remove + + + + Skip + + + + Disable + + + + Merge + + + + + QObject + + Database not opened + + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + + + + Action cancelled or denied + + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + + + + Incorrect action + + + + Empty message received + + + + No URL provided + + + + No logins found + + + + Unknown error + + + + Add a new entry to a database. + + + + Path of the database. + + + + Key file of the database. + + + + path + + + + Username for the entry. + + + + username + + + + URL for the entry. + + + + URL + + + + Prompt for the entry's password. + + + + Generate a password for the entry. + + + + Length for the generated password. + + + + length + + + + Path of the entry to add. + + + + Copy an entry's password to the clipboard. + + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + + + + Edit an entry. + + + + Title for the entry. + + + + title + + + + Path of the entry to edit. + + + + Estimate the entropy of a password. + + + + Password for which to estimate the entropy. + + + + Perform advanced analysis on the password. + + + + Extract and print the content of a database. + + + + Path of the database to extract. + + + + Insert password to unlock %1: + + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + + +Available commands: + + + + + Name of the command to execute. + + + + List database entries. + + + + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + + + + Path of the database to merge into. + + + + Path of the database to merge from. + + + + Use the same credentials for both database files. + + + + Key file of the database to merge from. + + + + Show an entry's information. + + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + + + + attribute + + + + Name of the entry to show. + + + + NULL device + + + + error reading from device + + + + malformed string + + + + missing closing quote + + + + Group + + + + Title + + + + Username + + + + Password + + + + Notes + + + + Last Modified + + + + Created + + + + Browser Integration + + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + + + + Press + + + + Passive + + + + SSH Agent + + + + Generate a new random diceware passphrase. + + + + Word count for the diceware passphrase. + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + + + + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + + + + Database password: + + + + + QtIOCompressor + + Internal zlib error when compressing: + + + + Error writing to underlying device: + + + + Error opening underlying device: + + + + Error reading data from underlying device: + + + + Internal zlib error when decompressing: + + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + + + + Internal zlib error: + + + + + SSHAgent + + Agent connection failed. + + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget + + Search + + + + Clear + + + + Limit search to selected group + + + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + + + + SettingsWidgetKeeShare + + Active + + + + Allow export + + + + Allow import + + + + Own certificate + + + + Fingerprint: + + + + Certificate: + + + + Signer + + + + Key: + + + + Generate + + + + Import + + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + + + + 000000 + + + + Copy + + + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. + + + + + TotpSetupDialog + + Setup TOTP + + + + Key: + + + + Default RFC 6238 token settings + + + + Steam token settings + + + + Use custom settings + + + + Custom Settings + + + + Time step: + + + + sec + Seconds + + + + Code size: + + + + 6 digits + + + + 7 digits + + + + 8 digits + + + + + UpdateCheckDialog + + Checking for updates + + + + Checking for updates... + + + + Close + + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + + + + Create new database + + + + Open existing database + + + + Import from KeePass 1 + + + + Import from CSV + + + + Recent databases + + + + Welcome to KeePassXC %1 + + + + + YubiKeyEditWidget + + Refresh + + + + YubiKey Challenge-Response + + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + + + No YubiKey detected, please ensure it's plugged in. + + + + No YubiKey inserted. + + + + \ No newline at end of file diff --git a/share/translations/keepassx_hu.ts b/share/translations/keepassx_hu.ts index eaf3a4722..95e035abb 100644 --- a/share/translations/keepassx_hu.ts +++ b/share/translations/keepassx_hu.ts @@ -15,7 +15,7 @@ KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - A KeePassXC a GNU General Public License (GPL) 2. vagy (válaszhatóan ) 3. verziója szerint kerül terjesztésre. + A KeePassXC a GNU General Public License (GPL) 2-es vagy (válaszhatóan) 3-as verziója szerint kerül terjesztésre. Contributors @@ -37,36 +37,6 @@ Copy to clipboard Vágólapra másolás - - Version %1 - - Verzió: %1 - - - - Revision: %1 - Revízió: %1 - - - Distribution: %1 - Disztribúció: %1 - - - Libraries: - Függvénykönyvtárak: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operációs rendszer: %1 -CPU architektúra: %2 -Kernel: %3 %4 - - - Enabled extensions: - Engedélyezett kiterjesztések: - Project Maintainers: Projektkarbantartók: @@ -75,36 +45,6 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. A KeePassXC fejlesztőcsapata ezúton külön köszönetet mond debfx-nek az eredetei KeePassX létrehozásáért. - - Build Type: %1 - - Build típusa: %1 - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP hozzáférési engedély - - - Remember this decision - Döntés megjegyzése - - - Allow - Engedélyezés - - - Deny - Megtagadás - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - A %1 jelszóengedélyt kér a következő elem(ek) számára. -Válassza ki, hogy engedélyezi-e a hozzáférést. - AgentSettingsWidget @@ -112,6 +52,277 @@ Válassza ki, hogy engedélyezi-e a hozzáférést. Enable SSH Agent (requires restart) SSH ügynök engedélyezése (újraindítást igényel) + + Use OpenSSH for Windows instead of Pageant + OpenSSH alkalmazása Windowson a Pageant helyett + + + + ApplicationSettingsWidget + + Application Settings + Alkalmazásbeállítások + + + General + Általános + + + Security + Biztonság + + + Access error for config file %1 + Hozzáférési hiba a beállítási fájlhoz: %1 + + + Icon only + Csak ikonok + + + Text only + Csak szöveg + + + Text beside icon + Szöveg az ikonok mellett + + + Text under icon + Szöveg az ikonok alatt + + + Follow style + Stílus követése + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Alapvető beállítások + + + Startup + Indítás + + + Start only a single instance of KeePassXC + A KeePassXC többszörös indításának tiltása + + + Remember last databases + Utolsó adatbázis megjegyzése + + + Remember last key files and security dongles + Az utolsó kulcsfájlok és biztonsági hardverkulcsok megjegyzése + + + Load previous databases on startup + Előző adatbázisok betöltése indításkor + + + Minimize window at application startup + Indításkor az ablak kicsinyítése + + + File Management + Fájlkezelés + + + Safely save database files (may be incompatible with Dropbox, etc) + Adatbázisok biztonságos mentése (lehet, hogy inkompatibilis a Dropbox-szal és hasonlókkal) + + + Backup database file before saving + Készüljön biztonsági mentés az adatbázisról mentés előtt + + + Automatically save after every change + Automatikus mentés minden módosítás után + + + Automatically save on exit + Automatikus mentés kilépéskor + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Nem adatjellegű változások (pl. csoport lenyitása) esetén az adatbázis módosított állapotba kerülésének megakadályozása + + + Automatically reload the database when modified externally + Külső módosításkor az adatbázis automatikus újratöltése + + + Entry Management + Bejegyzéskezelés + + + Use group icon on entry creation + A csoport ikonjának használata a bejegyzés létrehozásakor + + + Minimize when copying to clipboard + Kicsinyítés a vágólapra történő másoláskor + + + Hide the entry preview panel + A bejegyzés előnézeti panel elrejtése + + + General + Általános + + + Hide toolbar (icons) + Eszköztár (ikonok) elrejtése + + + Minimize instead of app exit + Kilépés helyett minimalizálás + + + Show a system tray icon + Rendszertálca-ikon megjelenítése + + + Dark system tray icon + Sötét rendszertálca-ikon + + + Hide window to system tray when minimized + Az ablak rendszertálcára rejtése kicsinyítéskor + + + Language + Nyelv + + + Auto-Type + Automatikus beírás + + + Use entry title to match windows for global Auto-Type + Bejegyzések címének alkalmazása az ablakok illesztésénél a globális automatikus beírás számára. + + + Use entry URL to match windows for global Auto-Type + Bejegyzések URL-jének alkalmazása az ablakok illesztésénél a globális automatikus beírás számára. + + + Always ask before performing Auto-Type + Mindig kérdezzen az automatikus beírás megkezdése előtt + + + Global Auto-Type shortcut + Globális automatikus beírás gyorsbillentyűje + + + Auto-Type typing delay + Automatikus beírás késleltetése + + + ms + Milliseconds + ms + + + Auto-Type start delay + Automatikus beírás kezdésének késleltetése + + + Check for updates at application startup + Frissítések keresése a program indulásakor + + + Include pre-releases when checking for updates + A frissítések keresése az előzetes kiadásokra is terjedjen ki + + + Movable toolbar + Mozgatható eszköztár + + + Button style + Gombstílus + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Időtúllépések + + + Clear clipboard after + Vágólap törlése ennyi idő után + + + sec + Seconds + mp + + + Lock databases after inactivity of + Adatbázis zárolása ennyi inaktivitás után + + + min + min + + + Forget TouchID after inactivity of + A TouchID elfelejtése ennyi tétlenség után: + + + Convenience + Kényelem + + + Lock databases when session is locked or lid is closed + Adatbázis zárolása munkamenet zárolásakor vagy a fedél lecsukásakor + + + Forget TouchID when session is locked or lid is closed + A TouchID elfelejtése a munkamenet zárolásakor vagy a fedél lehajtásakor + + + Lock databases after minimizing the window + Adatbázis zárolása az ablak lekicsinyítésekor + + + Re-lock previously locked database after performing Auto-Type + Az előzőleg zárolt adatbázis újbóli zárolása automatikus beírást követően + + + Don't require password repeat when it is visible + Jelszóismétlés elkerülése látható jelszó esetén + + + Don't hide passwords when editing them + Szerkesztéskor ne rejtse el a jelszavakat + + + Don't use placeholder for empty password fields + Na használjon helykitöltőt az üres jelszómezőknél + + + Hide passwords in the entry preview panel + Jelszavak elrejtése a bejegyzés előnézeti panelen + + + Hide entry notes by default + Bejegyzések jegyzeteinek elrejtése alapértelmezetten + + + Privacy + Adatvédelem + + + Use DuckDuckGo as fallback for downloading website icons + A DuckDuckGo használata tartalékként, a webhelyikonok letöltésére + AutoType @@ -214,6 +425,27 @@ Please select whether you want to allow access. Válassza ki, hogy engedélyezi-e a hozzáférést. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-böngésző bejegyzés mentése + + + Ok + Ok + + + Cancel + Mégse + + + You have multiple databases open. +Please select the correct database for saving credentials. + Több adatbázis van nyitva. +Válassza ki a helyes adatbázist a hitelesítő adatok mentéséhez. + + BrowserOptionDialog @@ -287,14 +519,6 @@ Válassza ki, hogy engedélyezi-e a hozzáférést. Credentials mean login data requested via browser extension Illeszkedő hitelesítési adatok rendezése &felhasználónév szerint - - &Disconnect all browsers - Minden böngésző &leválasztása - - - Forget all remembered &permissions - Minden tárolt hozzáférés törlése - Advanced Speciális @@ -360,21 +584,42 @@ Válassza ki, hogy engedélyezi-e a hozzáférést. <b>Warning:</b> The following options can be dangerous! <b>Figyelmeztetés:</b> A következő beállítások veszélyesek lehetnek! - - Executable Files (*.exe);;All Files (*.*) - Végrehajtható fájlok (*.exe);;Minden fájl (*.*) - - - Executable Files (*) - Végrehajtható fájlok (*) - Select custom proxy location Egyedi proxyhely kijelölése - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Sajnáljuk, de a KeePassXC-Browser pillanatnyilag nem támogatja a Snap kiadásokat. + &Tor Browser + &Tor böngésző + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Figyelem</b>, a keepassxc-proxy alkalmazás nem található!<br />Ellenőrizze a KeePassXC telepítési könyvtárat, vagy erősítse meg az egyéni útvonalat a speciális beállításokban.<br />A böngészőintegráció NEM FOG MŰKÖDNI a proxy alkalmazás nélkül.<br />Várt útvonal: + + + Executable Files + Végrehajtható fájlok + + + All Files + Minden fájl + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Ne kérjen engedélyt a HTTP &Basic Auth számára + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -414,153 +659,55 @@ Valóban felülírható? Do you want to update the information in %1 - %2? Frissíti az információt ebben: %1 – %2? - - KeePassXC: Database locked! - KeePassXC: Adatbázis zárolva! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Az aktív adatbázis zárolt. -Fel kell oldani a kijelölt adatbázist, vagy egy másik nem zároltat kell választania. - - - KeePassXC: Settings not available! - KeePassXC: Nincs ilyen beállítás! - - - The active database does not contain a settings entry. - Az aktív adatbázisban nincs beállítási bejegyzés. - - - KeePassXC: No keys found - KeePassXC: Nincs találat a kulcsok között - - - No shared encryption keys found in KeePassXC Settings. - Nem található megosztott titkosítási kulcs a KeePassXC beállításaiban. - - - KeePassXC: Removed keys from database - KeePassXC: Kulcsok eltávolítva az adatbázisból - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból.Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból. - - - Removing stored permissions… - Tárolt jogosultságok törlése… - Abort Megszakítás - KeePassXC: Removed permissions - KeePassXC: Jogosultságok eltávolítva + Converting attributes to custom data… + Attribútumok átalakítása egyéni adatokká… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Átalakított KeePassHTTP attribútumok + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Attribútumok sikeresen átalakítva %1 bejegyzésből. +%2 kulcs áthelyezve az egyéni adatokhoz. - Successfully removed permissions from %n entry(s). - Sikeresen el lett távolítva a jogosultság %n elemről.Sikeresen el lett távolítva a jogosultság %n elemről. + Successfully moved %n keys to custom data. + %n kulcs sikeresen áthelyezve az egyéni adatokhoz.%n kulcs sikeresen áthelyezve az egyéni adatokhoz. - KeePassXC: No entry with permissions found! - KeePassXC: Nem található bejegyzés ilyen jogosultsággal! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nem található bejegyzés KeePassHTTP attribútumokkal! - The active database does not contain an entry with permissions. - Az aktív adatbázisban nincs egyetlen jogosultsági bejegyzés sem. - - - - ChangeMasterKeyWidget - - Password - Jelszó + The active database does not contain an entry with KeePassHTTP attributes. + Az aktív adatbázisban nincs egyetlen KeePassHTTP attribútumokat tartalmazó bejegyzés sem. - Enter password: - Jelszó megadása: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Örökölt böngészőintegrációs beállítások észlelve - Repeat password: - Jelszó ismétlése: + KeePassXC: Create a new group + - &Key file - &Kulcsfájl + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Tallózás - - - Create - Létrehozás - - - Cha&llenge Response - Ki&hívás-válasz - - - Refresh - Frissítés - - - Key files - Kulcsfájlok - - - All files - Minden fájl - - - Create Key File... - Kulcsfájl létrehozása… - - - Unable to create Key File : - Nem hozható létre kulcsfájl: - - - Select a key file - Kulcsfájl kiválasztása - - - Empty password - Üres jelszó - - - Do you really want to use an empty string as password? - Valóban üres szöveget szeretne használni jelszóként? - - - Different passwords supplied. - Eltérő jelszavak lettek megadva. - - - Failed to set %1 as the Key file: -%2 - A(z) %1 kulcsfájl beállítása sikertelen: -%2 - - - Legacy key file format - Örökölt kulcsfájl formátum - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Egy régi, örökölt kulcsfájl formátumot használ, ami a közeljövőben már nem lesz támogatott. - -Megfontolandó egy új kulcsfájl készítése. - - - Changing master key failed: no YubiKey inserted. - A mesterkulcs módosítása sikertelen: nincs YubiKey behelyezve. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -640,14 +787,6 @@ Megfontolandó egy új kulcsfájl készítése. Not present in CSV file Nincs jelen a CSV-fájlban - - Empty fieldname - Üres mezőnév - - - column - oszlop - Imported from CSV file CSV-fájlból importálva @@ -656,50 +795,91 @@ Megfontolandó egy új kulcsfájl készítése. Original data: Eredeti adatok: - - Error(s) detected in CSV file ! - Hibák találhatók a CSV-fájlban! - - - more messages skipped] - további üzenet mellőzve] - Error Hiba + + Empty fieldname %1 + Üres mezőnév: %1 + + + column %1 + %1. oszlop + + + Error(s) detected in CSV file! + Hibák találhatók a CSV-fájlban! + + + [%n more message(s) skipped] + [%n további üzenet mellőzve][%n további üzenet mellőzve] + CSV import: writer has errors: - +%1 CSV importálás: a mentés hibába ütközött: - - - - - CsvImportWizard - - Error - Hiba - - - Unable to calculate master key - Nem lehet kiszámítani a mesterkulcsot +%1 CsvParserModel - - %n byte(s), - %n bájt, %n bájt, - - - %n row(s), - %n sor, %n sor, - %n column(s) %n oszlop%n oszlop + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bájt%n bájt + + + %n row(s) + %n sor%n sor + + + + Database + + Root + Root group name + Gyökér + + + File %1 does not exist. + A(z) %1 fájl nem létezik + + + Unable to open file %1. + A(z) %1 fájl nem nyitható meg. + + + Error while reading the database: %1 + Hiba az adatbázis megnyitásakor: %1 + + + Could not save, database has no file name. + Nem menthető, az adatbázisnak nincs fájlneve. + + + File cannot be written as it is opened in read-only mode. + A fájlba nem lehet írni, mert csak olvasható módban van megnyitva. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Adatbázis feloldása – KeePassXC + DatabaseOpenWidget @@ -727,14 +907,6 @@ Megfontolandó egy új kulcsfájl készítése. Challenge Response: Kihívás-válasz: - - Unable to open the database. - Nem lehet megnyitni az adatbázist. - - - Can't open key file - Nem lehet megnyitni a kulcsfájlt - Legacy key file format Örökölt kulcsfájl formátum @@ -764,53 +936,254 @@ Megfontolandó egy új kulcsfájl készítése. Select key file Kulcsfájl kiválasztása - - - DatabaseRepairWidget - Repair database - Adatbázis javítása + TouchID for quick unlock + TouchID a gyors feloldáshoz - Error - Hiba + Unable to open the database: +%1 + Az adatbázis nem nyitható meg: +%1 - Can't open key file - Nem lehet megnyitni a kulcsfájl - - - Unable to open the database. - Nem lehet megnyitni az adatbázist. - - - Database opened fine. Nothing to do. - Az adatbázis megnyitása sikeres. Nincs további teendő. - - - Success - Sikeres - - - The database has been successfully repaired -You can now save it. - Az adatbázis sikeresen meg lett javítva. -Most már el lehet menteni. - - - Unable to repair the database. - Nem lehet megjavítani az adatbázist. + Can't open key file: +%1 + A kulcsfájl nem nyitható meg: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Jelszavak + + + + DatabaseSettingsDialog + + Advanced Settings + Speciális beállítások + General Általános - Encryption - Titkosítás + Security + Biztonság + + + Master Key + Mesterkulcs + + + Encryption Settings + Titkosítási beállítások + + + Browser Integration + Böngészőintegráció + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-böngésző beállítások + + + &Disconnect all browsers + Minden böngésző &leválasztása + + + Forg&et all site-specific settings on entries + A bejegyzések összes oldalfüggő beállításának &elfelejtése + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + HTTP attribútumok áthelyezése a KeePassXC-böngésző &egyéni adatokhoz + + + Stored keys + Tárolt kulcsok + + + Remove + Eltávolítás + + + Delete the selected key? + Törli a kiválasztott kulcsot? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Valóban törli a kiválasztott kulcsot? +Ez megakadályozhatja a böngésző bővítményhez történő kapcsolódást. + + + Key + Kulcs + + + Value + Érték + + + Enable Browser Integration to access these settings. + Engedélyezze a böngészőintegrációt ezekhez a beállításokhoz. + + + Disconnect all browsers + Minden böngésző leválasztása + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Valóban leválasztja az összes böngészőt? +Ez megakadályozhatja a böngésző bővítményhez történő kapcsolódást. + + + KeePassXC: No keys found + KeePassXC: Nincs találat a kulcsok között + + + No shared encryption keys found in KeePassXC settings. + Nem található megosztott titkosítási kulcs a KeePassXC beállításaiban. + + + KeePassXC: Removed keys from database + KeePassXC: Kulcsok eltávolítva az adatbázisból + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból.Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból. + + + Forget all site-specific settings on entries + A bejegyzések összes oldalfüggő beállításának elfelejtése + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Valóban elfelejti az összes oldalfüggő beállítást az összes bejegyzésnél? +A bejegyzések elérési engedélyei vissza lesznek vonva. + + + Removing stored permissions… + Tárolt jogosultságok törlése… + + + Abort + Megszakítás + + + KeePassXC: Removed permissions + KeePassXC: Jogosultságok eltávolítva + + + Successfully removed permissions from %n entry(s). + Sikeresen el lett távolítva a jogosultság %n elemről.Sikeresen el lett távolítva a jogosultság %n elemről. + + + KeePassXC: No entry with permissions found! + KeePassXC: Nem található bejegyzés ilyen jogosultsággal! + + + The active database does not contain an entry with permissions. + Az aktív adatbázisban nincs egyetlen jogosultsági bejegyzés sem. + + + Move KeePassHTTP attributes to custom data + HTTP attribútumok áthelyezése az egyéni adatokhoz + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Valóban átállítja az összes örökölt böngészőintegrációs adatot a legfrissebb szabványra? +Ez szükséges a böngészőbővítmény kompatibilitásának fenntartásához. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Titkosítási algoritmus: + + + AES: 256 Bit (default) + AES: 256 Bit (alapértelmezett) + + + Twofish: 256 Bit + Twofish: 256 bit + + + Key Derivation Function: + Kulcsszármaztatási függvény: + + + Transform rounds: + Átalakítási fordulók száma: + + + Benchmark 1-second delay + Egy másodperces késleltetésű teljesítményvizsgálat + + + Memory Usage: + Memóriahasználat: + + + Parallelism: + Párhozamosság: + + + Decryption Time: + Visszafejtés ideje: + + + ?? s + ?? s + + + Change + Módosítása + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + A magasabb értékek nagyobb védelmet adnak, de az adatbázis megnyitása tovább fog tartani. + + + Database format: + Adatbázis-formátum: + + + This is only important if you need to use your database with other programs. + Ez csak akkor fontos, ha más programokkal is kell használnia az adatbázisát. + + + KDBX 4.0 (recommended) + KDBX 4.0 (ajánlott) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + változatlan Number of rounds too high @@ -864,40 +1237,15 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.Threads for parallel execution (KDF settings) szálszál - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Titkosítási algoritmus: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 Bit (alapértelmezett) - - - Twofish: 256 Bit - Twofish: 256 bit - - - Key Derivation Function: - Kulcsszármaztatási függvény: - - - Transform rounds: - Átalakítási fordulók száma: - - - Benchmark 1-second delay - Egy másodperces késleltetésű teljesítményvizsgálat - - - Memory Usage: - Memóriahasználat: - - - Parallelism: - Párhozamosság: + + %1 s + seconds + %1 s%1 s @@ -948,12 +1296,85 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz. - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Gyökér + Sharing + Megosztás + + Breadcrumb + Morzsamenü + + + Type + Típus + + + Path + Útvonal + + + Last Signer + Legutóbbi aláíró + + + Certificates + Tanúsítványok + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + További védelem hozzáadása… + + + No encryption key added + Nincs titkosítási kulcs hozzáadva + + + You must add at least one encryption key to secure your database! + Legalább egy titkosítási kulcsot hozzá kell adni, hogy megvédje az adatbázisát! + + + No password set + Nincs jelszó megadva + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + FIGYELEM! Nem állított be jelszót! Az adatbázis jelszó nélküli használata erősen ellenjavallt! + +Valóban jelszó nélkül folytatja? + + + Unknown error + Ismeretlen hiba + + + Failed to change master key + A mesterkulcs módosítása meghiúsult + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Adatbázis neve: + + + Description: + Leírás: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 adatbázis @@ -966,33 +1387,13 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.Open database Adatbázis megnyitása - - File not found! - A fájl nem található! - - - Unable to open the database. - Nem lehet megnyitni az adatbázist. - - - File opened in read only mode. - Fájl megnyitva csak olvashatóként - - - Open CSV file - CSV-fájl megnyitása - CSV file CSV-fájl - - All files (*) - Minden fájl (*) - Merge database - Adatbázis összeolvasztása + Adatbázis egyesítése Open KeePass 1 database @@ -1002,38 +1403,6 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.KeePass 1 database KeePass 1 adatbázis - - Close? - Bezárja? - - - "%1" is in edit mode. -Discard changes and close anyway? - A(z) „%1” szerkesztési módban van. -Elveti a módosításokat és mindenképp bezárja? - - - Save changes? - Menti a módosításokat? - - - "%1" was modified. -Save changes? - A(z) „%1” módosítva lett. -Menti a módosításokat? - - - Writing the database failed. - Az adatbázis kiírása sikertelen. - - - Passwords - Jelszavak - - - Save database as - Adatbázis mentése más néven - Export database to CSV file Adatbázis exportálása CSV-fájlba @@ -1043,40 +1412,41 @@ Menti a módosításokat? A CSV-fájl mentése sikertelen. - New database + Database creation error + Adatbázis létrehozási hiba + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + A létrehozott adatbázisnak nincs kulcsa vagy KDF-e, a mentés megtagadva. +Ez határozottan hiba, jelentse a fejlesztőknek. + + + The database file does not exist or is not accessible. + Az adatbázisfájl nem létezik, vagy nem lehet hozzáférni. + + + Select CSV file + Válasszon CSV-fájlt + + + New Database Új adatbázis - locked - zárolva + %1 [New Database] + Database tab name modifier + %1 [Új adatbázis] - Lock database - Adatbázis zárolása + %1 [Locked] + Database tab name modifier + %1 [Zárolva] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Nem lehet zárolni az adatbázist, mivel jelenleg azt szerkeszti. -Nyomja meg a „Mégse” gombot a módosítások befejezéshez vagy dobja el azokat. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Ez az adatbázis módosítva lett. -Szeretné elmenteni az adatbázist zárolás előtt? -Különben a módosítások elvesznek. - - - Disable safe saves? - Letiltható a biztonságos mentés? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - A KeePassXC többször is hiába próbálta meg elmenteni az adatbázist. Ez jellemzően azért szokott előfordulni, mert egy szinkronizáló szolgáltatás zárolja a mentendő fájl. -Letiltható a biztonságos mentés és úgy megkísérelhető a mentés? + %1 [Read-only] + Database tab name modifier + %1 [Csak olvasható] @@ -1085,38 +1455,14 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?Searching... Keresés… - - Change master key - Mesterkulcs módosítása - - - Delete entry? - Törli a bejegyzést? - Do you really want to delete the entry "%1" for good? Valóban végleg szeretné törölni a bejegyzést: „%1”? - - Delete entries? - Törli a bejegyzéseket? - - - Do you really want to delete %1 entries for good? - Valóban végleg szeretne törölni %1 bejegyzést? - - - Move entry to recycle bin? - Kukába dobja a bejegyzést? - Do you really want to move entry "%1" to the recycle bin? Valóban kukába szeretné dobni a bejegyzést: „%1”? - - Move entries to recycle bin? - Kukába dobja a bejegyzéseket? - Do you really want to move %n entry(s) to the recycle bin? Valóban a kukába szeretne dobni %n elemet?Valóban a kukába szeretne dobni %n elemet? @@ -1133,18 +1479,10 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?Remember my choice Válasz megjegyzése - - Delete group? - Törli a csoportot? - Do you really want to delete the group "%1" for good? Valóban végleg szeretné törölni a csoportot: „%1”? - - Unable to calculate master key - Nem lehet kiszámítani a mesterkulcsot - No current database. Nincs aktuális adatbázis. @@ -1171,7 +1509,7 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés? Merge Request - Összeolvasztási kérelem + Egyesítési kérelem The database file has changed and you have unsaved changes. @@ -1179,10 +1517,6 @@ Do you want to merge your changes? Az adatbázisfájl módosult és vannak nem mentett változások. Egyesíti a módosításokat? - - Could not open the new database file while attempting to autoreload this database. - Nem lehet megnyitni az új adatbázisfájlt ennek az adatbázisnak az automatikus újranyitási kísérlete közben. - Empty recycle bin? Kuka ürítése? @@ -1191,88 +1525,111 @@ Egyesíti a módosításokat? Are you sure you want to permanently delete everything from your recycle bin? Valóban véglegesen töröl mindent a kukából? - - - DetailsWidget - - Generate TOTP Token - TOTP jelsor előállítása + + Do you really want to delete %n entry(s) for good? + Valóban végleg szeretné törölni a(z) %n bejegyzést?Valóban végleg szeretné törölni a(z) %n bejegyzést? + + + Delete entry(s)? + Törli az bejegyzést?Törli az bejegyzéseket? + + + Move entry(s) to recycle bin? + Kukába dobja a bejegyzést?Kukába dobja a bejegyzéseket? - Close - Bezárás + File opened in read only mode. + Fájl megnyitva csak olvashatóként - General - Általános + Lock Database? + Zárolja az adatbázist? - Password - Jelszó + You are editing an entry. Discard changes and lock anyway? + Egy bejegyzést szerkeszt. Elveti a változásokat, és mindenképp zárolja? - URL - URL + "%1" was modified. +Save changes? + A(z) „%1” módosítva lett. +Menti a módosításokat? - Expiration - Lejárat + Database was modified. +Save changes? + Az adatbázis módosítva lett. +Menti a változásokat? - Username - Felhasználónév + Save changes? + Menti a módosításokat? - Autotype - Automatikus típus + Could not open the new database file while attempting to autoreload. +Error: %1 + Nem lehet megnyitni az új adatbázisfájlt egy újranyitási kísérlet közben. +Hiba: %1 - Searching - Keresés + Disable safe saves? + Letiltható a biztonságos mentés? - Attributes - Attribútumok + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + A KeePassXC többször is hiába próbálta meg elmenteni az adatbázist. Ez jellemzően azért szokott előfordulni, mert egy szinkronizáló szolgáltatás zárolja a mentendő fájl. +Letiltható a biztonságos mentés és úgy megkísérelhető a mentés? - Attachments - Mellékletek + Writing the database failed. +%1 + Az adatbázis írása meghiúsult. +%1 - Notes - Jegyzetek + Passwords + Jelszavak - Window - Ablak + Save database as + Adatbázis mentése más néven - Sequence - Sorrend + KeePass 2 Database + KeePass 2 adatbázis - Search - Keresés + Replace references to entry? + Lecserélhető a bejegyzésre való hivatkozás? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + A(z) „%1” bejegyzésnek van %2 hivatkozása. Felül lehet írni a hivatkozást az értékekkel, vagy legyen átugorva, ill. legyen mindenképpen törölve?A(z) „%1” bejegyzésnek van %2 hivatkozása. Felül lehet írni a hivatkozásokat az értékekkel, vagy legyenek átugorva, ill. legyenek mindenképpen törölve? - Clear - Törlés + Delete group + Csoport törlése - Never - Soha + Move group to recycle bin? + Legyen a csoport áthelyezve a kukába? - [PROTECTED] - [VÉDETT] + Do you really want to move the group "%1" to the recycle bin? + Valóban legyen a(z) „%1” csoport áthelyezve a kukába? - Disabled - Tiltott + Successfully merged the database files. + Az adatbázisfájlok sikeresen egyesítve lettek. - Enabled - Engedélyezett + Database was not modified by merge operation. + Az adatbázis nem változott az összeolvasztási művelet során. + + + Shared group... + @@ -1345,22 +1702,10 @@ Egyesíti a módosításokat? New attribute Új attribútum - - Confirm Remove - Törlés megerősítése - Are you sure you want to remove this attribute? Valóban eltávolítja ezt az attribútumot? - - [PROTECTED] - [VÉDETT] - - - Press reveal to view or edit - A megjelenítés vagy a szerkesztés a „Felfedés” gombbal érhető el - Tomorrow Holnap @@ -1373,10 +1718,6 @@ Egyesíti a módosításokat? %n month(s) %n hónap%n hónap - - 1 year - 1 év - Apply generated password? Alkalmazható az előállított jelszó? @@ -1389,6 +1730,26 @@ Egyesíti a módosításokat? Entry updated successfully. Bejegyzés sikeresen frissítve. + + Entry has unsaved changes + A bejegyzésnek mentetlen változásai vannak + + + New attribute %1 + Új %1 attribútum + + + [PROTECTED] Press reveal to view or edit + [VÉDETT] A megjelenítés vagy a szerkesztés a „Felfedés” gombbal érhető el + + + %n year(s) + %n év%n év + + + Confirm Removal + Törlés jóváhagyása + EditEntryWidgetAdvanced @@ -1422,7 +1783,7 @@ Egyesíti a módosításokat? Foreground Color: - Előtérszín: + Előtérszín Background Color: @@ -1633,6 +1994,97 @@ Egyesíti a módosításokat? Öröklés a szülőcsoporttól (%1) + + EditGroupWidgetKeeShare + + Form + Űrlap + + + Type: + Típus: + + + Path: + Útvonal: + + + ... + ... + + + Password: + Jelszó: + + + Inactive + Inaktív + + + Import from path + Importálás útvonalról + + + Export to path + Exportálás útvonalra + + + Synchronize with path + Útvonallal való szinkronizálás + + + Your KeePassXC version does not support sharing your container type. Please use %1. + A KeePassXC jelen verziója nem támogatja ennek a tárolótípusnak a megosztását. Javasolt ezen verzió alkalmazása: %1. + + + Database sharing is disabled + Adatbázis-megosztás tiltva + + + Database export is disabled + Adatbázis export tiltva + + + Database import is disabled + Adatbázis import tiltva + + + KeeShare unsigned container + KeeShare aláíratlan tároló + + + KeeShare signed container + KeeShare aláírt tároló + + + Select import source + Importálási forrás kijelölése + + + Select export target + Exportálási cél kijelölése + + + Select import/export file + Importálási vagy exportálási fájl kijelölése + + + Clear + Törlés + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1690,10 +2142,6 @@ Egyesíti a módosításokat? Unable to fetch favicon. A favicon letöltése sikertelen. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Tipp: A Google-t tartalékként az Eszközök>Beállítások>Biztonság menüpontban engedélyezheti - Images Képek @@ -1702,14 +2150,6 @@ Egyesíti a módosításokat? All files Minden fájl - - Select Image - Kép kiválasztása - - - Can't read icon - Az ikon nem olvasható - Custom icon already exists Az egyéni ikon már létezik @@ -1719,8 +2159,36 @@ Egyesíti a módosításokat? Törlés megerősítése - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Ezt az ikont %1 elem használja, és le lesz cserélve az alapértelmezett ikonra. Valóban törli? + Custom icon successfully downloaded + Egyéni ikon sikeresen letöltve + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Tipp: A DuckDuckGót tartalékként az Eszközök>Beállítások>Biztonság menüpontban engedélyezheti + + + Select Image(s) + Kép kiválasztása + + + Successfully loaded %1 of %n icon(s) + %1 / %n ikon sikeresen betöltve%1 / %n ikon sikeresen betöltve + + + No icons were loaded + Egy ikon sem lett betöltve + + + %n icon(s) already exist in the database + %n ikon már létezik az adatbázisban%n ikon már létezik az adatbázisban + + + The following icon(s) failed: + A következő ikonnál hiba történt:A következő ikonoknál hiba történt: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Ezt az ikont %n elem használja, és le lesz cserélve az alapértelmezett ikonra. Valóban törli?Ezt az ikont %n elem használja, és le lesz cserélve az alapértelmezett ikonra. Valóban törli? @@ -1739,11 +2207,11 @@ Egyesíti a módosításokat? Uuid: - Uuid: + UUID: Plugin Data - Bővítmény adati + Beépülő adati Remove @@ -1771,9 +2239,8 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Entry - - Clone - Suffix added to cloned entries - - klón + %1 - Clone + %1 – Klónozás @@ -1817,10 +2284,6 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Are you sure you want to remove %n attachment(s)? Valóban eltávolít %n mellékletet?Valóban eltávolít %n mellékletet? - - Confirm Remove - Törlés megerősítése - Save attachments Mellékletek mentése @@ -1858,10 +2321,15 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. %1 - Unable to open files: + Confirm remove + Törlés megerősítése + + + Unable to open file(s): %1 - A fájlok nem megnyithatóak: -%1 + A fájl nem megnyitható: +%1A fájlok nem megnyithatóak: +%1 @@ -1945,6 +2413,106 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Attachments Mellékletek + + Yes + Igen + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + TOTP jelsor előállítása + + + Close + Bezárás + + + General + Általános + + + Username + Felhasználónév + + + Password + Jelszó + + + Expiration + Lejárat + + + URL + URL + + + Attributes + Attribútumok + + + Attachments + Mellékletek + + + Notes + Jegyzetek + + + Autotype + Automatikus típus + + + Window + Ablak + + + Sequence + Sorrend + + + Searching + Keresés + + + Search + Keresés + + + Clear + Törlés + + + Never + Soha + + + [PROTECTED] + [VÉDETT] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Engedélyezett + + + Disabled + Tiltott + + + Share + Megosztás + EntryView @@ -1983,6 +2551,11 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Recycle Bin Kuka + + [empty] + group has no children + [üres] + HostInstaller @@ -1995,61 +2568,6 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Nem lehet menteni a natív üzenetküldő parancsfájlt. - - HttpPasswordGeneratorWidget - - Length: - Hosszúság: - - - Character Types - Karaktertípusok - - - Upper Case Letters - Nagybetűk - - - A-Z - A-Z - - - Lower Case Letters - Kisbetűk - - - a-z - a-z - - - Numbers - Számok - - - 0-9 - 0-9 - - - Special Characters - Speciális karakterek - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Hasonlóan kinéző karakterek kizárása - - - Ensure that the password contains characters from every group - Legyen a jelszóban minden csoportból karakter - - - Extended ASCII - Bővített ASCII - - KMessageWidget @@ -2075,6 +2593,26 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Wrong key or database file is corrupt. Rossz kulcs vagy sérült adatbázisfájl. + + missing database headers + hiányzó adatbázis fejlécek + + + Header doesn't match hash + A fejléc nem egyezik meg a hash értékkel + + + Invalid header id size + Érvénytelen fejléc-azonosító méret + + + Invalid header field length + Érvénytelen fejlécmezőhossz + + + Invalid header data length + Érvénytelen fejlécadathossz + Kdbx3Writer @@ -2233,10 +2771,6 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. KdbxReader - - Invalid cipher uuid length - Érvénytelen titkosító UUID-hossz - Unsupported cipher Nem támogatott titkosító @@ -2291,6 +2825,18 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a Unsupported KeePass 2 database version. Nem támogatott KeePass 2 adatbázis-verzió. + + Invalid cipher uuid length: %1 (length=%2) + Érvénytelen titkosítási UUID hossz: %1 (hossz=%2) + + + Unable to parse UUID: %1 + A UUID nem dolgozható fel: %1 + + + Failed to read database file. + Az adatbázis olvasása sikertelen. + KdbxXmlReader @@ -2362,10 +2908,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a History element with different uuid Előzményelem különböző UUID-vel - - Unable to decrypt entry string - Bejegyzés karakterlánca nem visszafejthető - Duplicate custom attribute found Kétszeres egyéni attribútum található @@ -2415,6 +2957,14 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a Translator meant is a binary data inside an entry A bináris nem kibontható + + XML error: +%1 +Line %2, column %3 + XML hiba +%1 +%2. sor, %3. oszlop + KeePass1OpenWidget @@ -2578,55 +3128,145 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a Invalid entry field type Érvénytelen bejegyzésmező-típus - - - KeePass2 - AES: 256-bit - AES: 256 bites - - - Twofish: 256-bit - Twofish: 256 bites - - - ChaCha20: 256-bit - ChaCha20: 256 bites - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – ajánlott) + unable to seek to content position + nem lehet a tartalom pozíciójához lépni - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - A meglévő egypéldányos zárolási fájl érvénytelen. Új példány indítása. + Disabled share + Letiltott megosztás - The lock file could not be created. Single-instance mode disabled. - A zárolási fájlt nem lehet létrehozni. Egyedi példány mód letiltva. + Import from + Importálás innen - Another instance of KeePassXC is already running. - A KeePassXC egy másik példánya is fut. + Export to + Exportálás ide - Fatal error while testing the cryptographic functions. - Végzetes hiba a kriptográfiai funkciók tesztelése közben. + Synchronize with + Szinkronizálás ezzel - KeePassXC - Error - KeePassXC – Hiba + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Kulcs komponens + + + Key Component Description + Kulcs komponens leírása + + + Cancel + Mégse + + + Key Component set, click to change or remove + Kulcs komponens beállítva, kattintson a módosításhoz vagy eltávolításhoz + + + Add %1 + Add a key component + %1 hozzáadása + + + Change %1 + Change a key component + %1 módosítása + + + Remove %1 + Remove a key component + %1 eltávolítása + + + %1 set, click to change or remove + Change or remove a key component + %1 beállítva, kattintson a módosításhoz vagy eltávolításhoz + + + + KeyFileEditWidget + + Browse + Tallózás + + + Generate + Előállítás + + + Key File + Kulcsfájl + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Megadhat egy véletlenszerű bájtokat tartalmazó kulcsot a további biztonság érdekében.</p><p>Tartsa titokban, és ne veszítse el, nehogy kizárja magát!</p> + + + Legacy key file format + Örökölt kulcsfájl formátum + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Egy régi, örökölt kulcsfájl formátumot használ, ami a közeljövőben már nem lesz támogatott. + +Ugorjon a mesterkulcs beállításokhoz, és állítson elő egy új kulcsfájlt. + + + Error loading the key file '%1' +Message: %2 + Hiba a(z) „%1” kulcsfájl betöltésekor +Üzenet: %2 + + + Key files + Kulcsfájlok + + + All files + Minden fájl + + + Create Key File... + Kulcsfájl létrehozása… + + + Error creating key file + Hiba a kulcsfájl létrehozásakor + + + Unable to create key file: %1 + A kulcsfájl nem hozható létre: %1 + + + Select a key file + Kulcsfájl kiválasztása @@ -2639,10 +3279,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a &Recent databases &Friss adatbázisok - - Import - Importálás - &Help &Súgó @@ -2651,14 +3287,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a E&ntries Be&jegyzések - - Copy att&ribute to clipboard - &Attribútum másolása a vágólapra - - - Time-based one-time password - Időalapú, egyszer használatos jelszó - &Groups Cso&portok @@ -2687,30 +3315,10 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a &Close database Adatbázis &bezárása - - &New database - Ú&j adatbázis - - - Merge from KeePassX database - Összeolvasztás KeePassX adatbázisból - - - &Add new entry - Új bejegyzés &hozzáadása - - - &View/Edit entry - Bejegyzés &megtekintése/szerkesztése - &Delete entry Bejegyzés &törlése - - &Add new group - Új cso&port hozzáadása - &Edit group Csoport sz&erkesztése @@ -2723,14 +3331,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a Sa&ve database as... Adatbázis mentése más &néven… - - Change &master key... - &Mesterkulcs módosítása… - - - &Database settings - Adatbázis-&beállítások - Database settings Adatbázis-beállítások @@ -2739,10 +3339,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a &Clone entry Bejegyzés &klónozása - - &Find - &Keresés - Copy &username &Felhasználónév másolása @@ -2751,10 +3347,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a Copy username to clipboard Felhasználónév másolása a vágólapra - - Cop&y password - &Jelszó másolása - Copy password to clipboard Jelszó másolása a vágólapra @@ -2767,14 +3359,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a Password Generator Jelszógenerátor - - &Perform Auto-Type - &Automatikus beírás - - - &Open URL - &URL megnyitása - &Lock databases Adatbázisok &zárolása @@ -2807,22 +3391,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a &Export to CSV file... &Exportálás CSV-fájlba… - - Import KeePass 1 database... - KeePass 1 adatbázis importálása… - - - Import CSV file... - CSV-fájl importálása… - - - Re&pair database... - Adatbázis &javítása… - - - Show TOTP - TOTP megjelenítése - Set up TOTP... TOTP beállítása… @@ -2843,14 +3411,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a Access error for config file %1 Hozzáférési hiba a beállítási fájlhoz: %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Úgy tűnik, hogy a böngészőintegrációt a KeePassHTTP látja el. A támogatása hamarosan lejár és a jövőben eltávolításra kerül. <br>Javasolt váltani a KeePassXC-Browser kiegészítőre! A költözéshez hasznos lehet a <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">költözési útmutató</a> (%1 figyelmeztetés a 3-ból).</p> - - - read-only - csak olvasható - Settings Beállítások @@ -2863,26 +3423,6 @@ Ez egyirányú migráció. Nem lehet majd megnyitni az importált adatbázist a Quit KeePassXC Kilépés a KeePassXC-ből - - KeePass 2 Database - KeePass 2 adatbázis - - - All files - Minden fájl - - - Open database - Adatbázis megnyitása - - - Save repaired database - Javított adatbázis mentése - - - Writing the database failed. - Az adatbázis kiírása sikertelen. - Please touch the button on your YubiKey! Meg kell érinteni a gombot a YubiKeyen! @@ -2894,6 +3434,269 @@ This version is not meant for production use. FIGYELEM: Egy instabil KeePassXC verziót használ! Mivel magas kockázata van az adatsérülésnek, feltétlenül érdemes biztonsági mentés készíteni az adatbázisról. Ez a verzió nem felhasználóknak készült. + + &Donate + &Támogatás + + + Report a &bug + &Hiba jelentése + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + FIGYELMEZTETÉS: A Qt verziója miatt a KeePassXC összeomolhat egy képernyő-billentyűzettel! +Javasoljuk az AppImage alkalmazását, amely elérhető a letöltések oldalon. + + + &Import + &Importálás + + + Copy att&ribute... + Att&ribútum másolása… + + + TOTP... + TOTP… + + + &New database... + Ú&j adatbázis… + + + Create a new database + Új adatbázis létrehozása + + + &Merge from database... + &Egyesítés adatbázisból… + + + Merge from another KDBX database + Egyesítés egy másik KeePassX adatbázisból + + + &New entry + Ú&j bejegyzés + + + Add a new entry + Új bejegyzés hozzáadása + + + &Edit entry + Bejegyzés sz&erkesztése + + + View or edit entry + Bejegyzés megtekintése vagy szerkesztése + + + &New group + Ú&j csoport + + + Add a new group + Új csoport hozzáadása + + + Change master &key... + &Mesterkulcs módosítása… + + + &Database settings... + &Adatbázis-beállítások… + + + Copy &password + &Jelszó másolása + + + Perform &Auto-Type + &Automatikus beírás + + + Open &URL + &URL megnyitása + + + KeePass 1 database... + KeePass 1 adatbázis… + + + Import a KeePass 1 database + KeePass 1 adatbázis importálása + + + CSV file... + CSV-fájl… + + + Import a CSV file + CSV-fájl importálása + + + Show TOTP... + TOTP megjelenítése… + + + Show TOTP QR Code... + TOTP QR-kód megjelenítése… + + + Check for Updates... + Frissítések keresése... + + + Share entry + Bejegyzés megosztása + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + MEGJEGYZÉS: Ez egy előzetes kiadású KeePassXC verzió! +Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem ajánlott éles használatra. + + + Check for updates on startup? + Keressen a program induláskor frissítéseket? + + + Would you like KeePassXC to check for updates on startup? + Valóban keressen a program induláskor frissítéseket? + + + You can always check for updates manually from the application menu. + A program menüjéből bármikor saját kezűleg is indítható a frissítések keresése. + + + + Merger + + Creating missing %1 [%2] + Hiányzó %1 létrehozása [%2] + + + Relocating %1 [%2] + %1 áthelyezése [%2] + + + Overwriting %1 [%2] + %1 felülírása [%2] + + + older entry merged from database "%1" + régebbi bejegyzés összeolvasztva a(z) „%1” adatbázisból + + + Adding backup for older target %1 [%2] + Biztonsági mentés hozzáadása a régebbi %1 célhoz [%2] + + + Adding backup for older source %1 [%2] + Biztonsági mentés hozzáadása a régebbi %1 forráshoz [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + A régebbi cél újra alkalmazása az újabb %1 forráson [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + A régebbi forrás újra alkalmazása az újabb %1 célon [%2] + + + Synchronizing from newer source %1 [%2] + Szinkronizálás az újabb %1 forrásból [%2] + + + Synchronizing from older source %1 [%2] + Szinkronizálás a régebbi %1 forrásból [%2] + + + Deleting child %1 [%2] + %1 gyermek törlése [%2] + + + Deleting orphan %1 [%2] + %1 elárvult bejegyzés törlése [%2] + + + Changed deleted objects + Törölt objektumok módosítva + + + Adding missing icon %1 + Hiányzó %1 ikon hozzáadása + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Új KeePassXC adatbázis létrehozása… + + + Root + Root group + Gyökér + + + + NewDatabaseWizardPage + + WizardPage + Varázsló oldal + + + En&cryption Settings + &Titkosítási beállítások + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, később is megváltoztathatja az adatbázis-beállításokban. + + + Advanced Settings + Speciális beállítások + + + Simple Settings + Egyszerű beállítások + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Titkosítási beállítások + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, később is megváltoztathatja az adatbázis-beállításokban. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Adatbázis mesterkulcs + + + A master key known only to you protects your database. + A csak Ön által ismert mesterkulcs védi az adatbázisát. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Általános adatbázis-információk + + + Please fill in the display name and an optional description for your new database: + Töltse ki a megjelenítendő nevet és a nem kötelező leírást az új adatbázishoz: + OpenSSHKey @@ -2995,125 +3798,30 @@ Ez a verzió nem felhasználóknak készült. - OptionDialog + PasswordEditWidget - Dialog - Párbeszédablak + Enter password: + Jelszó megadása: - This is required for accessing your databases from ChromeIPass or PassIFox - Ez szükséges az adatbázis ChromeIPassból vagy PassIFoxból történő eléréséhez + Confirm password: + Jelszó megerősítése: - Enable KeePassHTTP server - KeePassHTTP kiszolgáló engedélyezése + Password + Jelszó - General - Általános + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>A jelszó az adatbázis biztonságban tartásának elsődleges módja.</p><p>A jó jelszavak hosszúak és egyediek. A KeePassXC elő tud állítani egyet Önnek.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - É&rtesítés megjelenítése hitelesítési adatok kérésekor + Passwords do not match. + A jelszavak nem egyeznek - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Egy konkrét URL-hez tartozó legjobb találatokat adja vissza, a teljes domainhoz tartozó összes bejegyzés helyett. - - - &Return only best matching entries - Csak a &legjobb találatok visszaadása - - - Re&quest to unlock the database if it is locked - Adatbázis feloldási &kérelem, ha zárolva van - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Csak az azonos sémájú (http://, https://, ftp://, …) bejegyzések visszaadása. - - - &Match URL schemes - &URL sémákra illeszkedés - - - Sort matching entries by &username - Találatok rendezése &felhasználónév szerint - - - Sort &matching entries by title - Találatok rendezése &cím szerint - - - R&emove all shared encryption keys from active database - Az összes megosztott titkosítási kulcs &eltávolítása az aktív adatbázisból - - - Re&move all stored permissions from entries in active database - Az összes tárolt bejegyzés jogosultságának &törlése az aktív adatbázisból - - - Password Generator - Jelszógenerátor - - - Advanced - Speciális - - - Always allow &access to entries - &Hozzáférés mindenkori engedélyezése a bejegyzésekhez - - - Always allow &updating entries - Bejegyzések &frissítésének mindenkori engedélyezése - - - Only the selected database has to be connected with a client. - Csak a kijelölt adatbázishoz kell kapcsolódnia egy klienssel. - - - Searc&h in all opened databases for matching entries - &Keresés minden megnyitott adatbázis bejegyzéseiben - - - Automatically creating or updating string fields is not supported. - A karakterlánc mezők automatikus létrehozása vagy frissítése nem támogatott. - - - &Return advanced string fields which start with "KPH: " - A „KPH:”-val kezdődő fejlett karakterlánc mezők &visszaadása - - - HTTP Port: - HTTP port: - - - Default port: 19455 - Alapértelmezett port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - A KeePassXC ezen a porton fog figyelni: 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Figyelmeztetés:</b> A következő beállítások veszélyesek lehetnek! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>A KeePassHTTP támogatása hamarosan lejár és a jövőben eltávolításra kerül. <br>Javasolt váltani a KeePassXC-Browser kiegészítőre! A költözéshez hasznos lehet a <a href="https://keepassxc.org/docs/keepassxc-browser-migration">költözési útmutató.</a> - - - Cannot bind to privileged ports - Nem lehet privilegizált portokhoz kötődni - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Nem lehet az 1024 alatti, privilegizált portokhoz kötődni! -Az alapértelmezett 19455 port lesz használva. + Generate master password + Mesterjelszó előállítása @@ -3183,18 +3891,10 @@ Az alapértelmezett 19455 port lesz használva. Wordlist: Szólista: - - Word Count: - Szavak száma: - Word Separator: Szóelválasztó: - - Generate - Előállítás - Copy Másolás @@ -3207,10 +3907,6 @@ Az alapértelmezett 19455 port lesz használva. Close Bezárás - - Apply - Alkalmaz - Entropy: %1 bit Entrópia: %1 bit @@ -3239,6 +3935,171 @@ Az alapértelmezett 19455 port lesz használva. Password quality Kiváló + + ExtendedASCII + Bővített ASCII + + + Switch to advanced mode + Váltás speciális módba + + + Advanced + Speciális + + + Upper Case Letters A to F + Nagybetűk A-tól F-ig + + + A-Z + A-Z + + + Lower Case Letters A to F + Kisbetűk a-tól f-ig + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Zárójelek + + + {[( + {[( + + + Punctuation + Központozás + + + .,:; + .,:; + + + Quotes + Idézőjelek + + + " ' + " ' + + + Math + Matematika + + + <*+!?= + <*+!?= + + + Dashes + Kötőjelek + + + \_|-/ + \_|-/ + + + Logograms + Logogramok + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Váltás egyszerű módba + + + Simple + Egyszerű + + + Character set to exclude from generated password + A jelszó előállításnál kihagyandó karakterkészletek + + + Do not include: + Ne tartalmazza: + + + Add non-hex letters to "do not include" list + A nem hexadecimális betűk hozzáadása a „ne tartalmazza” listához + + + Hex + Hexadecimális + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Kihagyott karakterek: „0”, „1”, „l”, „I”, „O”, „|”, „﹒” + + + Word Co&unt: + Szavak szá&ma: + + + Regenerate + Újra előállítás + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Kijelölés + + + + QMessageBox + + Overwrite + Felülírás + + + Delete + Törlés + + + Move + Áthelyezés + + + Empty + Üres + + + Remove + Eltávolítás + + + Skip + Kihagyás + + + Disable + Letiltás + + + Merge + Egyesítés + QObject @@ -3258,34 +4119,18 @@ Az alapértelmezett 19455 port lesz használva. Cannot decrypt message Nem lehet visszafejteni az üzenetet - - Timeout or cannot connect to KeePassXC - Időtúllépés vagy nem lehet csatlakozni a KeePassXC-hez - Action cancelled or denied A műveletet megszakították vagy visszautasították - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Nem lehet titkosítani az üzenetet vagy a nyilvános kulcs nem található. A natív üzenetküldés engedélyezve van a KeePassXC-ben? - KeePassXC association failed, try again A KeePassXC társítása sikertelen, próbálja újra - - Key change was not successful - A kulcsmódosítás nem volt sikeres - Encryption key is not recognized A titkosítási kulcs nem lett felismerve - - No saved databases found - Nincs található mentett adatbázis - Incorrect action Helytelen művelet @@ -3401,20 +4246,16 @@ Az alapértelmezett 19455 port lesz használva. Extract and print the content of a database. - Adatbázis tartalmának kinyerése és kiírása. + Adatbázis tartalmának kibontása és kiírása. Path of the database to extract. - Kinyerendő adatbázis útvonala. + Kibontandó adatbázis útvonala. Insert password to unlock %1: Jelszó beszúrása a feloldásához: %1 - - Failed to load key file %1 : %2 - %1 kulcsfájl betöltése sikertelen: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3498,12 +4339,6 @@ Elérhető parancsok: error reading from device hiba az eszköz olvasása közben - - file empty ! - - a fájl üres! - - malformed string rosszul formázott karakterlánc @@ -3540,10 +4375,6 @@ Elérhető parancsok: Created Létrehozva - - Legacy Browser Integration - Hagyományos böngészőintegráció - Browser Integration Böngészőintegráció @@ -3572,10 +4403,6 @@ Elérhető parancsok: Word count for the diceware passphrase. Szavak számra a diceware jelmondat számára. - - count - szám - Wordlist for the diceware generator. [Default: EFF English] @@ -3587,28 +4414,445 @@ Elérhető parancsok: Véletlenszerű új jelmondat előállítása. - Length of the generated password. - Előállított jelszó hossza. + Invalid value for password length %1. + Érvénytelen jelszóhossz érték: %1. - Use lowercase characters in the generated password. - Kisbetűk alkalmazása az előállított jelszóban. + Could not create entry with path %1. + Nem hozható létre bejegyzés a(z) %1 útvonallal. - Use uppercase characters in the generated password. - Nagybetűk alkalmazása az előállított jelszóban. + Enter password for new entry: + Adja meg a jelszót az új bejegyzéshez: - Use numbers in the generated password. - Számok alkalmazása az előállított jelszóban. + Writing the database failed %1. + Az adatbázis kiírása sikertelen: %1. - Use special characters in the generated password. - Speciális karakterek alkalmazása az előállított jelszóban. + Successfully added entry %1. + A(z) %1 bejegyzés sikeresen hozzáadva. - Use extended ASCII in the generated password. - Kiterjesztett ASCII karakterek alkalmazása az előállított jelszóban. + Copy the current TOTP to the clipboard. + A jelenlegi TOTP másolása a vágólapra. + + + Invalid timeout value %1. + Érvénytelen időtúllépési érték: %1. + + + Entry %1 not found. + A(z) %1 bejegyzés nem található. + + + Entry with path %1 has no TOTP set up. + A(z) %1 útvonalú bejegyzéshez nincs TOTP beállítva. + + + Entry's current TOTP copied to the clipboard! + A bejegyzés jelenlegi TOTP értéke a vágólapra másolva! + + + Entry's password copied to the clipboard! + A bejegyzés jelszava a vágólapra másolva! + + + Clearing the clipboard in %1 second(s)... + A vágólap törlése %1 másodperc múlva…A vágólap törlése %1 másodperc múlva… + + + Clipboard cleared! + Vágólap törölve! + + + Silence password prompt and other secondary outputs. + Jelszó bekérés és egyéb másodlagos kimenetek némítása. + + + count + CLI parameter + szám + + + Invalid value for password length: %1 + Érvénytelen jelszóhossz érték: %1 + + + Could not find entry with path %1. + Nem található bejegyzés a(z) %1 útvonalon. + + + Not changing any field for entry %1. + A(z) %1 bejegyzés egyik mezője sem lesz változtatva. + + + Enter new password for entry: + Adja meg a bejegyzés új jelszavát: + + + Writing the database failed: %1 + Az adatbázis kiírása sikertelen: %1 + + + Successfully edited entry %1. + A(z) %1 bejegyzése sikeresen szerkesztve. + + + Length %1 + Hossz: %1 + + + Entropy %1 + Entrópia: %1 + + + Log10 %1 + Log10: %1 + + + Multi-word extra bits %1 + Több szavas extra bitek: %1 + + + Type: Bruteforce + Típus: Nyers erő + + + Type: Dictionary + Típus: Szótár + + + Type: Dict+Leet + Típus: Szótár+leet + + + Type: User Words + Típus: Felhasználói szavak + + + Type: User+Leet + Típus: Felhasználói+leet + + + Type: Repeated + Típus: Ismételt + + + Type: Sequence + Típus: Sorozat + + + Type: Spatial + Típus: Térbeli + + + Type: Date + Típus: Dátum + + + Type: Bruteforce(Rep) + Típus: Nyers erő (Ism.) + + + Type: Dictionary(Rep) + Típus: Szótár (Ism.) + + + Type: Dict+Leet(Rep) + Típus: Szótár+leet (Ism.) + + + Type: User Words(Rep) + Típus: Felhasználói szavak (Ism.) + + + Type: User+Leet(Rep) + Típus: Felhasználói+leet (Ism.) + + + Type: Repeated(Rep) + Típus: Ismételt (Ism.) + + + Type: Sequence(Rep) + Típus: Sorozat (Ism.) + + + Type: Spatial(Rep) + Típus: Térbeli (Ism.) + + + Type: Date(Rep) + Típus: Dátum (Ism.) + + + Type: Unknown%1 + Típus: Ismeretlen%1 + + + Entropy %1 (%2) + Entrópia: %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Jelszóhossz (%1) != részek hosszának össszege (%2) *** + + + Failed to load key file %1: %2 + A(z) %1 kulcsfájl betöltése sikertelen: %2 + + + File %1 does not exist. + A(z) %1 fájl nem létezik + + + Unable to open file %1. + A(z) %1 fájl nem nyitható meg. + + + Error while reading the database: +%1 + Hiba az adatbázis olvasásakor: +%1 + + + Error while parsing the database: +%1 + Hiba az adatbázis feldolgozásakor: +%1 + + + Length of the generated password + Az előállított jelszó hossza + + + Use lowercase characters + Kisbetűs karakterek használata + + + Use uppercase characters + Nagybetűs karakterek használata + + + Use numbers. + Számok használata. + + + Use special characters + Különleges karakterek használata + + + Use extended ASCII + Bővített ASCII használata + + + Exclude character set + Karakterkészlet kizárása + + + chars + karakter + + + Exclude similar looking characters + Hasonlóan kinéző karakterek kizárása + + + Include characters from every selected group + Karakterek választása minden egyes csoportból + + + Recursively list the elements of the group. + A csoport elemeinek rekurzív listázása. + + + Cannot find group %1. + A(z) %1 csoport nem található. + + + Error reading merge file: +%1 + Hiba az összeolvasztási fájl olvasásakor: +%1 + + + Unable to save database to file : %1 + Az adatbázis nem menthető fájlba: %1 + + + Unable to save database to file: %1 + Az adatbázis nem menthető fájlba: %1 + + + Successfully recycled entry %1. + A(z) %1 bejegyzés sikeresen kukába dobva. + + + Successfully deleted entry %1. + A(z) %1 bejegyzés sikeresen törölve. + + + Show the entry's current TOTP. + A bejegyzés jelenlegi TOTP értékének megjelenítése. + + + ERROR: unknown attribute %1. + HIBA: ismeretlen %1 attribútum. + + + No program defined for clipboard manipulation + Nincs program megadva a vágólapkezeléshez + + + Unable to start program %1 + A(z) %1 program nem indítható el + + + file empty + a fájl üres + + + %1: (row, col) %2,%3 + %1: (sor, oszlop) %2,%3 + + + AES: 256-bit + AES: 256 bites + + + Twofish: 256-bit + Twofish: 256 bites + + + ChaCha20: 256-bit + ChaCha20: 256 bites + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – ajánlott) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Érvénytelen beállítások + + + Invalid Key + TOTP + Érvénytelen kulcs + + + Message encryption failed. + Az üzenet titkosítása sikertelen. + + + No groups found + Nem találhatóak csoportok + + + Create a new database. + Új adatbázis létrehozása. + + + File %1 already exists. + A fájl már létezik: %1. + + + Loading the key file failed + Hiba a kulcsfájl betöltésekor + + + No key is set. Aborting database creation. + A kulcs nem lett megadva. Az adatbázis létrehozása megszakítva. + + + Failed to save the database: %1. + Az adatbázis nem menthető: %1. + + + Successfully created new database. + Az adatbázis sikeresen létre lett hozva. + + + Insert password to encrypt database (Press enter to leave blank): + A beírt jelszóval lesz titkosítva az adatbázis (Entert ütve üres marad): + + + Creating KeyFile %1 failed: %2 + A(z) %1 KeyFile létrehozása sikertelen: %2 + + + Loading KeyFile %1 failed: %2 + A(z) %1 KeyFile betöltése sikertelen: %2 + + + Remove an entry from the database. + Egy bejegyzés eltávolítása az adatbázisból. + + + Path of the entry to remove. + Az eltávolítandó bejegyzés útvonala. + + + Existing single-instance lock file is invalid. Launching new instance. + A meglévő egypéldányos zárolási fájl érvénytelen. Új példány indítása. + + + The lock file could not be created. Single-instance mode disabled. + A zárolási fájlt nem lehet létrehozni. Egyedi példány mód letiltva. + + + KeePassXC - cross-platform password manager + KeePassXC – keresztplatformos jelszókezelő + + + filenames of the password databases to open (*.kdbx) + megnyitandó jelszóadatbázisok fájlnevei (*.kdbx) + + + path to a custom config file + útvonal az egyéni beállítófájlhoz + + + key file of the database + adatbázis kulcsfájlja + + + read password of the database from stdin + adatbázis jelszó beolvasása az stdin-ről + + + Parent window handle + Szülőablak kezelése + + + Another instance of KeePassXC is already running. + A KeePassXC egy másik példánya is fut. + + + Fatal error while testing the cryptographic functions. + Végzetes hiba a kriptográfiai funkciók tesztelése közben. + + + KeePassXC - Error + KeePassXC – Hiba + + + Database password: + Adatbázis jelszava + + + Cannot create new group + @@ -3646,11 +4890,97 @@ Elérhető parancsok: - SearchWidget + SSHAgent - Search... - Keresés… + Agent connection failed. + Ügynökkapcsolódás sikertelen. + + Agent protocol error. + Ügynök protokoll hiba. + + + No agent running, cannot add identity. + Nincs működő ügynök, nem adható hozzá identitás. + + + No agent running, cannot remove identity. + Nincs működő ügynök, nem távolítható el identitás. + + + Agent refused this identity. Possible reasons include: + Az ügynök visszautasította ezt az identitást. Lehetséges okok: + + + The key has already been added. + A kulcs már hozzá lett adva. + + + Restricted lifetime is not supported by the agent (check options). + Az ügynök nem támogatja a korlátozott élettartamot (lásd a lehetőségek). + + + A confirmation request is not supported by the agent (check options). + Az ügynök nem támogatja a visszaigazolási kérelmet (lásd a lehetőségeket). + + + + SearchHelpWidget + + Search Help + Keresés a súgóban + + + Search terms are as follows: [modifiers][field:]["]term["] + A keresési kifejezések a következőek: [módosítók][mező:]["]kifejezés["] + + + Every search term must match (ie, logical AND) + Az összes kifejezéssel egyeznie kell (azaz logikai ÉS) + + + Modifiers + Módosítók + + + exclude term from results + kifejezés kihagyása a találatok közül + + + match term exactly + pontos egyezés minden kifejezésre + + + use regex in term + regex használata a kifejezésben + + + Fields + Mezők + + + Term Wildcards + Kifejezés helyettesítő karakterei + + + match anything + illeszkedés bármire + + + match one + illeszkedés egyre + + + logical OR + logikai VAGY + + + Examples + Példák + + + + SearchWidget Search Keresés @@ -3659,314 +4989,332 @@ Elérhető parancsok: Clear Törlés - - Case Sensitive - Nagy- és kisbetű érzékeny - Limit search to selected group Keresés korlátozása a kijelölt csoportra + + Search Help + Keresés a súgóban + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Keresés (%1)… + + + Case sensitive + Nagy- és kisbetű érzékeny + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Új kulcstársítási kérés + Active + Aktív - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - A fenti kulcsra társítási kérelem érkezett. -A KeePassXC adatbázishoz való hozzáférés engedélyezéséhez egy egyedi név hozzárendelése és elfogadása szükséges. + Allow export + Exportálás engedélyezése - KeePassXC: Overwrite existing key? - KeePassXC: Felülírja a létező kulcsot? + Allow import + Importálás engedélyezése - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Létezik már egy megosztott titkosítási kulcs ezzel a névvel: „%1”. -Valóban felülírja? + Own certificate + Saját tanúsítvány - KeePassXC: Update Entry - KeePassXC: Bejegyzés frissítése + Fingerprint: + Ujjlenyomat: - Do you want to update the information in %1 - %2? - Frissíti az információt ebben: %1 – %2? + Certificate: + Tanúsítvány: - KeePassXC: Database locked! - KeePassXC: Adatbázis zárolva! + Signer + Aláíró - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Az aktív adatbázis zárolt. -Fel kell oldani a kijelölt adatbázist, vagy egy másik nem zároltat kell választania. + Key: + Kulcs: - KeePassXC: Removed keys from database - KeePassXC: Kulcsok eltávolítva az adatbázisból + Generate + Előállítás + + + Import + Importálás + + + Export + Exportálás + + + Imported certificates + Importált tanúsítványok + + + Trust + Megbízható + + + Ask + Kérdéses + + + Untrust + Megbízhatatlan + + + Remove + Eltávolítás + + + Path + Útvonal + + + Status + Állapot + + + Fingerprint + Ujjlenyomat + + + Certificate + Tanúsítvány + + + Trusted + Megbízható + + + Untrusted + Megbízhatatlan + + + Unknown + Ismeretlen + + + key.share + Filetype for KeeShare key + kulcs.share + + + KeeShare key file + KeeShare kulcsfájl + + + All files + Minden fájl + + + Select path + Útvonal kijelölése + + + Exporting changed certificate + Módosult tanúsítványok exportálása + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Az exportált tanúsítvány nem egyezik meg a jelenleg használattal. Exportálható a jelenlegi? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Importálás a tárolóból aláírás nélkül + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Nem ellenőrizhető a megosztott tároló forrása, mivel nincs aláírva. Valóban importálható: %1? + + + Import from container with certificate + Importálás a tárolóból aláírással + + + Not this time + Most nem + + + Never + Soha + + + Always + Mindig + + + Just this time + Csak most + + + Import from %1 failed (%2) + %1 importálása sikeretlen (%2) + + + Import from %1 successful (%2) + %1 importálása sikeres (%2) + + + Imported from %1 + Importálva innen: %1 + + + Signed share container are not supported - import prevented + Az aláírt tárolók nem támogatottak – az importálás megakadályozva + + + File is not readable + A fájl nem olvasható + + + Invalid sharing container + Érvénytelen megosztási tároló + + + Untrusted import prevented + Nem megbízható importálás megakadályozva + + + Successful signed import + Sikeres aláírt importálás + + + Unexpected error + Váratlan hiba + + + Unsigned share container are not supported - import prevented + A nem aláírt tárolók nem támogatottak – az importálás megakadályozva + + + Successful unsigned import + Sikeres aláíratlan importálás + + + File does not exist + A fájl nem létezik + + + Unknown share container type + Ismeretlen megosztási tárolótípus + + + Overwriting signed share container is not supported - export prevented + Az aláírt tárolók felülírása nem támogatott – az exportálás megakadályozva + + + Could not write export container (%1) + Nem írható az exportálási tároló (%1) + + + Overwriting unsigned share container is not supported - export prevented + A nem aláírt tárolók felülírása nem támogatott – az exportálás megakadályozva + + + Could not write export container + Az exportálási tároló nem írható + + + Unexpected export error occurred + Váratlan exportálás hiba történt + + + Export to %1 failed (%2) + %1 exportálása sikertelen (%2) + + + Export to %1 successful (%2) + Sikeres exportálás: %1 (%2) + + + Export to %1 + Exportálás: %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Megbízhatónak minősíthető a(z) %1, melynek ujjlenyomata %2 / %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Időalapú jelszó + + + 000000 + 000000 + + + Copy + Másolás - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Sikeresen eltávolításra került %n titkosítási kulcs a KeePassX/HTTP beállításokból.Sikeresen eltávolításra került %n titkosítási kulcs a KeePassX/HTTP beállításokból. - - - KeePassXC: No keys found - KeePassXC: Nincs találat a kulcsok között - - - No shared encryption-keys found in KeePassHttp Settings. - Nem található megosztott titkosítási kulcs a KeePassHTTP beállításokban. - - - KeePassXC: Settings not available! - KeePassXC: Nincs ilyen beállítás! - - - The active database does not contain an entry of KeePassHttp Settings. - Az aktív adatbázisban nincs egyetlen KeePassHTTP beállítási bejegyzés sem. - - - Removing stored permissions... - Tárolt jogosultságok törlése… - - - Abort - Megszakítás - - - KeePassXC: Removed permissions - KeePassXC: Jogosultságok eltávolítva - - - Successfully removed permissions from %n entries. - Sikeresen el lett távolítva a jogosultság %n elemről.Sikeresen el lett távolítva a jogosultság %n elemről. - - - KeePassXC: No entry with permissions found! - KeePassXC: Nem található bejegyzés ilyen jogosultsággal! - - - The active database does not contain an entry with permissions. - Az aktív adatbázisban nincs egyetlen jogosultsági bejegyzés sem. + Expires in <b>%n</b> second(s) + <b>%n</b> másodperc múlva lejár<b>%n</b> másodperc múlva lejár - SettingsWidget + TotpExportSettingsDialog - Application Settings - Alkalmazásbeállítások + Copy + Másolás - General - Általános + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + MEGJEGYZÉS: Ezek a TOTP beállítások egyéniek, és lehet hogy más hitelesítőkkel nem működnek. - Security - Biztonság + There was an error creating the QR code. + Hiba történt a QR-kód létrehozásakor - Access error for config file %1 - Hozzáférési hiba a beállítási fájlhoz: %1 + Closing in %1 seconds. + Bezárás %1 másodperc után. - SettingsWidgetGeneral - - Basic Settings - Alapvető beállítások - - - Start only a single instance of KeePassXC - A KeePassXC többszörös indításának tiltása - - - Remember last databases - Utolsó adatbázis megjegyzése - - - Remember last key files and security dongles - Az utolsó kulcsfájlok és biztonsági hardverkulcsok megjegyzése - - - Load previous databases on startup - Előző adatbázisok betöltése indításkor - - - Automatically save on exit - Automatikus mentés kilépéskor - - - Automatically save after every change - Automatikus mentés minden módosítás után - - - Automatically reload the database when modified externally - Külső módosításkor az adatbázis automatikus újratöltése - - - Minimize when copying to clipboard - Kicsinyítés a vágólapra történő másoláskor - - - Minimize window at application startup - Indításkor az ablak kicsinyítése - - - Use group icon on entry creation - A csoport ikonjának használata a bejegyzés létrehozásakor - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Nem adatjellegű változások (pl. csoport lenyitása) esetén az adatbázis módosított állapotba kerülésének megakadályozása - - - Hide the Details view - Részletek nézet elrejtése - - - Show a system tray icon - Rendszertálca-ikon megjelenítése - - - Hide window to system tray when minimized - Az ablak rendszertálcára rejtése kicsinyítéskor - - - Hide window to system tray instead of app exit - Kilépés helyett rendszertálcára való rejtés - - - Dark system tray icon - Sötét rendszertálca-ikon - - - Language - Nyelv - - - Auto-Type - Automatikus beírás - - - Use entry title to match windows for global Auto-Type - Bejegyzések címének alkalmazása az ablakok illesztésénél a globális automatikus beírás számára. - - - Use entry URL to match windows for global Auto-Type - Bejegyzések URL-jének alkalmazása az ablakok illesztésénél a globális automatikus beírás számára. - - - Always ask before performing Auto-Type - Mindig kérdezzen az automatikus beírás megkezdése előtt - - - Global Auto-Type shortcut - Globális automatikus beírás gyorsbillentyűje - - - Auto-Type delay - Automatikus beírás késleltetése - - - ms - Milliseconds - ms - - - Startup - Indítás - - - File Management - Fájlkezelés - - - Safely save database files (may be incompatible with Dropbox, etc) - Adatbázisok biztonságos mentése (lehet, hogy inkompatibilis a Dropbox-szal és hasonlókkal) - - - Backup database file before saving - Készüljön biztonsági mentés az adatbázisról mentés előtt - - - Entry Management - Bejegyzéskezelés - - - General - Általános - - - - SettingsWidgetSecurity - - Timeouts - Időtúllépések - - - Clear clipboard after - Vágólap törlése ennyi idő után - - - sec - Seconds - mp - - - Lock databases after inactivity of - Adatbázis zárolása ennyi inaktivitás után - - - Convenience - Kényelem - - - Lock databases when session is locked or lid is closed - Adatbázis zárolása munkamenet zárolásakor vagy a fedél lecsukásakor - - - Lock databases after minimizing the window - Adatbázis zárolása az ablak lekicsinyítésekor - - - Don't require password repeat when it is visible - Jelszóismétlés elkerülése látható jelszó esetén - - - Show passwords in cleartext by default - Jelszavak megjelenítése alapértelmezetten egyszerű szövegként - - - Hide passwords in the preview panel - Jelszavak elrejtése az előnézet panelen - - - Hide entry notes by default - Bejegyzések jegyzeteinek elrejtése alapértelmezetten - - - Privacy - Adatvédelem - - - Use Google as fallback for downloading website icons - A Google használata tartalékként, a webhelyikonok letöltésére - - - Re-lock previously locked database after performing Auto-Type - Az előzőleg zárolt adatbázis újbóli zárolása automatikus beírást követően - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP TOTP beállítása @@ -3988,59 +5336,84 @@ Fel kell oldani a kijelölt adatbázist, vagy egy másik nem zároltat kell vál Egyéni beállítások alkalmazása - Note: Change these settings only if you know what you are doing. - Megjegyzés: Ezeket a beállításokat csak a hatásuk pontos ismeretében érdemes megváltoztatni. + Custom Settings + Egyéni beállítások Time step: Időléptetés: - 8 digits - 8-számjegyű - - - 6 digits - 6-számjegyű + sec + Seconds + mp Code size: Kódméret: - sec - Seconds - mp + 6 digits + 6-számjegyű + + + 7 digits + 7-számjegyű + + + 8 digits + 8-számjegyű - TotpDialog + UpdateCheckDialog - Timed Password - Időalapú jelszó + Checking for updates + Frissítések keresése - 000000 - 000000 + Checking for updates... + Frissítések keresése... - Copy - Másolás + Close + Bezárás - Expires in - Lejárat: + Update Error! + Frissítési hiba! - seconds - mp + An error occurred in retrieving update information. + Hiba történt a frissítési információk letöltése közben. - - - UnlockDatabaseWidget - Unlock database - Adatbázis feloldása + Please try again later. + Javasolt később újra megpróbálni. + + + Software Update + Szoftverfrissítés + + + A new version of KeePassXC is available! + Elérhető a KeePassXC egy újabb verziója! + + + KeePassXC %1 is now available — you have %2. + Elérhető a KeePassXC %1 verziója – a jenlegi verzió: %2. + + + Download it at keepassxc.org + Letöltés a keepassxc.org webhelyről. + + + You're up-to-date! + A jelenlegi verzió az aktuális. + + + KeePassXC %1 is currently the newest version available + A most elérhető legfrissebb KeePassXC verzió: %1 @@ -4075,42 +5448,26 @@ Fel kell oldani a kijelölt adatbázist, vagy egy másik nem zároltat kell vál - main + YubiKeyEditWidget - Remove an entry from the database. - Egy bejegyzés eltávolítása az adatbázisból. + Refresh + Frissítés - Path of the database. - Adatbázis útvonala. + YubiKey Challenge-Response + YubiKey kihívás-válasz - Path of the entry to remove. - Az eltávolítandó bejegyzés útvonala. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Ha van <a href="https://www.yubico.com/">YubiKey</a> eszköze, akkor használhatja a további biztonság érdekében.</p><p>A YubiKey-hez szükséges, hogy az egyik foglalata <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 kihívás-válaszként</a> legyen beállítva.</p> - KeePassXC - cross-platform password manager - KeePassXC – keresztplatformos jelszókezelő + No YubiKey detected, please ensure it's plugged in. + Nincs YubiKey észlelve, győződjön meg róla, hogy be van-e dugva. - filenames of the password databases to open (*.kdbx) - megnyitandó jelszóadatbázisok fájlnevei (*.kdbx) - - - path to a custom config file - útvonal az egyéni beállítófájlhoz - - - key file of the database - adatbázis kulcsfájlja - - - read password of the database from stdin - adatbázis jelszó beolvasása az stdin-ről - - - Parent window handle - Szülőablak kezelése + No YubiKey inserted. + Nincs YubiKey behelyezve. \ No newline at end of file diff --git a/share/translations/keepassx_id.ts b/share/translations/keepassx_id.ts index a5135b2c4..efbc39535 100644 --- a/share/translations/keepassx_id.ts +++ b/share/translations/keepassx_id.ts @@ -23,7 +23,7 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Lihat Semua Kontribusi pada GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Lihat Semua Kontribusi di GitHub</a> Debug Info @@ -37,36 +37,6 @@ Copy to clipboard Salin ke papan klip - - Version %1 - - Versi %1 - - - - Revision: %1 - Revisi: %1 - - - Distribution: %1 - Distribusi: %1 - - - Libraries: - Pustaka: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistem operasi: %1 -Arsitektur CPU: %2 -Kernel: %3 %4 - - - Enabled extensions: - Ekstensi aktif: - Project Maintainers: Pengelola Proyek: @@ -75,36 +45,6 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Terima kasih dari tim KeePassXC kepada debfx yang telah membuat KeepassX original. - - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - Konfirmasi Akses KeePassXC HTTP - - - Remember this decision - Ingat tindakan ini - - - Allow - Izinkan - - - Deny - Tolak - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 telah meminta akses sandi untuk item berikut. -Silakan pilih apakah Anda ingin mengizinkannya. - AgentSettingsWidget @@ -112,6 +52,277 @@ Silakan pilih apakah Anda ingin mengizinkannya. Enable SSH Agent (requires restart) Aktifkan SSH Agent (butuh memulai ulang) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Pengaturan Aplikasi + + + General + Umum + + + Security + Keamanan + + + Access error for config file %1 + Galat akses untuk berkas konfigurasi %1 + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Pengaturan Dasar + + + Startup + Memulai + + + Start only a single instance of KeePassXC + Hanya mulai satu aplikasi KeePassXC + + + Remember last databases + Ingat basis data terakhir + + + Remember last key files and security dongles + Ingat berkas kunci dan dongle keamanan terakhir + + + Load previous databases on startup + Muat basis data sebelumnya saat mulai + + + Minimize window at application startup + Minimalkan jendela saat memulai aplikasi + + + File Management + Manajemen Berkas + + + Safely save database files (may be incompatible with Dropbox, etc) + Secara aman menyimpan berkas basis data (mungkin tidak kompatibel dengan Dropbox, dll) + + + Backup database file before saving + Cadangkan basis data sebelum disimpan + + + Automatically save after every change + Otomatis simpan setelah setiap perubahan + + + Automatically save on exit + Otomatis simpan ketika keluar + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Jangan tandai basis data telah diubah untuk perubahan non-data (mis. melebarkan grup) + + + Automatically reload the database when modified externally + Muat ulang basis data secara otomatis ketika diubah secara eksternal + + + Entry Management + Manajemen Entri + + + Use group icon on entry creation + Gunakan ikon grup pada pembuatan entri + + + Minimize when copying to clipboard + Minimalkan ketika menyalin ke papan klip + + + Hide the entry preview panel + Sembunyikan panel pratinjau entri + + + General + Umum + + + Hide toolbar (icons) + Sembunyikan bilah perkakas (ikon) + + + Minimize instead of app exit + + + + Show a system tray icon + Tampilkan ikon baki sistem + + + Dark system tray icon + Ikon baki sistem gelap + + + Hide window to system tray when minimized + Sembunyikan jendela ke baki sistem ketika diminimalkan + + + Language + Bahasa + + + Auto-Type + Ketik-Otomatis + + + Use entry title to match windows for global Auto-Type + Gunakan judul entri untuk mencocokkan jendela untuk Ketik-Otomatis global + + + Use entry URL to match windows for global Auto-Type + Gunakan URL entri untuk mencocokkan jendela untuk Ketik-Otomatis global + + + Always ask before performing Auto-Type + Selalu bertanya sebelum menjalankan Ketik-Otomatis + + + Global Auto-Type shortcut + Pintasan global Ketik-Otomatis + + + Auto-Type typing delay + + + + ms + Milliseconds + md + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Waktu Kedaluwarsa + + + Clear clipboard after + Kosongkan papan klip setelah + + + sec + Seconds + det + + + Lock databases after inactivity of + Kunci basis data setelah tidak aktif selama + + + min + min + + + Forget TouchID after inactivity of + + + + Convenience + Kenyamanan + + + Lock databases when session is locked or lid is closed + Kunci basis data ketika sesi dikunci atau lid ditutup + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + Kunci basis data setelah meminimalkan jendela + + + Re-lock previously locked database after performing Auto-Type + Kunci ulang basis data yang sebelumnya terkunci setelah menjalankan Ketik-Otomatis + + + Don't require password repeat when it is visible + Tidak membutuhkan pengulangan sandi ketika ruas bisa dilihat + + + Don't hide passwords when editing them + Jangan sembunyikan sandi saat penyuntingan + + + Don't use placeholder for empty password fields + Jangan gunakan placeholder untuk ruas sandi yang kosong + + + Hide passwords in the entry preview panel + Sembunyikan sandi di panel pratinjau entri + + + Hide entry notes by default + Sembunyikan catatan secara bawaan + + + Privacy + Privasi + + + Use DuckDuckGo as fallback for downloading website icons + Gunakan DuckDuckGo sebagai cadangan untuk mengunduh ikon website + AutoType @@ -214,6 +425,26 @@ Please select whether you want to allow access. Silakan pilih apakah Anda ingin mengizinkannya. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + Ok + + + Cancel + Batal + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -287,14 +518,6 @@ Silakan pilih apakah Anda ingin mengizinkannya. Credentials mean login data requested via browser extension Urutkan kredensial yang cocok berdasarkan &nama pengguna - - &Disconnect all browsers - &Putuskan koneksi semua peramban - - - Forget all remembered &permissions - &Lupakan semua perizinan yang diingat - Advanced Tingkat Lanjut @@ -360,21 +583,42 @@ Silakan pilih apakah Anda ingin mengizinkannya. <b>Warning:</b> The following options can be dangerous! <b>Peringatan:</b> Opsi berikut bisa berbahaya! - - Executable Files (*.exe);;All Files (*.*) - Berkas Executable (*.exe);;Semua Berkas (*.*) - - - Executable Files (*) - Berkas Executable (*) - Select custom proxy location Pilih lokasi proksi khusus - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Maaf, KeePassXC-Browser saat ini tidak mendukung rilisan Snap. + &Tor Browser + Peramban &Tor + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + Semua Berkas + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -415,154 +659,54 @@ Apakah Anda ingin menimpanya ulang? Do you want to update the information in %1 - %2? Apakah Anda ingin memperbarui informasi dalam %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Basis data dikunci! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Basis data aktif dikunci! -Silakan buka kunci atau pilih yang lainnya yang tidak terkunci. - - - KeePassXC: Settings not available! - KeePassXC: Pengaturan tidak tersedia! - - - The active database does not contain a settings entry. - Basis data yang aktif tidak berisi entri pengaturan. - - - KeePassXC: No keys found - KeePassXC: Tidak ada kunci yang ditemukan - - - No shared encryption keys found in KeePassXC Settings. - Tidak ditemukan kunci enkripsi bersama di dalam pengaturan KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: Buang kunci dari basis data - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Berhasil membuang %n kunci enkripsi dari pengaturan KeePassXC. - - - Removing stored permissions… - Membuang perizinan yang disimpan... - Abort Batal - KeePassXC: Removed permissions - KeePassXC: Buang izin - - - Successfully removed permissions from %n entry(s). - Berhasil membuang perizinan dari %n entri. + Converting attributes to custom data… + Mengkonversi atribut ke data khusus... - KeePassXC: No entry with permissions found! - KeePassXC: Tidak entri dengan izin yang ditemukan! - - - The active database does not contain an entry with permissions. - Basis data aktif tidak berisi entri dengan izin. - - - - ChangeMasterKeyWidget - - Password - Sandi - - - Enter password: - Masukkan sandi: - - - Repeat password: - Ulangi sandi: - - - &Key file - Berkas &kunci - - - Browse - Telusuri - - - Create - Buat - - - Cha&llenge Response + KeePassXC: Converted KeePassHTTP attributes - Refresh - Segarkan + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + - Key files - Berkas kunci + KeePassXC: No entry with KeePassHTTP attributes found! + - All files - Semua berkas + The active database does not contain an entry with KeePassHTTP attributes. + - Create Key File... - Buat Berkas Kunci... + KeePassXC: Legacy browser integration settings detected + - Unable to create Key File : - Tidak bisa membuat Berkas Kunci : + KeePassXC: Create a new group + - Select a key file - Pilih berkas kunci + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Empty password - Sandi kosong - - - Do you really want to use an empty string as password? - Apakah Anda benar-benar ingin menggunakan lema kosong sebagai sandi? - - - Different passwords supplied. - Sandi berbeda. - - - Failed to set %1 as the Key file: -%2 - Gagal menetapkan %1 sebagai berkas Kunci: -%2 - - - Legacy key file format - Format berkas kunci legacy - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Anda menggunakan format berkas kunci legacy yang -tidak akan lagi didukung di masa depan. - -Harap pertimbangkan membuat berkas kunci baru. - - - Changing master key failed: no YubiKey inserted. - Gagal mengubah kunci master: tidak ada YubiKey yang disematkan. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -592,11 +736,11 @@ Harap pertimbangkan membuat berkas kunci baru. filename - filename + nama berkas size, rows, columns - size, rows, columns + ukuran, baris, kolom Encoding @@ -642,14 +786,6 @@ Harap pertimbangkan membuat berkas kunci baru. Not present in CSV file Tidak ada di dalam berkas CSV - - Empty fieldname - Nama ruas kosong - - - column - kolom - Imported from CSV file Diimpor dari berkas CSV @@ -658,50 +794,90 @@ Harap pertimbangkan membuat berkas kunci baru. Original data: Data original: - - Error(s) detected in CSV file ! - Terdapat galat di dalam berkas CSV ! - - - more messages skipped] - pesan dilewati] - Error Galat + + Empty fieldname %1 + + + + column %1 + kolom %1 + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - Impor CSV: galat penulis: - - - - - CsvImportWizard - - Error - Galat - - - Unable to calculate master key - Tidak bisa mengkalkulasi kunci utama +%1 + CsvParserModel - - %n byte(s), - %n byte, - - - %n row(s), - %n baris, - %n column(s) %n kolom + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + %n byte + + + %n row(s) + %n baris + + + + Database + + Root + Root group name + Root + + + File %1 does not exist. + Berkas %1 tidak ada. + + + Unable to open file %1. + Tidak bisa membuka berkas %1. + + + Error while reading the database: %1 + Terjadi kesalahan saat membaca basis data: %1 + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Buka Kunci Basis Data - KeePassXC + DatabaseOpenWidget @@ -729,14 +905,6 @@ Harap pertimbangkan membuat berkas kunci baru. Challenge Response: - - Unable to open the database. - Tidak bisa membuka basis data. - - - Can't open key file - Tidak bisa membuka berkas kunci - Legacy key file format Format berkas kunci legacy @@ -757,7 +925,7 @@ Harap pertimbangkan membuat berkas kunci baru. All files - Semua berkas + Semua Berkas Key files @@ -767,53 +935,250 @@ Harap pertimbangkan membuat berkas kunci baru. Select key file Pilih berkas kunci - - - DatabaseRepairWidget - Repair database - Perbaiki basis data + TouchID for quick unlock + TouchID untuk membuka kunci cepat - Error - Galat + Unable to open the database: +%1 + Tidak bisa membuka basis data: +%1 - Can't open key file - Tidak bisa membuka berkas kunci - - - Unable to open the database. - Tidak bisa membuka basis data. - - - Database opened fine. Nothing to do. - Basis data terbuka dengan baik. Tidak perlu melakukan apa-apa. - - - Success - Sukses - - - The database has been successfully repaired -You can now save it. - Basis data berhasil diperbaiki -Anda bisa menyimpannya sekarang. - - - Unable to repair the database. - Tidak bisa memperbaiki basis data. + Can't open key file: +%1 + Tidak bisa membuka berkas kunci: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Sandi + + + + DatabaseSettingsDialog + + Advanced Settings + Pengaturan Lanjutan + General Umum - Encryption - Enkripsi + Security + Keamanan + + + Master Key + Kunci Master + + + Encryption Settings + Pengaturan Enkripsi + + + Browser Integration + Integrasi Peramban + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Pengaturan KeePassXC-Browser + + + &Disconnect all browsers + &Putuskan koneksi semua peramban + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + Kunci tersimpan + + + Remove + Buang + + + Delete the selected key? + Hapus kunci yang dipilih? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + Kunci + + + Value + Nilai + + + Enable Browser Integration to access these settings. + Aktifkan Integrasi Peramban untuk mengakses pengaturan ini. + + + Disconnect all browsers + Putuskan koneksi semua peramban + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: Tidak ada kunci yang ditemukan + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: Buang kunci dari basis data + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Berhasil membuang %n kunci enkripsi dari pengaturan KeePassXC. + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Membuang perizinan yang disimpan... + + + Abort + Batal + + + KeePassXC: Removed permissions + KeePassXC: Buang izin + + + Successfully removed permissions from %n entry(s). + Berhasil membuang perizinan dari %n entri. + + + KeePassXC: No entry with permissions found! + KeePassXC: Tidak entri dengan izin yang ditemukan! + + + The active database does not contain an entry with permissions. + Basis data aktif tidak berisi entri dengan izin. + + + Move KeePassHTTP attributes to custom data + Pindahkan atribut KeePassHTTP ke data khusus + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algoritma Enkripsi: + + + AES: 256 Bit (default) + AES: 256 Bit (bawaan) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Fungsi Derivasi Kunci: + + + Transform rounds: + + + + Benchmark 1-second delay + Tunda benchmark 1-detik + + + Memory Usage: + Penggunaan Memori: + + + Parallelism: + Paralelisme: + + + Decryption Time: + Waktu Dekripsi: + + + ?? s + ?? d + + + Change + Ubah + + + 100 ms + 100 md + + + 5 s + 5 d + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + Format basis data: + + + This is only important if you need to use your database with other programs. + Hal ini penting jika Anda ingin menggunakan basis data menggunakan program lain. + + + KDBX 4.0 (recommended) + KDBX 4.0 (direkomendasikan) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + tidak berubah Number of rounds too high @@ -863,40 +1228,15 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algoritma Enkripsi: + + %1 ms + milliseconds + %1 md - - AES: 256 Bit (default) - AES: 256 Bit (bawaan) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Fungsi Derivasi Kunci: - - - Transform rounds: - - - - Benchmark 1-second delay - Tunda benchmark 1-detik - - - Memory Usage: - Penggunaan Memori: - - - Parallelism: - Paralelisme: + + %1 s + seconds + %1 d @@ -947,48 +1287,99 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Tambah proteksi tambahan... + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + Galat tidak diketahui + + + Failed to change master key + Gagal mengubah kunci master + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nama Basis Data: + + + Description: + Deskripsi: + + + + DatabaseTabWidget KeePass 2 Database - Basis data KeePass 2 + Basis Data KeePass 2 All files - Semua berkas + Semua Berkas Open database Buka basis data - - File not found! - Berkas tidak ditemukan! - - - Unable to open the database. - Tidak bisa membuka basis data. - - - File opened in read only mode. - Berkas terbuka dalam mode baca-saja. - - - Open CSV file - Buka berkas CSV - CSV file Berkas CSV - - All files (*) - Semua berkas (*) - Merge database Gabung basis data @@ -1001,38 +1392,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database Basis data KeePass 1 - - Close? - Tutup? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" dalam mode penyuntingan. -Tetap buang ubahan dan tutup? - - - Save changes? - Simpan perubahan? - - - "%1" was modified. -Save changes? - "%1" telah dimodifikasi. -Simpan perubahan? - - - Writing the database failed. - Gagal membuat basis data. - - - Passwords - Sandi - - - Save database as - Simpan basis data sebagai - Export database to CSV file Ekspor basis data ke berkas CSV @@ -1042,40 +1401,40 @@ Simpan perubahan? Gagal membuat berkas CSV. - New database - Basis data baru + Database creation error + - locked - terkunci + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - Lock database - Kunci basis data + The database file does not exist or is not accessible. + - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Tidak bisa mengunci basis data karena Anda sedang menyuntingnya. -Harap tekan batal untuk menyelesaikan ubahan Anda atau membuangnya. + Select CSV file + Pilih berkas CSV - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Basis data ini telah dimodifikasi. -Apakah Anda ingin menyimpan basis data sebelum menguncinya? -Kalau tidak, ubahan Anda akan hilang. + New Database + Basis Data Baru - Disable safe saves? - Nonaktifkan penyimpanan aman? + %1 [New Database] + Database tab name modifier + %1 [Basis Data Baru] - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC telah beberapa kali gagal menyimpan basis data. Hal ini mungkin disebabkan oleh layanan sinkronisasi berkas yang menghalangi berkas yang akan disimpan. -Nonaktifkan penyimpanan aman dan coba lagi? + %1 [Locked] + Database tab name modifier + %1 [Dikunci] + + + %1 [Read-only] + Database tab name modifier + %1 [Hanya-baca] @@ -1084,38 +1443,14 @@ Nonaktifkan penyimpanan aman dan coba lagi? Searching... Mencari... - - Change master key - Ubah kunci utama - - - Delete entry? - Hapus entri? - Do you really want to delete the entry "%1" for good? Apakah Anda benar-benar ingin menghapus entri "%1" untuk selamanya? - - Delete entries? - Hapus entri? - - - Do you really want to delete %1 entries for good? - Apakah Anda benar-benar ingin menghapus entri %1 untuk selamanya? - - - Move entry to recycle bin? - Pindahkan entri ke keranjang sampah? - Do you really want to move entry "%1" to the recycle bin? Apakah Anda benar-benar ingin memindahkan "%1" ke keranjang sampah? - - Move entries to recycle bin? - Pindah entri ke keranjang sampah? - Do you really want to move %n entry(s) to the recycle bin? Apakah Anda benar-benar ingin memindahkan %n entri ke keranjang sampah? @@ -1132,18 +1467,10 @@ Nonaktifkan penyimpanan aman dan coba lagi? Remember my choice Ingat pilihan saya - - Delete group? - Hapus grup? - Do you really want to delete the group "%1" for good? Apakah Anda benar-benar ingin menghapus grup "%1" untuk selamanya? - - Unable to calculate master key - Tidak bisa mengkalkulasi kunci utama - No current database. Tidak ada basis data. @@ -1178,10 +1505,6 @@ Do you want to merge your changes? Berkas basis data telah berubah dan Anda memiliki ubahan yang belum disimpan. Apakah Anda ingin menggabungkan ubahan Anda? - - Could not open the new database file while attempting to autoreload this database. - Tidak bisa membuka berkas basis data baru saat mencoba untuk memuat ulang basis data ini. - Empty recycle bin? Kosongkan keranjang sampah? @@ -1190,88 +1513,109 @@ Apakah Anda ingin menggabungkan ubahan Anda? Are you sure you want to permanently delete everything from your recycle bin? Apakah Anda yakin ingin menghapus semuanya secara permanen dari keranjang sampah? - - - DetailsWidget - - Generate TOTP Token - Buat Token TOTP + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + Hapus entri? + + + Move entry(s) to recycle bin? + Pindahkan entri ke keranjang sampah? - Close - Tutup + File opened in read only mode. + Berkas terbuka dalam mode baca-saja. - General - Umum + Lock Database? + Kunci Basis Data? - Password + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" telah dimodifikasi. +Simpan perubahan? + + + Database was modified. +Save changes? + Basis data telah diubah. +Simpan perubahan? + + + Save changes? + Simpan perubahan? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + Nonaktifkan penyimpanan aman? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC telah beberapa kali gagal menyimpan basis data. Hal ini mungkin disebabkan oleh layanan sinkronisasi berkas yang menghalangi berkas yang akan disimpan. +Nonaktifkan penyimpanan aman dan coba lagi? + + + Writing the database failed. +%1 + + + + Passwords Sandi - URL - URL + Save database as + Simpan basis data sebagai - Expiration - Kedaluwarsa + KeePass 2 Database + Basis Data KeePass 2 - Username - Nama pengguna + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Autotype - KetikOtomatis + Delete group + Hapus grup - Searching - Pencarian + Move group to recycle bin? + - Attributes - Atribut + Do you really want to move the group "%1" to the recycle bin? + - Attachments - Lampiran + Successfully merged the database files. + - Notes - Catatan + Database was not modified by merge operation. + - Window - Jendela - - - Sequence - Urutan - - - Search - Cari - - - Clear - Bersihkan - - - Never - Tidak Pernah - - - [PROTECTED] - [DILINDUNGI] - - - Disabled - Dinonaktifkan - - - Enabled - Diaktifkan + Shared group... + @@ -1344,22 +1688,10 @@ Apakah Anda ingin menggabungkan ubahan Anda? New attribute Atribut baru - - Confirm Remove - Konfirmasi Buang - Are you sure you want to remove this attribute? Apakah Anda yakin ingin membuang atribut ini? - - [PROTECTED] - [DILINDUNGI] - - - Press reveal to view or edit - Tekan ungkap untuk melihat atau menyunting - Tomorrow Besok @@ -1372,10 +1704,6 @@ Apakah Anda ingin menggabungkan ubahan Anda? %n month(s) %n bulan - - 1 year - 1 tahun - Apply generated password? Gunakan sandi yang dibuat? @@ -1388,6 +1716,26 @@ Apakah Anda ingin menggabungkan ubahan Anda? Entry updated successfully. Entri berhasil diperbarui. + + Entry has unsaved changes + Entri memiliki perubahan yang belum disimpan + + + New attribute %1 + Atribut baru %1 + + + [PROTECTED] Press reveal to view or edit + [DILINDUNGI] Tekan tampilkan untuk meninjau atau mnyunting + + + %n year(s) + %n tahun + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1632,6 +1980,97 @@ Apakah Anda ingin menggabungkan ubahan Anda? Mengikuti grup induk (%1) + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + Sandi: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + Bersihkan + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1689,25 +2128,13 @@ Apakah Anda ingin menggabungkan ubahan Anda? Unable to fetch favicon. Tidak bisa mengunduh favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Petunjuk: Anda bisa mengaktifkan Google sebagai cadangan di Perkakas>Pengaturan>Keamanan - Images Gambar All files - Semua berkas - - - Select Image - Pilih gambar - - - Can't read icon - Tidak bisa membaca ikon + Semua Berkas Custom icon already exists @@ -1718,8 +2145,36 @@ Apakah Anda ingin menggabungkan ubahan Anda? Konfirmasi Hapus - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Ikon ini digunakan oleh %1 entri, dan akan diganti oleh ikon bawaan. Apakah Anda yakin ingin menghapusnya? + Custom icon successfully downloaded + Ikon khusus berhasil diunduh + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + Pilih Gambar + + + Successfully loaded %1 of %n icon(s) + Berhasil memuat %1 dari %n ikon + + + No icons were loaded + + + + %n icon(s) already exist in the database + %n ikon sudah ada didalam basis data + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1760,19 +2215,18 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. Key - + Kunci Value - + Nilai Entry - - Clone - Suffix added to cloned entries - - Salinan + %1 - Clone + %1 - Salinan @@ -1816,10 +2270,6 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. Are you sure you want to remove %n attachment(s)? Apakah Anda yakin ingin membuang %n lampiran? - - Confirm Remove - Konfirmasi Buang - Save attachments Simpan lampiran @@ -1857,10 +2307,13 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - Tidak bisa membuka berkas: -%1 + @@ -1944,6 +2397,106 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. Attachments Lampiran + + Yes + Ya + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Buat Token TOTP + + + Close + Tutup + + + General + Umum + + + Username + Nama pengguna + + + Password + Sandi + + + Expiration + Kedaluwarsa + + + URL + URL + + + Attributes + Atribut + + + Attachments + Lampiran + + + Notes + Catatan + + + Autotype + KetikOtomatis + + + Window + Jendela + + + Sequence + Urutan + + + Searching + Pencarian + + + Search + Cari + + + Clear + Bersihkan + + + Never + Tidak Pernah + + + [PROTECTED] + [DILINDUNGI] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Diaktifkan + + + Disabled + Dinonaktifkan + + + Share + + EntryView @@ -1982,6 +2535,11 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. Recycle Bin Tong Sampah + + [empty] + group has no children + [kosong] + HostInstaller @@ -1994,61 +2552,6 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. Tidak bisa menyimpan berkas perpesanan native. - - HttpPasswordGeneratorWidget - - Length: - Panjang: - - - Character Types - Tipe Karakter - - - Upper Case Letters - Huruf Besar - - - A-Z - A-Z - - - Lower Case Letters - Huruf Kecil - - - a-z - a-z - - - Numbers - Angka - - - 0-9 - 0-9 - - - Special Characters - Karakter Spesial - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Kecualikan karakter mirip - - - Ensure that the password contains characters from every group - Pastikan sandi berisi karakter dari setiap grup - - - Extended ASCII - ASCII Lanjutan - - KMessageWidget @@ -2074,6 +2577,26 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. Wrong key or database file is corrupt. Kunci salah atau berkas basis data rusak. + + missing database headers + kehilangan tajuk basis data + + + Header doesn't match hash + + + + Invalid header id size + Ukuran id tajuk tidak valid + + + Invalid header field length + Panjang ruas tajuk tidak valid + + + Invalid header data length + Panjang data tajuk tidak valid + Kdbx3Writer @@ -2232,10 +2755,6 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. KdbxReader - - Invalid cipher uuid length - Panjang uuid cipher tidak valid - Unsupported cipher Cipher tidak didukung @@ -2290,6 +2809,18 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Unsupported KeePass 2 database version. Versi basis data KeePass 2 tidak didukung. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + Tidak bisa mengurai UUID: %1 + + + Failed to read database file. + + KdbxXmlReader @@ -2361,10 +2892,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp History element with different uuid Elemen riwayat dengan uuid yang berbeda - - Unable to decrypt entry string - Tidak bisa mendekripsi lema entri - Duplicate custom attribute found Ditemukan atribut khusus ganda @@ -2414,6 +2941,14 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Translator meant is a binary data inside an entry Tidak bisa mengurai kompresi binari + + XML error: +%1 +Line %2, column %3 + Galat XML: +%1 +Baris %2, kolom %3 + KeePass1OpenWidget @@ -2577,55 +3112,143 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Invalid entry field type Tipe ruas entri tidak valid - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – direkomendasikan) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. + Disabled share - The lock file could not be created. Single-instance mode disabled. - Berkas penguncian tidak bisa dibuat. Mode aplikasi tunggal dinonaktifkan. + Import from + - Another instance of KeePassXC is already running. - Aplikasi KeePassXC lainnya sudah berjalan. + Export to + - Fatal error while testing the cryptographic functions. - Galat saat menguji fungsi kriptografi. + Synchronize with + - KeePassXC - Error - KeePassXC - Galat + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + Batal + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + Tambah %1 + + + Change %1 + Change a key component + Ubah %1 + + + Remove %1 + Remove a key component + Buang %1 + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Telusuri + + + Generate + Buat + + + Key File + Berkas Kunci + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + Format berkas kunci legacy + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + Galat memuat berkas kunci '%1' +Pesan: %2 + + + Key files + Berkas kunci + + + All files + Semua Berkas + + + Create Key File... + Buat Berkas Kunci... + + + Error creating key file + Galat membuat berkas kunci + + + Unable to create key file: %1 + Tidak bisa membuat berkas: %1 + + + Select a key file + Pilih berkas kunci @@ -2638,10 +3261,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp &Recent databases Basis data ba&ru-baru ini - - Import - Impor - &Help &Bantuan @@ -2650,14 +3269,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp E&ntries E&ntri - - Copy att&ribute to clipboard - Salin at&ribut ke papan klip - - - Time-based one-time password - Sandi sekali berdasar waktu - &Groups &Grup @@ -2686,30 +3297,10 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp &Close database &Tutup basis data - - &New database - Basis data &baru - - - Merge from KeePassX database - Gabungkan dari basis data KeePassX - - - &Add new entry - &Tambah entri baru - - - &View/Edit entry - &Lihat/Sunting entri - &Delete entry &Hapus entri - - &Add new group - &Tambah grup baru - &Edit group &Sunting grup @@ -2722,14 +3313,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Sa&ve database as... &Simpan basis data sebagai... - - Change &master key... - Ubah kunci &utama... - - - &Database settings - Pengaturan &basis data - Database settings Pengaturan basis data @@ -2738,10 +3321,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp &Clone entry &Gandakan entri - - &Find - &Temukan - Copy &username Salin &nama pengguna @@ -2750,10 +3329,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Copy username to clipboard Salin nama pengguna ke papan klip - - Cop&y password - Salin &sandi - Copy password to clipboard Salin sandi ke papan klip @@ -2766,14 +3341,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Password Generator Pembuat Sandi - - &Perform Auto-Type - Jalankan &Ketik-Otomatis - - - &Open URL - &Buka URL - &Lock databases &Kunci basis data @@ -2806,22 +3373,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp &Export to CSV file... &Ekspor ke berkas CSV... - - Import KeePass 1 database... - Impor basis data KeePass 1... - - - Import CSV file... - Impor berkas CSV... - - - Re&pair database... - Per&baiki basis data... - - - Show TOTP - Tampilkan TOTP - Set up TOTP... Siapkan TOTP... @@ -2842,14 +3393,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Access error for config file %1 Galat akses untuk berkas konfigurasi %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Sepertinya Anda menggunakan KeePassHTTP untuk integrasi peramban. Fitur ini tidak berlaku lagi dan akan dibuang di masa depan.<br>Silakan beralih ke KeePassXC-Browser! Untuk bantuan migrasi, kunjungi <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">panduan migrasi</a> kami (peringatan %1 of 3).</p> - - - read-only - baca-saja - Settings Pengaturan @@ -2862,26 +3405,6 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Quit KeePassXC Keluar KeePassXC - - KeePass 2 Database - Basis Data KeePass 2 - - - All files - Semua Berkas - - - Open database - Buka basis data - - - Save repaired database - Simpan basis data yang sudah diperbaiki - - - Writing the database failed. - Gagal menyimpan basis data. - Please touch the button on your YubiKey! Silakan sentuh tombol pada YubiKey Anda! @@ -2894,6 +3417,267 @@ This version is not meant for production use. Tinggi kemungkinan terjadi kerusakan, harap kelola salinan basis data anda dengan baik. Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. + + &Donate + &Donasi + + + Report a &bug + Laporkan &bug + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + &Impor + + + Copy att&ribute... + Salin at&ribut... + + + TOTP... + TOTP... + + + &New database... + Basis data bar&u... + + + Create a new database + Buat basis data baru + + + &Merge from database... + + + + Merge from another KDBX database + Gabung dari basis data KDBX lainnya + + + &New entry + E&ntri baru + + + Add a new entry + Tambahkan entri baru + + + &Edit entry + &Sunting entri + + + View or edit entry + Lihat atau sunting entri + + + &New group + &Grup baru + + + Add a new group + Tambahkan grup baru + + + Change master &key... + Ganti &kunci master... + + + &Database settings... + Pengaturan basis &data... + + + Copy &password + Salin &sandi + + + Perform &Auto-Type + Jalankan &Ketik-Otomatis + + + Open &URL + Buka &URL + + + KeePass 1 database... + Basis data KeePass 1... + + + Import a KeePass 1 database + Impor basis data KeePass 1 + + + CSV file... + Berkas CSV... + + + Import a CSV file + Impor berkas CSV + + + Show TOTP... + Tampilkan TOTP... + + + Show TOTP QR Code... + Tampilkan Kode QR TOTP... + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + Memindahkan %1 [%2] + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Buat basis data KeePassXC baru... + + + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage + LamanPemandu + + + En&cryption Settings + Pengaturan En&kripsi + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + Pengaturan Lanjutan + + + Simple Settings + Pengaturan Dasar + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Pengaturan Enkripsi + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Kunci Master Basis Data + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + Informasi Basis Data Umum + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2995,125 +3779,30 @@ Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. - OptionDialog + PasswordEditWidget - Dialog - Dialog + Enter password: + Masukkan sandi: - This is required for accessing your databases from ChromeIPass or PassIFox - Ini dibutuhkan untuk mengakses basis data Anda dari ChromeIPass atau PassIFox + Confirm password: + Konfirmasi sandi: - Enable KeePassHTTP server - Aktifkan server KeePassHTTP + Password + Sandi - General - Umum - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - &Tampilkan notifikasi ketika ada permintaan kredensial - - - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Hanya tampilkan kecocokan terbaik untuk URL tertentu bukan semua entri untuk keseluruhan domain. - - - &Return only best matching entries - Hanya &tampilkan entri dengan kecocokan terbaik - - - Re&quest to unlock the database if it is locked - &Minta untuk membuka basis data jika terkunci - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Hanya entri dengan skema yang sama (http://, https://, ftp://, ...) yang ditampilkan. - - - &Match URL schemes - &Cocok skema URL - - - Sort matching entries by &username - Urutkan entri yang cocok berdasarkan &nama pengguna - - - Sort &matching entries by title - Urutkan entri yang cocok berdasarkan &judul - - - R&emove all shared encryption keys from active database - &Buang semua kunci enkripsi bersama dari basis data aktif - - - Re&move all stored permissions from entries in active database - &Buang semua izin yang tersimpan dari entri di dalam basis data aktif - - - Password Generator - Pembuat Sandi - - - Advanced - Tingkat Lanjut - - - Always allow &access to entries - Selalu izinkan &akses ke entri - - - Always allow &updating entries - Selalu izinkan pembar&uan entri - - - Only the selected database has to be connected with a client. - Hanya basis data terpilih yang harus terkoneksi dengan klien. - - - Searc&h in all opened databases for matching entries - &Cari di dalam semua basis data yang terbuka untuk entri yang cocok - - - Automatically creating or updating string fields is not supported. - Membuat atau memperbarui ruas lema secara otomatis tidak didukung. - - - &Return advanced string fields which start with "KPH: " - &Tampilkan ruas lema tingkat lanjut yang dimulai dengan "KPH: " - - - HTTP Port: - Port HTTP: - - - Default port: 19455 - Port bawaan: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC akan mendengarkan port ini pada 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Peringatan:</b> Opsi berikut bisa berbahaya! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP sudah tidak berlaku lagi dan akan dibuang di masa depan.<br>Silakan beralih ke KeePassXC-Browser! Untuk bantuan migrasi, kunjungi <a href="https://keepassxc.org/docs/keepassxc-browser-migration">panduan migrasi</a>kami.</p> - - - Cannot bind to privileged ports + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - Cannot bind to privileged ports below 1024! -Using default port 19455. - Tidak bisa mengkoneksi ke port dibawah 1024! -Menggunakan port bawaan 19455. + Passwords do not match. + Sandi tidak sama. + + + Generate master password + Buat sandi master @@ -3183,18 +3872,10 @@ Menggunakan port bawaan 19455. Wordlist: Daftar Kata: - - Word Count: - Jumlah Kata: - Word Separator: Pemisah Kata: - - Generate - Buat - Copy Salin @@ -3207,10 +3888,6 @@ Menggunakan port bawaan 19455. Close Tutup - - Apply - Terapkan - Entropy: %1 bit Entropi: %1 bit @@ -3239,6 +3916,171 @@ Menggunakan port bawaan 19455. Password quality Sempurna + + ExtendedASCII + ASCIILanjutan + + + Switch to advanced mode + Beralih ke mode lanjutan + + + Advanced + Tingkat Lanjut + + + Upper Case Letters A to F + Huruf Besar A sampai F + + + A-Z + A-Z + + + Lower Case Letters A to F + Huruf Kecil A sampai F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Tanda Kurung + + + {[( + {[( + + + Punctuation + Tanda Baca + + + .,:; + .,:; + + + Quotes + Tanda Petik + + + " ' + " ' + + + Math + Tanda Hitung + + + <*+!?= + <*+!?= + + + Dashes + + + + \_|-/ + \_|-/ + + + Logograms + Logogram + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Beralih ke mode dasar + + + Simple + Dasar + + + Character set to exclude from generated password + Karakter yang dikecualikan dari sandi yang dibuat + + + Do not include: + Jangan sertakan: + + + Add non-hex letters to "do not include" list + Tambahkan huruf bukan-hex ke daftar "jangan sertakan" + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Karakter yang dikecualikan: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + &Jumlah Kata: + + + Regenerate + Buat ulang + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Hapus + + + Move + + + + Empty + + + + Remove + Buang + + + Skip + + + + Disable + Nonaktifkan + + + Merge + + QObject @@ -3258,34 +4100,18 @@ Menggunakan port bawaan 19455. Cannot decrypt message Tidak bisa mendekripsi pesan - - Timeout or cannot connect to KeePassXC - Terputus atau tidak bisa menyambung ke KeePassXC - Action cancelled or denied Tindakan dibatalkan atau ditolak - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Tidak bisa mengenkripsi pesan atau kunci publik tidak ditemukan. Apakah Perpesanan Native diaktifkan di dalam KeePassXC? - KeePassXC association failed, try again Asosiasi KeePassXC gagal, coba lagi - - Key change was not successful - Perubahan kunci tidak berhasil - Encryption key is not recognized Kunci enkripsi tidak dikenali - - No saved databases found - Tidak ditemukan basis data tersimpan - Incorrect action Tindakan salah @@ -3411,10 +4237,6 @@ Menggunakan port bawaan 19455. Insert password to unlock %1: Masukkan sandi untuk membuka %1: - - Failed to load key file %1 : %2 - Gagal memuat berkas kunci %1 : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3499,12 +4321,6 @@ Perintah yang tersedia: error reading from device galat membaca dari perangkat - - file empty ! - - berkas kosong ! - - malformed string lema rusak @@ -3541,10 +4357,6 @@ Perintah yang tersedia: Created Dibuat - - Legacy Browser Integration - Integrasi Peramban Legacy - Browser Integration Integrasi Peramban @@ -3573,10 +4385,6 @@ Perintah yang tersedia: Word count for the diceware passphrase. Jumlah kata untuk frasa sandi diceware. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3588,28 +4396,442 @@ Perintah yang tersedia: Buat kata sandi baru secara acak. - Length of the generated password. - Panjang kata sandi yang dibuat. + Invalid value for password length %1. + - Use lowercase characters in the generated password. - Gunakan huruf kecil di kata sandi yang dibuat + Could not create entry with path %1. + - Use uppercase characters in the generated password. - Gunakan huruf besar di kata sandi yang dibuat. + Enter password for new entry: + Masukkan sandi untuk entri baru: - Use numbers in the generated password. - Gunakan angka di kata sandi yang dibuat. + Writing the database failed %1. + - Use special characters in the generated password. - Gunakan spesial karakter di kata sandi yang dibuat. + Successfully added entry %1. + - Use extended ASCII in the generated password. - Gunakan ASCII yang diperluas di dalam sandi yang dibuat. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + Berkas %1 tidak ada. + + + Unable to open file %1. + Tidak bisa membuka berkas %1. + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – direkomendasikan) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Buang sebuah entri dari basis data. + + + Path of the entry to remove. + Jalur entri untuk dibuang. + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + Berkas penguncian tidak bisa dibuat. Mode aplikasi tunggal dinonaktifkan. + + + KeePassXC - cross-platform password manager + KeePassXC - pengelola sandi lintas platform + + + filenames of the password databases to open (*.kdbx) + nama berkas basis data sandi untuk dibuka (*.kdbx) + + + path to a custom config file + jalur ke berkas konfigurasi khusus + + + key file of the database + berkas kunci basis data + + + read password of the database from stdin + baca sandi basis data dari stdin + + + Parent window handle + + + + Another instance of KeePassXC is already running. + Aplikasi KeePassXC lainnya sudah berjalan. + + + Fatal error while testing the cryptographic functions. + Galat saat menguji fungsi kriptografi. + + + KeePassXC - Error + KeePassXC - Galat + + + Database password: + Sandi basis data: + + + Cannot create new group + @@ -3647,11 +4869,97 @@ Perintah yang tersedia: - SearchWidget + SSHAgent - Search... - Cari... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Cari @@ -3660,315 +4968,332 @@ Perintah yang tersedia: Clear Bersihkan - - Case Sensitive - Sensitif Besar Kecil - Limit search to selected group Batasi pencarian ke grup yang dipilih + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + Sensitif besar kecil huruf + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Permintaan asosiasi kunci baru + Active + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Anda telah menerima permintaan asosiasi untuk kunci di atas. -Jika Anda ingin mengizinkannya mengakses basis data KeePassXC Anda, -beri nama yang unik untuk identifikasi dan terimalah. + Allow export + - KeePassXC: Overwrite existing key? - KeePassXC: Timpa kunci yang ada? + Allow import + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Kunci enkripsi bersama dengan nama "%1" sudah ada. -Apakah Anda ingin menimpanya? + Own certificate + - KeePassXC: Update Entry - KeePassXC: Perbarui Entri + Fingerprint: + - Do you want to update the information in %1 - %2? - Apakah Anda ingin memperbarui informasi dalam %1 - %2? + Certificate: + - KeePassXC: Database locked! - KeePassXC: Basis data dikunci! + Signer + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Basis data aktif dikunci! -Silakan buka kunci atau pilih yang lainnya yang tidak terkunci. + Key: + Kunci: - KeePassXC: Removed keys from database - KeePassXC: Buang kunci dari basis data + Generate + Buat + + + Import + Impor + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Buang + + + Path + + + + Status + + + + Fingerprint + Tanda tangan + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Semua Berkas + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + Tidak Pernah + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Sandi Berwaktu + + + 000000 + 000000 + + + Copy + Salin - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Berhasil membuang %n kunci terenkripsi dari Pengaturan KeePassXC/Http. - - - KeePassXC: No keys found - KeePassXC: Tidak ada kunci yang ditemukan - - - No shared encryption-keys found in KeePassHttp Settings. - Tidak ada kunci-enkripsi bersama yang ditemukan di dalam Pengaturan KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: Pengaturan tidak tersedia! - - - The active database does not contain an entry of KeePassHttp Settings. - Basis data aktif tidak berisi entri Pengaturan KeePassHttp. - - - Removing stored permissions... - Membuang izin yang tersimpan... - - - Abort - Batal - - - KeePassXC: Removed permissions - KeePassXC: Buang izin - - - Successfully removed permissions from %n entries. - Berhasil membuang izin dari %n entri. - - - KeePassXC: No entry with permissions found! - KeePassXC: Tidak entri dengan izin yang ditemukan! - - - The active database does not contain an entry with permissions. - Basis data aktif tidak berisi entri dengan izin. + Expires in <b>%n</b> second(s) + - SettingsWidget + TotpExportSettingsDialog - Application Settings - Pengaturan Aplikasi + Copy + Salin - General - Umum + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Security - Keamanan + There was an error creating the QR code. + - Access error for config file %1 - Galat akses untuk berkas konfigurasi %1 + Closing in %1 seconds. + - SettingsWidgetGeneral - - Basic Settings - Pengaturan Dasar - - - Start only a single instance of KeePassXC - Hanya mulai satu aplikasi KeePassXC - - - Remember last databases - Ingat basis data terakhir - - - Remember last key files and security dongles - Ingat berkas kunci dan dongle keamanan terakhir - - - Load previous databases on startup - Muat basis data sebelumnya saat mulai - - - Automatically save on exit - Otomatis simpan ketika keluar - - - Automatically save after every change - Otomatis simpan setelah setiap perubahan - - - Automatically reload the database when modified externally - Muat ulang basis data secara otomatis ketika diubah secara eksternal - - - Minimize when copying to clipboard - Minimalkan ketika menyalin ke papan klip - - - Minimize window at application startup - Minimalkan jendela saat memulai aplikasi - - - Use group icon on entry creation - Gunakan ikon grup pada pembuatan entri - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Jangan tandai basis data telah diubah untuk perubahan non-data (mis. melebarkan grup) - - - Hide the Details view - Sembunyikan tampilan Detail - - - Show a system tray icon - Tampilkan ikon baki sistem - - - Hide window to system tray when minimized - Sembunyikan jendela ke baki sistem ketika diminimalkan - - - Hide window to system tray instead of app exit - Daripada keluar, sembunyikan jendela ke baki sistem - - - Dark system tray icon - Ikon baki sistem gelap - - - Language - Bahasa - - - Auto-Type - Ketik-Otomatis - - - Use entry title to match windows for global Auto-Type - Gunakan judul entri untuk mencocokkan jendela untuk Ketik-Otomatis global - - - Use entry URL to match windows for global Auto-Type - Gunakan URL entri untuk mencocokkan jendela untuk Ketik-Otomatis global - - - Always ask before performing Auto-Type - Selalu bertanya sebelum menjalankan Ketik-Otomatis - - - Global Auto-Type shortcut - Pintasan global Ketik-Otomatis - - - Auto-Type delay - Tundaan Ketik-Otomatis - - - ms - Milliseconds - md - - - Startup - Memulai - - - File Management - Manajemen Berkas - - - Safely save database files (may be incompatible with Dropbox, etc) - Secara aman menyimpan berkas basis data (mungkin tidak kompatibel dengan Dropbox, dll) - - - Backup database file before saving - Cadangkan basis data sebelum disimpan - - - Entry Management - Manajemen Entri - - - General - Umum - - - - SettingsWidgetSecurity - - Timeouts - Waktu Kedaluwarsa - - - Clear clipboard after - Kosongkan papan klip setelah - - - sec - Seconds - det - - - Lock databases after inactivity of - Kunci basis data setelah tidak aktif selama - - - Convenience - Kenyamanan - - - Lock databases when session is locked or lid is closed - Kunci basis data ketika sesi dikunci atau lid ditutup - - - Lock databases after minimizing the window - Kunci basis data setelah meminimalkan jendela - - - Don't require password repeat when it is visible - Tidak membutuhkan pengulangan sandi ketika ruas bisa dilihat - - - Show passwords in cleartext by default - Tampilkan teks sandi secara baku - - - Hide passwords in the preview panel - Sembunyikan sandi di dalam panel pratinjau - - - Hide entry notes by default - Sembunyikan catatan secara bawaan - - - Privacy - Privasi - - - Use Google as fallback for downloading website icons - Gunakan Google sebagai cadangan untuk mengunduh ikon situs web - - - Re-lock previously locked database after performing Auto-Type - Kunci ulang basis data yang sebelumnya terkunci setelah menjalankan Ketik-Otomatis - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Siapkan TOTP @@ -3990,59 +5315,84 @@ Silakan buka kunci atau pilih yang lainnya yang tidak terkunci. Gunakan pengaturan khusus - Note: Change these settings only if you know what you are doing. - Catatan: Hanya ubah pengaturan ini jika Anda tahu apa yang Anda lakukan. + Custom Settings + Time step: Interval waktu: - 8 digits - 8 angka - - - 6 digits - 6 angka + sec + Seconds + det Code size: Ukuran kode: - sec - Seconds - det + 6 digits + 6 angka + + + 7 digits + + + + 8 digits + 8 angka - TotpDialog + UpdateCheckDialog - Timed Password - Sandi Berwaktu + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - Salin + Close + Tutup - Expires in - Kedaluwarsa dalam + Update Error! + - seconds - detik + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - Buka kunci basis data + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4077,41 +5427,25 @@ Silakan buka kunci atau pilih yang lainnya yang tidak terkunci. - main + YubiKeyEditWidget - Remove an entry from the database. - Buang sebuah entri dari basis data. + Refresh + Segarkan - Path of the database. - Jalur ke basis data. + YubiKey Challenge-Response + - Path of the entry to remove. - Jalur entri untuk dibuang. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC - pengelola sandi lintas platform + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - nama berkas basis data sandi untuk dibuka (*.kdbx) - - - path to a custom config file - jalur ke berkas konfigurasi khusus - - - key file of the database - berkas kunci basis data - - - read password of the database from stdin - baca sandi basis data dari stdin - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_is_IS.ts b/share/translations/keepassx_is_IS.ts new file mode 100644 index 000000000..eba0192ad --- /dev/null +++ b/share/translations/keepassx_is_IS.ts @@ -0,0 +1,5423 @@ + + + AboutDialog + + About KeePassXC + Um KeePassXC + + + About + Um + + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + + + + Contributors + + + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + + + + Debug Info + + + + Include the following information whenever you report a bug: + + + + Copy to clipboard + Vista í minni + + + Revision: %1 + + + + Distribution: %1 + + + + Libraries: + + + + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + + + + Enabled extensions: + + + + Project Maintainers: + + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + + + + Version %1 + + + + Build Type: %1 + + + + Auto-Type + + + + Browser Integration + + + + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) + + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Virkja SSH miðil (krefst endurræsunar) + + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + + + + General + + + + Security + + + + Access error for config file %1 + + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + + + + Automatically save on exit + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + + + + Hide the entry preview panel + + + + General + + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + + + + Auto-Type + + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + + + + sec + Seconds + + + + Lock databases after inactivity of + + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + + + + Use DuckDuckGo as fallback for downloading website icons + + + + + AutoType + + Couldn't find an entry that matches the window title: + + + + Auto-Type - KeePassXC + + + + Auto-Type + + + + The Syntax of your Auto-Type statement is incorrect! + + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + + + + AutoTypeAssociationsModel + + Window + Gluggi + + + Sequence + + + + Default sequence + + + + + AutoTypeMatchModel + + Group + Grúppa + + + Title + Titill + + + Username + Notandanafn + + + Sequence + + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + + + + Select entry to Auto-Type: + + + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + + + + Remember this decision + + + + Allow + Leyfa + + + Deny + Neita + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + + + BrowserOptionDialog + + Dialog + + + + This is required for accessing your databases with KeePassXC-Browser + + + + Enable KeepassXC browser integration + + + + General + + + + Enable integration for these browsers: + + + + &Google Chrome + + + + &Firefox + + + + &Chromium + &Vivaldi + + + &Vivaldi + + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + + + + Re&quest to unlock the database if it is locked + + + + Only entries with the same scheme (http://, https://, ...) are returned. + + + + &Match URL scheme (e.g., https://...) + + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + + + + &Return only best-matching credentials + + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + + + + Advanced + + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + + + + Only the selected database has to be connected with a client. + + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + + + + Automatically creating or updating string fields is not supported. + + + + &Return advanced string fields which start with "KPH: " + + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + + + + Update &native messaging manifest files at startup + + + + Support a proxy application between KeePassXC and browser extension. + + + + Use a &proxy application between KeePassXC and browser extension + + + + Use a custom proxy location if you installed a proxy manually. + + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + + + + Browse... + Button for opening file dialog + + + + <b>Warning:</b> The following options can be dangerous! + + + + Select custom proxy location + + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + + BrowserService + + KeePassXC: New key association request + + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + + + + Save and allow access + + + + KeePassXC: Overwrite existing key? + + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + + KeePassXC: Update Entry + + + + Do you want to update the information in %1 - %2? + + + + Abort + + + + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + + + + KeePassXC: No entry with KeePassHTTP attributes found! + + + + The active database does not contain an entry with KeePassHTTP attributes. + + + + KeePassXC: Legacy browser integration settings detected + + + + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + CloneDialog + + Clone Options + + + + Append ' - Clone' to title + + + + Replace username and password with references + + + + Copy history + + + + + CsvImportWidget + + Import CSV fields + + + + filename + + + + size, rows, columns + + + + Encoding + + + + Codec + + + + Text is qualified by + + + + Fields are separated by + + + + Comments start with + + + + First record has field names + + + + Number of headers line to discard + + + + Consider '\' an escape character + + + + Preview + + + + Column layout + + + + Not present in CSV file + + + + Imported from CSV file + + + + Original data: + + + + Error + + + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + + + CSV import: writer has errors: +%1 + + + + + CsvParserModel + + %n column(s) + + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + + + + DatabaseOpenWidget + + Enter master key + + + + Key File: + + + + Password: + + + + Browse + + + + Refresh + + + + Challenge Response: + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + Don't show this warning again + + + + All files + + + + Key files + + + + Select key file + + + + TouchID for quick unlock + + + + Unable to open the database: +%1 + + + + Can't open key file: +%1 + + + + + DatabaseSettingWidgetMetaData + + Passwords + + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + + + + Security + + + + Master Key + + + + Encryption Settings + + + + Browser Integration + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + + + + AES: 256 Bit (default) + + + + Twofish: 256 Bit + + + + Key Derivation Function: + + + + Transform rounds: + + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + + + + Number of rounds too high + Key transformation rounds + + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + + Understood, keep number + + + + Cancel + + + + Number of rounds too low + Key transformation rounds + + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + + KDF unchanged + + + + Failed to transform key with new KDF parameters; KDF unchanged. + + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + + + + Database description: + + + + Default username: + + + + History Settings + + + + Max. history items: + + + + Max. history size: + + + + MiB + + + + Use recycle bin + + + + Additional Database Settings + + + + Enable &compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget + + KeePass 2 Database + + + + All files + + + + Open database + + + + CSV file + + + + Merge database + + + + Open KeePass 1 database + + + + KeePass 1 database + + + + Export database to CSV file + + + + Writing the CSV file failed. + + + + Database creation error + + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + + + + + DatabaseWidget + + Searching... + + + + Do you really want to delete the entry "%1" for good? + + + + Do you really want to move entry "%1" to the recycle bin? + + + + Do you really want to move %n entry(s) to the recycle bin? + + + + Execute command? + + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + + + + Do you really want to delete the group "%1" for good? + + + + No current database. + + + + No source database, nothing to do. + + + + Search Results (%1) + + + + No Results + + + + File has changed + + + + The database file has changed. Do you want to load the changes? + + + + Merge Request + + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + + + + Empty recycle bin? + + + + Are you sure you want to permanently delete everything from your recycle bin? + + + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + + + File opened in read only mode. + + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + + + + Database was modified. +Save changes? + + + + Save changes? + + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords + + + + Save database as + + + + KeePass 2 Database + + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + + + + + EditEntryWidget + + Entry + + + + Advanced + + + + Icon + + + + Auto-Type + + + + Properties + + + + History + + + + SSH Agent + + + + n/a + + + + (encrypted) + + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + + + Entry history + + + + Add entry + + + + Edit entry + + + + Different passwords supplied. + + + + New attribute + + + + Are you sure you want to remove this attribute? + + + + Tomorrow + + + + %n week(s) + + + + %n month(s) + + + + Apply generated password? + + + + Do you want to apply the generated password to this entry? + + + + Entry updated successfully. + + + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + + + + EditEntryWidgetAdvanced + + Additional attributes + + + + Add + + + + Remove + + + + Edit Name + + + + Protect + + + + Reveal + + + + Attachments + + + + Foreground Color: + + + + Background Color: + + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + + + + Inherit default Auto-Type sequence from the &group + + + + &Use custom Auto-Type sequence: + + + + Window Associations + + + + + + + + + - + + + + Window title: + + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + + + + Restore + + + + Delete + + + + Delete all + + + + + EditEntryWidgetMain + + URL: + + + + Password: + + + + Repeat: + + + + Title: + + + + Notes + + + + Presets + + + + Toggle the checkbox to reveal the notes section. + + + + Username: + + + + Expires + + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + + + + Add key to agent when database is opened/unlocked + + + + Comment + + + + Decrypt + + + + n/a + + + + Copy to clipboard + Vista í minni + + + Private key + + + + External file + + + + Browse... + Button for opening file dialog + + + + Attachment + + + + Add to agent + + + + Remove from agent + + + + Require user confirmation when this key is used + + + + + EditGroupWidget + + Group + Grúppa + + + Icon + + + + Properties + + + + Add group + + + + Edit group + + + + Enable + + + + Disable + + + + Inherit from parent group (%1) + + + + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + + EditGroupWidgetMain + + Name + + + + Notes + + + + Expires + + + + Search + + + + Auto-Type + + + + &Use default Auto-Type sequence of parent group + + + + Set default Auto-Type se&quence + + + + + EditWidgetIcons + + &Use default icon + + + + Use custo&m icon + + + + Add custom icon + + + + Delete custom icon + + + + Download favicon + + + + Unable to fetch favicon. + + + + Images + + + + All files + + + + Custom icon already exists + + + + Confirm Delete + + + + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + + + + EditWidgetProperties + + Created: + + + + Modified: + + + + Accessed: + + + + Uuid: + + + + Plugin Data + + + + Remove + + + + Delete plugin data? + + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + + + + Key + + + + Value + + + + + Entry + + %1 - Clone + + + + + EntryAttachmentsModel + + Name + + + + Size + + + + + EntryAttachmentsWidget + + Form + + + + Add + + + + Remove + + + + Open + + + + Save + + + + Select files + + + + Are you sure you want to remove %n attachment(s)? + + + + Save attachments + + + + Unable to create directory: +%1 + + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + + + + Unable to save attachments: +%1 + + + + Unable to open attachment: +%1 + + + + Unable to open attachments: +%1 + + + + Confirm remove + + + + Unable to open file(s): +%1 + + + + + EntryAttributesModel + + Name + + + + + EntryHistoryModel + + Last modified + + + + Title + Titill + + + Username + Notandanafn + + + URL + + + + + EntryModel + + Ref: + Reference abbreviation + + + + Group + Grúppa + + + Title + Titill + + + Username + Notandanafn + + + URL + + + + Never + + + + Password + + + + Notes + + + + Expires + + + + Created + + + + Modified + + + + Accessed + + + + Attachments + + + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + + + + General + + + + Username + Notandanafn + + + Password + + + + Expiration + + + + URL + + + + Attributes + + + + Attachments + + + + Notes + + + + Autotype + + + + Window + Gluggi + + + Sequence + + + + Searching + + + + Search + + + + Clear + + + + Never + + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + + + + Disabled + + + + Share + + + + + EntryView + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + + + + + Group + + Recycle Bin + + + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + + + + HostInstaller + + KeePassXC: Cannot save file! + + + + Cannot save the native messaging script file. + + + + + KMessageWidget + + &Close + + + + Close message + + + + + Kdbx3Reader + + Unable to calculate master key + + + + Unable to issue challenge-response. + + + + Wrong key or database file is corrupt. + + + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + + Kdbx3Writer + + Unable to issue challenge-response. + + + + Unable to calculate master key + + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + + + + Invalid header checksum size + + + + Header SHA256 mismatch + + + + Wrong key or database file is corrupt. (HMAC mismatch) + + + + Unknown cipher + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + Failed to open buffer for KDF parameters in header + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + Not a KeePass database. + + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + + + + Unsupported KeePass 2 database version. + + + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + + + + KdbxXmlReader + + XML parsing failure: %1 + + + + No root group + + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + Invalid EnableAutoType value + + + + Invalid EnableSearching value + + + + No group uuid found + + + + Null DeleteObject uuid + + + + Missing DeletedObject uuid or time + + + + Null entry uuid + + + + Invalid entry icon number + + + + History element in history entry + + + + No entry uuid found + + + + History element with different uuid + + + + Duplicate custom attribute found + + + + Entry string key or value missing + + + + Duplicate attachment found + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + XML error: +%1 +Line %2, column %3 + + + + + KeePass1OpenWidget + + Import KeePass1 database + + + + Unable to open the database. + + + + + KeePass1Reader + + Unable to read keyfile. + + + + Not a KeePass database. + + + + Unsupported encryption algorithm. + + + + Unsupported KeePass database version. + + + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + + + + Invalid number of groups + + + + Invalid number of entries + + + + Invalid content hash size + + + + Invalid transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + + + + Root + + + + Unable to calculate master key + + + + Wrong key or database file is corrupt. + + + + Key transformation failed + + + + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + unable to seek to content position + + + + + KeeShare + + Disabled share + + + + Import from + + + + Export to + + + + Synchronize with + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + + + + All files + + + + Create Key File... + + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + + + + + MainWindow + + &Database + + + + &Recent databases + + + + &Help + + + + E&ntries + + + + &Groups + + + + &Tools + + + + &Quit + + + + &About + + + + &Open database... + + + + &Save database + + + + &Close database + + + + &Delete entry + + + + &Edit group + + + + &Delete group + + + + Sa&ve database as... + + + + Database settings + + + + &Clone entry + + + + Copy &username + + + + Copy username to clipboard + + + + Copy password to clipboard + + + + &Settings + + + + Password Generator + + + + &Lock databases + + + + &Title + + + + Copy title to clipboard + + + + &URL + + + + Copy URL to clipboard + + + + &Notes + + + + Copy notes to clipboard + + + + &Export to CSV file... + + + + Set up TOTP... + + + + Copy &TOTP + + + + E&mpty recycle bin + + + + Clear history + + + + Access error for config file %1 + + + + Settings + + + + Toggle window + + + + Quit KeePassXC + + + + Please touch the button on your YubiKey! + + + + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. + + + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key + + + + PEM boundary mismatch + + + + Base64 decoding failed + + + + Key file way too small. + + + + Key file magic header id invalid + + + + Found zero keys + + + + Failed to read public key. + + + + Corrupted key file, reading private key failed + + + + No private key payload to decrypt + + + + Trying to run KDF without cipher + + + + Passphrase is required to decrypt this key + + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + + + + Unexpected EOF while reading private key + + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + + + + Unsupported key type: %1 + + + + Unknown cipher: %1 + + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + + + + + PasswordEditWidget + + Enter password: + + + + Confirm password: + + + + Password + + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Password cannot be empty. + + + + Passwords do not match. + + + + Generate master password + + + + + PasswordGeneratorWidget + + %p% + + + + Password: + + + + strength + Password strength + + + + entropy + + + + Password + + + + Character Types + + + + Upper Case Letters + + + + Lower Case Letters + + + + Numbers + + + + Special Characters + + + + Extended ASCII + + + + Exclude look-alike characters + + + + Pick characters from every group + + + + &Length: + + + + Passphrase + + + + Wordlist: + + + + Word Separator: + + + + Copy + + + + Accept + + + + Close + + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + + + + Upper Case Letters A to F + + + + A-Z + + + + Lower Case Letters A to F + + + + a-z + + + + 0-9 + + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + + + + Move + + + + Empty + + + + Remove + + + + Skip + + + + Disable + + + + Merge + + + + + QObject + + Database not opened + + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + + + + Action cancelled or denied + + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + + + + Incorrect action + + + + Empty message received + + + + No URL provided + + + + No logins found + + + + Unknown error + + + + Add a new entry to a database. + + + + Path of the database. + + + + Key file of the database. + + + + path + + + + Username for the entry. + + + + username + + + + URL for the entry. + + + + URL + + + + Prompt for the entry's password. + + + + Generate a password for the entry. + + + + Length for the generated password. + + + + length + + + + Path of the entry to add. + + + + Copy an entry's password to the clipboard. + + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + + + + Edit an entry. + + + + Title for the entry. + + + + title + + + + Path of the entry to edit. + + + + Estimate the entropy of a password. + + + + Password for which to estimate the entropy. + + + + Perform advanced analysis on the password. + + + + Extract and print the content of a database. + + + + Path of the database to extract. + + + + Insert password to unlock %1: + + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + + +Available commands: + + + + + Name of the command to execute. + + + + List database entries. + + + + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + + + + Path of the database to merge into. + + + + Path of the database to merge from. + + + + Use the same credentials for both database files. + + + + Key file of the database to merge from. + + + + Show an entry's information. + + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + + + + attribute + + + + Name of the entry to show. + + + + NULL device + + + + error reading from device + + + + malformed string + + + + missing closing quote + + + + Group + Grúppa + + + Title + Titill + + + Username + Notandanafn + + + Password + + + + Notes + + + + Last Modified + + + + Created + + + + Browser Integration + + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + + + + Press + + + + Passive + + + + SSH Agent + + + + Generate a new random diceware passphrase. + + + + Word count for the diceware passphrase. + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + + + + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + + + + Database password: + + + + + QtIOCompressor + + Internal zlib error when compressing: + + + + Error writing to underlying device: + + + + Error opening underlying device: + + + + Error reading data from underlying device: + + + + Internal zlib error when decompressing: + + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + + + + Internal zlib error: + + + + + SSHAgent + + Agent connection failed. + + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget + + Search + + + + Clear + + + + Limit search to selected group + + + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + + + + SettingsWidgetKeeShare + + Active + + + + Allow export + + + + Allow import + + + + Own certificate + + + + Fingerprint: + + + + Certificate: + + + + Signer + + + + Key: + + + + Generate + + + + Import + + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + + + + 000000 + + + + Copy + + + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. + + + + + TotpSetupDialog + + Setup TOTP + + + + Key: + + + + Default RFC 6238 token settings + + + + Steam token settings + + + + Use custom settings + + + + Custom Settings + + + + Time step: + + + + sec + Seconds + + + + Code size: + + + + 6 digits + + + + 7 digits + + + + 8 digits + + + + + UpdateCheckDialog + + Checking for updates + + + + Checking for updates... + + + + Close + + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + + + + Create new database + + + + Open existing database + + + + Import from KeePass 1 + + + + Import from CSV + + + + Recent databases + + + + Welcome to KeePassXC %1 + + + + + YubiKeyEditWidget + + Refresh + + + + YubiKey Challenge-Response + + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + + + No YubiKey detected, please ensure it's plugged in. + + + + No YubiKey inserted. + + + + \ No newline at end of file diff --git a/share/translations/keepassx_it.ts b/share/translations/keepassx_it.ts index d4efd9632..e5a1558cc 100644 --- a/share/translations/keepassx_it.ts +++ b/share/translations/keepassx_it.ts @@ -3,7 +3,7 @@ AboutDialog About KeePassXC - Info su KeePassXC + Informazioni su KeePassXC About @@ -27,7 +27,7 @@ Debug Info - Informazioni debug + Informazioni di debug Include the following information whenever you report a bug: @@ -37,36 +37,6 @@ Copy to clipboard Copia negli appunti - - Version %1 - - Versione %1 - - - - Revision: %1 - Revisione: %1 - - - Distribution: %1 - Distribuzione: %1 - - - Libraries: - Librerie: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operativo: %1 -Architettura CPU: %2 -Kernel: %3 %4 - - - Enabled extensions: - Estensioni abilitate: - Project Maintainers: Responsabili del progetto: @@ -75,37 +45,6 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Uno speciale ringraziamento dal team di KeePassXC va a debfx per la creazione del KeePassX originale. - - Build Type: %1 - - Tipo di compilazione: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP conferma accesso - - - Remember this decision - Ricorda questa decisione - - - Allow - Consenti - - - Deny - Nega - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 ha richiesto accesso alle password per il seguente elemento/i. -Seleziona se vuoi consentire l'accesso. - AgentSettingsWidget @@ -113,6 +52,277 @@ Seleziona se vuoi consentire l'accesso. Enable SSH Agent (requires restart) Abilita agente SSH (richiede un riavvio) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Impostazioni applicazione + + + General + Generale + + + Security + Sicurezza + + + Access error for config file %1 + Errore di accesso per il file di configurazione %1 + + + Icon only + Solo icone + + + Text only + Solo icone + + + Text beside icon + Testo accanto alle icone + + + Text under icon + Testo sotto le icone + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Impostazioni di base + + + Startup + Avvio + + + Start only a single instance of KeePassXC + Avvia una sola istanza di KeePassXC + + + Remember last databases + Ricorda ultimo database + + + Remember last key files and security dongles + Ricorda gli ultimi file chiave e dongle di sicurezza + + + Load previous databases on startup + Carica i database precedenti all'avvio + + + Minimize window at application startup + Minimizza la finestra all'avvio della applicazione + + + File Management + Gestione dei file + + + Safely save database files (may be incompatible with Dropbox, etc) + Salvataggio sicuro dei file di database (potrebbe essere incompatibile con Dropbox, ecc) + + + Backup database file before saving + Effettua una copia di sicurezza del database prima di salvarlo + + + Automatically save after every change + Salva automaticamente dopo ogni modifica + + + Automatically save on exit + Salva automaticamente all'uscita + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Non contrassegnare il database come modificato per modifiche non riguardanti i dati (ad es. espansione dei gruppi) + + + Automatically reload the database when modified externally + Ricarica automaticamente il database quando ci sono modifiche esterne + + + Entry Management + Gestione dell'elemento + + + Use group icon on entry creation + Usa icona del gruppo alla creazione di una voce + + + Minimize when copying to clipboard + Minimizza quando si copia negli appunti + + + Hide the entry preview panel + Nascondere il pannello di anteprima della voce + + + General + Generale + + + Hide toolbar (icons) + Nascondere la barra degli strumenti (icone) + + + Minimize instead of app exit + Minimizzare invece di uscire dall'app + + + Show a system tray icon + Visualizza un'icona nell'area di notifica di sistema + + + Dark system tray icon + Icona scura per l'area di notifica di sistema + + + Hide window to system tray when minimized + Nascondi la finestra nell'area di notifica di sistema quando viene minimizzata + + + Language + Lingua + + + Auto-Type + Completamento automatico + + + Use entry title to match windows for global Auto-Type + Usa il titolo della voce per la corrispondenza con le finestre per il completamento automatico globale + + + Use entry URL to match windows for global Auto-Type + Usa URL della voce per la corrispondenza con le finestre per il completamento automatico globale + + + Always ask before performing Auto-Type + Chiedi sempre prima di effettuare il completamento automatico + + + Global Auto-Type shortcut + Scorciatoia globale per l'auto-completamento + + + Auto-Type typing delay + Ritardo per la compilazione automatica + + + ms + Milliseconds + ms + + + Auto-Type start delay + Ritardo di avvio della compilazione automatica + + + Check for updates at application startup + Cerca aggiornamenti all'avvio dell'applicazione + + + Include pre-releases when checking for updates + Includi versioni preliminari nella ricerca degli aggiornamenti + + + Movable toolbar + Barra degli strumenti spostabile + + + Button style + Stile dei pulsanti + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Timeout + + + Clear clipboard after + Svuota gli appunti dopo + + + sec + Seconds + sec + + + Lock databases after inactivity of + Blocca i database dopo un'inattività di + + + min + min + + + Forget TouchID after inactivity of + + + + Convenience + Comodità + + + Lock databases when session is locked or lid is closed + Blocca i database quando la sessione è bloccata o il coperchio è chiuso + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + Blocca il database dopo la minimizzazione della finestra + + + Re-lock previously locked database after performing Auto-Type + Blocca nuovamente un database precedentemente bloccato dopo aver completato l'Auto-Type + + + Don't require password repeat when it is visible + Non richiedere di ripetere la password quando è visibile + + + Don't hide passwords when editing them + Non nascondere le password quando vengono modificate + + + Don't use placeholder for empty password fields + Non usare segnaposti per campi password vuoti + + + Hide passwords in the entry preview panel + Nascondi la password nel pannello di anteprima della voce + + + Hide entry notes by default + Nascondi le note della voce per impostazione predefinita + + + Privacy + Riservatezza + + + Use DuckDuckGo as fallback for downloading website icons + Usa DuckDuckGo come alternativa per scaricare le icone dal sito web + AutoType @@ -122,7 +332,7 @@ Seleziona se vuoi consentire l'accesso. Auto-Type - KeePassXC - Auto-completamento - KeePassXC + KeePassXC - Completamento automatico Auto-Type @@ -187,7 +397,7 @@ Seleziona se vuoi consentire l'accesso. Select entry to Auto-Type: - Seleziona una voce per l'auto-completamento: + Seleziona una voce per il completamento automatico: @@ -198,7 +408,7 @@ Seleziona se vuoi consentire l'accesso. Remember this decision - Ricorda questa scelta + Ricorda questa decisione Allow @@ -215,6 +425,26 @@ Please select whether you want to allow access. Seleziona se vuoi consentire l'accesso. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + Ok + + + Cancel + Annulla + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -288,14 +518,6 @@ Seleziona se vuoi consentire l'accesso. Credentials mean login data requested via browser extension Ordina le credenziali corrispondenti per nome &utente - - &Disconnect all browsers - &Disconnetti tutti i browser - - - Forget all remembered &permissions - Ignora i &permessi precedentemente salvati - Advanced Avanzate @@ -361,21 +583,42 @@ Seleziona se vuoi consentire l'accesso. <b>Warning:</b> The following options can be dangerous! <b>Avviso:</b> le seguenti opzioni possono essere pericolose. - - Executable Files (*.exe);;All Files (*.*) - File eseguibili (*.exe);;Tutti i file (*.*) - - - Executable Files (*) - File eseguibili (*) - Select custom proxy location Selezionare una posizione personalizzata per il proxy - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Siamo spiacenti, ma KeePassXC-Browser non è supportato per i rilasci di Snap al momento. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + File eseguibili + + + All Files + Tutti i file + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -415,154 +658,54 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? Vuoi aggiornare le informazioni in %1 - %2? - - KeePassXC: Database locked! - KeePassXC: database bloccato! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Il database attivo è bloccato! -Sblocca il database selezionato o scegline un altro che sia sbloccato. - - - KeePassXC: Settings not available! - KeePassXC: impostazioni non disponibili! - - - The active database does not contain a settings entry. - Il database attivo non contiene una voce per le impostazioni. - - - KeePassXC: No keys found - KeePassXC: nessuna chiave trovata - - - No shared encryption keys found in KeePassXC Settings. - Nessun chiave condivisa di cifratura è stata trovata nelle impostazioni di KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: chiavi rimosse dal database - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Rimosso con successo %n chiavi di crittografia da KeePassXC impostazioni.Rimossa(e) con successo %n chiave(i) di crittografia dalle impostazioni di KeePassXC. - - - Removing stored permissions… - Rimozione dei permessi salvati... - Abort Interrompi - KeePassXC: Removed permissions - KeePassXC: permessi rimossi + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). - Rimosso con successo le autorizzazioni da %n ha.Rimossa(e) con successo le autorizzazioni da %n voce(i). + Successfully moved %n keys to custom data. + - KeePassXC: No entry with permissions found! - KeePassXC: nessuna voce con permessi trovata! + KeePassXC: No entry with KeePassHTTP attributes found! + - The active database does not contain an entry with permissions. - Il database attivo non contiene una voce con permessi. - - - - ChangeMasterKeyWidget - - Password - Password + The active database does not contain an entry with KeePassHTTP attributes. + - Enter password: - Inserisci password: + KeePassXC: Legacy browser integration settings detected + - Repeat password: - Ripeti password: + KeePassXC: Create a new group + - &Key file - &File chiave + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Sfoglia - - - Create - Crea - - - Cha&llenge Response - Risposta di ve&rifica - - - Refresh - Aggiorna - - - Key files - File chiave - - - All files - Tutti i file - - - Create Key File... - Crea file chiave... - - - Unable to create Key File : - Impossibile creare file chiave: - - - Select a key file - Seleziona un file chiave - - - Empty password - Password vuota - - - Do you really want to use an empty string as password? - Vuoi veramente usare una stringa vuota come password? - - - Different passwords supplied. - Sono state inserite password differenti. - - - Failed to set %1 as the Key file: -%2 - Impossibile impostare %1 come file chiave: -%2 - - - Legacy key file format - Formato di file chiave legacy - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Per il file della chiave, stai utilizzando un formato obsoleto -che potrebbe non essere più supportato in futuro. - -Considera l'opzione di generarne uno nuovo - - - Changing master key failed: no YubiKey inserted. - Modifica non riuscita della password principale: nessuna YubiKey inserita. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -642,14 +785,6 @@ Considera l'opzione di generarne uno nuovo Not present in CSV file Non presente nel file CSV - - Empty fieldname - Nome campo vuoto - - - column - colonna - Imported from CSV file Importati da file CSV @@ -658,50 +793,90 @@ Considera l'opzione di generarne uno nuovo Original data: Dati originali: - - Error(s) detected in CSV file ! - Errore/i rilevati nel file CSV! - - - more messages skipped] - ulteriori messaggi ignorati] - Error Errore + + Empty fieldname %1 + Nome di campo vuoto %1 + + + column %1 + colonna %1 + + + Error(s) detected in CSV file! + Errore(i) rilevati nel file CSV! + + + [%n more message(s) skipped] + [%n altro messaggio saltato][altri %n messaggi saltati] + CSV import: writer has errors: - - Importazione CSV: rilevati errori: - - - - - CsvImportWizard - - Error - Errore - - - Unable to calculate master key - Impossibile calcolare la chiave principale +%1 + CsvParserModel - - %n byte(s), - %n byte, %n byte, - - - %n row(s), - %n riga, %n righe, - %n column(s) %n colonna%n colonne + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte (s)%n byte(s) + + + %n row(s) + righe: %n%n riga(e) + + + + Database + + Root + Root group name + Radice + + + File %1 does not exist. + File %1 non esiste. + + + Unable to open file %1. + Impossibile aprire il file %1. + + + Error while reading the database: %1 + Errore durante la lettura del database: %1 + + + Could not save, database has no file name. + Impossibile salvare, il database non ha nessun nome di file. + + + File cannot be written as it is opened in read-only mode. + Il file non può essere scritto perché aperto in modalità di sola lettura. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Sbloccare Database - KeePassXC + DatabaseOpenWidget @@ -729,14 +904,6 @@ Considera l'opzione di generarne uno nuovo Challenge Response: Risposta di verifica: - - Unable to open the database. - Impossibile aprire il database. - - - Can't open key file - Impossibile aprire il file chiave - Legacy key file format Formato di file chiave legacy @@ -767,53 +934,248 @@ Considera l'opzione di generarne uno nuovo Select key file Seleziona file chiave - - - DatabaseRepairWidget - Repair database - Ripara database + TouchID for quick unlock + - Error - Errore + Unable to open the database: +%1 + Impossibile aprire il database: %1 - Can't open key file - Impossibile aprire il file chiave - - - Unable to open the database. - Impossibile aprire il database. - - - Database opened fine. Nothing to do. - Database aperto correttamente. Nessuna operazione da eseguire. - - - Success - Completato - - - The database has been successfully repaired -You can now save it. - Il database è stato correttamente riparato. -Adesso puoi salvarlo. - - - Unable to repair the database. - Impossibile riparare il database. + Can't open key file: +%1 + Impossibile aprire il file chiave: %1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Password + + + + DatabaseSettingsDialog + + Advanced Settings + Impostazioni avanzate + General Generale - Encryption - Cifratura + Security + Sicurezza + + + Master Key + Chiave principale + + + Encryption Settings + Impostazioni di crittografia + + + Browser Integration + Integrazione con i browser + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Impostazioni di KeePassXC-Browser + + + &Disconnect all browsers + &Disconnetti tutti i browser + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + Chiavi memorizzate + + + Remove + Rimuovi + + + Delete the selected key? + Eliminare la chiave selezionata? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + Chiave + + + Value + Valore + + + Enable Browser Integration to access these settings. + Abilita l'integrazione con i browser per accedere a queste impostazioni. + + + Disconnect all browsers + Scollega tutti i browser + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: nessuna chiave trovata + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: chiavi rimosse dal database + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Rimossa con successo %n chiave di cifratura dalle impostazioni di KeePassXC. Rimosse con successo %n chiavi di cifratura dalle impostazioni di KeePassXC. + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Rimozione dei permessi salvati... + + + Abort + Interrompi + + + KeePassXC: Removed permissions + KeePassXC: permessi rimossi + + + Successfully removed permissions from %n entry(s). + Permessi rimossi con successo da %n voce.Permessi rimossi con successo da %n voci. + + + KeePassXC: No entry with permissions found! + KeePassXC: nessuna voce con permessi trovata! + + + The active database does not contain an entry with permissions. + Il database attivo non contiene una voce con permessi. + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algoritmo di cifratura: + + + AES: 256 Bit (default) + AES: 256 Bit (impostazione predefinita) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Funzione di derivazione di chiave: + + + Transform rounds: + Arrotondamenti trasformazione: + + + Benchmark 1-second delay + Ritardo di 1 secondo di benchmark + + + Memory Usage: + Uso della memoria: + + + Parallelism: + Parallelismo: + + + Decryption Time: + Tempo di de-crittografia: + + + ?? s + ?? s + + + Change + Modifica + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + Formato di database: + + + This is only important if you need to use your database with other programs. + Questo è importante solo se si vuole usare il database con altri programmi. + + + KDBX 4.0 (recommended) + KDBX 4.0 (raccomandato) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + invariato Number of rounds too high @@ -865,42 +1227,17 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f thread(s) Threads for parallel execution (KDF settings) - iscritto (i) thread(s) + iscritto (i)thread(s) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algoritmo di cifratura: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 Bit (impostazione predefinita) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Funzione di derivazione di chiave: - - - Transform rounds: - Arrotondamenti trasformazione: - - - Benchmark 1-second delay - Ritardo di 1 secondo di benchmark - - - Memory Usage: - Uso della memoria: - - - Parallelism: - Parallelismo: + + %1 s + seconds + %1 s%1 s @@ -935,7 +1272,7 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f MiB - MiB + MB Use recycle bin @@ -951,12 +1288,83 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Radice + Sharing + + + Breadcrumb + + + + Type + Tipo + + + Path + Percorso + + + Last Signer + Ultimo firmatario + + + Certificates + Certificati + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Aggiungere ulteriore protezione... + + + No encryption key added + Nessuna chiave di crittografia aggiunta + + + You must add at least one encryption key to secure your database! + Bisogna aggiungere almeno un'altra chiave di cifratura per rendere sicuro il database. + + + No password set + Nessuna password impostata + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + Errore sconosciuto + + + Failed to change master key + Modifica della chiave master fallita + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nome del database: + + + Description: + Descrizione: + + + + DatabaseTabWidget KeePass 2 Database Database KeePass 2 @@ -969,30 +1377,10 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f Open database Apri database - - File not found! - File non trovato! - - - Unable to open the database. - Impossibile aprire il database. - - - File opened in read only mode. - File aperto in modalità di sola lettura. - - - Open CSV file - Apri file CSV - CSV file File CSV - - All files (*) - Tutti i file (*) - Merge database Unisci database @@ -1005,81 +1393,49 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f KeePass 1 database Database KeePass 1 - - Close? - Vuoi chiudere? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" è in modalità modifica. -Vuoi annullare le modifiche e chiudere comunque? - - - Save changes? - Salvare le modifiche? - - - "%1" was modified. -Save changes? - "%1" è stata modificato. -Vuoi salvare le modifiche? - - - Writing the database failed. - Scrittura del database non riuscita. - - - Passwords - Password - - - Save database as - Salva database come - Export database to CSV file Esporta database come file CSV Writing the CSV file failed. - Scrittura file CSV fallita. + Scrittura file CSV non riuscita. - New database - Nuovo database + Database creation error + Errore di creazione del database - locked - bloccato + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - Lock database - Blocca database + The database file does not exist or is not accessible. + Il file di database non esiste o non è accessibile. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Non è possibile bloccare il database dato che lo stai modificando. -Seleziona 'Annulla' per completare le modifiche o scartarle. + Select CSV file + Selezionare il file CSV - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Questo database è stato modificato. -Vuoi salvare il database prima di bloccarlo? -Altrimenti le modifiche verranno perse. + New Database + Nuovo Database - Disable safe saves? - Disabilita i salvataggi sicuri? + %1 [New Database] + Database tab name modifier + %1 [nuovo database] - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - Nonostante ripetuti tentativi, KeePassXC non è riuscito a salvare il database. Probabilmente la causa risiede in un file di lock bloccato da qualche servizio di sincronizzazione file. -Disabilitare i salvataggi sicuri e riprovare? + %1 [Locked] + Database tab name modifier + %1 [bloccato] + + + %1 [Read-only] + Database tab name modifier + %1 [sola lettura] @@ -1088,41 +1444,17 @@ Disabilitare i salvataggi sicuri e riprovare? Searching... Ricerca... - - Change master key - Modifica chiave principale - - - Delete entry? - Vuoi eliminare la voce? - Do you really want to delete the entry "%1" for good? Vuoi veramente eliminare la voce "%1"? - - Delete entries? - Vuoi eliminare le voci? - - - Do you really want to delete %1 entries for good? - Vuoi veramente eliminare %1 voci? - - - Move entry to recycle bin? - Vuoi cestinare la voce? - Do you really want to move entry "%1" to the recycle bin? Vuoi davvero cestinare la voce "%1"? - - Move entries to recycle bin? - Vuoi spostare le voci nel Cestino? - Do you really want to move %n entry(s) to the recycle bin? - Vuoi veramente spostare %n elemento nel Cestino?Vuoi veramente cestinare %n voci? + Vuoi veramente cestinare %n voce?Vuoi veramente cestinare %n voci? Execute command? @@ -1136,18 +1468,10 @@ Disabilitare i salvataggi sicuri e riprovare? Remember my choice Ricorda la mia scelta - - Delete group? - Vuoi eliminare il gruppo? - Do you really want to delete the group "%1" for good? Vuoi veramente eliminare il gruppo "%1"? - - Unable to calculate master key - Impossibile calcolare la chiave principale - No current database. Nessun database attuale. @@ -1182,10 +1506,6 @@ Do you want to merge your changes? Il file del database e' stato cambiato e ci sono cambiamenti non salvati Vuoi fondere i cambiamenti? - - Could not open the new database file while attempting to autoreload this database. - Non è stato possibile aprire il nuovo database mentre si tentava il caricamento automatico di questo database. - Empty recycle bin? Svuotare il cestino? @@ -1194,88 +1514,109 @@ Vuoi fondere i cambiamenti? Are you sure you want to permanently delete everything from your recycle bin? Sei sicuro di voler eliminare definitivamente tutto dal cestino? - - - DetailsWidget - - Generate TOTP Token - Generare un token TOTP + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + Elimina ha?Cancellare la voce(i)? + + + Move entry(s) to recycle bin? + Spostare la creazione nel cestino?Spostare la voce(i) nel cestino? - Close - Chiudi + File opened in read only mode. + File aperto in modalità di sola lettura. - General - Generale + Lock Database? + Bloccare il database? - Password + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" è stata modificato. +Vuoi salvare le modifiche? + + + Database was modified. +Save changes? + + + + Save changes? + Salvare le modifiche? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + Disabilita i salvataggi sicuri? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + Nonostante ripetuti tentativi, KeePassXC non è riuscito a salvare il database. Probabilmente la causa risiede in un file di lock bloccato da qualche servizio di sincronizzazione file. +Disabilitare i salvataggi sicuri e riprovare? + + + Writing the database failed. +%1 + Scrittura nel database non riuscita. +%1 + + + Passwords Password - URL - URL + Save database as + Salva database come - Expiration - Scadenza + KeePass 2 Database + Database KeePass 2 - Username - Nome utente + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Autotype - Completamento automatico + Delete group + Elimina gruppo - Searching - Ricerca + Move group to recycle bin? + Cestinare il gruppo? - Attributes - Attributi + Do you really want to move the group "%1" to the recycle bin? + Vuoi davvero cestinare il gruppo "%1"? - Attachments - Allegati + Successfully merged the database files. + - Notes - Note + Database was not modified by merge operation. + Il database non è stato modificato dall'operazione di unione. - Window - Finestra - - - Sequence - Sequenza - - - Search - Cerca - - - Clear - Azzera - - - Never - Mai - - - [PROTECTED] - [PROTETTO] - - - Disabled - Disabilitato - - - Enabled - Abilitato + Shared group... + @@ -1348,22 +1689,10 @@ Vuoi fondere i cambiamenti? New attribute Nuovo attributo - - Confirm Remove - Conferma eliminazione - Are you sure you want to remove this attribute? Sei sicuro di voler rimuovere questo attributo? - - [PROTECTED] - [PROTETTO] - - - Press reveal to view or edit - Premere rivela per visualizzare o modificare - Tomorrow Domani @@ -1376,10 +1705,6 @@ Vuoi fondere i cambiamenti? %n month(s) %n mese%n mesi - - 1 year - Un anno - Apply generated password? Applicare la password generata? @@ -1392,6 +1717,26 @@ Vuoi fondere i cambiamenti? Entry updated successfully. Voce aggiornata correttamente. + + Entry has unsaved changes + La voce contiene modifiche non salvate + + + New attribute %1 + Nuovo attributo %1 + + + [PROTECTED] Press reveal to view or edit + [PROTETTO] Seleziona 'Rivela' per visualizzare o modificare + + + %n year(s) + anno (i) %n%n anno(i) + + + Confirm Removal + Conferma rimozione + EditEntryWidgetAdvanced @@ -1444,7 +1789,7 @@ Vuoi fondere i cambiamenti? &Use custom Auto-Type sequence: - &Usa sequenza di compeltamento automatico personalizzata: + &Usa sequenza di completamento automatico personalizzata: Window Associations @@ -1636,6 +1981,97 @@ Vuoi fondere i cambiamenti? Eredita dal gruppo genitore (%1) + + EditGroupWidgetKeeShare + + Form + Modulo + + + Type: + Tipo: + + + Path: + Percorso: + + + ... + ... + + + Password: + Password: + + + Inactive + Inattivo + + + Import from path + Importa da percorso + + + Export to path + Esporta su percorso + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + Azzera + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1693,10 +2129,6 @@ Vuoi fondere i cambiamenti? Unable to fetch favicon. Impossibile scaricare favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Suggerimento: è possibile abilitare Google come alternativa in 'Strumenti'>'Impostazioni'>'Sicurezza' - Images Immagini @@ -1705,14 +2137,6 @@ Vuoi fondere i cambiamenti? All files Tutti i file - - Select Image - Seleziona immagine - - - Can't read icon - Impossibile leggere l'icona - Custom icon already exists L'icona personalizzata esiste già @@ -1722,8 +2146,36 @@ Vuoi fondere i cambiamenti? Conferma eliminazione - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Questa icona viene usata da %1 voce, e sarà sostituita dall'icona predefinita. Sei sicuro di volerla eliminare? + Custom icon successfully downloaded + Icona personalizzata scaricata correttamente + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + Selezionare immagine(i) + + + Successfully loaded %1 of %n icon(s) + Caricate con successo %1 di %n icona.Caricate con successo %1 di %n icone. + + + No icons were loaded + Nessuna icona è stata caricata + + + %n icon(s) already exist in the database + %n icona esiste già nel database%n icone esistono già nel database + + + The following icon(s) failed: + La seguente icona presenta degli errori:Le seguenti icone presentano degli errori: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1774,9 +2226,8 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. Entry - - Clone - Suffix added to cloned entries - - Clona + %1 - Clone + %1 - clone @@ -1818,11 +2269,7 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. Are you sure you want to remove %n attachment(s)? - Sei sicuro di che voler rimuovere %n allegati?Sei sicuro di voler rimuovere %n allegato(i)? - - - Confirm Remove - Conferma eliminazione + Sei sicuro di voler rimuovere %n allegato?Sei sicuro di voler rimuovere %n allegati? Save attachments @@ -1861,10 +2308,15 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. %1 - Unable to open files: + Confirm remove + Confermare la rimozione + + + Unable to open file(s): %1 - Impossibile aprire i file: -%1 + Impossibile aprire il file: +%1Impossibile aprire i file: +%1 @@ -1948,6 +2400,106 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. Attachments Allegati + + Yes + + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Generare un token TOTP + + + Close + Chiudi + + + General + Generale + + + Username + Nome utente + + + Password + Password + + + Expiration + Scadenza + + + URL + URL + + + Attributes + Attributi + + + Attachments + Allegati + + + Notes + Note + + + Autotype + Completamento automatico + + + Window + Finestra + + + Sequence + Sequenza + + + Searching + Ricerca + + + Search + Cerca + + + Clear + Azzera + + + Never + Mai + + + [PROTECTED] + [PROTETTO] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Abilitato + + + Disabled + Disabilitato + + + Share + + EntryView @@ -1986,6 +2538,11 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. Recycle Bin Cestino + + [empty] + group has no children + [vuoto] + HostInstaller @@ -1998,61 +2555,6 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. Impossibile salvare il file di script nativo di messaggistica. - - HttpPasswordGeneratorWidget - - Length: - Lunghezza: - - - Character Types - Tipi carattere - - - Upper Case Letters - Lettere maiuscole - - - A-Z - A-Z - - - Lower Case Letters - Lettere minuscole - - - a-z - a-z - - - Numbers - Numeri - - - 0-9 - 0-9 - - - Special Characters - Caratteri speciali - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Escludi caratteri simili - - - Ensure that the password contains characters from every group - Verifica che la password contenga caratteri di ogni gruppo - - - Extended ASCII - ASCII esteso - - KMessageWidget @@ -2078,6 +2580,26 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. Wrong key or database file is corrupt. Chiave errata o file del database danneggiato. + + missing database headers + intestazioni del database mancanti + + + Header doesn't match hash + + + + Invalid header id size + Dimensione dell'id dell'intestazione non valida + + + Invalid header field length + Lunghezza del campo di intestazione non valida + + + Invalid header data length + Lunghezza dei dati di intestazione non valida + Kdbx3Writer @@ -2236,10 +2758,6 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. KdbxReader - - Invalid cipher uuid length - Lunghezza non valida dell'UUID del cifrario - Unsupported cipher Cifrario non supportato @@ -2294,6 +2812,18 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa Unsupported KeePass 2 database version. Versione di database KeePass 2 non supportata. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + Impossibile leggere il file di database. + KdbxXmlReader @@ -2365,10 +2895,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa History element with different uuid Elemento della cronistoria con diverso UUID - - Unable to decrypt entry string - Impossibile decrittografare la stringa della voce - Duplicate custom attribute found Trovato attributo personalizzato duplicato @@ -2418,6 +2944,14 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa Translator meant is a binary data inside an entry Impossibile decomprimere il binario + + XML error: +%1 +Line %2, column %3 + Errore XML: +%1 +Riga %2, colonna %3 + KeePass1OpenWidget @@ -2581,55 +3115,143 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa Invalid entry field type Tipo di dato non valido - - - KeePass2 - AES: 256-bit - AES: 256 bit - - - Twofish: 256-bit - Twofish: 256 bit - - - ChaCha20: 256-bit - ChaCha20: 256 bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – raccomandato) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Il file di blocco singola istanza non è valido. Viene eseguita una nuova istanza. + Disabled share + - The lock file could not be created. Single-instance mode disabled. - Il file di blocco non può essere creato. La modalità a istanza singola è disattivata. + Import from + Importa da - Another instance of KeePassXC is already running. - È già in esecuzione un'altra istanza di KeePassXC. + Export to + Esporta verso - Fatal error while testing the cryptographic functions. - Errore fatale durante il test delle funzioni di crittografia. + Synchronize with + Sincronizza con - KeePassXC - Error - KeePassXC - Errore + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Componente chiave + + + Key Component Description + Descrizione del componente chiave + + + Cancel + Annulla + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + Aggiungere %1 + + + Change %1 + Change a key component + Modificare %1 + + + Remove %1 + Remove a key component + Rimuovere %1 + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Sfoglia + + + Generate + Genera + + + Key File + File chiave + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + Formato di file chiave legacy + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + Errore nel caricamento del file chiave '%1' +Messaggio: %2 + + + Key files + File chiave + + + All files + Tutti i file + + + Create Key File... + Crea file chiave... + + + Error creating key file + Errore nella creazione del file chiave + + + Unable to create key file: %1 + Impossibile creare il file chiave: %1 + + + Select a key file + Seleziona un file chiave @@ -2642,10 +3264,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa &Recent databases &Database recenti - - Import - Importazione - &Help &Aiuto @@ -2654,14 +3272,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa E&ntries &Voci - - Copy att&ribute to clipboard - Copia gli att&ributi negli appunti - - - Time-based one-time password - Password monouso a tempo - &Groups &Gruppi @@ -2690,30 +3300,10 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa &Close database &Chiudi database - - &New database - &Nuovo database - - - Merge from KeePassX database - Unisci da database KeePassX - - - &Add new entry - &Aggiungi nuova voce - - - &View/Edit entry - &Visualizza/modifica voce - &Delete entry &Elimina voce - - &Add new group - &Aggiungi nuovo gruppo - &Edit group &Modifica gruppo @@ -2726,14 +3316,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa Sa&ve database as... Sal&va database come... - - Change &master key... - &Modifica chiave principale... - - - &Database settings - Impostazioni &database - Database settings Impostazioni database @@ -2742,10 +3324,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa &Clone entry &Clona voce - - &Find - &Trova - Copy &username Copia &nome utente @@ -2754,10 +3332,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa Copy username to clipboard Copia nome utente negli appunti - - Cop&y password - Copi&a password - Copy password to clipboard Copia password negli appunti @@ -2770,14 +3344,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa Password Generator Genera password - - &Perform Auto-Type - &Esegui completamento automatico - - - &Open URL - &Apri URL - &Lock databases &Blocca database @@ -2810,22 +3376,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa &Export to CSV file... &Esporta in file CSV... - - Import KeePass 1 database... - Importa database di KeePass 1... - - - Import CSV file... - Importa file CSV... - - - Re&pair database... - Ri&para database... - - - Show TOTP - Visualizza TOTP - Set up TOTP... Imposta TOTP... @@ -2846,14 +3396,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa Access error for config file %1 Errore di accesso per il file di configurazione %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Sembra che per l'integrazione con il browser tu stia utilizzando KeePassHTTP. Questa funzionalità è dichiarata obsoleta e verrà rimossa in un prossimo futuro.<br>Si consiglia di utilizzare KeePassXC-Browser piuttosto! Se hai bisogno di aiuto per effettuare la migrazione, visita la nostra <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">guida alla migrazione</a> (avviso %1 di 3).</p> - - - read-only - sola lettura - Settings Impostazioni @@ -2866,26 +3408,6 @@ Si tratta di una migrazione unidirezionale. Non sarà possibile aprire il databa Quit KeePassXC Esci da KeePassXC - - KeePass 2 Database - Database KeePass 2 - - - All files - Tutti i file - - - Open database - Apri database - - - Save repaired database - Salva database riparato - - - Writing the database failed. - Scrittura database non riuscita. - Please touch the button on your YubiKey! Premi il pulsante della YubiKey! @@ -2898,6 +3420,268 @@ This version is not meant for production use. Vi è il rischio concreto di danneggiamenti ai database utilizzati, si consiglia di predisporre per una loro copia di sicurezza. Questa versione non è pensata per essere utilizzata in ambito di produzione. + + &Donate + &Donare + + + Report a &bug + Segnala un &bug + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + AVVISO: la tua versione di Qt può causare dei crash di KeePassXC con una tastiera sullo schermo! +Si consiglia di utilizzare l'AppImage disponibile sulla nostra pagina di download. + + + &Import + &Importare + + + Copy att&ribute... + Copia att&ributo... + + + TOTP... + TOTP... + + + &New database... + &Nuovo database... + + + Create a new database + Creare un nuovo database + + + &Merge from database... + &Unire dal database... + + + Merge from another KDBX database + Unire da un altro database KDBX + + + &New entry + &Nuova voce + + + Add a new entry + Aggiungere una nuova voce + + + &Edit entry + &Modificare voce + + + View or edit entry + Visualizzare o modificare voce + + + &New group + &Nuovo gruppo + + + Add a new group + Aggiungere un nuovo gruppo + + + Change master &key... + Cambiare la &chiave principale... + + + &Database settings... + Impostazioni del &Database... + + + Copy &password + Copia &password + + + Perform &Auto-Type + Eseguire compilazione &automatica + + + Open &URL + Aprire &URL + + + KeePass 1 database... + KeePass 1 database... + + + Import a KeePass 1 database + Importare un database KeePass 1 + + + CSV file... + File CSV... + + + Import a CSV file + Importare un file CSV + + + Show TOTP... + Visualizza TOTP... + + + Show TOTP QR Code... + Mostra codice QR TOTP... + + + Check for Updates... + + + + Share entry + Condividi voce + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Radice + + + + NewDatabaseWizardPage + + WizardPage + Pagina della procedura guidata + + + En&cryption Settings + Impostazioni di &crittografia + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + Impostazioni avanzate + + + Simple Settings + Impostazioni semplici + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Impostazioni di crittografia + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Chiave principale del database + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + Informazioni generali sul database + + + Please fill in the display name and an optional description for your new database: + Si prega di compilare il nome visualizzato e una descrizione facoltativa per il nuovo database: + OpenSSHKey @@ -2939,7 +3723,7 @@ Questa versione non è pensata per essere utilizzata in ambito di produzione. Trying to run KDF without cipher - Tentativo di eseguire KDF senza crittografia + Sto cercando di eseguire KDF senza cifratura Passphrase is required to decrypt this key @@ -2999,125 +3783,30 @@ Questa versione non è pensata per essere utilizzata in ambito di produzione. - OptionDialog + PasswordEditWidget - Dialog - Finestra + Enter password: + Inserisci password: - This is required for accessing your databases from ChromeIPass or PassIFox - Questo è necessario per accedere ai database da ChromeIPass o PassIFox + Confirm password: + Conferma password: - Enable KeePassHTTP server - Atttiva il server KeePassHTTP + Password + Password - General - Generale + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Visualizza una n&otifica quando sono richeste le credenziali + Passwords do not match. + Le password non corrispondono. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Restituisci solo le corrispondenze migliori per un'URL specifica invece di tutte le voci per l'intero dominio. - - - &Return only best matching entries - &Restituisci solo le corrispondenti migliori - - - Re&quest to unlock the database if it is locked - Ri&chiedi di sbloccare il database se bloccato - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Solo le voci con lo stesso schema (http://, https://, ftp: //, ...) vengono restituite. - - - &Match URL schemes - Corrispondenza sche&mi URL - - - Sort matching entries by &username - Ordina voci trovate per nome &utente - - - Sort &matching entries by title - Ordina le voci per &titolo - - - R&emove all shared encryption keys from active database - R&imuovi tutte le chiavi condivise di cifratura dal database attivo - - - Re&move all stored permissions from entries in active database - R&imuovi tutti i permessi presenti nelle voci nel database attivo - - - Password Generator - Genera password - - - Advanced - Avanzate - - - Always allow &access to entries - Permetti sempre di &accedere alle voci - - - Always allow &updating entries - Permetti sempre di &aggiornare le voci - - - Only the selected database has to be connected with a client. - Solo il database selezionato deve essere collegato con un client. - - - Searc&h in all opened databases for matching entries - Cerc&a in tutti i database aperti le voci corrispondenti - - - Automatically creating or updating string fields is not supported. - La creazione o l'aggiornamento automatico dei campi stringa non è supportato. - - - &Return advanced string fields which start with "KPH: " - &Seleziona i campi stringa avanzati che iniziano con "KPH: " - - - HTTP Port: - Porta HTTP: - - - Default port: 19455 - Porta predefinita: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC rimarrà in ascolto su questa porta su 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Avviso:</b> le seguenti opzioni possono essere pericolose. - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP è dichiarato obsoleto e verrà rimosso in un prossimo futuro.<br>Si consiglia di utilizzare KeePassXC-Browser piuttosto! Se hai bisogno di aiuto per effettuare la migrazione, visita la nostra <a href="https://keepassxc.org/docs/keepassxc-browser-migration">guida alla migrazione</a>.</p> - - - Cannot bind to privileged ports - Non è stato possibile collegarsi ad una porta privilegiata - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Non è possibile usare porte sotto la 1024! -Viene usata la porta predefinita 19455. + Generate master password + Generare la password principale @@ -3187,18 +3876,10 @@ Viene usata la porta predefinita 19455. Wordlist: Elenco termini: - - Word Count: - Conteggio parole: - Word Separator: Separatore parole: - - Generate - Genera - Copy Copia @@ -3211,10 +3892,6 @@ Viene usata la porta predefinita 19455. Close Chiudi - - Apply - Applica - Entropy: %1 bit Entropia: %1 bit @@ -3243,6 +3920,171 @@ Viene usata la porta predefinita 19455. Password quality Eccellente + + ExtendedASCII + ASCII esteso + + + Switch to advanced mode + Passare alla modalità avanzata + + + Advanced + Avanzate + + + Upper Case Letters A to F + Lettere maiuscole dalla A alla F + + + A-Z + A-Z + + + Lower Case Letters A to F + Lettere maiuscole dalla A alla F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Parentesi graffe + + + {[( + + + + Punctuation + Punteggiatura + + + .,:; + + + + Quotes + Citazioni + + + " ' + + + + Math + Matematica + + + <*+!?= + + + + Dashes + Trattini + + + \_|-/ + + + + Logograms + Logogrammi + + + #$%&&@^`~ + + + + Switch to simple mode + Passare alla modalità semplice + + + Simple + Semplice + + + Character set to exclude from generated password + Set di caratteri da escludere dalla password generata + + + Do not include: + Non includere: + + + Add non-hex letters to "do not include" list + + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Escludere i caratteri: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Conte&ggio delle parole: + + + Regenerate + Rigenerare + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Elimina + + + Move + + + + Empty + + + + Remove + Rimuovi + + + Skip + + + + Disable + Disabilita + + + Merge + + QObject @@ -3262,34 +4104,18 @@ Viene usata la porta predefinita 19455. Cannot decrypt message Impossibile decrittografare il messaggio - - Timeout or cannot connect to KeePassXC - Tempo scaduto o impossibile collegarsi a KeePassXC - Action cancelled or denied Azione annullata o negata - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Impossibile cifrare il messaggio o chiave pubblica non trovata. La messaggistica nativa è abilitata in KeePassXC? - KeePassXC association failed, try again Associazione KeePassXC fallita, riprova - - Key change was not successful - Il cambiamento chiave non ha avuto successo - Encryption key is not recognized Chiave di crittografia non riconosciuta - - No saved databases found - Nessun database salvato trovato - Incorrect action Azione non corretta @@ -3415,10 +4241,6 @@ Viene usata la porta predefinita 19455. Insert password to unlock %1: Inserisci la password per sbloccare %1: - - Failed to load key file %1 : %2 - Impossibile caricare il file chiave %1: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3503,12 +4325,6 @@ Comandi disponibili: error reading from device errore di lettura dal dispositivo - - file empty ! - - file vuoto! - - malformed string stringa non valida @@ -3545,10 +4361,6 @@ Comandi disponibili: Created Creazione - - Legacy Browser Integration - Integrazione del browser legacy - Browser Integration Integrazione con i browser @@ -3577,10 +4389,6 @@ Comandi disponibili: Word count for the diceware passphrase. Numero di parole per la passphrase con lancio dei dadi - - count - conteggio - Wordlist for the diceware generator. [Default: EFF English] @@ -3592,28 +4400,442 @@ Comandi disponibili: Genera una nuova password casuale. - Length of the generated password. - Lunghezza della password generata. + Invalid value for password length %1. + - Use lowercase characters in the generated password. - Includi lettere minuscole nella password generata. + Could not create entry with path %1. + - Use uppercase characters in the generated password. - Includi lettere maiuscole nella password generata. + Enter password for new entry: + Immettere la password per la nuova voce: - Use numbers in the generated password. - Includi numeri nella password generata. + Writing the database failed %1. + Scrittura del database non riuscita %1. - Use special characters in the generated password. - Includi caratteri speciali nella password generata. + Successfully added entry %1. + Aggiunta con successo la voce %1. - Use extended ASCII in the generated password. - Includi caratteri ASCII estesi nella password generata. + Copy the current TOTP to the clipboard. + Copiare il TOTP corrente negli appunti. + + + Invalid timeout value %1. + + + + Entry %1 not found. + Voce %1 non trovata. + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + Appunti cancellati! + + + Silence password prompt and other secondary outputs. + Silenziare la richiesta di password e altri output secondari. + + + count + CLI parameter + conteggio + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + Immettere la nuova password per la voce: + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + Lunghezza %1 + + + Entropy %1 + Entropia %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Multi-parola extra bit %1 + + + Type: Bruteforce + Tipo: Bruteforce + + + Type: Dictionary + Tipo: dizionario + + + Type: Dict+Leet + + + + Type: User Words + Tipo: parole utente + + + Type: User+Leet + + + + Type: Repeated + Tipo: ripetute + + + Type: Sequence + Tipo: sequenza + + + Type: Spatial + Tipo: spaziale + + + Type: Date + Tipo: data + + + Type: Bruteforce(Rep) + Tipo: Bruteforce(Rep) + + + Type: Dictionary(Rep) + Tipo: dizionario(Rep) + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + Tipo: Sconosciuto %1 + + + Entropy %1 (%2) + Entropia %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + File %1 non esiste. + + + Unable to open file %1. + Impossibile aprire il file %1. + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + Lunghezza della password generata + + + Use lowercase characters + Utilizzare caratteri minuscoli + + + Use uppercase characters + Utilizzare caratteri maiuscoli + + + Use numbers. + Utilizzare i numeri. + + + Use special characters + Utilizzare caratteri speciali + + + Use extended ASCII + Usare ASCII esteso + + + Exclude character set + Escludere il set di caratteri + + + chars + chars + + + Exclude similar looking characters + Escludere i caratteri dall'aspetto simile + + + Include characters from every selected group + Includere i caratteri da ogni gruppo selezionato + + + Recursively list the elements of the group. + Elencare gli elementi del gruppo in modo ricorsivo. + + + Cannot find group %1. + Impossibile trovare il gruppo %1. + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + file vuoto + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256 bit + + + Twofish: 256-bit + Twofish: 256 bit + + + ChaCha20: 256-bit + ChaCha20: 256 bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – raccomandato) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Impostazioni non valide + + + Invalid Key + TOTP + Chiave non valida + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Rimuovi una voce dal database. + + + Path of the entry to remove. + Percorso della voce da rimuovere. + + + Existing single-instance lock file is invalid. Launching new instance. + Il file di blocco singola istanza non è valido. Viene eseguita una nuova istanza. + + + The lock file could not be created. Single-instance mode disabled. + Il file di blocco non può essere creato. La modalità a istanza singola è disattivata. + + + KeePassXC - cross-platform password manager + KeePassXC - gestore di password multipiattaforma + + + filenames of the password databases to open (*.kdbx) + i nomi dei file di database delle password da aprire (*.kdbx) + + + path to a custom config file + percorso ad un file di configurazione personalizzato + + + key file of the database + file chiave del database + + + read password of the database from stdin + leggi la password del database da stdin + + + Parent window handle + Riferimento alla finestra padre + + + Another instance of KeePassXC is already running. + È già in esecuzione un'altra istanza di KeePassXC. + + + Fatal error while testing the cryptographic functions. + Errore fatale durante il test delle funzioni di crittografia. + + + KeePassXC - Error + KeePassXC - Errore + + + Database password: + Password del database: + + + Cannot create new group + @@ -3651,11 +4873,97 @@ Comandi disponibili: - SearchWidget + SSHAgent - Search... - Ricerca... + Agent connection failed. + Connessione con l'agente non riuscita. + + Agent protocol error. + Errore di protocollo dell'agente. + + + No agent running, cannot add identity. + Nessun agente in esecuzione, impossibile aggiungere un'identità. + + + No agent running, cannot remove identity. + Nessun agente in esecuzione, non è possibile rimuovere l'identità. + + + Agent refused this identity. Possible reasons include: + L'agente ha rifiutato questa identità. Motivi possibili sono: + + + The key has already been added. + La chiave è già stata aggiunta. + + + Restricted lifetime is not supported by the agent (check options). + Durata limitata non è supportata dall'agente (controllare le opzioni). + + + A confirmation request is not supported by the agent (check options). + Una richiesta di conferma non è supportata dall'agente (controllare le opzioni). + + + + SearchHelpWidget + + Search Help + Cercare nell'aiuto + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + Modificatori + + + exclude term from results + Escludere il termine dai risultati + + + match term exactly + Corrispondenza esatta dei termini + + + use regex in term + utilizzare regex nel termine + + + Fields + Campi + + + Term Wildcards + + + + match anything + corrispondenza con qualsiasi cosa + + + match one + corrisponde a uno + + + logical OR + OR logico + + + Examples + Esempi + + + + SearchWidget Search Cerca @@ -3664,315 +4972,332 @@ Comandi disponibili: Clear Azzera - - Case Sensitive - Distingui maiuscole - Limit search to selected group Limita la ricerca al gruppo selezionato + + Search Help + Cercare nell'aiuto + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Ricerca (%1)... + + + Case sensitive + Riconoscimento di maiuscole e minuscole + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: nuova richiesta di associazione chiave + Active + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Hai ricevuto una richiesta di associazione per la chiave sovrastante. -Se vuoi permetterle di accedere al database KeePassXC -imposta un nome unico per identificarla ed accettarla. + Allow export + - KeePassXC: Overwrite existing key? - KeePassXC: Vuoi sovrascrivere la chiave esistente? + Allow import + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Una chiave di cifratura condivisa con il nome "%1" esiste già. -Vuoi sovrascriverla? + Own certificate + - KeePassXC: Update Entry - KeePassXC: aggiorna voce + Fingerprint: + - Do you want to update the information in %1 - %2? - Vuoi aggiornare le informazioni in %1 - %2? + Certificate: + - KeePassXC: Database locked! - KeePassXC: database bloccato! + Signer + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Il database attivo è bloccato! -Sblocca il database selezionato o scegline un altro che sia sbloccato. + Key: + Chiave: - KeePassXC: Removed keys from database - KeePassXC: chiavi rimosse dal database + Generate + Genera + + + Import + Importazione + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Rimuovi + + + Path + Percorso + + + Status + + + + Fingerprint + Impronta digitale + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Tutti i file + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + Mai + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Password temporizzata + + + 000000 + 000000 + + + Copy + Copia - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Rimossa con successo %n chiave di cifratura dalle impostazioni di KeePassX/Http.Rimossa(e) con successo %n chiave(i) di cifratura dalle impostazioni di KeePassX/Http. - - - KeePassXC: No keys found - KeePassXC: nessuna chiave trovata - - - No shared encryption-keys found in KeePassHttp Settings. - Nessun chiave condivisa di cifratura è stata trovata nelle impostazioni di KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: impostazioni non disponibili! - - - The active database does not contain an entry of KeePassHttp Settings. - Il database attivo non contiene nessun voce delle impostazioni di KeePassHttp. - - - Removing stored permissions... - Rimozione dei permessi salvati... - - - Abort - Interrompi - - - KeePassXC: Removed permissions - KeePassXC: permessi rimossi - - - Successfully removed permissions from %n entries. - Permessi rimossi con successo da %n voce.Permessi rimossi con successo da %n voci. - - - KeePassXC: No entry with permissions found! - KeePassXC: nessuna voce con permessi trovata! - - - The active database does not contain an entry with permissions. - Il database attivo non contiene una voce con permessi. + Expires in <b>%n</b> second(s) + - SettingsWidget + TotpExportSettingsDialog - Application Settings - Impostazioni applicazione + Copy + Copia - General - Generale + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Security - Sicurezza + There was an error creating the QR code. + - Access error for config file %1 - Errore di accesso per il file di configurazione %1 + Closing in %1 seconds. + - SettingsWidgetGeneral - - Basic Settings - Impostazioni di base - - - Start only a single instance of KeePassXC - Avvia una sola istanza di KeePassXC - - - Remember last databases - Ricorda ultimo database - - - Remember last key files and security dongles - Ricorda gli ultimi file chiave e dongle di sicurezza - - - Load previous databases on startup - Carica i database precedenti all'avvio - - - Automatically save on exit - Salva automaticamente all'uscita - - - Automatically save after every change - Salva automaticamente dopo ogni modifica - - - Automatically reload the database when modified externally - Ricarica automaticamente il database quando ci sono modifiche esterne - - - Minimize when copying to clipboard - Minimizza quando si copia negli appunti - - - Minimize window at application startup - Minimizza la finestra all'avvio della applicazione - - - Use group icon on entry creation - Usa icona del gruppo alla creazione di una voce - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Non contrassegnare il database come modificato per modifiche non riguardanti i dati (ad es. espansione dei gruppi) - - - Hide the Details view - Nascondere la vista dei dettagli - - - Show a system tray icon - Visualizza un'icona nell'area di notifica del sistema - - - Hide window to system tray when minimized - Nascondi la finestra nell'area di notifica del sistema quando viene minimizzata - - - Hide window to system tray instead of app exit - Nascondi la finestra nella barra di sistema invece di chiudere l'applicazione - - - Dark system tray icon - Icona scura per l'area di notifica di sistema - - - Language - Lingua - - - Auto-Type - Completamento automatico - - - Use entry title to match windows for global Auto-Type - Usa il titolo della voce per la corrispondenza con le finestre per il completamento automatico globale - - - Use entry URL to match windows for global Auto-Type - Usa URL della voce per la corrispondenza con le finestre per il completamento automatico globale - - - Always ask before performing Auto-Type - Chiedi sempre prima di effettuare il completamento automatico - - - Global Auto-Type shortcut - Scorciatoia globale per l'auto-completamento - - - Auto-Type delay - Ritardo completamento automatico - - - ms - Milliseconds - ms - - - Startup - Avvio - - - File Management - Gestione dei file - - - Safely save database files (may be incompatible with Dropbox, etc) - Salvataggio sicuro dei file di database (potrebbe essere incompatibile con Dropbox, ecc) - - - Backup database file before saving - Effettua una copia di sicurezza del database prima di salvarlo - - - Entry Management - Gestione dell'elemento - - - General - Generale - - - - SettingsWidgetSecurity - - Timeouts - Timeout - - - Clear clipboard after - Svuota gli appunti dopo - - - sec - Seconds - sec - - - Lock databases after inactivity of - Blocca i database dopo un'inattività di - - - Convenience - Comodità - - - Lock databases when session is locked or lid is closed - Blocca i database quando la sessione è bloccata o il coperchio è chiuso - - - Lock databases after minimizing the window - Blocca il database dopo la minimizzazione della finestra - - - Don't require password repeat when it is visible - Non richiedere di ripetere la password quando è visibile - - - Show passwords in cleartext by default - Visualizza la password in chiaro in maniera predefinita - - - Hide passwords in the preview panel - Nascondere le password nel pannello di anteprima - - - Hide entry notes by default - Nascondere le note della voce per impostazione predefinita - - - Privacy - Riservatezza - - - Use Google as fallback for downloading website icons - Usa Google come alternativa per scaricare le icone dal sito web - - - Re-lock previously locked database after performing Auto-Type - Blocca nuovamente un database precedentemente bloccato dopo aver completato l'Auto-Type - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Imposta TOTP @@ -3994,59 +5319,84 @@ Sblocca il database selezionato o scegline un altro che sia sbloccato.Usa le impostazioni personalizzate - Note: Change these settings only if you know what you are doing. - Nota: modifica queste impostazioni solo se sai quello che stai facendo. + Custom Settings + Impostazioni personalizzate Time step: Passo temporale: - 8 digits - 8 cifre - - - 6 digits - 6 cifre + sec + Seconds + sec Code size: Dimensioni codice: - sec - Seconds - sec + 6 digits + 6 cifre + + + 7 digits + 7 cifre + + + 8 digits + 8 cifre - TotpDialog + UpdateCheckDialog - Timed Password - Password temporizzata + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - Copia + Close + Chiudi - Expires in - Scade tra + Update Error! + - seconds - secondi + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - Sblocca database + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + È disponibile una nuova versione di KeePassXC! + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + Scaricalo da keepassxc.org + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4081,42 +5431,26 @@ Sblocca il database selezionato o scegline un altro che sia sbloccato. - main + YubiKeyEditWidget - Remove an entry from the database. - Rimuovi una voce dal database. + Refresh + Aggiorna - Path of the database. - Percorso del database. + YubiKey Challenge-Response + - Path of the entry to remove. - Percorso della voce da rimuovere. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC - gestore di password multipiattaforma + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - i nomi dei file di database delle password da aprire (*.kdbx) - - - path to a custom config file - percorso ad un file di configurazione personalizzato - - - key file of the database - file chiave del database - - - read password of the database from stdin - leggi la password del database da stdin - - - Parent window handle - Riferimento alla finestra padre + No YubiKey inserted. + Nessun YubiKey inserito. \ No newline at end of file diff --git a/share/translations/keepassx_ja.ts b/share/translations/keepassx_ja.ts index 10a27b2b8..025d7ef28 100644 --- a/share/translations/keepassx_ja.ts +++ b/share/translations/keepassx_ja.ts @@ -37,36 +37,6 @@ Copy to clipboard クリップボードにコピー - - Version %1 - - バージョン %1 - - - - Revision: %1 - リビジョン: %1 - - - Distribution: %1 - 配布形式: %1 - - - Libraries: - ライブラリ: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - オペレーティングシステム: %1 -CPU アーキテクチャー: %2 -カーネル: %3 %4 - - - Enabled extensions: - 有効化された拡張機能: - Project Maintainers: プロジェクトメンテナ: @@ -75,37 +45,6 @@ CPU アーキテクチャー: %2 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. KeePassXC チームはオリジナルの KeePassX を作成した debfx に心から感謝します。 - - Build Type: %1 - - ビルド形式: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP アクセス確認 - - - Remember this decision - この決定を記憶する - - - Allow - 許可 - - - Deny - 拒否 - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 が以下の項目のパスワードへのアクセスを要求しました。 -アクセスを許可するかどうかを選択してください。 - AgentSettingsWidget @@ -113,12 +52,283 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) SSH エージェントを有効にする (再起動が必要) + + Use OpenSSH for Windows instead of Pageant + Pageant の代わりに OpenSSH for Windows を使用する + + + + ApplicationSettingsWidget + + Application Settings + アプリケーション設定 + + + General + 一般 + + + Security + セキュリティ + + + Access error for config file %1 + 設定ファイル %1 へのアクセスエラー + + + Icon only + アイコンのみ + + + Text only + テキストのみ + + + Text beside icon + アイコンの横にテキスト + + + Text under icon + アイコンの下にテキスト + + + Follow style + スタイルに準拠 + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + 基本設定 + + + Startup + 起動 + + + Start only a single instance of KeePassXC + KeePassXC のインスタンスを一つだけ起動する + + + Remember last databases + 最近使用したデータベースを記憶する + + + Remember last key files and security dongles + 最近使用したキーファイルとセキュリティドングルを記憶する + + + Load previous databases on startup + 起動時に前回のデータベースを読み込む + + + Minimize window at application startup + アプリケーション起動時にウィンドウを最小化する + + + File Management + ファイル管理 + + + Safely save database files (may be incompatible with Dropbox, etc) + 安全にデータベースファイルを保存する (Dropbox などのサービスでは動作しない可能性があります) + + + Backup database file before saving + 保存する前にデータベースファイルをバックアップする + + + Automatically save after every change + 変更するたびに自動的に保存する + + + Automatically save on exit + 終了時に自動的に保存する + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + データ以外の変更 (例えばグループの展開) に対して、データベースを修正済みとしてマークしないようにする + + + Automatically reload the database when modified externally + 編集された際に自動でデータベースを再読み込みする + + + Entry Management + エントリー管理 + + + Use group icon on entry creation + エントリー作成時にグループのアイコンを使用する + + + Minimize when copying to clipboard + クリップボードにコピーしたら最小化する + + + Hide the entry preview panel + エントリーのプレビューパネルを非表示にする + + + General + 一般 + + + Hide toolbar (icons) + ツールバー (アイコン) を非表示にする + + + Minimize instead of app exit + アプリケーション終了ではなく最小化する + + + Show a system tray icon + システムトレイアイコンを表示する + + + Dark system tray icon + ダークシステムトレイアイコン + + + Hide window to system tray when minimized + 最小化された際にシステムトレイへ格納する + + + Language + 言語 + + + Auto-Type + 自動入力 + + + Use entry title to match windows for global Auto-Type + グローバル自動入力のウィンドウ照合にエントリーのタイトルを使用する + + + Use entry URL to match windows for global Auto-Type + グローバル自動入力のウィンドウ照合にエントリーの URL を使用する + + + Always ask before performing Auto-Type + 自動入力を行う前に毎回確認する + + + Global Auto-Type shortcut + グローバル自動入力のショートカット + + + Auto-Type typing delay + 自動入力の入力時の遅延 + + + ms + Milliseconds + ミリ秒 + + + Auto-Type start delay + 自動入力開始までの遅延 + + + Check for updates at application startup + アプリケーション起動時に更新を確認する + + + Include pre-releases when checking for updates + 更新の確認にプレリリースを含める + + + Movable toolbar + ツールバーを移動可能にする + + + Button style + ボタンのスタイル + + + + ApplicationSettingsWidgetSecurity + + Timeouts + タイムアウト + + + Clear clipboard after + 次の時間が過ぎたらクリップボードを消去する + + + sec + Seconds + + + + Lock databases after inactivity of + 未操作の時間が続いたらデータベースをロックする + + + min + + + + Forget TouchID after inactivity of + 未操作の時間が続いたら TouchID を消去する + + + Convenience + 利便性 + + + Lock databases when session is locked or lid is closed + セッションがロックされたりラップトップが閉じられた際にデータベースをロックする + + + Forget TouchID when session is locked or lid is closed + セッションがロックされたりラップトップが閉じられた際に TouchID を消去する + + + Lock databases after minimizing the window + ウィンドウを最小化したらデータベースをロックする + + + Re-lock previously locked database after performing Auto-Type + 自動入力実行後に以前ロックされたデータベースを再ロックする + + + Don't require password repeat when it is visible + パスワードが表示されている場合は、パスワードの再入力を必要としないようにする + + + Don't hide passwords when editing them + 編集時にパスワードを非表示にしない + + + Don't use placeholder for empty password fields + 空のパスワードフィールドでプレースホルダーを使用しない + + + Hide passwords in the entry preview panel + エントリーのプレビューパネルのパスワードを非表示にする + + + Hide entry notes by default + エントリーのメモをデフォルトで非表示にする + + + Privacy + プライバシー + + + Use DuckDuckGo as fallback for downloading website icons + ウェブサイトのアイコンをダウンロードするためのフォールバックとして DuckDuckGo を使用する + AutoType Couldn't find an entry that matches the window title: - ウィンドウタイトルにマッチするエントリーが見つかりませんでした: + ウィンドウタイトルに一致するエントリーが見つかりませんでした: Auto-Type - KeePassXC @@ -215,6 +425,27 @@ Please select whether you want to allow access. アクセスを許可するかどうかを選択してください。 + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser エントリーを保存 + + + Ok + OK + + + Cancel + キャンセル + + + You have multiple databases open. +Please select the correct database for saving credentials. + 複数のデータベースを開いています。 +資格情報を保存する正しいデータベースを選択してください。 + + BrowserOptionDialog @@ -256,7 +487,7 @@ Please select whether you want to allow access. Show a &notification when credentials are requested Credentials mean login data requested via browser extension - クレデンシャルを要求された際に通知を表示する(&N) + 資格情報を要求された際に通知を表示する(&N) Re&quest to unlock the database if it is locked @@ -268,33 +499,25 @@ Please select whether you want to allow access. &Match URL scheme (e.g., https://...) - URL スキーム (例えば https://...) のマッチ(&M) + URL スキーム (例えば https://...) の一致(&M) Only returns the best matches for a specific URL instead of all entries for the whole domain. - ドメイン全体にマッチする全てのエントリーの代わりに、特定の URL に最もマッチするエントリーのみが返されます。 + ドメイン全体に一致する全てのエントリーの代わりに、特定の URL に最も一致するエントリーのみが返されます。 &Return only best-matching credentials - 最もマッチするクレデンシャルのみを返す(&R) + 最も一致する資格情報のみを返す(&R) Sort &matching credentials by title Credentials mean login data requested via browser extension - マッチするクレデンシャルをタイトルで並べ替える(&M) + 一致する資格情報をタイトルで並べ替える(&M) Sort matching credentials by &username Credentials mean login data requested via browser extension - マッチするクレデンシャルをユーザー名で並べ替える(&U) - - - &Disconnect all browsers - 全てのブラウザーの接続を断つ(&D) - - - Forget all remembered &permissions - 記憶された全てのアクセス許可を破棄する(&P) + 一致する資格情報をユーザー名で並べ替える(&U) Advanced @@ -303,12 +526,12 @@ Please select whether you want to allow access. Never &ask before accessing credentials Credentials mean login data requested via browser extension - クレデンシャルにアクセスする前に確認しない(&A) + 資格情報にアクセスする前に確認しない(&A) Never ask before &updating credentials Credentials mean login data requested via browser extension - クレデンシャルを更新する前に確認しない(&U) + 資格情報を更新する前に確認しない(&U) Only the selected database has to be connected with a client. @@ -317,7 +540,7 @@ Please select whether you want to allow access. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - 全ての開かれたデータベースからマッチするクレデンシャルを検索する(&H) + 全ての開かれたデータベースから一致する資格情報を検索する(&H) Automatically creating or updating string fields is not supported. @@ -361,21 +584,42 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>警告:</b> 以下は危険なオプションです。 - - Executable Files (*.exe);;All Files (*.*) - 実行ファイル (*.exe);;全てのファイル (*.*) - - - Executable Files (*) - 実行ファイル (*) - Select custom proxy location カスタムプロキシを選択する - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - 申し訳ありませんが、今の所 KeePassXC-Browser は Snap リリースではサポートしていません。 + &Tor Browser + Tor Browser(&T) + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>[警告]</b> keepassxc-proxy アプリケーションが見つかりませんでした。<br />KeePassXC のインストールディレクトリや、詳細設定でカスタムパスを確認してください。<br />ブラウザー統合はプロキシアプリケーションが無いと動作しません。<br />期待されるパス: + + + Executable Files + 実行ファイル + + + All Files + 全てのファイル + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + HTTP ベーシック認証でアクセス許可を確認しない(&B) + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,154 +660,55 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? %1 - %2 の情報を更新しますか? - - KeePassXC: Database locked! - KeePassXC: データベースはロックされています - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - アクティブなデータベースがロックされています。 -選択されたデータベースのロックを解除するか、別のロックされていないデータベースを選択してください。 - - - KeePassXC: Settings not available! - KeePassXC: 設定は利用できません - - - The active database does not contain a settings entry. - アクティブなデータベースに設定のエントリーが含まれていません。 - - - KeePassXC: No keys found - KeePassXC: キーが見つかりません - - - No shared encryption keys found in KeePassXC Settings. - KeePassXC の設定内に共有暗号化キーは見つかりませんでした。 - - - KeePassXC: Removed keys from database - KeePassXC: データベースからキーが削除されました - - - Successfully removed %n encryption key(s) from KeePassXC settings. - KeePassXC の設定から %n 個の暗号化キーが正常に削除されました。 - - - Removing stored permissions… - 保存されたアクセス許可を削除しています… - Abort 中止 - KeePassXC: Removed permissions - KeePassXC: アクセス許可が削除されました + Converting attributes to custom data… + 属性をカスタムデータに変換しています… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: KeePassHTTP の属性を変換しました + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1 個のエントリーから属性を正常に変換しました。 +%2 個のキーをカスタムデータに移行しました。 - Successfully removed permissions from %n entry(s). - %n 個のエントリーからアクセス許可が正常に削除されました。 + Successfully moved %n keys to custom data. + %n 個のキーを正常にカスタムデータに移行しました。 - KeePassXC: No entry with permissions found! - KeePassXC: アクセス許可があるエントリーは見つかりません + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: KeePassHTTP の属性があるエントリーは見つかりません - The active database does not contain an entry with permissions. - アクティブなデータベースにはアクセス許可があるエントリーは含まれていません。 - - - - ChangeMasterKeyWidget - - Password - パスワード + The active database does not contain an entry with KeePassHTTP attributes. + アクティブなデータベースには KeePassHTTP の属性があるエントリーは含まれていません。 - Enter password: - パスワードを入力: + KeePassXC: Legacy browser integration settings detected + KeePassXC: レガシーなブラウザー統合の設定が検出されました - Repeat password: - パスワードを再入力: + KeePassXC: Create a new group + - &Key file - キーファイル(&K) + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - 参照 - - - Create - 作成 - - - Cha&llenge Response - チャレンジレスポンス(&L) - - - Refresh - 再読み込み - - - Key files - キーファイル - - - All files - 全てのファイル - - - Create Key File... - キーファイルを作成... - - - Unable to create Key File : - キーファイルを作成できません: - - - Select a key file - キーファイルを選択 - - - Empty password - 空パスワード - - - Do you really want to use an empty string as password? - 本当にパスワードとして空の文字列を使用しますか? - - - Different passwords supplied. - 異なるパスワードが入力されました。 - - - Failed to set %1 as the Key file: -%2 - %1 をキーファイルとしてセットできませんでした: -%2 - - - Legacy key file format - レガシーなキーファイル形式 - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - レガシーなキーファイル形式は、将来的に、 -サポートされなくなる可能性があります。 - -新しいキーファイルの生成を検討してください。 - - - Changing master key failed: no YubiKey inserted. - マスターキーの変更に失敗しました: YubiKey が挿入されていません。 + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -643,66 +788,99 @@ Please consider generating a new key file. Not present in CSV file CSV ファイルには存在しません - - Empty fieldname - 空のフィールド名 - - - column - - Imported from CSV file CSV ファイルからインポート Original data: - 元データ: - - - Error(s) detected in CSV file ! - CSV ファイルでエラーが検出されました - - - more messages skipped] - 個のメッセージがスキップされました] + 元データ: Error エラー + + Empty fieldname %1 + 空のフィールド名 %1 + + + column %1 + 列 %1 + + + Error(s) detected in CSV file! + CSV ファイルでエラーが検出されました + + + [%n more message(s) skipped] + [%n 個のメッセージがスキップされました] + CSV import: writer has errors: - +%1 CSV のインポート: ライターにエラーがあります: - - - - - CsvImportWizard - - Error - エラー - - - Unable to calculate master key - マスターキーを計算できません +%1 CsvParserModel - - %n byte(s), - %n バイト、 - - - %n row(s), - %n 行、 - %n column(s) %n 列 + + %1, %2, %3 + file info: bytes, rows, columns + %1、%2、%3 + + + %n byte(s) + %n バイト + + + %n row(s) + %n 行 + + + + Database + + Root + Root group name + ルート + + + File %1 does not exist. + ファイル %1 は存在しません。 + + + Unable to open file %1. + ファイル %1 を開けません。 + + + Error while reading the database: %1 + データベースの読み込み中にエラーが発生しました: %1 + + + Could not save, database has no file name. + データベースのファイル名が無いため、保存できませんでした。 + + + File cannot be written as it is opened in read-only mode. + ファイルは読み取り専用モードで開かれているため書き込むことはできません。 + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + データベースのロックを解除 - KeePassXC + DatabaseOpenWidget @@ -730,14 +908,6 @@ Please consider generating a new key file. Challenge Response: チャレンジレスポンス: - - Unable to open the database. - データベースを開けません。 - - - Can't open key file - キーファイルを開けませんでした - Legacy key file format レガシーなキーファイル形式 @@ -747,7 +917,7 @@ Please consider generating a new key file. unsupported in the future. Please consider generating a new key file. - レガシーなキーファイル形式は、将来的に、 + レガシーなキーファイル形式は将来的に、 サポートされなくなる可能性があります。 新しいキーファイルの生成を検討してください。 @@ -768,53 +938,254 @@ Please consider generating a new key file. Select key file キーファイルを選択 - - - DatabaseRepairWidget - Repair database - データベースを修復 + TouchID for quick unlock + TouchID で素早くロックを解除 - Error - エラー + Unable to open the database: +%1 + データベースを開けません: +%1 - Can't open key file - キーファイルを開けませんでした - - - Unable to open the database. - データベースを開けません。 - - - Database opened fine. Nothing to do. - データベースは正常に開かれています。行うべきことはありません。 - - - Success - 成功 - - - The database has been successfully repaired -You can now save it. - データベースは正常に修復されました -データベースの保存を行ってください。 - - - Unable to repair the database. - データベースを修復できません。 + Can't open key file: +%1 + キーファイルを開けません: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + パスワード + + + + DatabaseSettingsDialog + + Advanced Settings + 詳細設定 + General 一般 - Encryption - 暗号化 + Security + セキュリティ + + + Master Key + マスターキー + + + Encryption Settings + 暗号化設定 + + + Browser Integration + ブラウザー統合 + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Browser 設定 + + + &Disconnect all browsers + 全てのブラウザーの接続を断つ(&D) + + + Forg&et all site-specific settings on entries + エントリーのサイト固有の設定を全て消去する(&E) + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + KeePassHTTP の属性を KeePassXC-Browser のカスタムデータに移行する(&C) + + + Stored keys + 保存されたキー + + + Remove + 削除 + + + Delete the selected key? + 選択したキーを削除しますか? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + 本当に選択したキーを削除しますか? +ブラウザープラグインへの接続を妨害する可能性があります。 + + + Key + キー + + + Value + + + + Enable Browser Integration to access these settings. + これらの設定にアクセスするには、ブラウザー統合を有効にしてください。 + + + Disconnect all browsers + 全てのブラウザーの接続を断つ + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + 本当に全てのブラウザーを切断しますか? +ブラウザープラグインへの接続を妨害する可能性があります。 + + + KeePassXC: No keys found + KeePassXC: キーが見つかりません + + + No shared encryption keys found in KeePassXC settings. + KeePassXC の設定内に共有暗号化キーは見つかりませんでした。 + + + KeePassXC: Removed keys from database + KeePassXC: データベースからキーが削除されました + + + Successfully removed %n encryption key(s) from KeePassXC settings. + KeePassXC の設定から %n 個の暗号化キーが正常に削除されました。 + + + Forget all site-specific settings on entries + エントリーのサイト固有の設定を全て消去する + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + 本当にエントリー毎のサイト固有の設定を全て消去しますか? +エントリーへのアクセス権が取り消されます。 + + + Removing stored permissions… + 保存されたアクセス許可を削除しています… + + + Abort + 中止 + + + KeePassXC: Removed permissions + KeePassXC: アクセス許可が削除されました + + + Successfully removed permissions from %n entry(s). + %n 個のエントリーからアクセス許可が正常に削除されました。 + + + KeePassXC: No entry with permissions found! + KeePassXC: アクセス許可があるエントリーは見つかりません + + + The active database does not contain an entry with permissions. + アクティブなデータベースにはアクセス許可があるエントリーは含まれていません。 + + + Move KeePassHTTP attributes to custom data + KeePassHTTP の属性をカスタムデータに移行する + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + 本当にレガシーなブラウザー統合のデータを最新の標準に移行しますか? +これはブラウザープラグインとの互換性維持に必要です。 + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + 暗号化アルゴリズム: + + + AES: 256 Bit (default) + AES: 256 ビット (既定) + + + Twofish: 256 Bit + Twofish: 256 ビット + + + Key Derivation Function: + 鍵導出関数: + + + Transform rounds: + 変換回数: + + + Benchmark 1-second delay + ベンチマーク 1秒遅延 + + + Memory Usage: + メモリ使用量: + + + Parallelism: + 並列処理: + + + Decryption Time: + 復号化時間: + + + ?? s + ?? 秒 + + + Change + 変更 + + + 100 ms + 100 ミリ秒 + + + 5 s + 5 秒 + + + Higher values offer more protection, but opening the database will take longer. + 値が大きいほど保護力が増しますが、データベースを開くのに時間がかかるようになります。 + + + Database format: + データベースの形式: + + + This is only important if you need to use your database with other programs. + これはデータベースを他のプログラムで使用する必要がある場合のみ重要になります。 + + + KDBX 4.0 (recommended) + KDBX 4.0 (推奨) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + 変更なし Number of rounds too high @@ -861,47 +1232,22 @@ If you keep this number, your database may be too easy to crack! MiB Abbreviation for Mebibytes (KDF settings) - MiB + MiB thread(s) Threads for parallel execution (KDF settings) スレッド - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - 暗号化アルゴリズム: + + %1 ms + milliseconds + %1 ミリ秒 - - AES: 256 Bit (default) - AES: 256 ビット (既定) - - - Twofish: 256 Bit - Twofish: 256 ビット - - - Key Derivation Function: - 鍵導出関数: - - - Transform rounds: - 変換回数: - - - Benchmark 1-second delay - ベンチマーク 1秒遅延 - - - Memory Usage: - メモリ使用量: - - - Parallelism: - 並列処理: + + %1 s + seconds + %1 秒 @@ -952,12 +1298,85 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - ルート + Sharing + 共有 + + Breadcrumb + 階層リンク + + + Type + 種類 + + + Path + パス + + + Last Signer + 最終署名者 + + + Certificates + 証明書 + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + 保護を追加... + + + No encryption key added + 追加された暗号化キーはありません + + + You must add at least one encryption key to secure your database! + データベースをセキュアにするには、暗号化キーを少なくとも1つ追加する必要があります。 + + + No password set + パスワードを設定していません + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + [警告] パスワードを設定していません。パスワード無しでのデータベースの使用は極力避けるべきです。 + +パスワード無しで続行してもよろしいですか? + + + Unknown error + 不明なエラーです + + + Failed to change master key + マスターキーの変更に失敗しました + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + データベース名: + + + Description: + 概要: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 データベース @@ -970,30 +1389,10 @@ If you keep this number, your database may be too easy to crack! Open database データベースを開く - - File not found! - ファイルが見つかりません - - - Unable to open the database. - データベースを開けません。 - - - File opened in read only mode. - 読み取り専用でファイルを開きました。 - - - Open CSV file - CSV ファイルを開く - CSV file CSV ファイル - - All files (*) - 全てのファイル (*) - Merge database データベースをマージする @@ -1006,38 +1405,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 データベース - - Close? - 閉じますか? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" は現在編集モードです。 -変更を破棄して閉じてしまってもよろしいですか? - - - Save changes? - 変更を保存しますか? - - - "%1" was modified. -Save changes? - "%1" は編集されています。 -変更を保存しますか? - - - Writing the database failed. - データベースの書き込みに失敗しました。 - - - Passwords - パスワード - - - Save database as - データベースを別名で保存 - Export database to CSV file データベースを CSV ファイルにエクスポートする @@ -1047,40 +1414,41 @@ Save changes? CSV ファイルの書き込みに失敗しました。 - New database + Database creation error + データベース作成エラー + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + 作成されたデータベースはキーや KDF が無いため保存しません。 +これは確実にバグなので、開発者への報告をお願いします。 + + + The database file does not exist or is not accessible. + データベースファイルは存在しないか、アクセスできません。 + + + Select CSV file + CSV ファイルを選択 + + + New Database 新しいデータベース - locked - ロック済み + %1 [New Database] + Database tab name modifier + %1 [新しいデータベース] - Lock database - データベースをロックする + %1 [Locked] + Database tab name modifier + %1 [ロック] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - 現在編集中のため、データベースをロックすることができませんでした。 -キャンセルボタンを押し、変更を完了させるか破棄してください。 - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - このデータベースは変更されました。 -ロックを行う前にデータベースを保存しますか? -保存しない場合には変更点は失われます。 - - - Disable safe saves? - 安全な保存を無効にしますか? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC はデータベースの多段階保存に失敗しました。これは恐らく、保存するファイルをロックしているファイル同期サービスが原因だと思われます。 -安全な保存を無効にして再試行しますか? + %1 [Read-only] + Database tab name modifier + %1 [読み取り専用] @@ -1089,38 +1457,14 @@ Disable safe saves and try again? Searching... 検索中… - - Change master key - マスターキーを変更 - - - Delete entry? - エントリーを削除しますか? - Do you really want to delete the entry "%1" for good? 本当にエントリー "%1" を永久に削除しますか? - - Delete entries? - エントリーを削除しますか? - - - Do you really want to delete %1 entries for good? - 本当に %1 個のエントリーを永久に削除しますか? - - - Move entry to recycle bin? - エントリーをゴミ箱に移動しますか? - Do you really want to move entry "%1" to the recycle bin? 本当にエントリー "%1" をゴミ箱に移動しますか? - - Move entries to recycle bin? - エントリーをゴミ箱に移動しますか? - Do you really want to move %n entry(s) to the recycle bin? 本当に %n 個のエントリーをゴミ箱に移動しますか? @@ -1137,18 +1481,10 @@ Disable safe saves and try again? Remember my choice 選択を記憶する - - Delete group? - グループを削除しますか? - Do you really want to delete the group "%1" for good? 本当にグループ "%1" を永久に削除しますか? - - Unable to calculate master key - マスターキーを計算できません - No current database. 現在のデータベースはありません。 @@ -1183,10 +1519,6 @@ Do you want to merge your changes? データベースファイルが変更され、未保存の変更があります。 変更をマージしますか? - - Could not open the new database file while attempting to autoreload this database. - このデータベースを自動再読み込みしようとした際に、新しいデータベースファイルを開くことができませんでした。 - Empty recycle bin? ゴミ箱を空にしますか? @@ -1195,88 +1527,111 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? ゴミ箱にある全項目を永久に削除してもよろしいですか? - - - DetailsWidget - - Generate TOTP Token - TOTP トークンを生成 + + Do you really want to delete %n entry(s) for good? + 本当に %n 個のエントリーを永久に削除しますか? + + + Delete entry(s)? + エントリーを削除しますか? + + + Move entry(s) to recycle bin? + エントリーをゴミ箱に移動しますか? - Close - 閉じる + File opened in read only mode. + 読み取り専用でファイルを開きました。 - General - 一般 + Lock Database? + データベースをロックしますか? - Password + You are editing an entry. Discard changes and lock anyway? + エントリーを編集中です。変更を破棄してロックしてもよろしいですか? + + + "%1" was modified. +Save changes? + "%1" は更新されています。 +変更を保存しますか? + + + Database was modified. +Save changes? + データベースは更新されています。 +変更を保存しますか? + + + Save changes? + 変更を保存しますか? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + 自動再読み込みしようとした際に、新しいデータベースファイルを開くことができませんでした。 +エラー: %1 + + + Disable safe saves? + 安全な保存を無効にしますか? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC はデータベースの多段階保存に失敗しました。これは恐らく、保存するファイルをロックしているファイル同期サービスが原因だと思われます。 +安全な保存を無効にして再試行しますか? + + + Writing the database failed. +%1 + データベースの書き込みに失敗しました。 +%1 + + + Passwords パスワード - URL - URL + Save database as + ファイル名をつけてデータベースを保存 - Expiration - 有効期限 + KeePass 2 Database + KeePass 2 データベース - Username - ユーザー名 + Replace references to entry? + エントリーの参照を置き換えますか? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + エントリー "%1" には %2 個の参照があります。上書き、スキップ、削除のどれを行いますか? - Autotype - 自動入力 + Delete group + グループを削除 - Searching - 検索 + Move group to recycle bin? + グループをゴミ箱に移動しますか? - Attributes - 属性 + Do you really want to move the group "%1" to the recycle bin? + 本当にグループ "%1" をゴミ箱に移動しますか? - Attachments - 添付ファイル + Successfully merged the database files. + データベースファイルは正常にマージされました。 - Notes - メモ + Database was not modified by merge operation. + データベースはマージ処理で更新されませんでした。 - Window - ウィンドウ - - - Sequence - シーケンス - - - Search - 検索 - - - Clear - 消去 - - - Never - なし - - - [PROTECTED] - [保護] - - - Disabled - 無効 - - - Enabled - 有効 + Shared group... + @@ -1319,15 +1674,15 @@ Do you want to merge your changes? Select private key - 私有鍵を選択 + 秘密鍵を選択 File too large to be a private key - ファイルが大きすぎるため私有鍵にできません + ファイルが大きすぎるため秘密鍵にできません Failed to open private key - 私有鍵を開くのに失敗しました + 秘密鍵を開くのに失敗しました Entry history @@ -1349,37 +1704,21 @@ Do you want to merge your changes? New attribute 新しい属性 - - Confirm Remove - 削除の確認 - Are you sure you want to remove this attribute? この属性を削除してもよろしいですか? - - [PROTECTED] - [保護] - - - Press reveal to view or edit - 表示または編集する場合は開示をクリックしてください - Tomorrow 明日 %n week(s) - %n週間 + %n 週間 %n month(s) - %nヶ月 - - - 1 year - 1年 + %n ヶ月 Apply generated password? @@ -1393,6 +1732,26 @@ Do you want to merge your changes? Entry updated successfully. エントリーは正常に更新されました。 + + Entry has unsaved changes + エントリーに未保存の変更があります + + + New attribute %1 + 新しい属性 %1 + + + [PROTECTED] Press reveal to view or edit + [保護] 表示または編集する場合は開示をクリックしてください + + + %n year(s) + %n 年 + + + Confirm Removal + 削除の確認 + EditEntryWidgetAdvanced @@ -1574,7 +1933,7 @@ Do you want to merge your changes? Private key - 私有鍵 + 秘密鍵 External file @@ -1637,11 +1996,102 @@ Do you want to merge your changes? 親グループ "(%1)" から引き継ぐ + + EditGroupWidgetKeeShare + + Form + フォーム + + + Type: + 種類: + + + Path: + パス: + + + ... + ... + + + Password: + パスワード: + + + Inactive + 非アクティブ + + + Import from path + パスからインポート + + + Export to path + パスにエクスポート + + + Synchronize with path + パスと同期 + + + Your KeePassXC version does not support sharing your container type. Please use %1. + このバージョンの KeePassXC は現在のコンテナ形式の共有をサポートしていません。%1 を使用してください。 + + + Database sharing is disabled + データベースの共有は無効です + + + Database export is disabled + データベースのエクスポートは無効です + + + Database import is disabled + データベースのインポートは無効です + + + KeeShare unsigned container + KeeShare 未署名コンテナ + + + KeeShare signed container + KeeShare 署名コンテナ + + + Select import source + インポートソースを選択 + + + Select export target + エクスポート対象を選択 + + + Select import/export file + インポート/エクスポートファイルを選択 + + + Clear + 消去 + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain Name - グループ名 + 名前 Notes @@ -1694,10 +2144,6 @@ Do you want to merge your changes? Unable to fetch favicon. ファビコンを取得できません。 - - Hint: You can enable Google as a fallback under Tools>Settings>Security - ヒント: ツール > 設定 > セキュリティから Google をフォールバックとして有効にすることができます - Images 画像 @@ -1706,14 +2152,6 @@ Do you want to merge your changes? All files 全てのファイル - - Select Image - 画像を選択 - - - Can't read icon - アイコンを読み取ることができません - Custom icon already exists カスタムアイコンは既に存在します @@ -1723,8 +2161,36 @@ Do you want to merge your changes? 削除の確認 - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - このアイコンは %1 個のエントリーで使用されており、デフォルトのアイコンに置き換えられます。本当に削除してもよろしいですか? + Custom icon successfully downloaded + カスタムアイコンは正常にダウンロードされました + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + ヒント: ツール > 設定 > セキュリティから DuckDuckGo をフォールバックとして有効にすることができます + + + Select Image(s) + 画像を選択 + + + Successfully loaded %1 of %n icon(s) + %1 / %n アイコンが正常に読み込まれました + + + No icons were loaded + アイコンが読み込まれていません + + + %n icon(s) already exist in the database + %n 個のアイコンがデータベース内に既に存在します + + + The following icon(s) failed: + 次のアイコンの読み込みに失敗しました: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + このアイコンは %n 個のエントリーで使用されており、デフォルトのアイコンに置き換えられます。本当に削除してもよろしいですか? @@ -1775,9 +2241,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - 複製 + %1 - Clone + %1 - 複製 @@ -1821,10 +2286,6 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? %n 個の添付ファイルを削除してもよろしいですか? - - Confirm Remove - 削除の確認 - Save attachments 添付ファイルを保存 @@ -1862,10 +2323,14 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + 削除の確認 + + + Unable to open file(s): %1 - ファイルを開けません: -%1 + ファイルを開けません: +%1 @@ -1899,7 +2364,7 @@ This may cause the affected plugins to malfunction. Ref: Reference abbreviation - 参照: + 参照: Group @@ -1949,6 +2414,106 @@ This may cause the affected plugins to malfunction. Attachments 添付ファイル + + Yes + はい + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + TOTP トークンを生成 + + + Close + 閉じる + + + General + 一般 + + + Username + ユーザー名 + + + Password + パスワード + + + Expiration + 有効期限 + + + URL + URL + + + Attributes + 属性 + + + Attachments + 添付ファイル + + + Notes + メモ + + + Autotype + 自動入力 + + + Window + ウィンドウ + + + Sequence + シーケンス + + + Searching + 検索 + + + Search + 検索 + + + Clear + 消去 + + + Never + なし + + + [PROTECTED] + [保護] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + 有効 + + + Disabled + 無効 + + + Share + 共有 + EntryView @@ -1987,6 +2552,11 @@ This may cause the affected plugins to malfunction. Recycle Bin ゴミ箱 + + [empty] + group has no children + [空] + HostInstaller @@ -1999,61 +2569,6 @@ This may cause the affected plugins to malfunction. Native messaging スクリプトファイルを保存できません。 - - HttpPasswordGeneratorWidget - - Length: - 文字数: - - - Character Types - 文字種 - - - Upper Case Letters - 大文字 - - - A-Z - A-Z - - - Lower Case Letters - 小文字 - - - a-z - a-z - - - Numbers - 数字 - - - 0-9 - 0-9 - - - Special Characters - 特殊な文字 - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - よく似た文字を除外する - - - Ensure that the password contains characters from every group - 使用する文字種の文字が必ず含まれるようにする - - - Extended ASCII - 拡張 ASCII - - KMessageWidget @@ -2079,6 +2594,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. キーが間違っているかデータベースファイルが破損しています。 + + missing database headers + データベースのヘッダーがありません + + + Header doesn't match hash + ヘッダーがハッシュと一致しません + + + Invalid header id size + ヘッダー ID サイズが不正です + + + Invalid header field length + ヘッダーフィールド長が不正です + + + Invalid header data length + ヘッダーデータ長が不正です + Kdbx3Writer @@ -2237,10 +2772,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - 暗号の UUID の長さが不正です - Unsupported cipher サポートしていない暗号です @@ -2295,6 +2826,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. サポートしていないバージョンの KeePass 2 データベースです。 + + Invalid cipher uuid length: %1 (length=%2) + 暗号の UUID の長さが不正です: %1 (長さ = %2) + + + Unable to parse UUID: %1 + UUID を解析できません: %1 + + + Failed to read database file. + データベースファイルの読み取りに失敗しました。 + KdbxXmlReader @@ -2366,10 +2909,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid 履歴要素の UUID が異なります - - Unable to decrypt entry string - エントリーの文字列を復号できません - Duplicate custom attribute found 重複したカスタム属性が見つかりました @@ -2419,6 +2958,14 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry バイナリーを展開できません + + XML error: +%1 +Line %2, column %3 + XML エラー: +%1 +%2 行、%3 列 + KeePass1OpenWidget @@ -2582,55 +3129,146 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type エントリーのフィールドタイプが不正です - - - KeePass2 - AES: 256-bit - AES: 256 ビット - - - Twofish: 256-bit - Twofish: 256 ビット - - - ChaCha20: 256-bit - ChaCha20: 256 ビット - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – 推奨) + unable to seek to content position + 内容の位置にシークできません - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - 既存のシングルインスタンスロックファイルは無効です。新しいインスタンスを起動します。 + Disabled share + 共有無効 - The lock file could not be created. Single-instance mode disabled. - ロックファイルを作成できませんでした。シングルインスタンスモードは無効です。 + Import from + インポート - Another instance of KeePassXC is already running. - KeePassXC の別インスタンスが既に起動しています。 + Export to + エクスポート - Fatal error while testing the cryptographic functions. - 暗号化機能のテスト中に致命的なエラーが発生しました。 + Synchronize with + 同期 - KeePassXC - Error - KeePassXC - エラー + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + キーコンポーネント + + + Key Component Description + キーコンポーネントの概要 + + + Cancel + キャンセル + + + Key Component set, click to change or remove + キーコンポーネントの設定 (変更か削除をクリックしてください) + + + Add %1 + Add a key component + %1 を追加 + + + Change %1 + Change a key component + %1 を変更 + + + Remove %1 + Remove a key component + %1 を削除 + + + %1 set, click to change or remove + Change or remove a key component + %1 の設定 (変更か削除をクリックしてください) + + + + KeyFileEditWidget + + Browse + 参照 + + + Generate + 生成 + + + Key File + キーファイル + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>セキュリティ対策でランダムバイトを含むキーファイルを追加できます。</p><p>キーファイルは誰にも知られず、無くさないようにしてください。そうしないとロックアウトされることになりかねません。</p> + + + Legacy key file format + レガシーなキーファイル形式 + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + レガシーなキーファイル形式は将来的に、 +サポートされなくなる可能性があります。 + +マスターキーの設定で新しいキーファイルを生成してください。 + + + Error loading the key file '%1' +Message: %2 + キーファイル '%1' の読み込み時にエラーが発生しました +メッセージ: %2 + + + Key files + キーファイル + + + All files + 全てのファイル + + + Create Key File... + キーファイルを作成... + + + Error creating key file + キーファイル作成時にエラーが発生しました + + + Unable to create key file: %1 + キーファイルを作成できません: %1 + + + Select a key file + キーファイルを選択 @@ -2643,10 +3281,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases 最近使用したデータベース(&R) - - Import - インポート - &Help ヘルプ(&H) @@ -2655,14 +3289,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries エントリー(&N) - - Copy att&ribute to clipboard - クリップボードにコピー(&R) - - - Time-based one-time password - タイムベースワンタイムパスワード - &Groups グループ(&G) @@ -2691,30 +3317,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database データベースを閉じる(&C) - - &New database - 新しいデータベース(&N) - - - Merge from KeePassX database - KeePassX データベースからマージ - - - &Add new entry - 新しいエントリーを追加(&A) - - - &View/Edit entry - エントリーを表示/編集(&V) - &Delete entry エントリーを削除(&D) - - &Add new group - 新しいグループを追加(&A) - &Edit group グループを編集(&E) @@ -2727,14 +3333,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... データベースを別名で保存(&V)... - - Change &master key... - マスターキーを変更(&M)... - - - &Database settings - データベースの設定(&D) - Database settings データベースの設定 @@ -2743,25 +3341,17 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry エントリーを複製(&C) - - &Find - 検索(&F) - Copy &username ユーザー名をコピー(&U) Copy username to clipboard - ユーザー名をコピー - - - Cop&y password - パスワードをコピー(&Y) + ユーザー名をクリップボードにコピー Copy password to clipboard - パスワードをコピー + パスワードをクリップボードにコピー &Settings @@ -2771,14 +3361,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator パスワード生成 - - &Perform Auto-Type - 自動入力を実行(&P) - - - &Open URL - URL を開く(&O) - &Lock databases データベースをロック(&L) @@ -2789,7 +3371,7 @@ This is a one-way migration. You won't be able to open the imported databas Copy title to clipboard - タイトルをコピー + タイトルをクリップボードにコピー &URL @@ -2797,7 +3379,7 @@ This is a one-way migration. You won't be able to open the imported databas Copy URL to clipboard - URL をコピー + URL をクリップボードにコピー &Notes @@ -2805,28 +3387,12 @@ This is a one-way migration. You won't be able to open the imported databas Copy notes to clipboard - メモをコピー + メモをクリップボードにコピー &Export to CSV file... CSV ファイルへエクスポート(&E)... - - Import KeePass 1 database... - KeePass 1 データベースをインポート... - - - Import CSV file... - CSV ファイルをインポート... - - - Re&pair database... - データベースを修復(&P)... - - - Show TOTP - TOTP を表示 - Set up TOTP... TOTP の設定... @@ -2847,14 +3413,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 設定ファイル %1 へのアクセスエラー - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>ブラウザー統合に KeePassHTTP を使用しています。この機能は将来的に廃止され、削除されます。<br>代わりに KeePassXC-Browser を使用してください。移行に関するヘルプは <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">移行ガイド</a> を参照してください (%1 / 3 回目の警告)。</p> - - - read-only - 読み取り専用 - Settings 設定 @@ -2867,26 +3425,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC KeePassXC を終了 - - KeePass 2 Database - KeePass 2 データベース - - - All files - 全てのファイル - - - Open database - データベースを開く - - - Save repaired database - 修復されたデータベースを保存する - - - Writing the database failed. - データベースの書き込みに失敗しました。 - Please touch the button on your YubiKey! YubiKey のボタンにタッチしてください @@ -2899,6 +3437,269 @@ This version is not meant for production use. データベース破損の危険性が高いため、バックアップを維持します。 このバージョンは正式版ではありません。 + + &Donate + 寄付(&D) + + + Report a &bug + バグを報告(&B) + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + 警告: オンスクリーンキーボード使用時に、Qt のバージョンが原因で KeePassXC がクラッシュする可能性があります。 +KeePassXC の配布ページから AppImage をダウンロードして使用することをお勧めします。 + + + &Import + インポート(&I) + + + Copy att&ribute... + 属性をコピー(&R)... + + + TOTP... + TOTP... + + + &New database... + 新しいデータベース(&N)... + + + Create a new database + 新しいデータベースを作成 + + + &Merge from database... + データベースからマージ(&M)... + + + Merge from another KDBX database + 別の KDBX データベースからマージ + + + &New entry + 新しいエントリー(&N) + + + Add a new entry + 新しいエントリーを追加 + + + &Edit entry + エントリーを編集(&E) + + + View or edit entry + エントリーを編集または表示 + + + &New group + 新しいグループ(&N) + + + Add a new group + 新しいグループを追加 + + + Change master &key... + マスターキーを変更(&K)... + + + &Database settings... + データベースの設定(&D)... + + + Copy &password + パスワードをコピー(&P) + + + Perform &Auto-Type + 自動入力を実行(&A) + + + Open &URL + URL を開く(&U) + + + KeePass 1 database... + KeePass 1 データベース... + + + Import a KeePass 1 database + KeePass 1 データベースをインポート + + + CSV file... + CSV ファイル... + + + Import a CSV file + CSV ファイルをインポート + + + Show TOTP... + TOTP を表示... + + + Show TOTP QR Code... + TOTP QR コードを表示... + + + Check for Updates... + 更新を確認... + + + Share entry + エントリーを共有 + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + メモ: KeePassXC のプレリリース版を使用しています。 +複数のバグや小さな問題点が残っている可能性があるため、このバージョンは実用的ではありません。 + + + Check for updates on startup? + 起動時に更新を確認しますか? + + + Would you like KeePassXC to check for updates on startup? + KeePassXC 起動時に更新を確認しますか? + + + You can always check for updates manually from the application menu. + 更新の確認はいつでもメニューから手動で実行できます。 + + + + Merger + + Creating missing %1 [%2] + 存在しない %1 [%2] を作成 + + + Relocating %1 [%2] + %1 [%2] を移転 + + + Overwriting %1 [%2] + %1 [%2] を上書き + + + older entry merged from database "%1" + データベース "%1" からマージされた古いエントリー + + + Adding backup for older target %1 [%2] + 古いターゲット %1 [%2] のバックアップを追加 + + + Adding backup for older source %1 [%2] + 古いソース %1 [%2] のバックアップを追加 + + + Reapplying older target entry on top of newer source %1 [%2] + 古いターゲットのエントリーを新しいソース %1 [%2] のトップに再適用 + + + Reapplying older source entry on top of newer target %1 [%2] + 古いソースのエントリーを新しいターゲット %1 [%2] のトップに再適用 + + + Synchronizing from newer source %1 [%2] + 新しいソース %1 [%2] から同期 + + + Synchronizing from older source %1 [%2] + 古いソース %1 [%2] から同期 + + + Deleting child %1 [%2] + 子要素 %1 [%2] を削除 + + + Deleting orphan %1 [%2] + 親要素が無い %1 [%2] を削除 + + + Changed deleted objects + 削除されたオブジェクトを変更 + + + Adding missing icon %1 + 存在しないアイコン %1 を追加 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + 新しい KeePassXC データベースを作成... + + + Root + Root group + ルート + + + + NewDatabaseWizardPage + + WizardPage + ウィザードページ + + + En&cryption Settings + 暗号化の設定(&C) + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。 + + + Advanced Settings + 詳細設定 + + + Simple Settings + 簡易設定 + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + 暗号化の設定 + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。 + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + データベースのマスターキー + + + A master key known only to you protects your database. + あなただけが知るマスターキーがデータベースを保護します。 + + + + NewDatabaseWizardPageMetaData + + General Database Information + データベースの全般情報 + + + Please fill in the display name and an optional description for your new database: + 新しいデータベースの名前と、必要な場合は説明文を入力してください: + OpenSSHKey @@ -2932,11 +3733,11 @@ This version is not meant for production use. Corrupted key file, reading private key failed - キーファイルが破損しているため私有鍵の読み取りに失敗しました + キーファイルが破損しているため秘密鍵の読み取りに失敗しました No private key payload to decrypt - 復号する私有鍵のペイロードがありません + 復号する秘密鍵のデータがありません Trying to run KDF without cipher @@ -2960,7 +3761,7 @@ This version is not meant for production use. Unexpected EOF while reading private key - 私有鍵の読み取り中に予期しない EOF がありました + 秘密鍵の読み取り中に予期しない EOF がありました Can't write public key as it is empty @@ -2972,11 +3773,11 @@ This version is not meant for production use. Can't write private key as it is empty - 私有鍵が空のため書き込めません + 秘密鍵が空欄のままでは保存できません Unexpected EOF when writing private key - 私有鍵の書き込み中に予期しない EOF がありました + 秘密鍵の書き込み中に予期しない EOF がありました Unsupported key type: %1 @@ -3000,125 +3801,30 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - ダイアログ + Enter password: + パスワードを入力: - This is required for accessing your databases from ChromeIPass or PassIFox - このオプションは ChromeIPass や PassIFox からデータベースにアクセスするために必要です + Confirm password: + パスワードを確認: - Enable KeePassHTTP server - KeePassHTTP サーバーを有効にする + Password + パスワード - General - 一般 + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>パスワードはデータベースを保護するための基本的手段です。</p><p>長くて複雑なパスワードが良いパスワードとされています。KeePassXC に生成させることも可能です。</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - クレデンシャルを要求された際に通知を表示する(&O) + Passwords do not match. + パスワードが一致しません。 - Only returns the best matches for a specific URL instead of all entries for the whole domain. - ドメイン全体にマッチする全てのエントリーの代わりに、特定の URL に最もマッチするエントリーのみが返されます。 - - - &Return only best matching entries - 最もマッチするエントリーのみを返す(&R) - - - Re&quest to unlock the database if it is locked - データベースがロックされている場合はロックの解除を要求する(&Q) - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - 同じスキーム (http://, https://, ftp://, ...) を持つエントリーのみが返されます。 - - - &Match URL schemes - URL スキームのマッチ(&M) - - - Sort matching entries by &username - マッチするエントリーをユーザー名で並べ替える(&U) - - - Sort &matching entries by title - マッチするエントリーをタイトルで並べ替える(&M) - - - R&emove all shared encryption keys from active database - アクティブなデータベースから共有暗号化キーを全て削除する(&E) - - - Re&move all stored permissions from entries in active database - アクティブなデータベースのエントリーに保存されたアクセス許可を全て削除する(&M) - - - Password Generator - パスワード生成 - - - Advanced - 詳細設定 - - - Always allow &access to entries - 常にエントリーへのアクセスを許可する(&A) - - - Always allow &updating entries - 常にエントリーの更新を許可する(&U) - - - Only the selected database has to be connected with a client. - 選択されたデータベースのみがクライアントと接続する必要があります。 - - - Searc&h in all opened databases for matching entries - 全ての開かれたデータベースからマッチするエントリーを検索する(&H) - - - Automatically creating or updating string fields is not supported. - 文字列フィールドの自動作成や自動更新はサポートされていません。 - - - &Return advanced string fields which start with "KPH: " - "KPH: " から始まる拡張された文字列フィールドを返す(&R) - - - HTTP Port: - HTTP ポート: - - - Default port: 19455 - デフォルトのポート: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC は 127.0.0.1 のこのポートをリッスンします - - - <b>Warning:</b> The following options can be dangerous! - <b>警告:</b> 以下は危険なオプションです。 - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP は将来的に廃止され、削除されます。<br>代わりに KeePassXC-Browser を使用してください。移行に関するヘルプは <a href="https://keepassxc.org/docs/keepassxc-browser-migration">移行ガイド</a> を参照してください。</p> - - - Cannot bind to privileged ports - 特権ポートにバインドできません - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - 1024 以下の特権ポートにバインドできません。 -デフォルトのポート 19455 を使用します。 + Generate master password + マスターパスワードを生成 @@ -3162,7 +3868,7 @@ Using default port 19455. Special Characters - 特殊な文字 + 特殊文字 Extended ASCII @@ -3188,18 +3894,10 @@ Using default port 19455. Wordlist: 単語リスト: - - Word Count: - 単語数: - Word Separator: 単語の区切り文字: - - Generate - 生成 - Copy コピー @@ -3212,10 +3910,6 @@ Using default port 19455. Close 閉じる - - Apply - 適用 - Entropy: %1 bit エントロピー: %1 ビット @@ -3244,6 +3938,171 @@ Using default port 19455. Password quality すばらしい + + ExtendedASCII + 拡張 ASCII + + + Switch to advanced mode + 詳細モードに切り替え + + + Advanced + 詳細設定 + + + Upper Case Letters A to F + 大文字の A ~ F + + + A-Z + A-Z + + + Lower Case Letters A to F + 小文字の A ~ F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + 括弧 + + + {[( + {[( + + + Punctuation + 句読点 + + + .,:; + .,:; + + + Quotes + 引用符 + + + " ' + " ' + + + Math + 数学記号 + + + <*+!?= + <*+!?= + + + Dashes + ダッシュ + + + \_|-/ + \_|-/ + + + Logograms + 表語文字 + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + 簡易モードに切り替え + + + Simple + 簡易設定 + + + Character set to exclude from generated password + 生成されたパスワードから文字集合を除外する + + + Do not include: + 次を除外: + + + Add non-hex letters to "do not include" list + "除外" リストに非16進数の文字列を追加 + + + Hex + 16進数 + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + 除外される文字: "0"、"1"、"l"、"I"、"O"、"|"、"﹒" + + + Word Co&unt: + 単語数(&U): + + + Regenerate + 再生成 + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + 選択 + + + + QMessageBox + + Overwrite + 上書き + + + Delete + 削除 + + + Move + 移動 + + + Empty + 空にする + + + Remove + 削除 + + + Skip + スキップ + + + Disable + 無効 + + + Merge + マージ + QObject @@ -3263,34 +4122,18 @@ Using default port 19455. Cannot decrypt message メッセージを復号できません - - Timeout or cannot connect to KeePassXC - KeePassXC に接続できないかタイムアウトしました - Action cancelled or denied アクションがキャンセルまたは拒否されました - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - メッセージを暗号化できないか、公開鍵が見つかりません。Native Messaging は KeePassXC で有効化されていますか? - KeePassXC association failed, try again KeePassXC のアソシエーションに失敗しました。再試行してください。 - - Key change was not successful - キーの変更は成功しませんでした - Encryption key is not recognized 暗号化キーが認識されません - - No saved databases found - 保存されたデータベースが見つかりません - Incorrect action 不正確なアクションです @@ -3416,16 +4259,12 @@ Using default port 19455. Insert password to unlock %1: %1 のロックを解除するパスワードを入力してください: - - Failed to load key file %1 : %2 - キーファイル %1 の読み込みに失敗しました: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. Please consider generating a new key file. - 警告: レガシーなキーファイル形式は、将来的に、 + 警告: レガシーなキーファイル形式は将来的に、 サポートされなくなる可能性があります。 新しいキーファイルの生成を検討してください。 @@ -3474,7 +4313,7 @@ Available commands: Use the same credentials for both database files. - 両方のデータベースファイルに対して同一のクレデンシャルを使用する。 + 両方のデータベースファイルに対して同一の資格情報を使用する。 Key file of the database to merge from. @@ -3504,12 +4343,6 @@ Available commands: error reading from device デバイス読み込みエラー - - file empty ! - - 空ファイルです - - malformed string 不正な形式の文字列 @@ -3546,10 +4379,6 @@ Available commands: Created 作成日時 - - Legacy Browser Integration - レガシーなブラウザー統合 - Browser Integration ブラウザー統合 @@ -3578,10 +4407,6 @@ Available commands: Word count for the diceware passphrase. ダイスウェアパスフレーズの単語数。 - - count - カウント - Wordlist for the diceware generator. [Default: EFF English] @@ -3593,28 +4418,445 @@ Available commands: 新しいランダムなパスワードを生成する。 - Length of the generated password. - 生成されるパスワードの長さ。 + Invalid value for password length %1. + %1 はパスワードの長さとして適正な値ではありません。 - Use lowercase characters in the generated password. - 小文字を使用したパスワードを生成する。 + Could not create entry with path %1. + パス %1 のエントリーを作成できませんでした。 - Use uppercase characters in the generated password. - 大文字を使用したパスワードを生成する。 + Enter password for new entry: + 新しいエントリーのパスワードを入力してください: - Use numbers in the generated password. - 数字を使用したパスワードを生成する。 + Writing the database failed %1. + データベースへの書き込みはエラー "%1" で失敗しました。 - Use special characters in the generated password. - 特殊な文字を使用したパスワードを生成する。 + Successfully added entry %1. + エントリー %1 は正常に追加されました。 - Use extended ASCII in the generated password. - 拡張 ASCII を使用したパスワードを生成する。 + Copy the current TOTP to the clipboard. + 現在の TOTP をクリップボードにコピーする。 + + + Invalid timeout value %1. + タイムアウトの値 %1 は不正です。 + + + Entry %1 not found. + エントリー %1 が見つかりません。 + + + Entry with path %1 has no TOTP set up. + パス %1 のエントリーには TOTP の設定がありません。 + + + Entry's current TOTP copied to the clipboard! + エントリーの現在の TOTP がクリップボードにコピーされました。 + + + Entry's password copied to the clipboard! + エントリーのパスワードがクリップボードにコピーされました。 + + + Clearing the clipboard in %1 second(s)... + %1 秒後にクリップボードを消去します... + + + Clipboard cleared! + クリップボードは消去されました。 + + + Silence password prompt and other secondary outputs. + パスワードプロンプトやその他の様々な出力を抑制する。 + + + count + CLI parameter + カウント + + + Invalid value for password length: %1 + パスワードの長さの値が不正です: %1 + + + Could not find entry with path %1. + パス %1 のエントリーを見つけられませんでした。 + + + Not changing any field for entry %1. + エントリー %1 のフィールドは変更されていません。 + + + Enter new password for entry: + エントリーの新しいパスワードを入力してください: + + + Writing the database failed: %1 + データベースへの書き込みは失敗しました: %1 + + + Successfully edited entry %1. + エントリー %1 は正常に編集されました。 + + + Length %1 + 長さ %1 + + + Entropy %1 + エントロピー %1 + + + Log10 %1 + log10 %1 + + + Multi-word extra bits %1 + マルチワードエクストラビット %1 + + + Type: Bruteforce + 種類: ブルートフォース + + + Type: Dictionary + 種類: 辞書 + + + Type: Dict+Leet + 種類: 辞書 + Leet + + + Type: User Words + 種類: ユーザー辞書 + + + Type: User+Leet + 種類: ユーザー辞書 + Leet + + + Type: Repeated + 種類: リピート + + + Type: Sequence + 種類: 順序 + + + Type: Spatial + 種類: 空間 + + + Type: Date + 種類: 日付 + + + Type: Bruteforce(Rep) + 種類: ブルートフォース (反復) + + + Type: Dictionary(Rep) + 種類: 辞書 (反復) + + + Type: Dict+Leet(Rep) + 種類: 辞書 + Leet (反復) + + + Type: User Words(Rep) + 種類: ユーザー辞書 (反復) + + + Type: User+Leet(Rep) + 種類: ユーザー辞書 + Leet (反復) + + + Type: Repeated(Rep) + 種類: リピート (反復) + + + Type: Sequence(Rep) + 種類: 順序 (反復) + + + Type: Spatial(Rep) + 種類: 空間 (反復) + + + Type: Date(Rep) + 種類: 日付 (反復) + + + Type: Unknown%1 + 種類: 不明 (%1) + + + Entropy %1 (%2) + エントロピー %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** パスワードの長さ (%1) != 各長さの合計値 (%2) *** + + + Failed to load key file %1: %2 + キーファイル %1 の読み込みに失敗しました: %2 + + + File %1 does not exist. + ファイル %1 は存在しません。 + + + Unable to open file %1. + ファイル %1 を開けません。 + + + Error while reading the database: +%1 + データベースの読み込み中にエラーが発生しました: +%1 + + + Error while parsing the database: +%1 + データベースの解析中にエラーが発生しました: +%1 + + + Length of the generated password + 生成されるパスワードの長さ + + + Use lowercase characters + 小文字を使用する + + + Use uppercase characters + 大文字を使用する + + + Use numbers. + 数字を使用する。 + + + Use special characters + 特殊文字を使用する + + + Use extended ASCII + 拡張 ASCII を使用する + + + Exclude character set + 文字集合を除外する + + + chars + 文字 + + + Exclude similar looking characters + よく似た文字を除外する + + + Include characters from every selected group + 選択された各グループの文字を含む + + + Recursively list the elements of the group. + グループの要素を再帰的にリスト化する。 + + + Cannot find group %1. + グループ %1 が見つかりません。 + + + Error reading merge file: +%1 + マージするファイルの読み込み時にエラーが発生しました: +%1 + + + Unable to save database to file : %1 + データベースをファイルに保存できません: %1 + + + Unable to save database to file: %1 + データベースをファイルに保存できません: %1 + + + Successfully recycled entry %1. + エントリー %1 は正常にリサイクルされました。 + + + Successfully deleted entry %1. + エントリー %1 は正常に削除されました。 + + + Show the entry's current TOTP. + エントリーの現在の TOTP を表示する。 + + + ERROR: unknown attribute %1. + エラー: %1 は不明な属性です。 + + + No program defined for clipboard manipulation + クリップボード操作用プログラムとして定義されていません + + + Unable to start program %1 + プログラム %1 を起動できません + + + file empty + 空ファイル + + + %1: (row, col) %2,%3 + %1: (行, 列) %2,%3 + + + AES: 256-bit + AES: 256 ビット + + + Twofish: 256-bit + Twofish: 256 ビット + + + ChaCha20: 256-bit + ChaCha20: 256 ビット + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – 推奨) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + 設定が不正です + + + Invalid Key + TOTP + キーが不正です + + + Message encryption failed. + メッセージの暗号化に失敗しました。 + + + No groups found + グループが見つかりません + + + Create a new database. + 新しいデータベースを作成する。 + + + File %1 already exists. + ファイル %1 は既に存在します。 + + + Loading the key file failed + キーファイルの読み込みに失敗しました + + + No key is set. Aborting database creation. + キーが設定されていません。データベースの作成を中止します。 + + + Failed to save the database: %1. + データベースの保存に失敗しました: %1. + + + Successfully created new database. + 新しいデータベースは正常に作成されました。 + + + Insert password to encrypt database (Press enter to leave blank): + データベースを暗号化するパスワードを入力してください (空のままにする場合は Enter を押してください): + + + Creating KeyFile %1 failed: %2 + キーファイル %1 の作成に失敗しました: %2 + + + Loading KeyFile %1 failed: %2 + キーファイル %1 の読み込みに失敗しました: %2 + + + Remove an entry from the database. + データベースからエントリーを削除する。 + + + Path of the entry to remove. + 削除するエントリーのパス。 + + + Existing single-instance lock file is invalid. Launching new instance. + 既存のシングルインスタンスロックファイルは無効です。新しいインスタンスを起動します。 + + + The lock file could not be created. Single-instance mode disabled. + ロックファイルを作成できませんでした。シングルインスタンスモードは無効です。 + + + KeePassXC - cross-platform password manager + KeePassXC - クロスプラットフォームのパスワードマネージャー + + + filenames of the password databases to open (*.kdbx) + 開くパスワードデータベースのファイル名 (*.kdbx) + + + path to a custom config file + カスタム設定ファイルへのパス + + + key file of the database + データベースのキーファイル + + + read password of the database from stdin + 標準入力からデータベースのパスワードを読み込む + + + Parent window handle + 親ウィンドウハンドル + + + Another instance of KeePassXC is already running. + KeePassXC の別インスタンスが既に起動しています。 + + + Fatal error while testing the cryptographic functions. + 暗号化機能のテスト中に致命的なエラーが発生しました。 + + + KeePassXC - Error + KeePassXC - エラー + + + Database password: + データベースのパスワード: + + + Cannot create new group + @@ -3625,15 +4867,15 @@ Available commands: Error writing to underlying device: - 基本デバイスへの書き込み時にエラーが発生しました: + 基本デバイスへの書き込み時にエラーが発生しました: Error opening underlying device: - 基本デバイスを開く時にエラーが発生しました: + 基本デバイスを開く際にエラーが発生しました: Error reading data from underlying device: - 基本デバイスから読み込み時にエラーが発生しました: + 基本デバイスから読み込み時にエラーが発生しました: Internal zlib error when decompressing: @@ -3652,11 +4894,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - 検索... + Agent connection failed. + エージェントの接続に失敗しました。 + + Agent protocol error. + エージェントのプロトコルエラーです。 + + + No agent running, cannot add identity. + エージェントが実行されていないため、Identity を追加できません。 + + + No agent running, cannot remove identity. + エージェントが実行されていないため、Identity を削除できません。 + + + Agent refused this identity. Possible reasons include: + エージェントがこの Identity を拒否しました。次の理由が考えられます: + + + The key has already been added. + キーが既に追加されている。 + + + Restricted lifetime is not supported by the agent (check options). + エージェントが有効期間の制限をサポートしていない (オプションを確認)。 + + + A confirmation request is not supported by the agent (check options). + エージェントが確認要求をサポートしていない (オプションを確認)。 + + + + SearchHelpWidget + + Search Help + 検索のヘルプ + + + Search terms are as follows: [modifiers][field:]["]term["] + 検索語は次の通りです: [修飾子][フィールド:]["]用語["] + + + Every search term must match (ie, logical AND) + 用語は全て一致する必要があります (つまり論理積) + + + Modifiers + 修飾子 + + + exclude term from results + 結果から用語を除外 + + + match term exactly + 用語が完全に一致 + + + use regex in term + 用語に正規表現を使用 + + + Fields + フィールド + + + Term Wildcards + 用語のワイルドカード + + + match anything + 何れかが一致 + + + match one + 一文字一致 + + + logical OR + 論理和 + + + Examples + + + + + SearchWidget Search 検索 @@ -3665,315 +4993,332 @@ Available commands: Clear 消去 - - Case Sensitive - 大文字と小文字の区別 - Limit search to selected group 選択したグループに検索対象を制限 + + Search Help + 検索のヘルプ + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + 検索 (%1)... + + + Case sensitive + 大文字と小文字を区別 + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: 新しいキーのアソシエーション要求 + Active + アクティブ - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - 他のアプリケーションからのアソシエーション要求を受け取りました。 -KeePassXC のデータベースへのアクセスを許可したい場合は、 -要求元を識別して受け入れるためのユニークな名前を付けてください。 + Allow export + エクスポートを許可する - KeePassXC: Overwrite existing key? - KeePassXC: 既存のキーを上書きしますか? + Allow import + インポートを許可する - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - 共有暗号化キー "%1" は既に存在します。 -上書きしますか? + Own certificate + 自身の証明書 - KeePassXC: Update Entry - KeePassXC: エントリーを更新 + Fingerprint: + フィンガープリント: - Do you want to update the information in %1 - %2? - %1 - %2 の情報を更新しますか? + Certificate: + 証明書: - KeePassXC: Database locked! - KeePassXC: データベースはロックされています + Signer + 署名者 - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - アクティブなデータベースがロックされています。 -選択されたデータベースのロックを解除するか、別のロックされていないデータベースを選択してください。 + Key: + キー: - KeePassXC: Removed keys from database - KeePassXC: データベースからキーが削除されました + Generate + 生成 + + + Import + インポート + + + Export + エクスポート + + + Imported certificates + インポートされた証明書 + + + Trust + 信用 + + + Ask + 確認 + + + Untrust + 不信 + + + Remove + 削除 + + + Path + パス + + + Status + ステータス + + + Fingerprint + フィンガープリント + + + Certificate + 証明書 + + + Trusted + 信用 + + + Untrusted + 不信 + + + Unknown + 不明 + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + KeeShare キーファイル + + + All files + 全てのファイル + + + Select path + パスを選択 + + + Exporting changed certificate + 変更された証明書をエクスポートしています + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + エクスポートされる証明書は使用中の証明書と同一ではありません。現在の証明書をエクスポートしますか? + + + Signer: + + + + + ShareObserver + + Import from container without signature + 署名なしコンテナからのインポート + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + 共有コンテナは署名されていないため、ソースを確認できません。本当に %1 からインポートしますか? + + + Import from container with certificate + 署名付きコンテナからのインポート + + + Not this time + 今回はしない + + + Never + 常にしない + + + Always + 常にする + + + Just this time + 今回はする + + + Import from %1 failed (%2) + %1 からのインポートに失敗しました (%2) + + + Import from %1 successful (%2) + %1 からのインポートに成功しました (%2) + + + Imported from %1 + %1 からインポートされました + + + Signed share container are not supported - import prevented + 署名共有コンテナはサポートされていません - インポートは阻害されました + + + File is not readable + ファイルが読み取り可能ではありません + + + Invalid sharing container + 共有コンテナが不正です + + + Untrusted import prevented + 不信なインポートが阻害されました + + + Successful signed import + 署名付きのもののインポートに成功しました + + + Unexpected error + 予期しないエラーです + + + Unsigned share container are not supported - import prevented + 未署名共有コンテナはサポートされていません - インポートは阻害されました + + + Successful unsigned import + 未署名のもののインポートに成功しました + + + File does not exist + ファイルが存在しません + + + Unknown share container type + 不明な共有コンテナ形式です + + + Overwriting signed share container is not supported - export prevented + 署名共有コンテナの上書きはサポートされていません - エクスポートは阻害されました + + + Could not write export container (%1) + コンテナを書き込めませんでした (%1) + + + Overwriting unsigned share container is not supported - export prevented + 未署名共有コンテナの上書きはサポートされていません - エクスポートは阻害されました + + + Could not write export container + コンテナを書き込めませんでした + + + Unexpected export error occurred + 予期しないエクスポートエラーが発生しました + + + Export to %1 failed (%2) + %1 へのエクスポートに失敗しました (%2) + + + Export to %1 successful (%2) + %1 へのエクスポートに成功しました (%2) + + + Export to %1 + %1 にエクスポート + + + Do you want to trust %1 with the fingerprint of %2 from %3? + %3 の %1 (フィンガープリント %2) を信用しますか?{1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + 時限パスワード + + + 000000 + 000000 + + + Copy + コピー - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - KeePassX/Http の設定から %n 個の暗号化キーが正常に削除されました。 - - - KeePassXC: No keys found - KeePassXC: キーが見つかりません - - - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp の設定内に共有暗号化キーは見つかりませんでした。 - - - KeePassXC: Settings not available! - KeePassXC: 設定は利用できません - - - The active database does not contain an entry of KeePassHttp Settings. - アクティブなデータベースに KeePassHttp の設定のエントリーが含まれていません。 - - - Removing stored permissions... - 保存されたアクセス許可を削除しています… - - - Abort - 中止 - - - KeePassXC: Removed permissions - KeePassXC: アクセス許可が削除されました - - - Successfully removed permissions from %n entries. - %n 個のエントリーからアクセス許可が正常に削除されました。 - - - KeePassXC: No entry with permissions found! - KeePassXC: アクセス許可があるエントリーは見つかりません - - - The active database does not contain an entry with permissions. - アクティブなデータベースにはアクセス許可があるエントリーは含まれていません。 + Expires in <b>%n</b> second(s) + 期限切れまで <b>%n</b> 秒 - SettingsWidget + TotpExportSettingsDialog - Application Settings - アプリケーション設定 + Copy + コピー - General - 一般 + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + メモ: これらの TOTP 設定は他の Authenticator では動作しない可能性があります。 - Security - セキュリティ + There was an error creating the QR code. + QR コードの作成中にエラーが発生しました。 - Access error for config file %1 - 設定ファイル %1 へのアクセスエラー + Closing in %1 seconds. + %1 秒後に閉じます。 - SettingsWidgetGeneral - - Basic Settings - 基本設定 - - - Start only a single instance of KeePassXC - KeePassXC のインスタンスを一つだけ起動する - - - Remember last databases - 最近使用したデータベースを記憶する - - - Remember last key files and security dongles - 最近使用したキーファイルとセキュリティードングルを記憶する - - - Load previous databases on startup - 起動時に前回のデータベースを読み込む - - - Automatically save on exit - 終了時に自動的に保存する - - - Automatically save after every change - 変更するたびに自動的に保存する - - - Automatically reload the database when modified externally - 編集された際に自動でデータベースを再読み込みする - - - Minimize when copying to clipboard - クリップボードにコピーしたら最小化する - - - Minimize window at application startup - アプリケーション起動時にウィンドウを最小化する - - - Use group icon on entry creation - エントリー作成時にグループのアイコンを使用する - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - データ以外の変更 (例えばグループの展開) に対して、データベースを修正済みとしてマークしないようにする - - - Hide the Details view - 詳細ビューを非表示にする - - - Show a system tray icon - システムトレイアイコンを表示する - - - Hide window to system tray when minimized - 最小化された際にシステムトレイへ格納する - - - Hide window to system tray instead of app exit - アプリケーション終了ではなくシステムトレイへ格納する - - - Dark system tray icon - ダークシステムトレイアイコン - - - Language - 言語 - - - Auto-Type - 自動入力 - - - Use entry title to match windows for global Auto-Type - グローバル自動入力のウィンドウの照合にエントリーのタイトルを使用する - - - Use entry URL to match windows for global Auto-Type - グローバル自動入力のウィンドウの照合にエントリーの URL を使用する - - - Always ask before performing Auto-Type - 自動入力を行う前に毎回確認する - - - Global Auto-Type shortcut - グローバル自動入力のショートカット - - - Auto-Type delay - 自動入力の遅延 - - - ms - Milliseconds - ミリ秒 - - - Startup - 起動 - - - File Management - ファイル管理 - - - Safely save database files (may be incompatible with Dropbox, etc) - 安全にデータベースファイルを保存する (Dropbox などのサービスでは動作しない可能性があります) - - - Backup database file before saving - 保存する前にデータベースファイルをバックアップする - - - Entry Management - エントリー管理 - - - General - 一般 - - - - SettingsWidgetSecurity - - Timeouts - タイムアウト - - - Clear clipboard after - 次の時間が過ぎたらクリップボードを消去 - - - sec - Seconds - - - - Lock databases after inactivity of - 未操作の時間が続いたらデータベースをロック - - - Convenience - 利便性 - - - Lock databases when session is locked or lid is closed - セッションがロックされたりラップトップが閉じられた際にデータベースをロックする - - - Lock databases after minimizing the window - ウィンドウを最小化したらデータベースをロックする - - - Don't require password repeat when it is visible - パスワードが表示されている場合は、パスワードの再入力を必要としないようにする - - - Show passwords in cleartext by default - パスワードはデフォルトで平文表示にする - - - Hide passwords in the preview panel - プレビューパネルのパスワードを非表示にする - - - Hide entry notes by default - エントリーのメモをデフォルトで非表示にする - - - Privacy - プライバシー - - - Use Google as fallback for downloading website icons - ウェブサイトのアイコンをダウンロードするためのフォールバックとして Google を使用する - - - Re-lock previously locked database after performing Auto-Type - 自動入力実行後に以前ロックされたデータベースを再ロックする - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP TOTP の設定 @@ -3995,59 +5340,84 @@ Please unlock the selected database or choose another one which is unlocked.カスタム設定を使用する - Note: Change these settings only if you know what you are doing. - 注意: 何をしようとしているのか理解している場合にのみ、設定を変更してください。 + Custom Settings + カスタム設定 Time step: タイムステップ: - 8 digits - 8桁 - - - 6 digits - 6桁 + sec + Seconds + Code size: コードサイズ: - sec - Seconds - + 6 digits + 6桁 + + + 7 digits + 7桁 + + + 8 digits + 8桁 - TotpDialog + UpdateCheckDialog - Timed Password - 時限パスワード + Checking for updates + 更新を確認中 - 000000 - 000000 + Checking for updates... + 更新を確認中... - Copy - コピー + Close + 閉じる - Expires in - 期限切れまで + Update Error! + 更新エラー! - seconds - + An error occurred in retrieving update information. + 更新情報の確認中にエラーが発生しました。 - - - UnlockDatabaseWidget - Unlock database - データベースのロックを解除 + Please try again later. + 後で再試行してください。 + + + Software Update + ソフトウェアの更新 + + + A new version of KeePassXC is available! + KeePassXC の新しいバージョンが利用可能です。 + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 が利用可能です (現在のバージョンは %2)。 + + + Download it at keepassxc.org + keepassxc.org からダウンロードしてください + + + You're up-to-date! + 最新です! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 は現在利用可能な最新バージョンです @@ -4082,42 +5452,26 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - データベースからエントリーを削除する。 + Refresh + 再読み込み - Path of the database. - データベースのパス。 + YubiKey Challenge-Response + YubiKey のチャレンジレスポンス - Path of the entry to remove. - 削除するエントリーのパス。 + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>セキュリティ対策として <a href="https://www.yubico.com/">YubiKey</a> を使用できます。</p><p>YubiKey のスロットの1つを <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 チャレンジレスポンス</a> に設定する必要があります。</p> - KeePassXC - cross-platform password manager - KeePassXC - クロスプラットフォームのパスワードマネージャー + No YubiKey detected, please ensure it's plugged in. + YubiKey が検出されませんでした。挿入されているかどうか確認してください。 - filenames of the password databases to open (*.kdbx) - 開くパスワードデータベースのファイル名 (*.kdbx) - - - path to a custom config file - カスタム設定ファイルへのパス - - - key file of the database - データベースのキーファイル - - - read password of the database from stdin - 標準入力からデータベースのパスワードを読み込む - - - Parent window handle - 親ウィンドウハンドル + No YubiKey inserted. + YubiKey が挿入されていません。 \ No newline at end of file diff --git a/share/translations/keepassx_kk.ts b/share/translations/keepassx_kk.ts index 4531122bf..059c683da 100644 --- a/share/translations/keepassx_kk.ts +++ b/share/translations/keepassx_kk.ts @@ -9,25 +9,40 @@ About + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + + Contributors + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + + Debug Info + + Include the following information whenever you report a bug: + + Copy to clipboard - Version %1 - + Revision: %1 - Revision: %1 + Distribution: %1 @@ -44,52 +59,334 @@ Kernel: %3 %4 Enabled extensions: - - Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - - - - KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - - Project Maintainers: - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Include the following information whenever you report a bug: + Version %1 - Distribution: %1 + Build Type: %1 + + + + Auto-Type + Автотеру + + + Browser Integration + + + + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) - AccessControlDialog + AgentSettingsWidget - Remember this decision + Enable SSH Agent (requires restart) - Allow + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Қолданба баптаулары + + + General + Жалпы + + + Security + Қауіпсіздік + + + Access error for config file %1 - Deny + Icon only - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + Text only - KeePassXC HTTP Confirm Access + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + Соңғы дерекқорларды есте сақтау: + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + Әр өзгерістен кейін автосақтау + + + Automatically save on exit + Шығу кезінде автосақтау + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + Жазбаны жасау кезінде топ таңбашасын қолдану + + + Minimize when copying to clipboard + Алмасу буферіне көшіру кезінде қолданбаны қайыру + + + Hide the entry preview panel + + + + General + Жалпы + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + Жүйелік трей таңбашасын қолдану + + + Dark system tray icon + + + + Hide window to system tray when minimized + Қолданба қайырылған кезде терезені жүйелік трейге жасыру + + + Language + Тіл + + + Auto-Type + Автотеру + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + Глобалды автотеру жарлығы + + + Auto-Type typing delay + + + + ms + Milliseconds + + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + Алмасу буферін тазалау алдындағы кідіріс + + + sec + Seconds + сек + + + Lock databases after inactivity of + Дерекқорларды белсенділік жоқ кезде блоктау алдындағы кідіріс + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + + + + Use DuckDuckGo as fallback for downloading website icons @@ -103,6 +400,26 @@ Please select whether you want to allow access. Auto-Type - KeePassXC + + Auto-Type + Автотеру + + + The Syntax of your Auto-Type statement is incorrect! + + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + AutoTypeAssociationsModel @@ -120,90 +437,322 @@ Please select whether you want to allow access. - AutoTypeSelectDialog + AutoTypeMatchModel - Select entry to Auto-Type: - Автотеру үшін жазбаны таңдаңыз: + Group + Топ + + Title + Атауы + + + Username + Пайдаланушы аты + + + Sequence + Тізбек + + + + AutoTypeSelectDialog Auto-Type - KeePassXC + + Select entry to Auto-Type: + Автотеру үшін жазбаны таңдаңыз: + - ChangeMasterKeyWidget + BrowserAccessControlDialog - Password - Пароль - - - Enter password: - Парольді енгізіңіз: - - - Repeat password: - Парольді қайталаңыз: - - - Browse - Шолу - - - Create - Жасау - - - Key files - Кілттер файлдары - - - All files - Барлық файлдар - - - Create Key File... - Кілттер файлын жасау... - - - Unable to create Key File : - Кілттер файлын жасау мүмкін емес: - - - Select a key file - Кілттер файлын таңдаңыз - - - Do you really want to use an empty string as password? - Пароль ретінде бос жолды қолдануды шынымен қалайсыз ба? - - - Different passwords supplied. - Әр түрлі парольдер көрсетілді. - - - Failed to set %1 as the Key file: -%2 - %1 файлын кілттер файлы ретінде орнату қатесі: -%2 - - - &Key file + KeePassXC-Browser Confirm Access - Cha&llenge Response + Remember this decision - Refresh + Allow - Empty password + Deny - Changing master key failed: no YubiKey inserted. + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + + + BrowserOptionDialog + + Dialog + + + + This is required for accessing your databases with KeePassXC-Browser + + + + Enable KeepassXC browser integration + + + + General + Жалпы + + + Enable integration for these browsers: + + + + &Google Chrome + + + + &Firefox + + + + &Chromium + + + + &Vivaldi + + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + + + + Re&quest to unlock the database if it is locked + + + + Only entries with the same scheme (http://, https://, ...) are returned. + + + + &Match URL scheme (e.g., https://...) + + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + + + + &Return only best-matching credentials + + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + + + + Advanced + Кеңейтілген + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + + + + Only the selected database has to be connected with a client. + + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + + + + Automatically creating or updating string fields is not supported. + + + + &Return advanced string fields which start with "KPH: " + + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + + + + Update &native messaging manifest files at startup + + + + Support a proxy application between KeePassXC and browser extension. + + + + Use a &proxy application between KeePassXC and browser extension + + + + Use a custom proxy location if you installed a proxy manually. + + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + + + + Browse... + Button for opening file dialog + + + + <b>Warning:</b> The following options can be dangerous! + + + + Select custom proxy location + + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + + BrowserService + + KeePassXC: New key association request + + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + + + + Save and allow access + + + + KeePassXC: Overwrite existing key? + + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + + KeePassXC: Update Entry + + + + Do you want to update the information in %1 - %2? + + + + Abort + + + + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + + + + KeePassXC: No entry with KeePassHTTP attributes found! + + + + The active database does not contain an entry with KeePassHTTP attributes. + + + + KeePassXC: Legacy browser integration settings detected + + + + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. @@ -213,6 +762,10 @@ Please select whether you want to allow access. Clone Options + + Append ' - Clone' to title + + Replace username and password with references @@ -221,10 +774,6 @@ Please select whether you want to allow access. Copy history - - Append ' - Clone' to title - - CsvImportWidget @@ -284,14 +833,6 @@ Please select whether you want to allow access. Not present in CSV file - - Empty fieldname - - - - column - - Imported from CSV file @@ -300,51 +841,84 @@ Please select whether you want to allow access. Original data: - - Error(s) detected in CSV file ! - - - - more messages skipped] - - Error Қате + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - +%1 - - CsvImportWizard - - Import CSV file - - - - Error - Қате - - - Unable to calculate master key - Басты парольді есептеу мүмкін емес - - CsvParserModel + + %n column(s) + + - byte, + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + Түбір + + + File %1 does not exist. - rows, + Unable to open file %1. - columns + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC @@ -367,12 +941,27 @@ Please select whether you want to allow access. Шолу - Unable to open the database. - Дерекқорды ашу мүмкін емес. + Refresh + - Can't open key file - Кілттер файлын ашу мүмкін емес + Challenge Response: + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + Don't show this warning again + All files @@ -387,87 +976,173 @@ Please select whether you want to allow access. Кілттер файлын таңдаңыз - Refresh + TouchID for quick unlock - Challenge Response: + Unable to open the database: +%1 + + + + Can't open key file: +%1 - DatabaseRepairWidget + DatabaseSettingWidgetMetaData - Repair database - Дерекқорды жөндеу - - - Error - Қате - - - Can't open key file - Кілттер файлын ашу мүмкін емес - - - Database opened fine. Nothing to do. - Дерекқор сәтті ашылды. Басқа орындайтын әрекеттер жоқ. - - - Unable to open the database. - Дерекқорды ашу мүмкін емес. - - - Success - Сәтті - - - The database has been successfully repaired -You can now save it. - Дерекқор қалпына сәтті келтірілді. -Енді оны сақтауыңызға болады. - - - Unable to repair the database. - Дерекқорды жөндеу мүмкін емес. + Passwords + - DatabaseSettingsWidget + DatabaseSettingsDialog - Database name: - Дерекқор аты: + Advanced Settings + - Database description: - Дерекқор сипаттамасы: + General + Жалпы - Transform rounds: - Түрлендірулер саны: + Security + Қауіпсіздік - Default username: - Үнсіз келісім пайдаланушы аты: + Master Key + - MiB - МиБ + Encryption Settings + - Benchmark - Сынау + Browser Integration + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + - Max. history items: - Макс. тарих саны: + &Disconnect all browsers + - Max. history size: - Макс. тарих өлшемі: + Forg&et all site-specific settings on entries + - Use recycle bin + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + Өшіру + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: @@ -479,16 +1154,254 @@ You can now save it. - Algorithm: + Key Derivation Function: + + + + Transform rounds: + Түрлендірулер саны: + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + + + + Number of rounds too high + Key transformation rounds + + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + + Understood, keep number + + + + Cancel + + + + Number of rounds too low + Key transformation rounds + + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + + KDF unchanged + + + + Failed to transform key with new KDF parameters; KDF unchanged. + + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + Дерекқор аты: + + + Database description: + Дерекқор сипаттамасы: + + + Default username: + Үнсіз келісім пайдаланушы аты: + + + History Settings + + + + Max. history items: + Макс. тарих саны: + + + Max. history size: + Макс. тарих өлшемі: + + + MiB + МиБ + + + Use recycle bin + + + + Additional Database Settings + + + + Enable &compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: DatabaseTabWidget - - Root - Түбір - KeePass 2 Database KeePass 2 дерекқоры @@ -502,8 +1415,12 @@ You can now save it. Дерекқорды ашу - File not found! - Файл табылмады! + CSV file + CSV файлы + + + Merge database + Open KeePass 1 database @@ -513,176 +1430,85 @@ You can now save it. KeePass 1 database KeePass 1 дерекқоры - - All files (*) - Барлық файлдар (*) - - - Close? - Жабу керек пе? - - - Save changes? - Өзгерістерді сақтау керек пе? - - - "%1" was modified. -Save changes? - "%1" өзгертілген. -Өзгерістерді сақтау керек пе? - - - Writing the database failed. - Дерекқорға жазу сәтсіз аяқталды. - - - Save database as - Дерекқорды қалайша сақтау - - - New database - Жаңа дерекқор - - - locked - блокталған - - - Lock database - Дерекқорды блоктау - - - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Дерекқорды блоктау мүмкін емес, өйткені сіз оны қазір түзетудесіз. -Өзгерістерді аяқтау үшін бас тартуды басыңыз, немесе оларды елемеңіз. - - - This database has never been saved. -You can save the database or stop locking it. - Дерекқор ешқашан сақталмаған. -Сіз дерекқорды сақтай аласыз, немесе оның блокауын алып тастай аласыз. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Дерекқор өзгертілген. -Оны блоктау алдында өзгерістерді сақтау керек пе? -Сақтамасаңыз, өзгерістер жоғалады. - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" қазір түзету режимінде. -Оған қарамастан, өзгерістерді елемей, оны жабу керек пе? - Export database to CSV file Дерекқорды CSV файлына экспорттау - - CSV file - CSV файлы - Writing the CSV file failed. CSV файлына жазу сәтсіз аяқталды. - Unable to open the database. - Дерекқорды ашу мүмкін емес. - - - Merge database + Database creation error - The database you are trying to save as is locked by another instance of KeePassXC. -Do you want to save it anyway? + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Passwords + The database file does not exist or is not accessible. - Database already opened + Select CSV file - The database you are trying to open is locked by another instance of KeePassXC. - -Do you want to open it anyway? + New Database - Open read-only + %1 [New Database] + Database tab name modifier - File opened in read only mode. + %1 [Locked] + Database tab name modifier - Open CSV file + %1 [Read-only] + Database tab name modifier DatabaseWidget - Change master key - Басты парольді өзгерту - - - Delete entry? - Жазбаны өшіру керек пе? + Searching... + Do you really want to delete the entry "%1" for good? "%1" жазбасын өшіруді шынымен қалайсыз ба? - Delete entries? - Жазбаларды өшіру керек пе? - - - Do you really want to delete %1 entries for good? - %1 жазбаны өшіруді шынымен қалайсыз ба? - - - Move entries to recycle bin? - Жазбаларды қоқыс шелегіне тастау керек пе? + Do you really want to move entry "%1" to the recycle bin? + "%1" жазбасын қоқыс шелегіне тастауды шынымен қалайсыз ба? Do you really want to move %n entry(s) to the recycle bin? - %n жазбаны қоқыс шелегіне тастауды шынымен қалайсыз ба? + - Delete group? - Топты өшіру керек пе? + Execute command? + + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + Do you really want to delete the group "%1" for good? "%1" тобын өшіруді шынымен қалайсыз ба? - - Unable to calculate master key - Басты парольді есептеу мүмкін емес - - - Move entry to recycle bin? - Жазбаны қоқыс шелегіне тастау керек пе? - - - Do you really want to move entry "%1" to the recycle bin? - "%1" жазбасын қоқыс шелегіне тастауды шынымен қалайсыз ба? - - - Searching... - - No current database. @@ -700,19 +1526,7 @@ Do you want to open it anyway? - Execute command? - - - - Do you really want to execute the following command?<br><br>%1<br> - - - - Remember my choice - - - - Autoreload Request + File has changed @@ -724,11 +1538,8 @@ Do you want to open it anyway? - The database file has changed and you have unsaved changes.Do you want to merge your changes? - - - - Could not open the new database file while attempting to autoreload this database. + The database file has changed and you have unsaved changes. +Do you want to merge your changes? @@ -739,6 +1550,104 @@ Do you want to open it anyway? Are you sure you want to permanently delete everything from your recycle bin? + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + + + File opened in read only mode. + + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" өзгертілген. +Өзгерістерді сақтау керек пе? + + + Database was modified. +Save changes? + + + + Save changes? + Өзгерістерді сақтау керек пе? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords + + + + Save database as + Дерекқорды қалайша сақтау + + + KeePass 2 Database + KeePass 2 дерекқоры + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + + EditEntryWidget @@ -766,6 +1675,30 @@ Do you want to open it anyway? History Тарихы + + SSH Agent + + + + n/a + + + + (encrypted) + + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + Entry history Жазба тарихы @@ -787,22 +1720,8 @@ Do you want to open it anyway? Жаңа атрибут - Select file - Файлды таңдау - - - Unable to open file - Файлды ашу мүмкін емес - - - Save attachment - Салынымды сақтау - - - Unable to save the attachment: - - Салынымды сақтау мүмкін емес: - + Are you sure you want to remove this attribute? + Tomorrow @@ -810,30 +1729,42 @@ Do you want to open it anyway? %n week(s) - %n апта + %n month(s) - %n ай + - 1 year - 1 жыл - - - Confirm Remove + Apply generated password? - Are you sure you want to remove this attribute? + Do you want to apply the generated password to this entry? + + + + Entry updated successfully. + + + + Entry has unsaved changes + + + + New attribute %1 [PROTECTED] Press reveal to view or edit + + %n year(s) + + - Are you sure you want to remove this attachment? + Confirm Removal @@ -851,18 +1782,6 @@ Do you want to open it anyway? Remove Өшіру - - Attachments - Салынымдар - - - Save - Сақтау - - - Open - Ашу - Edit Name @@ -875,6 +1794,18 @@ Do you want to open it anyway? Reveal + + Attachments + Салынымдар + + + Foreground Color: + + + + Background Color: + + EditEntryWidgetAutoType @@ -882,6 +1813,18 @@ Do you want to open it anyway? Enable Auto-Type for this entry Бұл жазба үшін автотеруді іске қосу + + Inherit default Auto-Type sequence from the &group + + + + &Use custom Auto-Type sequence: + + + + Window Associations + + + + @@ -895,23 +1838,7 @@ Do you want to open it anyway? Терезе атауы: - Inherit default Auto-Type sequence from the &group - - - - &Use custom Auto-Type sequence: - - - - Use default se&quence - - - - Set custo&m sequence: - - - - Window Associations + Use a specific sequence for this association: @@ -937,12 +1864,8 @@ Do you want to open it anyway? EditEntryWidgetMain - Title: - Атауы: - - - Username: - Пайдаланушы аты: + URL: + URL: Password: @@ -953,20 +1876,104 @@ Do you want to open it anyway? Қайталау: - URL: - URL: + Title: + Атауы: - Expires - Мерзімі аяқталады + Notes + Естеліктер Presets Сақталған баптаулар - Notes: - Естеліктер: + Toggle the checkbox to reveal the notes section. + + + + Username: + Пайдаланушы аты: + + + Expires + Мерзімі аяқталады + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + + + + Add key to agent when database is opened/unlocked + + + + Comment + + + + Decrypt + + + + n/a + + + + Copy to clipboard + + + + Private key + + + + External file + + + + Browse... + Button for opening file dialog + + + + Attachment + + + + Add to agent + + + + Remove from agent + + + + Require user confirmation when this key is used + @@ -1004,6 +2011,81 @@ Do you want to open it anyway? Аталық топтан мұралау (%1) + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + Пароль: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + EditGroupWidgetMain @@ -1037,6 +2119,14 @@ Do you want to open it anyway? EditWidgetIcons + + &Use default icon + + + + Use custo&m icon + + Add custom icon Таңдауыңызша таңбашаны қосу @@ -1045,18 +2135,6 @@ Do you want to open it anyway? Delete custom icon Таңдауыңызша таңбашаны өшіру - - Images - Суреттер - - - All files - Барлық файлдар - - - Select Image - Суретті таңдау - Download favicon @@ -1066,15 +2144,15 @@ Do you want to open it anyway? - Can't read icon - + Images + Суреттер - &Use default icon - + All files + Барлық файлдар - Use custo&m icon + Custom icon already exists @@ -1082,17 +2160,37 @@ Do you want to open it anyway? - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded - Hint: You can enable Google as a fallback under Tools>Settings>Security + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security - Custom icon already exists + Select Image(s) + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + EditWidgetProperties @@ -1112,14 +2210,122 @@ Do you want to open it anyway? Uuid: Uuid: + + Plugin Data + + + + Remove + Өшіру + + + Delete plugin data? + + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + + + + Key + + + + Value + + Entry - - Clone + %1 - Clone + + EntryAttachmentsModel + + Name + Аты + + + Size + + + + + EntryAttachmentsWidget + + Form + + + + Add + Қосу + + + Remove + Өшіру + + + Open + Ашу + + + Save + Сақтау + + + Select files + + + + Are you sure you want to remove %n attachment(s)? + + + + Save attachments + + + + Unable to create directory: +%1 + + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + + + + Unable to save attachments: +%1 + + + + Unable to open attachment: +%1 + + + + Unable to open attachments: +%1 + + + + Confirm remove + + + + Unable to open file(s): +%1 + + + EntryAttributesModel @@ -1148,6 +2354,11 @@ Do you want to open it anyway? EntryModel + + Ref: + Reference abbreviation + + Group Топ @@ -1165,8 +2376,166 @@ Do you want to open it anyway? URL - Ref: - Reference abbreviation + Never + + + + Password + Пароль + + + Notes + Естеліктер + + + Expires + Мерзімі аяқталады + + + Created + + + + Modified + + + + Accessed + + + + Attachments + Салынымдар + + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + + + + General + Жалпы + + + Username + Пайдаланушы аты + + + Password + Пароль + + + Expiration + + + + URL + URL + + + Attributes + + + + Attachments + Салынымдар + + + Notes + Естеліктер + + + Autotype + + + + Window + Терезе + + + Sequence + Тізбек + + + Searching + + + + Search + Іздеу + + + Clear + + + + Never + + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + + + + Disabled + + + + Share + + + + + EntryView + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) @@ -1176,55 +2545,28 @@ Do you want to open it anyway? Recycle Bin Қоқыс шелегі + + [empty] + group has no children + + - HttpPasswordGeneratorWidget + GroupModel - Length: + %1 + Template for name without annotation + + + + + HostInstaller + + KeePassXC: Cannot save file! - Character Types - Таңбалар түрлері - - - Upper Case Letters - Бас әріптер - - - A-Z - - - - Lower Case Letters - Кіші әріптер - - - a-z - - - - Numbers - Сандар - - - 0-9 - - - - Special Characters - Арнайы таңбалар - - - /*_& ... - - - - Exclude look-alike characters - Ұқсайтын таңбаларға жол бермеу - - - Ensure that the password contains characters from every group + Cannot save the native messaging script file. @@ -1239,6 +2581,388 @@ Do you want to open it anyway? + + Kdbx3Reader + + Unable to calculate master key + Басты парольді есептеу мүмкін емес + + + Unable to issue challenge-response. + + + + Wrong key or database file is corrupt. + Пароль қате, немесе дерекқор файлы зақымдалған. + + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + + Kdbx3Writer + + Unable to issue challenge-response. + + + + Unable to calculate master key + Басты парольді есептеу мүмкін емес + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + Басты парольді есептеу мүмкін емес + + + Invalid header checksum size + + + + Header SHA256 mismatch + + + + Wrong key or database file is corrupt. (HMAC mismatch) + + + + Unknown cipher + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + Failed to open buffer for KDF parameters in header + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + Басты парольді есептеу мүмкін емес + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + Not a KeePass database. + KeePass дерекқоры емес. + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + + + + Unsupported KeePass 2 database version. + + + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + + + + KdbxXmlReader + + XML parsing failure: %1 + + + + No root group + + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + Invalid EnableAutoType value + + + + Invalid EnableSearching value + + + + No group uuid found + + + + Null DeleteObject uuid + + + + Missing DeletedObject uuid or time + + + + Null entry uuid + + + + Invalid entry icon number + + + + History element in history entry + + + + No entry uuid found + + + + History element with different uuid + + + + Duplicate custom attribute found + + + + Entry string key or value missing + + + + Duplicate attachment found + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + XML error: +%1 +Line %2, column %3 + + + KeePass1OpenWidget @@ -1268,6 +2992,35 @@ Do you want to open it anyway? Unsupported KeePass database version. KeePass дерекқоры нұсқасына қолдау жоқ. + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + + + + Invalid number of groups + + + + Invalid number of entries + + + + Invalid content hash size + + + + Invalid transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + + Root Түбір @@ -1280,139 +3033,244 @@ Do you want to open it anyway? Wrong key or database file is corrupt. Пароль қате, немесе дерекқор файлы зақымдалған. - - - KeePass2Reader - Not a KeePass database. - KeePass дерекқоры емес. - - - Unsupported KeePass database version. - KeePass дерекқоры нұсқасына қолдау жоқ. - - - Wrong key or database file is corrupt. - Пароль қате, немесе дерекқор файлы зақымдалған. - - - Unable to calculate master key - Басты парольді есептеу мүмкін емес - - - Unable to issue challenge-response. + Key transformation failed - The selected file is an old KeePass 1 database (.kdb). + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + unable to seek to content position + + + + + KeeShare + + Disabled share + + + + Import from + + + + Export to + + + + Synchronize with + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Шолу + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. -You can import it by clicking on Database > 'Import KeePass 1 database...'. -This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. - - - - - KeePass2Writer - - Unable to issue challenge-response. +Please go to the master key settings and generate a new key file. - Unable to calculate master key - Басты парольді есептеу мүмкін емес - - - - Main - - Fatal error while testing the cryptographic functions. - Криптографиялық функцияларды сынау кезіндегі қатаң қате орын алды. - - - KeePassXC - Error + Error loading the key file '%1' +Message: %2 - The lock file could not be created. Single-instance mode disabled. - - - - Another instance of KeePassXC is already running. - - - - Existing single-instance lock file is invalid. Launching new instance. - - - - - MainWindow - - Open database - Дерекқорды ашу - - - Database settings - Дерекқор баптаулары - - - Copy username to clipboard - Пайдаланушы атын алмасу буферіне көшіріп алу - - - Copy password to clipboard - Парольді алмасу буферіне көшіріп алу - - - Settings - Баптаулар - - - Show toolbar - Саймандар панелін көрсету - - - read-only - тек оқу - - - Toggle window - Терезені көрсету/жасыру - - - KeePass 2 Database - KeePass 2 дерекқоры + Key files + Кілттер файлдары All files Барлық файлдар - Save repaired database - Жөнделген дерекқорды сақтау + Create Key File... + Кілттер файлын жасау... - Writing the database failed. - Дерекқорды жазу сәтсіз аяқталды. + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Кілттер файлын таңдаңыз + + + + MainWindow + + &Database + &Recent databases + + &Help + + E&ntries - - Copy att&ribute to clipboard - - &Groups - &View + &Tools @@ -1423,6 +3281,10 @@ This is a one-way migration. You won't be able to open the imported databas &About + + &Open database... + + &Save database @@ -1431,30 +3293,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database - - &New database - - - - Merge from KeePassX database - - - - &Add new entry - - - - &View/Edit entry - - &Delete entry - - &Add new group - - &Edit group @@ -1464,47 +3306,35 @@ This is a one-way migration. You won't be able to open the imported databas - &Database settings + Sa&ve database as... + + Database settings + Дерекқор баптаулары + &Clone entry - - Timed one-time password - - - - Copy &TOTP - - - - Show TOTP - - - - &Find - - Copy &username - Cop&y password - + Copy username to clipboard + Пайдаланушы атын алмасу буферіне көшіріп алу + + + Copy password to clipboard + Парольді алмасу буферіне көшіріп алу &Settings - &Perform Auto-Type - - - - &Open URL + Password Generator @@ -1515,42 +3345,58 @@ This is a one-way migration. You won't be able to open the imported databas &Title + + Copy title to clipboard + + &URL + + Copy URL to clipboard + + &Notes - Password Generator + Copy notes to clipboard + + + + &Export to CSV file... + + + + Set up TOTP... + + + + Copy &TOTP + + + + E&mpty recycle bin Clear history - - &Database - - - - Import - - - - &Tools - - - - Empty recycle bin - - Access error for config file %1 + + Settings + Баптаулар + + + Toggle window + Терезені көрсету/жасыру + Quit KeePassXC @@ -1560,165 +3406,426 @@ This is a one-way migration. You won't be able to open the imported databas - &Help + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. - &Open database... + &Donate - Sa&ve database as... + Report a &bug - Change &master key... + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. - &Export to CSV file... + &Import - Import KeePass 1 database... + Copy att&ribute... - Import CSV file... + TOTP... - Re&pair database... + &New database... - Set up TOTP... + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. - OptionDialog + Merger - Dialog + Creating missing %1 [%2] - General - Жалпы - - - Sh&ow a notification when credentials are requested + Relocating %1 [%2] - Sort matching entries by &username + Overwriting %1 [%2] - Re&move all stored permissions from entries in active database + older entry merged from database "%1" - Advanced - Кеңейтілген - - - Always allow &access to entries + Adding backup for older target %1 [%2] - Always allow &updating entries + Adding backup for older source %1 [%2] - Searc&h in all opened databases for matching entries + Reapplying older target entry on top of newer source %1 [%2] - HTTP Port: + Reapplying older source entry on top of newer target %1 [%2] - Default port: 19455 + Synchronizing from newer source %1 [%2] - Re&quest to unlock the database if it is locked + Synchronizing from older source %1 [%2] - Sort &matching entries by title + Deleting child %1 [%2] - KeePassXC will listen to this port on 127.0.0.1 + Deleting orphan %1 [%2] - Cannot bind to privileged ports + Changed deleted objects - Cannot bind to privileged ports below 1024! -Using default port 19455. + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... - R&emove all shared encryption keys from active database + Root + Root group + Түбір + + + + NewDatabaseWizardPage + + WizardPage - &Return advanced string fields which start with "KPH: " + En&cryption Settings - Automatically creating or updating string fields is not supported. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - This is required for accessing your databases from ChromeIPass or PassIFox + Advanced Settings - Enable KeePassHTTP server + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key - &Return only best matching entries + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + Please fill in the display name and an optional description for your new database: + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key - &Match URL schemes + PEM boundary mismatch - Password Generator + Base64 decoding failed - Only the selected database has to be connected with a client. + Key file way too small. - The following options can be dangerous! -Change them only if you know what you are doing. + Key file magic header id invalid + + + + Found zero keys + + + + Failed to read public key. + + + + Corrupted key file, reading private key failed + + + + No private key payload to decrypt + + + + Trying to run KDF without cipher + + + + Passphrase is required to decrypt this key + + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + + + + Unexpected EOF while reading private key + + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + + + + Unsupported key type: %1 + + + + Unknown cipher: %1 + + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + + + + + PasswordEditWidget + + Enter password: + Парольді енгізіңіз: + + + Confirm password: + + + + Password + Пароль + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Password cannot be empty. + + + + Passwords do not match. + + + + Generate master password PasswordGeneratorWidget + + %p% + + Password: Пароль: + + strength + Password strength + + + + entropy + + + + Password + Пароль + Character Types Таңбалар түрлері @@ -1739,24 +3846,16 @@ Change them only if you know what you are doing. Special Characters Арнайы таңбалар + + Extended ASCII + + Exclude look-alike characters Ұқсайтын таңбаларға жол бермеу - Accept - Қабылдау - - - %p% - - - - strength - - - - entropy + Pick characters from every group @@ -1764,21 +3863,29 @@ Change them only if you know what you are doing. - Pick characters from every group + Passphrase - Generate + Wordlist: + + Word Separator: + + + + Copy + + + + Accept + Қабылдау + Close - - Apply - - Entropy: %1 bit @@ -1789,51 +3896,415 @@ Change them only if you know what you are doing. Poor + Password quality Weak + Password quality Good + Password quality Excellent + Password quality - Password - Пароль - - - Extended ASCII + ExtendedASCII - Passphrase + Switch to advanced mode - Wordlist: + Advanced + Кеңейтілген + + + Upper Case Letters A to F - Word Count: + A-Z - Word Separator: + Lower Case Letters A to F - Copy + a-z + + + + 0-9 + + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Өшіру + + + Move + + + + Empty + + + + Remove + Өшіру + + + Skip + + + + Disable + Сөндіру + + + Merge QObject + + Database not opened + + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + + + + Action cancelled or denied + + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + + + + Incorrect action + + + + Empty message received + + + + No URL provided + + + + No logins found + + + + Unknown error + + + + Add a new entry to a database. + + + + Path of the database. + + + + Key file of the database. + + + + path + + + + Username for the entry. + + + + username + + + + URL for the entry. + + + + URL + URL + + + Prompt for the entry's password. + + + + Generate a password for the entry. + + + + Length for the generated password. + + + + length + + + + Path of the entry to add. + + + + Copy an entry's password to the clipboard. + + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + + + + Edit an entry. + + + + Title for the entry. + + + + title + + + + Path of the entry to edit. + + + + Estimate the entropy of a password. + + + + Password for which to estimate the entropy. + + + + Perform advanced analysis on the password. + + + + Extract and print the content of a database. + + + + Path of the database to extract. + + + + Insert password to unlock %1: + + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + + +Available commands: + + + + + Name of the command to execute. + + + + List database entries. + + + + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + + + + Path of the database to merge into. + + + + Path of the database to merge from. + + + + Use the same credentials for both database files. + + + + Key file of the database to merge from. + + + + Show an entry's information. + + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + + + + attribute + + + + Name of the entry to show. + + NULL device @@ -1842,11 +4313,6 @@ Change them only if you know what you are doing. error reading from device - - file empty ! - - - malformed string @@ -1855,10 +4321,6 @@ Change them only if you know what you are doing. missing closing quote - - INTERNAL - unget lower bound exceeded - - Group Топ @@ -1875,14 +4337,18 @@ Change them only if you know what you are doing. Password Пароль - - URL - URL - Notes Естеліктер + + Last Modified + + + + Created + + Browser Integration @@ -1899,6 +4365,461 @@ Change them only if you know what you are doing. Passive + + SSH Agent + + + + Generate a new random diceware passphrase. + + + + Word count for the diceware passphrase. + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + + + + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + таңдауыңызша баптаулар файлына дейінгі жол + + + key file of the database + дерекқордың кілттер файлы + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + Криптографиялық функцияларды сынау кезіндегі қатаң қате орын алды. + + + KeePassXC - Error + + + + Database password: + + QtIOCompressor @@ -1935,11 +4856,97 @@ Change them only if you know what you are doing. - SearchWidget + SSHAgent - Case Sensitive + Agent connection failed. + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Іздеу @@ -1948,263 +4955,52 @@ Change them only if you know what you are doing. Clear - - Search... - - Limit search to selected group - - - Service - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Search Help - Do you want to update the information in %1 - %2? + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - Successfully removed %1 encryption-%2 from KeePassX/Http Settings. - - - - No shared encryption-keys found in KeePassHttp Settings. - - - - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - - - - Abort - - - - Successfully removed permissions from %1 %2. - - - - The active database does not contain an entry with permissions. - - - - KeePassXC: New key association request - - - - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - - - - KeePassXC: Overwrite existing key? - - - - KeePassXC: Update Entry - - - - KeePassXC: Database locked! - - - - KeePassXC: Removed keys from database - - - - KeePassXC: No keys found - - - - KeePassXC: Settings not available! - - - - KeePassXC: Removed permissions - - - - KeePassXC: No entry with permissions found! + Case sensitive - SettingsWidget + SettingsWidgetKeeShare - Application Settings - Қолданба баптаулары - - - General - Жалпы - - - Security - Қауіпсіздік - - - Access error for config file %1 - - - - - SettingsWidgetGeneral - - Remember last databases - Соңғы дерекқорларды есте сақтау: - - - Automatically save on exit - Шығу кезінде автосақтау - - - Automatically save after every change - Әр өзгерістен кейін автосақтау - - - Minimize when copying to clipboard - Алмасу буферіне көшіру кезінде қолданбаны қайыру - - - Use group icon on entry creation - Жазбаны жасау кезінде топ таңбашасын қолдану - - - Global Auto-Type shortcut - Глобалды автотеру жарлығы - - - Language - Тіл - - - Show a system tray icon - Жүйелік трей таңбашасын қолдану - - - Hide window to system tray when minimized - Қолданба қайырылған кезде терезені жүйелік трейге жасыру - - - Load previous databases on startup + Active - Automatically reload the database when modified externally + Allow export - Hide window to system tray instead of app exit + Allow import - Minimize window at application startup + Own certificate - Basic Settings + Fingerprint: - Remember last key files and security dongles + Certificate: - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Auto-Type - Автотеру - - - Use entry title and URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Auto-Type delay - - - - ms - - - - Start only a single instance of KeePassXC - - - - - SettingsWidgetSecurity - - Clear clipboard after - Алмасу буферін тазалау алдындағы кідіріс - - - sec - сек - - - Lock databases after inactivity of - Дерекқорларды белсенділік жоқ кезде блоктау алдындағы кідіріс - - - Show passwords in cleartext by default - Парольдерді үнсіз келісім бойынша ашық мәтінмен көрсету - - - Lock databases after minimizing the window - - - - Don't require password repeat when it is visible - - - - Timeouts - - - - Convenience - - - - Lock databases when session is locked or lid is closed - - - - Privacy - - - - Use Google as fallback for downloading website icons - - - - - SetupTotpDialog - - Setup TOTP + Signer @@ -2212,32 +5008,221 @@ give it a unique name to identify and accept it. - Use custom settings + Generate - Note: Change these settings only if you know what you are doing. + Import - Time step: + Export - 8 digits + Imported certificates - 6 digits + Trust - Code size: + Ask - sec - сек + Untrust + + + + Remove + Өшіру + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Барлық файлдар + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + @@ -2254,28 +5239,136 @@ give it a unique name to identify and accept it. Copy + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog - Expires in + Copy - seconds + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. - UnlockDatabaseWidget + TotpSetupDialog - Unlock database - Дерекқорды блоктаудан босату + Setup TOTP + + + + Key: + + + + Default RFC 6238 token settings + + + + Steam token settings + + + + Use custom settings + + + + Custom Settings + + + + Time step: + + + + sec + Seconds + сек + + + Code size: + + + + 6 digits + + + + 7 digits + + + + 8 digits + + + + + UpdateCheckDialog + + Checking for updates + + + + Checking for updates... + + + + Close + + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + WelcomeWidget - - Welcome to KeePassXC - - Start storing your passwords securely in a KeePassXC database @@ -2300,91 +5393,31 @@ give it a unique name to identify and accept it. Recent databases + + Welcome to KeePassXC %1 + + - main + YubiKeyEditWidget - path to a custom config file - таңдауыңызша баптаулар файлына дейінгі жол - - - key file of the database - дерекқордың кілттер файлы - - - KeePassXC - cross-platform password manager + Refresh - read password of the database from stdin + YubiKey Challenge-Response - filenames of the password databases to open (*.kdbx) + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - Copy a password to the clipboard + No YubiKey detected, please ensure it's plugged in. - Path of the database. - - - - Use a GUI prompt unlocking the database. - - - - Name of the entry to clip. - - - - Extract and print the content of a database. - - - - Path of the database to extract. - - - - Name of the command to execute. - - - - List database entries. - - - - Path of the group to list. Default is / - - - - Print the UUIDs of the entries and groups. - - - - Merge two databases. - - - - Path of the database to merge into. - - - - Path of the database to merge from. - - - - Use the same password for both database files. - - - - Show a password. - - - - Name of the entry to show. + No YubiKey inserted. diff --git a/share/translations/keepassx_ko.ts b/share/translations/keepassx_ko.ts index e7522e572..240fbaed2 100644 --- a/share/translations/keepassx_ko.ts +++ b/share/translations/keepassx_ko.ts @@ -11,7 +11,7 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> 사이트에 버그를 보고해 주십시오 + <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> 사이트에 버그를 보고해 주십시오 KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. @@ -37,36 +37,6 @@ Copy to clipboard 클립보드에 복사 - - Version %1 - - 버전 %1 - - - - Revision: %1 - 리비전: %1 - - - Distribution: %1 - 배포판: %1 - - - Libraries: - 라이브러리: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - 운영 체제: %1 -CPU 아키텍처: %2 -커널: %3 %4 - - - Enabled extensions: - 활성화된 확장 기능: - Project Maintainers: 프로젝트 관리자: @@ -75,36 +45,6 @@ CPU 아키텍처: %2 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP 접근 확인 - - - Remember this decision - 이 선택 기억하기 - - - Allow - 허용 - - - Deny - 거부 - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1에서 다음 항목의 암호를 요청했습니다. -접근을 허용할 지 여부를 선택하십시오. - AgentSettingsWidget @@ -112,6 +52,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) SSH 에이전트 사용(다시 시작 필요) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + 프로그램 설정 + + + General + 일반 + + + Security + 보안 + + + Access error for config file %1 + 설정 파일 %1에 접근할 수 없음 + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + 기본 설정 + + + Startup + 시작 + + + Start only a single instance of KeePassXC + KeePassXC 단일 인스턴스만 사용 + + + Remember last databases + 마지막 데이터베이스 기억 + + + Remember last key files and security dongles + 마지막 키 파일과 보안 동글 기억 + + + Load previous databases on startup + 시작할 때 이전 데이터베이스 불러오기 + + + Minimize window at application startup + 프로그램 시작 시 창 최소화 + + + File Management + 파일 관리 + + + Safely save database files (may be incompatible with Dropbox, etc) + 데이터베이스 파일 안전 저장(Dropbox 등과 호환되지 않을 수 있음) + + + Backup database file before saving + 저장하기 전에 데이터베이스 파일 백업 + + + Automatically save after every change + 항목을 변경할 때 자동 저장 + + + Automatically save on exit + 끝낼 때 자동 저장 + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + 데이터가 변경되지 않았을 때 데이터베이스를 수정된 것으로 표시하지 않음(예: 그룹 확장) + + + Automatically reload the database when modified externally + 외부에서 데이터베이스를 수정했을 때 자동으로 새로 고침 + + + Entry Management + 항목 관리 + + + Use group icon on entry creation + 항목을 만들 때 그룹 아이콘 사용 + + + Minimize when copying to clipboard + 클립보드에 복사할 때 최소화 + + + Hide the entry preview panel + + + + General + 일반 + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + 시스템 트레이 아이콘 표시 + + + Dark system tray icon + 어두운 시스템 트레이 아이콘 + + + Hide window to system tray when minimized + 시스템 트레이로 최소화 + + + Language + 언어 + + + Auto-Type + 자동 입력 + + + Use entry title to match windows for global Auto-Type + 전역 자동 입력 시 창 제목을 항목 제목에서 검색 + + + Use entry URL to match windows for global Auto-Type + 전역 자동 입력 시 창 제목을 항목 URL에서 검색 + + + Always ask before performing Auto-Type + 자동 입력 시 항상 묻기 + + + Global Auto-Type shortcut + 전역 자동 입력 단축키 + + + Auto-Type typing delay + + + + ms + Milliseconds + ms + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + 시간 제한 + + + Clear clipboard after + 다음 시간 이후 클립보드 비우기 + + + sec + Seconds + + + + Lock databases after inactivity of + 다음 시간 동안 활동이 없을 때 데이터베이스 잠금 + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + 편의성 + + + Lock databases when session is locked or lid is closed + 세션이 잠겼을 때나 덮개를 닫았을 때 데이터베이스 잠금 + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + 창을 최소화할 때 데이터베이스 잠금 + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + 암호가 보일 때 반복하지 않음 + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + 기본값으로 암호 숨기기 + + + Privacy + 개인 정보 + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -214,6 +425,26 @@ Please select whether you want to allow access. 접근을 허용할 지 여부를 선택하십시오. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + 취소 + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -287,14 +518,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension 사용자 이름 순으로 일치하는 항목 정렬(&U) - - &Disconnect all browsers - 모든 브라우저 연결 해제(&D) - - - Forget all remembered &permissions - 모든 기억한 권한 잊기(&P) - Advanced 고급 @@ -360,20 +583,41 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>경고:</b> 다음 옵션은 신중하게 사용하십시오! - - Executable Files (*.exe);;All Files (*.*) - 실행 파일 (*.exe);;모든 파일(*.*) - - - Executable Files (*) - 실행 파일 (*) - Select custom proxy location 사용자 정의 프록시 위치 지정 - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 @@ -415,153 +659,54 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? %1 - %2의 정보를 업데이트하시겠습니까? - - KeePassXC: Database locked! - KeePassXC: 데이터베이스 잠김! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 활성 데이터베이스가 잠겨 있습니다! -선택한 데이터베이스의 잠금을 풀거나 잠금이 풀린 데이터베이스를 선택하십시오. - - - KeePassXC: Settings not available! - KeePassXC: 설정을 사용할 수 없음! - - - The active database does not contain a settings entry. - 활성 데이터베이스에 설정 항목이 없습니다. - - - KeePassXC: No keys found - KeePassXC: 키를 찾을 수 없음 - - - No shared encryption keys found in KeePassXC Settings. - KeePassXC 설정에서 공유 암호화 키를 찾을 수 없습니다. - - - KeePassXC: Removed keys from database - KeePassXC: 데이터베이스에서 키 삭제됨 - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - 저장된 권한 삭제 중... - Abort 중지 - KeePassXC: Removed permissions - KeePassXC: 권한 삭제됨 + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: 권한이 있는 항목을 찾을 수 없음! + KeePassXC: No entry with KeePassHTTP attributes found! + - The active database does not contain an entry with permissions. - 활성 데이터베이스에 권한이 부여된 항목이 없습니다. - - - - ChangeMasterKeyWidget - - Password - 암호 + The active database does not contain an entry with KeePassHTTP attributes. + - Enter password: - 암호 입력: + KeePassXC: Legacy browser integration settings detected + - Repeat password: - 암호 확인: + KeePassXC: Create a new group + - &Key file - 키 파일(&K) + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - 찾아보기 - - - Create - 만들기 - - - Cha&llenge Response - 질의 응답(&L) - - - Refresh - 새로 고침 - - - Key files - 키 파일 - - - All files - 모든 파일 - - - Create Key File... - 키 파일 만들기... - - - Unable to create Key File : - 키 파일을 만들 수 없습니다: - - - Select a key file - 키 파일 선택 - - - Empty password - 빈 암호 - - - Do you really want to use an empty string as password? - 빈 문자열을 암호로 사용하시겠습니까? - - - Different passwords supplied. - 다른 암호를 입력하였습니다. - - - Failed to set %1 as the Key file: -%2 - %1을(를) 키 파일로 설정할 수 없습니다: %2 - - - Legacy key file format - 레거시 키 파일 형식 - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - 차후 버전에서 지원이 중단될 예정인 레거시 키 파일 -형식을 사용하고 있습니다. - -새 키 파일을 생성하는 것을 추천합니다. - - - Changing master key failed: no YubiKey inserted. - 마스터 키를 변경할 수 없음: YubiKey가 없습니다. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -641,66 +786,98 @@ Please consider generating a new key file. Not present in CSV file CSV 파일에 없음 - - Empty fieldname - 빈 필드 이름 - - - column - - Imported from CSV file CSV 파일에서 가져옴 Original data: - 원본 데이터: - - - Error(s) detected in CSV file ! - CSV 파일에 오류가 있습니다! - - - more messages skipped] - 개 메시지 더 건너뜀] + 원본 데이터: Error 오류 + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - CSV 가져오기: 기록 중 오류 발생: - - - - - CsvImportWizard - - Error - 오류 - - - Unable to calculate master key - 마스터 키를 계산할 수 없습니다 +%1 + CsvParserModel - - %n byte(s), - %n 바이트, - - - %n row(s), - %n줄, - %n column(s) %n칸 + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + 루트 + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + DatabaseOpenWidget @@ -728,14 +905,6 @@ Please consider generating a new key file. Challenge Response: 질의 응답: - - Unable to open the database. - 데이터베이스를 열 수 없습니다. - - - Can't open key file - 키 파일을 열 수 없음 - Legacy key file format 레거시 키 파일 형식 @@ -766,53 +935,248 @@ Please consider generating a new key file. Select key file 키 파일 선택 - - - DatabaseRepairWidget - Repair database - 데이터베이스 복구 + TouchID for quick unlock + - Error - 오류 + Unable to open the database: +%1 + - Can't open key file - 키 파일을 열 수 없음 - - - Unable to open the database. - 데이터베이스를 열 수 없습니다. - - - Database opened fine. Nothing to do. - 데이터베이스를 열었습니다. 할 일이 없습니다. - - - Success - 성공 - - - The database has been successfully repaired -You can now save it. - 데이터베이스를 복구했습니다 -이제 저장할 수 있습니다. - - - Unable to repair the database. - 데이터베이스를 복구할 수 없습니다. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + 암호 + + + + DatabaseSettingsDialog + + Advanced Settings + + General 일반 - Encryption - 암호화 + Security + 보안 + + + Master Key + + + + Encryption Settings + + + + Browser Integration + 브라우저 통합 + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + 모든 브라우저 연결 해제(&D) + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + 삭제 + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: 키를 찾을 수 없음 + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: 데이터베이스에서 키 삭제됨 + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + 저장된 권한 삭제 중... + + + Abort + 중지 + + + KeePassXC: Removed permissions + KeePassXC: 권한 삭제됨 + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: 권한이 있는 항목을 찾을 수 없음! + + + The active database does not contain an entry with permissions. + 활성 데이터베이스에 권한이 부여된 항목이 없습니다. + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + 암호화 알고리즘: + + + AES: 256 Bit (default) + AES: 256비트(기본값) + + + Twofish: 256 Bit + Twofish: 256비트 + + + Key Derivation Function: + 키 유도 함수: + + + Transform rounds: + 변환 횟수: + + + Benchmark 1-second delay + 1초 지연 벤치마크 + + + Memory Usage: + 메모리 사용량: + + + Parallelism: + 스레드 수: + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -866,40 +1230,15 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - 암호화 알고리즘: + + %1 ms + milliseconds + - - AES: 256 Bit (default) - AES: 256비트(기본값) - - - Twofish: 256 Bit - Twofish: 256비트 - - - Key Derivation Function: - 키 유도 함수: - - - Transform rounds: - 변환 횟수: - - - Benchmark 1-second delay - 1초 지연 벤치마크 - - - Memory Usage: - 메모리 사용량: - - - Parallelism: - 스레드 수: + + %1 s + seconds + @@ -950,12 +1289,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - 루트 + Sharing + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + 알 수 없는 오류 + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 데이터베이스 @@ -968,30 +1378,10 @@ If you keep this number, your database may be too easy to crack! Open database 데이터베이스 열기 - - File not found! - 파일을 찾을 수 없습니다! - - - Unable to open the database. - 데이터베이스를 열 수 없습니다. - - - File opened in read only mode. - 파일을 읽기 전용 모드로 열었습니다. - - - Open CSV file - CSV 파일 열기 - CSV file CSV 파일 - - All files (*) - 모든 파일 (*) - Merge database 데이터베이스 합치기 @@ -1004,37 +1394,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 데이터베이스 - - Close? - 닫기 확인? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1"이(가) 현재 편집 모드입니다. -변경 사항을 무시하고 닫으시겠습니까? - - - Save changes? - 변경 사항 저장 확인? - - - "%1" was modified. -Save changes? - "%1"이(가) 변경되었습니다. 저장하시겠습니까? - - - Writing the database failed. - 데이터베이스에 쓸 수 없습니다. - - - Passwords - 암호 - - - Save database as - 다른 이름으로 데이터베이스 저장 - Export database to CSV file 데이터베이스를 CSV 파일로 내보내기 @@ -1044,40 +1403,40 @@ Save changes? CSV 파일에 기록할 수 없습니다. - New database - 새 데이터베이스 + Database creation error + - locked - 잠김 + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - Lock database - 데이터베이스 잠금 + The database file does not exist or is not accessible. + - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - 데이터베이스를 편집하고 있어서 잠글 수 없습니다. -취소를 눌러서 변경 사항을 저장하거나 무시하십시오. + Select CSV file + - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - 데이터베이스가 수정되었습니다. -잠그기 전에 데이터베이스를 저장하시겠습니까? -저장하지 않은 변경 사항은 손실됩니다. + New Database + - Disable safe saves? - 안전 저장을 비활성화 하시겠습니까? + %1 [New Database] + Database tab name modifier + - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC에서 데이터베이스를 여러 번 저장하려고 시도했으나 실패했습니다. 파일 동기화 서비스에서 데이터베이스 파일을 잠근 것 같습니다. -안전 저장을 비활성화 한 다음 다시 시도하시겠습니까? + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + @@ -1086,38 +1445,14 @@ Disable safe saves and try again? Searching... 찾는 중... - - Change master key - 마스터 키 변경 - - - Delete entry? - 항목을 삭제하시겠습니까? - Do you really want to delete the entry "%1" for good? 정말 항목 "%1"을(를) 삭제하시겠습니까? - - Delete entries? - 항목을 삭제하시겠습니까? - - - Do you really want to delete %1 entries for good? - 정말 항목 %1개를 삭제하시겠습니까? - - - Move entry to recycle bin? - 항목을 휴지통으로 이동하시겠습니까? - Do you really want to move entry "%1" to the recycle bin? 항목 "%1"을(를) 휴지통으로 이동하시겠습니까? - - Move entries to recycle bin? - 항목을 휴지통으로 이동하시겠습니까? - Do you really want to move %n entry(s) to the recycle bin? 항목 %n개를 휴지통으로 이동하시겠습니까? @@ -1134,18 +1469,10 @@ Disable safe saves and try again? Remember my choice 이 선택 기억하기 - - Delete group? - 그룹을 삭제하시겠습니까? - Do you really want to delete the group "%1" for good? 정말 그룹 "%1"을(를) 삭제하시겠습니까? - - Unable to calculate master key - 마스터 키를 계산할 수 없음 - No current database. 현재 데이터베이스가 없습니다. @@ -1180,10 +1507,6 @@ Do you want to merge your changes? 데이터베이스 파일이 변경되었고 저장하지 않은 변경 사항이 있습니다. 변경 사항을 합치겠습니까? - - Could not open the new database file while attempting to autoreload this database. - 이 데이터베이스를 자동으로 다시 불러오는 중 새 데이터베이스를 열 수 없습니다. - Empty recycle bin? 휴지통을 비우시겠습니까? @@ -1192,88 +1515,107 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? 휴지통에 있는 항목을 영원히 삭제하시겠습니까? - - - DetailsWidget - - Generate TOTP Token - TOTP 토큰 생성 + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - 닫기 + File opened in read only mode. + 파일을 읽기 전용 모드로 열었습니다. - General - 일반 + Lock Database? + - Password + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1"이(가) 변경되었습니다. 저장하시겠습니까? + + + Database was modified. +Save changes? + + + + Save changes? + 변경 사항 저장 확인? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + 안전 저장을 비활성화 하시겠습니까? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC에서 데이터베이스를 여러 번 저장하려고 시도했으나 실패했습니다. 파일 동기화 서비스에서 데이터베이스 파일을 잠근 것 같습니다. +안전 저장을 비활성화 한 다음 다시 시도하시겠습니까? + + + Writing the database failed. +%1 + + + + Passwords 암호 - URL - URL + Save database as + 다른 이름으로 데이터베이스 저장 - Expiration - 만료 + KeePass 2 Database + KeePass 2 데이터베이스 - Username - 사용자 이름 + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Autotype - 자동 입력 + Delete group + 그룹 삭제 - Searching - 찾기 + Move group to recycle bin? + - Attributes - 속성 + Do you really want to move the group "%1" to the recycle bin? + - Attachments - 첨부 + Successfully merged the database files. + - Notes - 메모 + Database was not modified by merge operation. + - Window - - - - Sequence - 시퀀스 - - - Search - 찾기 - - - Clear - 비우기 - - - Never - 하지 않음 - - - [PROTECTED] - [보호됨] - - - Disabled - 사용 안함 - - - Enabled - 사용함 + Shared group... + @@ -1346,22 +1688,10 @@ Do you want to merge your changes? New attribute 새 속성 - - Confirm Remove - 삭제 확인 - Are you sure you want to remove this attribute? 이 속성을 삭제하시겠습니까? - - [PROTECTED] - [보호됨] - - - Press reveal to view or edit - 보거나 편집하려면 누르십시오 - Tomorrow 내일 @@ -1374,10 +1704,6 @@ Do you want to merge your changes? %n month(s) %n개월 - - 1 year - 1년 - Apply generated password? @@ -1390,6 +1716,26 @@ Do you want to merge your changes? Entry updated successfully. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + [보호됨] 보거나 편집하려면 누르십시오 + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1634,6 +1980,97 @@ Do you want to merge your changes? 부모 그룹에서 상속(%1) + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + 암호: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + 비우기 + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1691,10 +2128,6 @@ Do you want to merge your changes? Unable to fetch favicon. 파비콘을 다운로드할 수 없습니다. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - 힌트: 도구 > 설정 > 보안에서 Google을 대체 항목으로 사용할 수 있습니다 - Images 그림 @@ -1703,14 +2136,6 @@ Do you want to merge your changes? All files 모든 파일 - - Select Image - 그림 선택 - - - Can't read icon - 아이콘을 읽을 수 없음 - Custom icon already exists 사용자 정의 아이콘이 이미 존재함 @@ -1720,8 +2145,36 @@ Do you want to merge your changes? 삭제 확인 - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - 이 아이콘을 항목 %1개에서 사용하고 있으며, 삭제 시 기본 아이콘으로 대체됩니다. 그래도 삭제하시겠습니까? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1771,9 +2224,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - 사본 + %1 - Clone + @@ -1815,11 +2267,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - 삭제 확인 + 첨부 항목 %n개를 삭제하시겠습니까? Save attachments @@ -1858,10 +2306,13 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - 파일을 열 수 없음: -%1 + @@ -1945,6 +2396,106 @@ This may cause the affected plugins to malfunction. Attachments 첨부 + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + TOTP 토큰 생성 + + + Close + 닫기 + + + General + 일반 + + + Username + 사용자 이름 + + + Password + 암호 + + + Expiration + 만료 + + + URL + URL + + + Attributes + 속성 + + + Attachments + 첨부 + + + Notes + 메모 + + + Autotype + 자동 입력 + + + Window + + + + Sequence + 시퀀스 + + + Searching + 찾기 + + + Search + 찾기 + + + Clear + 비우기 + + + Never + 하지 않음 + + + [PROTECTED] + [보호됨] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + 사용함 + + + Disabled + 사용 안함 + + + Share + + EntryView @@ -1983,6 +2534,11 @@ This may cause the affected plugins to malfunction. Recycle Bin 휴지통 + + [empty] + group has no children + + HostInstaller @@ -1995,61 +2551,6 @@ This may cause the affected plugins to malfunction. 네이티브 메시징 스크립트 파일을 저장할 수 없습니다. - - HttpPasswordGeneratorWidget - - Length: - 길이: - - - Character Types - 문자 종류 - - - Upper Case Letters - 대문자 - - - A-Z - A-Z - - - Lower Case Letters - 소문자 - - - a-z - a-z - - - Numbers - 숫자 - - - 0-9 - 0-9 - - - Special Characters - 특수 문자 - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - 비슷하게 생긴 문자 제외 - - - Ensure that the password contains characters from every group - 모든 그룹에서 최소 1글자 이상 포함 - - - Extended ASCII - 확장 ASCII - - KMessageWidget @@ -2075,6 +2576,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. 키가 잘못되었거나 데이터베이스가 손상되었습니다. + + missing database headers + 데이터베이스 헤더 없음 + + + Header doesn't match hash + + + + Invalid header id size + 잘못된 헤더 ID 크기 + + + Invalid header field length + 잘못된 헤더 필드 길이 + + + Invalid header data length + 잘못된 헤더 데이터 길이 + Kdbx3Writer @@ -2233,10 +2754,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - 잘못됨 암호화 UUID 길이 - Unsupported cipher 지원하지 않는 암호화 @@ -2291,6 +2808,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. 지원하지 않는 KeePass 2 데이터베이스 버전입니다. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2362,10 +2891,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid 다른 UUID를 사용하는 과거 기록 원소 - - Unable to decrypt entry string - 항목 문자열을 복호화할 수 없음 - Duplicate custom attribute found 중복된 사용자 정의 속성이 있음 @@ -2415,6 +2940,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry 바이너리 압축을 해제할 수 없음 + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2480,7 +3011,7 @@ This is a one-way migration. You won't be able to open the imported databas Unable to calculate master key - 마스터 키를 계산할 수 없음 + 마스터 키를 계산할 수 없습니다 Wrong key or database file is corrupt. @@ -2578,55 +3109,142 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type 잘못된 항목 필드 크기 - - - KeePass2 - AES: 256-bit - AES: 256비트 - - - Twofish: 256-bit - Twofish: 256비트 - - - ChaCha20: 256-bit - ChaCha20: 256비트 - - - AES-KDF (KDBX 4) - AES-KDF(KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF(KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2(KDBX 4 – 추천) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - 존재하는 단일 인스턴스 잠금 파일이 잘못되었습니다. 새 인스턴스를 실행합니다. + Disabled share + - The lock file could not be created. Single-instance mode disabled. - 잠금 파일을 만들 수 없습니다. 단일 인스턴스 모드가 비활성화되었습니다. + Import from + - Another instance of KeePassXC is already running. - 다른 KeePassXC 인스턴스가 이미 실행 중입니다. + Export to + - Fatal error while testing the cryptographic functions. - 암호화 함수를 시험하는 중 오류가 발생하였습니다. + Synchronize with + - KeePassXC - Error - KeePassXC - 오류 + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + 취소 + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + 찾아보기 + + + Generate + 생성 + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + 레거시 키 파일 형식 + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + 키 파일 + + + All files + 모든 파일 + + + Create Key File... + 키 파일 만들기... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + 키 파일 선택 @@ -2639,10 +3257,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases 최근 데이터베이스(&R) - - Import - 가져오기 - &Help 도움말(&H) @@ -2651,14 +3265,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries 항목(&N) - - Copy att&ribute to clipboard - 속성을 클립보드에 복사(&R) - - - Time-based one-time password - 시간 기반 일회용 암호 - &Groups 그룹(&G) @@ -2687,30 +3293,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database 데이터베이스 닫기(&C) - - &New database - 새 데이터베이스(&N) - - - Merge from KeePassX database - KeePassX 데이터베이스에서 합치기 - - - &Add new entry - 새 항목 추가(&A) - - - &View/Edit entry - 항목 보기/편집(&V) - &Delete entry 항목 삭제(&D) - - &Add new group - 새 그룹 추가(&A) - &Edit group 그룹 편집(&E) @@ -2723,14 +3309,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... 다른 이름으로 데이터베이스 저장(&V)... - - Change &master key... - 마스터 키 변경(&M)... - - - &Database settings - 데이터베이스 설정(&D) - Database settings 데이터베이스 설정 @@ -2739,10 +3317,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry 항목 복제(&C) - - &Find - 찾기(&F) - Copy &username 사용자 이름 복사(&U) @@ -2751,10 +3325,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard 클립보드에 사용자 이름 복사 - - Cop&y password - 암호 복사(&Y) - Copy password to clipboard 클립보드에 암호 복사 @@ -2767,14 +3337,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator 암호 생성기 - - &Perform Auto-Type - 자동 입력 실행(&P) - - - &Open URL - URL 열기(&O) - &Lock databases 데이터베이스 잠금(&L) @@ -2807,22 +3369,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... CSV 파일로 내보내기(&E)... - - Import KeePass 1 database... - KeePass1 데이터베이스 가져오기... - - - Import CSV file... - CSV 파일 가져오기... - - - Re&pair database... - 데이터베이스 복구(&P)... - - - Show TOTP - TOTP 보이기 - Set up TOTP... TOTP 설정... @@ -2843,14 +3389,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 설정 파일 %1에 접근할 수 없음 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>KeePassHTTP 브라우저 통합을 사용하고 있는 것 같습니다. 이 기능은 폐기 예고되었고 차후에 삭제될 예정입니다.<br>KeePassXC-브라우저로 교체하십시오! 이전 작업에 도움이 필요하면 <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">이전 가이드</a>를 참고하십시오(경고 %1/3).</p> - - - read-only - 읽기 전용 - Settings 설정 @@ -2863,26 +3401,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC KeePassXC 끝내기 - - KeePass 2 Database - KeePass 2 데이터베이스 - - - All files - 모든 파일 - - - Open database - 데이터베이스 열기 - - - Save repaired database - 복구한 데이터베이스 저장 - - - Writing the database failed. - 데이터베이스에 쓸 수 없습니다. - Please touch the button on your YubiKey! YubiKey의 단추를 누르십시오! @@ -2895,6 +3413,267 @@ This version is not meant for production use. 데이터베이스 파일이 잘못될 가능성이 높으므로 항상 데이터베이스를 백업하십시오. 이 버전은 실제 환경에서 사용을 가정하지 않습니다. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + 루트 + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2996,125 +3775,30 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - 대화 상자 + Enter password: + 암호 입력: - This is required for accessing your databases from ChromeIPass or PassIFox - ChromeIPass나 PassIFox에서 데이터베이스에 접근하려면 필요합니다 + Confirm password: + - Enable KeePassHTTP server - KeePassHTTP 서버 사용 + Password + 암호 - General - 일반 + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - 인증 정보가 필요할 때 알림 표시(&O) + Passwords do not match. + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - 도메인이 일치하는 모든 항목 대신 지정한 URL과 일치하는 항목만 반환합니다. - - - &Return only best matching entries - URL과 일치하는 항목만 반환(&R) - - - Re&quest to unlock the database if it is locked - 데이터베이스가 잠겼을 때 잠금 해제 요청(&Q) - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - 같은 스키마(http://, https://, ftp://)를 사용하는 항목만 반환합니다. - - - &Match URL schemes - URL 스키마 일치(&M) - - - Sort matching entries by &username - 사용자 이름 순으로 일치하는 항목 정렬(&U) - - - Sort &matching entries by title - 제목 순으로 일치하는 항목 정렬(&M) - - - R&emove all shared encryption keys from active database - 활성 데이터베이스에 있는 모든 공유된 암호화 키 삭제(&E) - - - Re&move all stored permissions from entries in active database - 활성 데이터베이스에 있는 항목에서 모든 저장된 권한 삭제(&M) - - - Password Generator - 암호 생성기 - - - Advanced - 고급 - - - Always allow &access to entries - 항상 항목 접근 허용(&A) - - - Always allow &updating entries - 항상 항목 업데이트 허용(&U) - - - Only the selected database has to be connected with a client. - 선택한 데이터베이스만 클라이언트와 연결할 수 있습니다. - - - Searc&h in all opened databases for matching entries - 모든 열린 데이터베이스에서 일치하는 항목 검색(&H) - - - Automatically creating or updating string fields is not supported. - 문자열 필드를 자동으로 만들거나 업데이트하는 것은 지원되지 않습니다. - - - &Return advanced string fields which start with "KPH: " - "KPH: "로 시작하는 고급 문자열 필드 반환(&R) - - - HTTP Port: - HTTP 포트: - - - Default port: 19455 - 기본 포트: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC는 127.0.0.1의 다음 포트에서 응답을 기다립니다 - - - <b>Warning:</b> The following options can be dangerous! - <b>경고:</b> 다음 옵션은 신중하게 사용하십시오! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP는 폐기 예고되었고 차후에 삭제될 예정입니다.<br>KeePassXC-브라우저로 교체하십시오! 이전 작업에 도움이 필요하면 <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">이전 가이드</a>를 참고하십시오.</p> - - - Cannot bind to privileged ports - 권한 있는 포트에 바인드할 수 없음 - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - 1024 이하의 권한이 필요한 포트에 바인드할 수 없습니다! -기본 포트 19455를 사용합니다. + Generate master password + @@ -3184,18 +3868,10 @@ Using default port 19455. Wordlist: 단어 목록: - - Word Count: - 단어 개수: - Word Separator: 단어 구분자: - - Generate - 생성 - Copy 복사 @@ -3208,10 +3884,6 @@ Using default port 19455. Close 닫기 - - Apply - 적용 - Entropy: %1 bit 엔트로피: %1비트 @@ -3240,6 +3912,171 @@ Using default port 19455. Password quality 매우 좋음 + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + 고급 + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + 삭제 + + + Move + + + + Empty + + + + Remove + 삭제 + + + Skip + + + + Disable + 비활성화 + + + Merge + + QObject @@ -3259,34 +4096,18 @@ Using default port 19455. Cannot decrypt message 메시지를 복호화할 수 없음 - - Timeout or cannot connect to KeePassXC - KeePassXC에 연결할 수 없거나 시간 초과됨 - Action cancelled or denied 접근이 취소되었거나 거부됨 - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - 메시지를 암호화할 수 없거나 비밀 키를 찾을 수 없습니다. KeePassXC 네이티브 메시징이 활성화되어 있습니까? - KeePassXC association failed, try again KeePassXC 연결 실패, 다시 시도하십시오 - - Key change was not successful - 키 교환 실패 - Encryption key is not recognized 암호화 키를 인식할 수 없음 - - No saved databases found - 저장된 데이터베이스를 찾을 수 없음 - Incorrect action 잘못된 동작 @@ -3412,10 +4233,6 @@ Using default port 19455. Insert password to unlock %1: %1의 잠금 해제 암호 입력: - - Failed to load key file %1 : %2 - 키 파일 %1을(를) 불러올 수 없음: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3500,12 +4317,6 @@ Available commands: error reading from device 장치에서 읽는 중 오류 발생 - - file empty ! - - 파일이 비어 있습니다! - - malformed string 잘못된 문자열 @@ -3542,10 +4353,6 @@ Available commands: Created 생성 - - Legacy Browser Integration - 레거시 브라우저 통합 - Browser Integration 브라우저 통합 @@ -3574,10 +4381,6 @@ Available commands: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3588,27 +4391,441 @@ Available commands: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256비트 + + + Twofish: 256-bit + Twofish: 256비트 + + + ChaCha20: 256-bit + ChaCha20: 256비트 + + + Argon2 (KDBX 4 – recommended) + Argon2(KDBX 4 – 추천) + + + AES-KDF (KDBX 4) + AES-KDF(KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF(KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + 데이터베이스에서 항목을 삭제합니다. + + + Path of the entry to remove. + 삭제할 항목의 경로입니다. + + + Existing single-instance lock file is invalid. Launching new instance. + 존재하는 단일 인스턴스 잠금 파일이 잘못되었습니다. 새 인스턴스를 실행합니다. + + + The lock file could not be created. Single-instance mode disabled. + 잠금 파일을 만들 수 없습니다. 단일 인스턴스 모드가 비활성화되었습니다. + + + KeePassXC - cross-platform password manager + KeePassXC - 크로스 플랫폼 암호 관리자 + + + filenames of the password databases to open (*.kdbx) + 열 암호 데이터베이스 파일 이름(*.kdbx) + + + path to a custom config file + 사용자 정의 설정 파일 경로 + + + key file of the database + 데이터베이스 키 파일 + + + read password of the database from stdin + 표준 입력에서 데이터베이스 암호 읽기 + + + Parent window handle + 부모 창 핸들 + + + Another instance of KeePassXC is already running. + 다른 KeePassXC 인스턴스가 이미 실행 중입니다. + + + Fatal error while testing the cryptographic functions. + 암호화 함수를 시험하는 중 오류가 발생하였습니다. + + + KeePassXC - Error + KeePassXC - 오류 + + + Database password: + + + + Cannot create new group @@ -3616,23 +4833,23 @@ Available commands: QtIOCompressor Internal zlib error when compressing: - 압축 중 내부 zlib 오류 발생: + 압축 중 내부 zlib 오류 발생: Error writing to underlying device: - 장치에 기록하는 중 오류 발생: + 장치에 기록하는 중 오류 발생: Error opening underlying device: - 장치를 여는 중 오류 발생: + 장치를 여는 중 오류 발생: Error reading data from underlying device: - 장치에서 읽는 중 오류 발생: + 장치에서 읽는 중 오류 발생: Internal zlib error when decompressing: - 압축 푸는 중 내부 zlib 오류 발생: + 압축 푸는 중 내부 zlib 오류 발생: @@ -3647,11 +4864,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - 찾기... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search 찾기 @@ -3660,315 +4963,332 @@ Available commands: Clear 비우기 - - Case Sensitive - 대소문자 구분 - Limit search to selected group 지정한 그룹에서만 찾기 - - - Service - KeePassXC: New key association request - KeePassXC: 새 키 연결 요청 + Search Help + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - 위에 있는 키의 연결 요청을 받았습니다. -해딩 키에서 KeePassXC 데이터베이스 접근을 허용하려면 -식별할 수 있는 이름을 부여한 후 수락하십시오. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + - KeePassXC: Overwrite existing key? - KeePassXC: 기존 키를 덮어쓰시겠습니까? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - 이름이 "%1"인 공유 암호화 키가 이미 있습니다. -덮어쓰시겠습니까? - - - KeePassXC: Update Entry - KeePassXC: 항목 업데이트 - - - Do you want to update the information in %1 - %2? - %1 - %2의 정보를 업데이트하시겠습니까? - - - KeePassXC: Database locked! - KeePassXC: 데이터베이스 잠김! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 활성 데이터베이스가 잠겨 있습니다! -선택한 데이터베이스의 잠금을 풀거나 잠금이 풀린 데이터베이스를 선택하십시오. - - - KeePassXC: Removed keys from database - KeePassXC: 데이터베이스에서 키 삭제됨 - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - KeePassX/HTTP 설정에서 암호화 키 %n개를 삭제했습니다. - - - KeePassXC: No keys found - KeePassXC: 키를 찾을 수 없음 - - - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp 설정에서 공유 암호화 키를 찾을 수 없습니다. - - - KeePassXC: Settings not available! - KeePassXC: 설정을 사용할 수 없음! - - - The active database does not contain an entry of KeePassHttp Settings. - 활성 데이터베이스에 KeePassHttp 설정 항목이 없습니다. - - - Removing stored permissions... - 저장된 권한 삭제 중... - - - Abort - 중지 - - - KeePassXC: Removed permissions - KeePassXC: 권한 삭제됨 - - - Successfully removed permissions from %n entries. - 항목 %n개에 저장된 권한을 삭제했습니다. - - - KeePassXC: No entry with permissions found! - KeePassXC: 권한이 있는 항목을 찾을 수 없음! - - - The active database does not contain an entry with permissions. - 활성 데이터베이스에 권한이 부여된 항목이 없습니다. + Case sensitive + 대소문자 구분 - SettingsWidget + SettingsWidgetKeeShare - Application Settings - 프로그램 설정 + Active + - General - 일반 + Allow export + - Security - 보안 + Allow import + - Access error for config file %1 - 설정 파일 %1에 접근할 수 없음 - - - - SettingsWidgetGeneral - - Basic Settings - 기본 설정 + Own certificate + - Start only a single instance of KeePassXC - KeePassXC 단일 인스턴스만 사용 + Fingerprint: + - Remember last databases - 마지막 데이터베이스 기억 + Certificate: + - Remember last key files and security dongles - 마지막 키 파일과 보안 동글 기억 + Signer + - Load previous databases on startup - 시작할 때 이전 데이터베이스 불러오기 + Key: + 키: - Automatically save on exit - 끝낼 때 자동 저장 + Generate + 생성 - Automatically save after every change - 항목을 변경할 때 자동 저장 + Import + 가져오기 - Automatically reload the database when modified externally - 외부에서 데이터베이스를 수정했을 때 자동으로 새로 고침 + Export + - Minimize when copying to clipboard - 클립보드에 복사할 때 최소화 + Imported certificates + - Minimize window at application startup - 프로그램 시작 시 창 최소화 + Trust + - Use group icon on entry creation - 항목을 만들 때 그룹 아이콘 사용 + Ask + - Don't mark database as modified for non-data changes (e.g., expanding groups) - 데이터가 변경되지 않았을 때 데이터베이스를 수정된 것으로 표시하지 않음(예: 그룹 확장) + Untrust + - Hide the Details view - 자세히 보기 숨기기 + Remove + 삭제 - Show a system tray icon - 시스템 트레이 아이콘 표시 + Path + - Hide window to system tray when minimized - 시스템 트레이로 최소화 + Status + - Hide window to system tray instead of app exit - 프로그램을 끝내지 않고 시스템 트레이로 창 숨기기 + Fingerprint + 지문 - Dark system tray icon - 어두운 시스템 트레이 아이콘 + Certificate + - Language - 언어 + Trusted + - Auto-Type - 자동 입력 + Untrusted + - Use entry title to match windows for global Auto-Type - 전역 자동 입력 시 창 제목을 항목 제목에서 검색 + Unknown + - Use entry URL to match windows for global Auto-Type - 전역 자동 입력 시 창 제목을 항목 URL에서 검색 + key.share + Filetype for KeeShare key + - Always ask before performing Auto-Type - 자동 입력 시 항상 묻기 + KeeShare key file + - Global Auto-Type shortcut - 전역 자동 입력 단축키 + All files + 모든 파일 - Auto-Type delay - 자동 입력 지연 시간 + Select path + - ms - Milliseconds - ms + Exporting changed certificate + - Startup - 시작 + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - File Management - 파일 관리 - - - Safely save database files (may be incompatible with Dropbox, etc) - 데이터베이스 파일 안전 저장(Dropbox 등과 호환되지 않을 수 있음) - - - Backup database file before saving - 저장하기 전에 데이터베이스 파일 백업 - - - Entry Management - 항목 관리 - - - General - 일반 - - - - SettingsWidgetSecurity - - Timeouts - 시간 제한 - - - Clear clipboard after - 다음 시간 이후 클립보드 비우기 - - - sec - Seconds - - - - Lock databases after inactivity of - 다음 시간 동안 활동이 없을 때 데이터베이스 잠금 - - - Convenience - 편의성 - - - Lock databases when session is locked or lid is closed - 세션이 잠겼을 때나 덮개를 닫았을 때 데이터베이스 잠금 - - - Lock databases after minimizing the window - 창을 최소화할 때 데이터베이스 잠금 - - - Don't require password repeat when it is visible - 암호가 보일 때 반복하지 않음 - - - Show passwords in cleartext by default - 기본값으로 암호를 평문으로 표시 - - - Hide passwords in the preview panel - 미리 보기 패널에서 암호 숨기기 - - - Hide entry notes by default - 기본값으로 암호 숨기기 - - - Privacy - 개인 정보 - - - Use Google as fallback for downloading website icons - 웹 사이트 아이콘의 대체 아이콘으로 Google 사용 - - - Re-lock previously locked database after performing Auto-Type + Signer: - SetupTotpDialog + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + 하지 않음 + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + 시간 제한된 암호 + + + 000000 + 000000 + + + Copy + 복사 + + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + 복사 + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. + + + + + TotpSetupDialog Setup TOTP TOTP 설정 @@ -3990,59 +5310,84 @@ Please unlock the selected database or choose another one which is unlocked.사용자 정의 설정 사용 - Note: Change these settings only if you know what you are doing. - 메모: 무엇을 하는 지 알고 있는 경우에만 이 설정을 변경하십시오. + Custom Settings + Time step: 시간 단계: - 8 digits - 8자리 - - - 6 digits - 6자리 + sec + Seconds + Code size: 코드 크기: - sec - Seconds - + 6 digits + 6자리 + + + 7 digits + + + + 8 digits + 8자리 - TotpDialog + UpdateCheckDialog - Timed Password - 시간 제한된 암호 + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - 복사 + Close + 닫기 - Expires in - 만료 시간: + Update Error! + - seconds - + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - 데이터베이스 잠금 해제 + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4077,42 +5422,26 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - 데이터베이스에서 항목을 삭제합니다. + Refresh + 새로 고침 - Path of the database. - 데이터베이스의 경로입니다. + YubiKey Challenge-Response + - Path of the entry to remove. - 삭제할 항목의 경로입니다. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC - 크로스 플랫폼 암호 관리자 + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - 열 암호 데이터베이스 파일 이름(*.kdbx) - - - path to a custom config file - 사용자 정의 설정 파일 경로 - - - key file of the database - 데이터베이스 키 파일 - - - read password of the database from stdin - 표준 입력에서 데이터베이스 암호 읽기 - - - Parent window handle - 부모 창 핸들 + No YubiKey inserted. + \ No newline at end of file diff --git a/share/translations/keepassx_la.ts b/share/translations/keepassx_la.ts new file mode 100644 index 000000000..cf9c711bb --- /dev/null +++ b/share/translations/keepassx_la.ts @@ -0,0 +1,5427 @@ + + + AboutDialog + + About KeePassXC + De KeePassXC + + + About + De + + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Nuntia errores ad: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + KeepPassXC distributum est secundum GNU Generalem Publicam Licentiam (GPL) vel versionem 2 vel (ad libitum) versionem 3. + + + Contributors + Contributores + + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vide Contributiones in GitHub</a> + + + Debug Info + Depurationis Informatio + + + Include the following information whenever you report a bug: + Includa informationem sequentem quandoque errorem nuntias: + + + Copy to clipboard + Exscribe ad aream transferendi + + + Revision: %1 + Revisio: %1 + + + Distribution: %1 + Distributio: %1 + + + Libraries: + Bibliotechae: + + + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + Systema operationis: %1 +CPU architectura: %2 +Nucleus: %3 %4 + + + Enabled extensions: + Extensiones habilitatae: + + + Project Maintainers: + Manutentores Projecti: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Egregias gratias ab KeePassXC Manus agunt ad debfx quod origniale KeepasX creavit. + + + Version %1 + + + + Build Type: %1 + + + + Auto-Type + Auto-Scribe + + + Browser Integration + Integratio cum Navigatore + + + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) + + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Habilita SSH Agentem (reinitium postulat) + + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Applicationis optiones + + + General + Generale + + + Security + Securitas + + + Access error for config file %1 + + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Optiones simplices + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + Memento ultimas datorum bases + + + Remember last key files and security dongles + Memento ultima archiva claviaria et donglia securitatis + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + + + + Automatically save on exit + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + + + + Hide the entry preview panel + + + + General + Generale + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + Lingua + + + Auto-Type + Auto-Scribe + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + ms + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + + + + sec + Seconds + sec + + + Lock databases after inactivity of + + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + Noli tesseram iterum intrandam postulare cum visibilis est + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + + + + Use DuckDuckGo as fallback for downloading website icons + + + + + AutoType + + Couldn't find an entry that matches the window title: + Non potest invenire nomen quod cum titulo fenestrae congruit. + + + Auto-Type - KeePassXC + Auto-Scribe - KeePassXC + + + Auto-Type + Auto-Scribe + + + The Syntax of your Auto-Type statement is incorrect! + Syntaxis Auto-Type sententiae est mendosa! + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + Hic Auto-Type iussus habet moram nimis longam. Num procedere vis? + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + Hic Auto-Type iussus habet clavium pressus nimis tardos. Num procedere vis? + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + Hic Auto-Type iussus habet argumenta quae nimis saepe repetuntur. Num procedere vis? + + + + AutoTypeAssociationsModel + + Window + Fenestra + + + Sequence + Sequentia + + + Default sequence + Sequentia defalta + + + + AutoTypeMatchModel + + Group + Classis + + + Title + Titulus + + + Username + Nomen usuari + + + Sequence + Sequentia + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + Auto-Scribe - KeePassXC + + + Select entry to Auto-Type: + Selige nomen ad Auto-Type: + + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + KeePassXC-Navigator Confirme Accessus + + + Remember this decision + Memento hanc decisionem + + + Allow + Permitte + + + Deny + Nega + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + + + BrowserOptionDialog + + Dialog + Dialogus + + + This is required for accessing your databases with KeePassXC-Browser + Necesse est hoc ut datorum bases KeePassXC-Navigatore accediantur. + + + Enable KeepassXC browser integration + Habilita Integrationem cum KeePassXC Navigatore + + + General + Generale + + + Enable integration for these browsers: + Habilita integrationem pro his navigatoribus: + + + &Google Chrome + + + + &Firefox + + + + &Chromium + + + + &Vivaldi + + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + + + + Re&quest to unlock the database if it is locked + + + + Only entries with the same scheme (http://, https://, ...) are returned. + + + + &Match URL scheme (e.g., https://...) + + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + + + + &Return only best-matching credentials + + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + + + + Advanced + + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + + + + Only the selected database has to be connected with a client. + + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + + + + Automatically creating or updating string fields is not supported. + + + + &Return advanced string fields which start with "KPH: " + + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + + + + Update &native messaging manifest files at startup + + + + Support a proxy application between KeePassXC and browser extension. + + + + Use a &proxy application between KeePassXC and browser extension + + + + Use a custom proxy location if you installed a proxy manually. + + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + + + + Browse... + Button for opening file dialog + + + + <b>Warning:</b> The following options can be dangerous! + + + + Select custom proxy location + + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + + BrowserService + + KeePassXC: New key association request + + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + + + + Save and allow access + + + + KeePassXC: Overwrite existing key? + + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + Clavis cryptographica communa nomine "%1" iam existit. +Visne eam suprascribere? + + + KeePassXC: Update Entry + + + + Do you want to update the information in %1 - %2? + + + + Abort + + + + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + + + + KeePassXC: No entry with KeePassHTTP attributes found! + + + + The active database does not contain an entry with KeePassHTTP attributes. + + + + KeePassXC: Legacy browser integration settings detected + + + + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + CloneDialog + + Clone Options + + + + Append ' - Clone' to title + + + + Replace username and password with references + + + + Copy history + + + + + CsvImportWidget + + Import CSV fields + + + + filename + archivo nomen + + + size, rows, columns + dimensio, ordines, columnae + + + Encoding + Codificatio + + + Codec + Codec + + + Text is qualified by + + + + Fields are separated by + + + + Comments start with + + + + First record has field names + + + + Number of headers line to discard + + + + Consider '\' an escape character + Imputa '\' characterem effugiendi + + + Preview + Praevisum + + + Column layout + Columnarum dispositio + + + Not present in CSV file + + + + Imported from CSV file + + + + Original data: + Originalia data: + + + Error + Error + + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + + + CSV import: writer has errors: +%1 + + + + + CsvParserModel + + %n column(s) + + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + Radix + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + + + + DatabaseOpenWidget + + Enter master key + + + + Key File: + Archivum Claviare: + + + Password: + + + + Browse + Naviga + + + Refresh + + + + Challenge Response: + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + Don't show this warning again + + + + All files + Archiva omnia + + + Key files + Archiva claviaria + + + Select key file + Selige archivum claviare + + + TouchID for quick unlock + + + + Unable to open the database: +%1 + + + + Can't open key file: +%1 + + + + + DatabaseSettingWidgetMetaData + + Passwords + + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + Generale + + + Security + Securitas + + + Master Key + + + + Encryption Settings + + + + Browser Integration + Integratio cum Navigatore + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + &Dejuga omnes navigatores + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + Remove + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algorithmus cryptographicus + + + AES: 256 Bit (default) + AES: 256 Bit (defalta) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + + + + Transform rounds: + + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + + + + Number of rounds too high + Key transformation rounds + + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + + Understood, keep number + + + + Cancel + + + + Number of rounds too low + Key transformation rounds + + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + + KDF unchanged + + + + Failed to transform key with new KDF parameters; KDF unchanged. + + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + Nomen datorum basi: + + + Database description: + Descriptio datorum basi: + + + Default username: + Nomen usuari pro defalta + + + History Settings + + + + Max. history items: + Max. historica elementa: + + + Max. history size: + Max. historiae magnitudo: + + + MiB + MiB + + + Use recycle bin + + + + Additional Database Settings + + + + Enable &compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget + + KeePass 2 Database + KeePass 2 Datorum basem + + + All files + Archiva omnia + + + Open database + Aperi datorum basem + + + CSV file + CSV archivum + + + Merge database + + + + Open KeePass 1 database + Aperi KeePass 1 datorum basem + + + KeePass 1 database + KeePass 1 datorum basis + + + Export database to CSV file + + + + Writing the CSV file failed. + + + + Database creation error + + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + + + + + DatabaseWidget + + Searching... + Quaerens... + + + Do you really want to delete the entry "%1" for good? + + + + Do you really want to move entry "%1" to the recycle bin? + + + + Do you really want to move %n entry(s) to the recycle bin? + + + + Execute command? + + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + + + + Do you really want to delete the group "%1" for good? + Visne classem "%1" sempiterne delere? + + + No current database. + + + + No source database, nothing to do. + + + + Search Results (%1) + + + + No Results + + + + File has changed + + + + The database file has changed. Do you want to load the changes? + + + + Merge Request + + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + + + + Empty recycle bin? + + + + Are you sure you want to permanently delete everything from your recycle bin? + + + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + + + File opened in read only mode. + + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + + + + Database was modified. +Save changes? + + + + Save changes? + + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + Visne secure servare debilitare? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC datorum basis servare aliquoties defecit. Causa probabiliter consistit in servitiis archiva synchronizandi tenentibus clausuram super archivum servatum. +Visne secure servare debilitare et rursum conari? + + + Writing the database failed. +%1 + + + + Passwords + + + + Save database as + + + + KeePass 2 Database + KeePass 2 Datorum basem + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + + + + + EditEntryWidget + + Entry + Nomen + + + Advanced + + + + Icon + Icon + + + Auto-Type + Auto-Scribe + + + Properties + Proprietates + + + History + Historia + + + SSH Agent + + + + n/a + + + + (encrypted) + + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + + + Entry history + + + + Add entry + Adde nomen + + + Edit entry + Muta nomen + + + Different passwords supplied. + Varia passwords data. + + + New attribute + Novum attributum + + + Are you sure you want to remove this attribute? + + + + Tomorrow + Cras + + + %n week(s) + + + + %n month(s) + + + + Apply generated password? + + + + Do you want to apply the generated password to this entry? + + + + Entry updated successfully. + + + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + [PROTECTUM] Pressa &apos;revela&apos; ut videas aut mutes + + + %n year(s) + + + + Confirm Removal + + + + + EditEntryWidgetAdvanced + + Additional attributes + + + + Add + Adde + + + Remove + Remove + + + Edit Name + + + + Protect + + + + Reveal + + + + Attachments + + + + Foreground Color: + + + + Background Color: + + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + + + + Inherit default Auto-Type sequence from the &group + + + + &Use custom Auto-Type sequence: + + + + Window Associations + + + + + + + + + + - + - + + + Window title: + Fenestrae titulus: + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + Monstra + + + Restore + + + + Delete + Dele + + + Delete all + Dele omnia + + + + EditEntryWidgetMain + + URL: + URL: + + + Password: + + + + Repeat: + Itera: + + + Title: + Titulus + + + Notes + Notae + + + Presets + + + + Toggle the checkbox to reveal the notes section. + + + + Username: + Nomen usuari: + + + Expires + Exspirat + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + + + + Add key to agent when database is opened/unlocked + + + + Comment + + + + Decrypt + + + + n/a + + + + Copy to clipboard + Exscribe ad aream transferendi + + + Private key + + + + External file + + + + Browse... + Button for opening file dialog + + + + Attachment + + + + Add to agent + + + + Remove from agent + + + + Require user confirmation when this key is used + + + + + EditGroupWidget + + Group + Classis + + + Icon + Icon + + + Properties + Proprietates + + + Add group + Adde classem + + + Edit group + Muta classem + + + Enable + Habilito + + + Disable + Dishabilito + + + Inherit from parent group (%1) + Heredita de classe parentali (%1) + + + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + + EditGroupWidgetMain + + Name + Nomen + + + Notes + Notae + + + Expires + Exspirat + + + Search + Quaere + + + Auto-Type + Auto-Scribe + + + &Use default Auto-Type sequence of parent group + + + + Set default Auto-Type se&quence + + + + + EditWidgetIcons + + &Use default icon + + + + Use custo&m icon + + + + Add custom icon + Adde iconem personalizatam + + + Delete custom icon + + + + Download favicon + Discarrica faviconem + + + Unable to fetch favicon. + + + + Images + Imagines + + + All files + Archiva omnia + + + Custom icon already exists + Icon personalizata iam existit + + + Confirm Delete + Confirma Deletionem + + + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + + + + EditWidgetProperties + + Created: + Creatum: + + + Modified: + Mutatum: + + + Accessed: + Accessum: + + + Uuid: + Uuid: + + + Plugin Data + + + + Remove + Remove + + + Delete plugin data? + + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + + + + Key + + + + Value + + + + + Entry + + %1 - Clone + + + + + EntryAttachmentsModel + + Name + Nomen + + + Size + + + + + EntryAttachmentsWidget + + Form + + + + Add + Adde + + + Remove + Remove + + + Open + Aperi + + + Save + + + + Select files + + + + Are you sure you want to remove %n attachment(s)? + + + + Save attachments + + + + Unable to create directory: +%1 + + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + + + + Unable to save attachments: +%1 + + + + Unable to open attachment: +%1 + + + + Unable to open attachments: +%1 + + + + Confirm remove + + + + Unable to open file(s): +%1 + + + + + EntryAttributesModel + + Name + Nomen + + + + EntryHistoryModel + + Last modified + Ultima modificatio + + + Title + Titulus + + + Username + Nomen usuari + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + Ref: + + + Group + Classis + + + Title + Titulus + + + Username + Nomen usuari + + + URL + URL + + + Never + + + + Password + Tessera + + + Notes + Notae + + + Expires + Exspirat + + + Created + + + + Modified + + + + Accessed + + + + Attachments + + + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + Claude + + + General + Generale + + + Username + Nomen usuari + + + Password + Tessera + + + Expiration + + + + URL + URL + + + Attributes + + + + Attachments + + + + Notes + Notae + + + Autotype + + + + Window + Fenestra + + + Sequence + Sequentia + + + Searching + + + + Search + Quaere + + + Clear + + + + Never + + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + + + + Disabled + Debilitatum + + + Share + + + + + EntryView + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + + + + + Group + + Recycle Bin + + + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + + + + HostInstaller + + KeePassXC: Cannot save file! + + + + Cannot save the native messaging script file. + + + + + KMessageWidget + + &Close + &Claude + + + Close message + + + + + Kdbx3Reader + + Unable to calculate master key + + + + Unable to issue challenge-response. + + + + Wrong key or database file is corrupt. + Aut archivum est falsum vel datorum basis est corrupta. + + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + + Kdbx3Writer + + Unable to issue challenge-response. + + + + Unable to calculate master key + + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + + + + Invalid header checksum size + + + + Header SHA256 mismatch + + + + Wrong key or database file is corrupt. (HMAC mismatch) + + + + Unknown cipher + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + Failed to open buffer for KDF parameters in header + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + Irritus algorithmus symmetrice cifrandi. + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + Irritus algorithmus comprimendi. + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + Not a KeePass database. + Istud non est KeePass datorum basis. + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + + + + Unsupported KeePass 2 database version. + + + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + + + + KdbxXmlReader + + XML parsing failure: %1 + + + + No root group + + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + Invalid EnableAutoType value + + + + Invalid EnableSearching value + + + + No group uuid found + + + + Null DeleteObject uuid + + + + Missing DeletedObject uuid or time + + + + Null entry uuid + + + + Invalid entry icon number + + + + History element in history entry + + + + No entry uuid found + + + + History element with different uuid + + + + Duplicate custom attribute found + + + + Entry string key or value missing + + + + Duplicate attachment found + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + XML error: +%1 +Line %2, column %3 + + + + + KeePass1OpenWidget + + Import KeePass1 database + + + + Unable to open the database. + + + + + KeePass1Reader + + Unable to read keyfile. + Archivum claviare legi non potest. + + + Not a KeePass database. + Istud non est KeePass datorum basis. + + + Unsupported encryption algorithm. + Irritus algorithmus cifrandi. + + + Unsupported KeePass database version. + + + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + + + + Invalid number of groups + + + + Invalid number of entries + + + + Invalid content hash size + + + + Invalid transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + + + + Root + Radix + + + Unable to calculate master key + + + + Wrong key or database file is corrupt. + Aut archivum est falsum vel datorum basis est corrupta. + + + Key transformation failed + + + + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + unable to seek to content position + + + + + KeeShare + + Disabled share + + + + Import from + + + + Export to + + + + Synchronize with + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Naviga + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Archiva claviaria + + + All files + Archiva omnia + + + Create Key File... + Crea Archivum Claviare... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Selige archivum claviare + + + + MainWindow + + &Database + &Datorum basis + + + &Recent databases + + + + &Help + &Adjutorium + + + E&ntries + N&omina + + + &Groups + &Classes + + + &Tools + + + + &Quit + &Exi + + + &About + &De + + + &Open database... + &Aperi datorum basem + + + &Save database + + + + &Close database + &Claude datorum basem + + + &Delete entry + + + + &Edit group + &Muta classem + + + &Delete group + &Dele classem + + + Sa&ve database as... + + + + Database settings + Datorum basis optiones + + + &Clone entry + &Clona nomen + + + Copy &username + + + + Copy username to clipboard + + + + Copy password to clipboard + + + + &Settings + &Optiones + + + Password Generator + + + + &Lock databases + + + + &Title + &Titulus + + + Copy title to clipboard + + + + &URL + &URL + + + Copy URL to clipboard + + + + &Notes + &Notae + + + Copy notes to clipboard + + + + &Export to CSV file... + + + + Set up TOTP... + + + + Copy &TOTP + + + + E&mpty recycle bin + + + + Clear history + + + + Access error for config file %1 + + + + Settings + Optiones + + + Toggle window + + + + Quit KeePassXC + Exi KeePassXC + + + Please touch the button on your YubiKey! + + + + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. + + + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Radix + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key + + + + PEM boundary mismatch + + + + Base64 decoding failed + + + + Key file way too small. + + + + Key file magic header id invalid + + + + Found zero keys + + + + Failed to read public key. + + + + Corrupted key file, reading private key failed + + + + No private key payload to decrypt + + + + Trying to run KDF without cipher + + + + Passphrase is required to decrypt this key + + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + + + + Unexpected EOF while reading private key + + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + + + + Unsupported key type: %1 + + + + Unknown cipher: %1 + + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + + + + + PasswordEditWidget + + Enter password: + Intra tesseram: + + + Confirm password: + + + + Password + Tessera + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Password cannot be empty. + + + + Passwords do not match. + + + + Generate master password + + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + + + + strength + Password strength + + + + entropy + + + + Password + Tessera + + + Character Types + Characterum Typi + + + Upper Case Letters + Litterae Maiusculae + + + Lower Case Letters + Litterae minusculae + + + Numbers + Numeri + + + Special Characters + Characteres speciales + + + Extended ASCII + + + + Exclude look-alike characters + + + + Pick characters from every group + + + + &Length: + &Longitudo: + + + Passphrase + + + + Wordlist: + + + + Word Separator: + + + + Copy + + + + Accept + Accipe + + + Close + Claude + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Dele + + + Move + + + + Empty + + + + Remove + Remove + + + Skip + + + + Disable + Debilita + + + Merge + + + + + QObject + + Database not opened + + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + + + + Action cancelled or denied + + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + + + + Incorrect action + + + + Empty message received + + + + No URL provided + + + + No logins found + + + + Unknown error + + + + Add a new entry to a database. + + + + Path of the database. + Semita datorum basis + + + Key file of the database. + + + + path + + + + Username for the entry. + + + + username + + + + URL for the entry. + + + + URL + URL + + + Prompt for the entry's password. + + + + Generate a password for the entry. + + + + Length for the generated password. + + + + length + + + + Path of the entry to add. + + + + Copy an entry's password to the clipboard. + + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + + + + Edit an entry. + + + + Title for the entry. + + + + title + + + + Path of the entry to edit. + + + + Estimate the entropy of a password. + + + + Password for which to estimate the entropy. + + + + Perform advanced analysis on the password. + + + + Extract and print the content of a database. + + + + Path of the database to extract. + + + + Insert password to unlock %1: + + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + + +Available commands: + + + + + Name of the command to execute. + + + + List database entries. + + + + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + + + + Path of the database to merge into. + + + + Path of the database to merge from. + + + + Use the same credentials for both database files. + + + + Key file of the database to merge from. + + + + Show an entry's information. + + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + + + + attribute + + + + Name of the entry to show. + + + + NULL device + + + + error reading from device + + + + malformed string + + + + missing closing quote + + + + Group + Classis + + + Title + Titulus + + + Username + Nomen usuari + + + Password + Tessera + + + Notes + Notae + + + Last Modified + + + + Created + + + + Browser Integration + Integratio cum Navigatore + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + + + + Press + Pressa + + + Passive + Passivum + + + SSH Agent + + + + Generate a new random diceware passphrase. + + + + Word count for the diceware passphrase. + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + + + + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + Archivum clausurarium est irritum. Incipiens instantiam novam. + + + The lock file could not be created. Single-instance mode disabled. + Archivum clausurarium creari non potuit. Modus singulae instantiae debilitatus est. + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + Archivum claviare pro datorum basi + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + KeePassXC - Error + + + Database password: + + + + + QtIOCompressor + + Internal zlib error when compressing: + + + + Error writing to underlying device: + + + + Error opening underlying device: + + + + Error reading data from underlying device: + + + + Internal zlib error when decompressing: + + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + + + + Internal zlib error: + + + + + SSHAgent + + Agent connection failed. + + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget + + Search + Quaere + + + Clear + + + + Limit search to selected group + + + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + + + + SettingsWidgetKeeShare + + Active + + + + Allow export + + + + Allow import + + + + Own certificate + + + + Fingerprint: + + + + Certificate: + + + + Signer + + + + Key: + Clavis: + + + Generate + + + + Import + + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Remove + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Archiva omnia + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + + + + 000000 + 000000 + + + Copy + + + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. + + + + + TotpSetupDialog + + Setup TOTP + + + + Key: + Clavis: + + + Default RFC 6238 token settings + Solitae RFC 6238 symboli optiones + + + Steam token settings + Steam symboli optiones + + + Use custom settings + Optiones propriae + + + Custom Settings + + + + Time step: + + + + sec + Seconds + sec + + + Code size: + + + + 6 digits + 6 digiti + + + 7 digits + + + + 8 digits + 8 digiti + + + + UpdateCheckDialog + + Checking for updates + + + + Checking for updates... + + + + Close + Claude + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + + + + Create new database + + + + Open existing database + + + + Import from KeePass 1 + + + + Import from CSV + + + + Recent databases + + + + Welcome to KeePassXC %1 + + + + + YubiKeyEditWidget + + Refresh + + + + YubiKey Challenge-Response + + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + + + No YubiKey detected, please ensure it's plugged in. + + + + No YubiKey inserted. + + + + \ No newline at end of file diff --git a/share/translations/keepassx_lt.ts b/share/translations/keepassx_lt.ts index 03be1edb5..bf5f5cf22 100644 --- a/share/translations/keepassx_lt.ts +++ b/share/translations/keepassx_lt.ts @@ -37,36 +37,6 @@ Copy to clipboard Kopijuoti į iškarpinę - - Version %1 - - Versija %1 - - - - Revision: %1 - Revizija: %1 - - - Distribution: %1 - Platinimas: %1 - - - Libraries: - Bibliotekos: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operacinė sistema: %1 -Procesoriaus architektūra: %2 -Branduolys: %3 %4 - - - Enabled extensions: - Įjungti plėtiniai: - Project Maintainers: Projektą prižiūri: @@ -75,37 +45,6 @@ Branduolys: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Ypatinga padėka nuo KeePassXC komandos yra skiriama debfx už pradinės KeePassX programos sukūrimą. - - Build Type: %1 - - Darinio tipas: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP prieigos patvirtinimas - - - Remember this decision - Prisiminti šį sprendimą - - - Allow - Leisti - - - Deny - Atmesti - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 užklausė prieigos prie slaptažodžių šiam elementui(-ams). -Pasirinkite, ar norite leisti prieigą. - AgentSettingsWidget @@ -113,6 +52,277 @@ Pasirinkite, ar norite leisti prieigą. Enable SSH Agent (requires restart) Įjungti SSH agentą (reikalauja paleidimo iš naujo) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Programos nustatymai + + + General + Bendra + + + Security + Saugumas + + + Access error for config file %1 + Konfigūracijos failo %1 prieigos klaida + + + Icon only + Tik piktograma + + + Text only + Tik tekstas + + + Text beside icon + Tekstas šalia piktogramos + + + Text under icon + Tekstas po piktograma + + + Follow style + Sekti stiliumi + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Pagrindiniai nustatymai + + + Startup + Įjungimo + + + Start only a single instance of KeePassXC + Paleisti tik vieną KeePassXC egzempliorių + + + Remember last databases + Prisiminti paskutines duomenų bazes + + + Remember last key files and security dongles + Prisiminti paskutinius rakto failus ir saugumo saugiklius + + + Load previous databases on startup + Paleidžiant programą, įkelti ankstesnes duomenų bazes + + + Minimize window at application startup + Paleidus programą, suskleisti langą + + + File Management + Failų tvarkymas + + + Safely save database files (may be incompatible with Dropbox, etc) + Saugiai įrašyti duomenų bazės failus (gali būti nesuderinama su Dropbox ir t.t.) + + + Backup database file before saving + Išsaugoti duomenų bazę prieš išsaugant + + + Automatically save after every change + Automatiškai įrašyti po kiekvieno pakeitimo + + + Automatically save on exit + Išeinant, automatiškai įrašyti + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Nežymėti duomenų bazė kaip pakeistą, jei buvo keičiami ne duomenys, o kita (pvz., išskleidžiamos grupės) + + + Automatically reload the database when modified externally + Išoriškai modifikavus duomenų bazę, automatiškai įkelti ją iš naujo + + + Entry Management + Įrašų tvarkymas + + + Use group icon on entry creation + Kuriant įrašus, naudoti grupės piktogramą + + + Minimize when copying to clipboard + Kopijuojant į iškarpinę, suskleisti langą + + + Hide the entry preview panel + Slėpti įrašo peržiūros skydelį + + + General + Bendra + + + Hide toolbar (icons) + Slėpti įrankių juostą (piktogramas) + + + Minimize instead of app exit + + + + Show a system tray icon + Rodyti sistemos dėklo piktogramą + + + Dark system tray icon + Tamsi sistemos dėklo piktograma + + + Hide window to system tray when minimized + Suskleidus langą, slėpti jį į sistemos dėklą + + + Language + Kalba + + + Auto-Type + Automatinis rinkimas + + + Use entry title to match windows for global Auto-Type + Naudoti įrašo antraštę, norint sutapatinti langus visuotiniam Automatiniam rinkimui + + + Use entry URL to match windows for global Auto-Type + Naudoti įrašo URL, norint sutapatinti langus visuotiniam Automatiniam rinkimui + + + Always ask before performing Auto-Type + Visada klausti prieš atliekant automatinį rinkimą + + + Global Auto-Type shortcut + Visuotinis automatinio rinkimo spartusis klavišas + + + Auto-Type typing delay + + + + ms + Milliseconds + ms + + + Auto-Type start delay + + + + Check for updates at application startup + Paleidus programą, tikrinti ar yra atnaujinimų + + + Include pre-releases when checking for updates + Tikrinant atnaujinimus, įtraukti išankstinės programos laidas + + + Movable toolbar + Perkeliama įrankių juosta + + + Button style + Mygtukų stilius + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Laiko limitai + + + Clear clipboard after + Išvalyti iškarpinę po + + + sec + Seconds + sek. + + + Lock databases after inactivity of + Užrakinti duomenų bazes, kai kompiuteris neaktyvus + + + min + min. + + + Forget TouchID after inactivity of + Pamiršti TouchID kai nėra jokios veiklos + + + Convenience + Patogumas + + + Lock databases when session is locked or lid is closed + Užrakinti duomenų bazes, kai yra užrakinamas seansas ar uždaromas nešiojamojo kompiuterio dangtis + + + Forget TouchID when session is locked or lid is closed + Pamiršti TouchID, kai yra užrakinamas seansas ar uždaromas nešiojamojo kompiuterio dangtis + + + Lock databases after minimizing the window + Suskleidus langą, užrakinti duomenų bazes + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + Nereikalauti pakartoti slaptažodį, kai šis yra matomas + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + Pagal numatymą, slėpti įrašo pastabas + + + Privacy + Privatumas + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -215,6 +425,27 @@ Please select whether you want to allow access. Pasirinkite, ar norite leisti prieigą. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + Gerai + + + Cancel + Atsisakyti + + + You have multiple databases open. +Please select the correct database for saving credentials. + Turite atvertas kelias duomenų bazes. +Prisijungimo duomenų įrašymui, pasirinkite teisingą duomenų bazę. + + BrowserOptionDialog @@ -288,14 +519,6 @@ Pasirinkite, ar norite leisti prieigą. Credentials mean login data requested via browser extension Rikiuoti atitinkančius prisijungimo duomenis pagal na&udotojo vardą - - &Disconnect all browsers - &Atjungti visas naršykles - - - Forget all remembered &permissions - Užmiršti visus įsimintus &leidimus - Advanced Išplėstiniai @@ -303,12 +526,12 @@ Pasirinkite, ar norite leisti prieigą. Never &ask before accessing credentials Credentials mean login data requested via browser extension - + Niekada nekl&austi prieš gaunant prieigą prie prisijungimo duomenų Never ask before &updating credentials Credentials mean login data requested via browser extension - + Niekada neklausti prieš atna&ujinant prisijungimo duomenis Only the selected database has to be connected with a client. @@ -317,7 +540,7 @@ Pasirinkite, ar norite leisti prieigą. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - + Ieš&koti atitinkančių prisijungimo duomenų visose atvertose duomenų bazėse Automatically creating or updating string fields is not supported. @@ -361,20 +584,41 @@ Pasirinkite, ar norite leisti prieigą. <b>Warning:</b> The following options can be dangerous! <b>Įspėjimas:</b> Šie parametrai gali būti pavojingi! - - Executable Files (*.exe);;All Files (*.*) - Vykdomieji failai (*.exe);;Visi failai (*.*) - - - Executable Files (*) - Vykdomieji failai (*) - Select custom proxy location - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + Vykdomieji failai + + + All Files + Visi failai + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 @@ -413,151 +657,55 @@ Ar norite jį perrašyti? Do you want to update the information in %1 - %2? Ar norite atnaujinti informaciją ties %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Duomenų bazė užrakinta! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Aktyvi duomenų bazė yra užrakinta! -Prašome atrakinti pasirinktą duomenų bazę arba pasirinkti kitą, kuri būtų atrakinta. - - - KeePassXC: Settings not available! - KeePassXC: Nustatymai neprieinami! - - - The active database does not contain a settings entry. - Aktyvioje duomenų bazėje nėra nustatymų įrašo. - - - KeePassXC: No keys found - KeePassXC: Raktų nerasta - - - No shared encryption keys found in KeePassXC Settings. - KeePassXC nustatymuose nerasti bendrinami šifravimo raktai. - - - KeePassXC: Removed keys from database - KeePassXC: Pašalinti raktai iš duomenų bazės - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - Šalinami saugomi leidimai… - Abort Nutraukti - KeePassXC: Removed permissions - KeePassXC: Pašalinti leidimai + Converting attributes to custom data… + Konvertuojami požymiai į tinkintus duomenis… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konvertuoti KeePassHTTP požymiai + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Sėkmingai konvertuoti požymiai iš %1 įrašo(-ų). +Perkelta %2 raktų į tinkintus duomenis. - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: Nerasta jokių įrašų su leidimais! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nerasta jokio įrašo su KeePassHTTP požymiais! - The active database does not contain an entry with permissions. - Aktyvioje duomenų bazėje nėra įrašo su leidimais. - - - - ChangeMasterKeyWidget - - Password - Slaptažodis + The active database does not contain an entry with KeePassHTTP attributes. + Aktyvioje duomenų bazėje nėra įrašo su KeePassHTTP požymiais. - Enter password: - Įrašykite slaptažodį: - - - Repeat password: - Pakartokite slaptažodį: - - - &Key file - &Rakto failas - - - Browse - Naršyti - - - Create - Kurti - - - Cha&llenge Response - Iššū&kio atsakymas - - - Refresh - Įkelti iš naujo - - - Key files - Rakto failai - - - All files - Visi failai - - - Create Key File... - Sukurti rakto failą... - - - Unable to create Key File : - Nepavyko sukurti rakto failo : - - - Select a key file - Pasirinkite rakto failą - - - Empty password - Tuščias slaptažodis - - - Do you really want to use an empty string as password? - Ar tikrai norite naudoti tuščią eilutę kaip slaptažodį? - - - Different passwords supplied. - Pateikti skirtingi slaptažodžiai. - - - Failed to set %1 as the Key file: -%2 - Nepavyko nustatyti %1 kaip rakto failą: -%2 - - - Legacy key file format + KeePassXC: Legacy browser integration settings detected - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + KeePassXC: Create a new group - Changing master key failed: no YubiKey inserted. - Pagrindinio rakto pakeitimas nepavyko: neįterpta jokio YubiKey. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + + + + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -568,7 +716,7 @@ Please consider generating a new key file. Append ' - Clone' to title - Pridėti prie antraštės " - Dublikatas" + Pridėti prie pavadinimo " - Dublikatas" Replace username and password with references @@ -637,14 +785,6 @@ Please consider generating a new key file. Not present in CSV file Nėra CSV faile - - Empty fieldname - Tuščias lauko pavadinimas - - - column - stulpelis - Imported from CSV file Importuota iš CSV failo @@ -653,50 +793,90 @@ Please consider generating a new key file. Original data: Pradiniai duomenys: - - Error(s) detected in CSV file ! - CSV faile yra aptikta klaida(-os)! - - - more messages skipped] - dar žinutės praleistos] - Error Klaida + + Empty fieldname %1 + Tuščias lauko pavadinimas %1 + + + column %1 + stulpelis %1 + + + Error(s) detected in CSV file! + CSV faile aptikta klaida(-os)! + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - CSV importavimas: tekstų rengyklėje yra klaidų: - - - - - CsvImportWizard - - Error - Klaida - - - Unable to calculate master key - Nepavyko apskaičiuoti pagrindinio rakto +%1 + CsvParserModel - - %n byte(s), - %n baitas, %n baitai, %n baitų, %n baitų, - - - %n row(s), - %n eilutė, %n eilutės, %n eilučių, %n eilučių, - %n column(s) %n stulpelis%n stulpeliai%n stulpelių%n stulpelių + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + Šaknis + + + File %1 does not exist. + Failo %1 nėra. + + + Unable to open file %1. + Nepavyko atverti failą %1. + + + Error while reading the database: %1 + Klaida skaitant duomenų bazę: %1 + + + Could not save, database has no file name. + Nepavyko įrašyti, duomenų bazė neturi failo pavadinimo. + + + File cannot be written as it is opened in read-only mode. + Failas negali būti įrašytas, nes jis atvertas tik skaitymo veiksenoje. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Atrakinti duomenų bazę - KeePassXC + DatabaseOpenWidget @@ -724,14 +904,6 @@ Please consider generating a new key file. Challenge Response: Iššūkio atsakymas: - - Unable to open the database. - Nepavyko atverti duomenų bazės. - - - Can't open key file - Nepavyksta atverti rakto failo - Legacy key file format @@ -759,53 +931,250 @@ Please consider generating a new key file. Select key file Pasirinkite rakto failą - - - DatabaseRepairWidget - Repair database - Taisyti duomenų bazę + TouchID for quick unlock + - Error - Klaida + Unable to open the database: +%1 + Nepavyko atverti duomenų bazės: +%1 - Can't open key file - Nepavyksta atverti rakto failo - - - Unable to open the database. - Nepavyko atverti duomenų bazės. - - - Database opened fine. Nothing to do. - Duomenų bazė atsivėrė tvarkingai. Nėra ką atlikti. - - - Success - Pavyko - - - The database has been successfully repaired -You can now save it. - Duomenų bazė buvo sėkmingai pataisyta -Dabar galite ją įrašyti. - - - Unable to repair the database. - Duomenų bazės pataisyti nepavyko. + Can't open key file: +%1 + Nepavyksta atverti rakto failo: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Slaptažodžiai + + + + DatabaseSettingsDialog + + Advanced Settings + Išplėstiniai nustatymai + General Bendra - Encryption - Šifravimas + Security + Saugumas + + + Master Key + Pagrindinis raktas + + + Encryption Settings + Šifravimo nustatymai + + + Browser Integration + Naršyklės integracija + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + &Atjungti visas naršykles + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Perkelti KeePassHTTP požymius į KeePassXC-Browser &tinkintus duomenis + + + Stored keys + + + + Remove + Šalinti + + + Delete the selected key? + Ištrinti pasirinktą raktą? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + Raktas + + + Value + Reikšmė + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + Atjungti visas naršykles + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: Raktų nerasta + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: Pašalinti raktai iš duomenų bazės + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Šalinami saugomi leidimai… + + + Abort + Nutraukti + + + KeePassXC: Removed permissions + KeePassXC: Pašalinti leidimai + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: Nerasta jokių įrašų su leidimais! + + + The active database does not contain an entry with permissions. + Aktyvioje duomenų bazėje nėra įrašo su leidimais. + + + Move KeePassHTTP attributes to custom data + Perkelti KeePassHTTP požymius į tinkintus duomenis + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Šifravimo algoritmas: + + + AES: 256 Bit (default) + AES: 256 Bitų (numatytasis) + + + Twofish: 256 Bit + Twofish: 256 Bitų + + + Key Derivation Function: + Rakto išvedimo funkcija: + + + Transform rounds: + Pasikeitimo ciklų: + + + Benchmark 1-second delay + + + + Memory Usage: + Atminties naudojimas: + + + Parallelism: + + + + Decryption Time: + Iššifravimo laikas: + + + ?? s + ?? s + + + Change + Keisti + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + Duomenų bazės formatas: + + + This is only important if you need to use your database with other programs. + Tai yra svarbu tik tuo atveju, jeigu jums reikia naudoti duomenų bazę su kitomis programomis. + + + KDBX 4.0 (recommended) + KDBX 4.0 (rekomenduojama) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -848,47 +1217,22 @@ If you keep this number, your database may be too easy to crack! MiB Abbreviation for Mebibytes (KDF settings) - + MiB MiB MiB MiB thread(s) Threads for parallel execution (KDF settings) - + gija gijos gijų gija - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Šifravimo algoritmas: + + %1 ms + milliseconds + %1 ms%1 ms%1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 Bitų (numatytasis) - - - Twofish: 256 Bit - Twofish: 256 Bitų - - - Key Derivation Function: - Rakto išvedimo funkcija: - - - Transform rounds: - Pasikeitimo ciklų: - - - Benchmark 1-second delay - - - - Memory Usage: - Atminties naudojimas: - - - Parallelism: - + + %1 s + seconds + %1 s%1 s%1 s%1 s @@ -939,12 +1283,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Šaknis + Sharing + + + Breadcrumb + + + + Type + Tipas + + + Path + Kelias + + + Last Signer + + + + Certificates + Liudijimai + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Pridėti papildomą apsaugą... + + + No encryption key added + Nepridėtas joks šifravimo raktas + + + You must add at least one encryption key to secure your database! + Norėdami apsaugoti savo duomenų bazę, privalote pridėti bent vieną šifravimo raktą! + + + No password set + Nenustatytas joks slaptažodis + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + Nežinoma klaida + + + Failed to change master key + Nepavyko pakeisti pagrindinio rakto + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Duomenų bazės pavadinimas: + + + Description: + Aprašas: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 duomenų bazė @@ -957,74 +1372,22 @@ If you keep this number, your database may be too easy to crack! Open database Atverti duomenų bazę - - File not found! - Failas nerastas! - - - Unable to open the database. - Nepavyko atverti duomenų bazės. - - - File opened in read only mode. - Failas atvertas tik skaitymo veiksenoje. - - - Open CSV file - Atverti CSV failą - CSV file CSV failas - - All files (*) - Visi failai (*) - Merge database Sulieti duomenų bazę Open KeePass 1 database - Atverti KeePass 1 duomenų bazę + Atverkite KeePass 1 duomenų bazę KeePass 1 database KeePass 1 duomenų bazė - - Close? - Uždaryti? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" yra taisymo veiksenoje. -Vis tiek atmesti pakeitimus ir užverti? - - - Save changes? - Įrašyti pakeitimus? - - - "%1" was modified. -Save changes? - "%1" buvo pakeista. -Įrašyti pakeitimus? - - - Writing the database failed. - Duomenų bazės rašymas nepavyko. - - - Passwords - Slaptažodžiai - - - Save database as - Įrašyti duomenų bazę kaip - Export database to CSV file Eksportuoti duomenų bazę į CSV failą @@ -1034,39 +1397,40 @@ Save changes? CSV failo įrašymas nepavyko. - New database + Database creation error + Duomenų bazės sukūrimo klaida + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + Duomenų failo nėra arba jis nepasiekiamas. + + + Select CSV file + + + + New Database Nauja duomenų bazė - locked - užrakinta + %1 [New Database] + Database tab name modifier + %1 [Nauja duomenų bazė] - Lock database - Užrakinti duomenų bazę + %1 [Locked] + Database tab name modifier + %1 [Užrakinta] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Nepavyksta užrakinti duomenų bazės, kadangi šiuo metu ją taisote. -Spauskite atšaukti, kad užbaigtumėte savo pakeitimus arba juos atmestumėte. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Ši duomenų bazė buvo modifikuota. -Ar prieš užrakinant, norite įrašyti duomenų bazę? -Kitu atveju jūsų pakeitimai bus prarasti. - - - Disable safe saves? - - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - + %1 [Read-only] + Database tab name modifier + %1 [Tik skaitymui] @@ -1075,41 +1439,17 @@ Disable safe saves and try again? Searching... Ieškoma... - - Change master key - Pakeisti pagrindinį raktą - - - Delete entry? - Ištrinti įrašą? - Do you really want to delete the entry "%1" for good? Ar tikrai norite ištrinti įrašą "%1"? - - Delete entries? - Ištrinti įrašus? - - - Do you really want to delete %1 entries for good? - Ar tikrai norite ištrinti %1 įrašų? - - - Move entry to recycle bin? - Perkelti įrašą į šiukšlinę? - Do you really want to move entry "%1" to the recycle bin? Ar tikrai norite perkelti įrašą "%1" į šiukšlinę? - - Move entries to recycle bin? - Perkelti įrašus į šiukšlinę? - Do you really want to move %n entry(s) to the recycle bin? - Ar tikrai norite perkelti %n įrašą į šiukšlinę?Ar tikrai norite perkelti %n įrašus į šiukšlinę?Ar tikrai norite perkelti %n įrašų į šiukšlinę?Ar tikrai norite perkelti %n įrašų į šiukšlinę? + Execute command? @@ -1123,18 +1463,10 @@ Disable safe saves and try again? Remember my choice Prisiminti mano pasirinkimą - - Delete group? - Ištrinti grupę? - Do you really want to delete the group "%1" for good? Ar tikrai norite ištrinti grupę "%1"? - - Unable to calculate master key - Nepavyko apskaičiuoti pagrindinio rakto - No current database. Nėra esamos duomenų bazės. @@ -1169,10 +1501,6 @@ Do you want to merge your changes? Duomenų bazės failas pasikeitė ir jūs turite neįrašytų pakeitimų. Ar norite sulieti savo pakeitimus? - - Could not open the new database file while attempting to autoreload this database. - Nepavyko atverti naujos duomenų bazės failo, bandant automatiškai iš naujo įkelti šią duomenų bazę. - Empty recycle bin? Išvalyti šiukšlinę? @@ -1181,88 +1509,108 @@ Ar norite sulieti savo pakeitimus? Are you sure you want to permanently delete everything from your recycle bin? Ar tikrai norite negrįžtamai viską ištrinti iš savo šiukšlinės? - - - DetailsWidget - - Generate TOTP Token - Generuoti NTVS prieigos raktą + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - Užverti + File opened in read only mode. + Failas atvertas tik skaitymo veiksenoje. - General - Bendra + Lock Database? + Užrakinti duomenų bazę? - Password - Slaptažodis + You are editing an entry. Discard changes and lock anyway? + - URL - URL + "%1" was modified. +Save changes? + "%1" buvo pakeista. +Įrašyti pakeitimus? - Expiration - Galiojimas + Database was modified. +Save changes? + - Username - Naudotojo vardas + Save changes? + Įrašyti pakeitimus? - Autotype - Automatinis rinkimas + Could not open the new database file while attempting to autoreload. +Error: %1 + - Searching - Paieška + Disable safe saves? + - Attributes - Požymiai + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + - Attachments - Priedai + Writing the database failed. +%1 + Rašymas į duomenų bazę patyrė nesėkmę. +%1 - Notes - Pastabos + Passwords + Slaptažodžiai - Window - Langas + Save database as + Įrašyti duomenų bazę kaip - Sequence - Seka + KeePass 2 Database + KeePass 2 duomenų bazė - Search - Paieška + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Clear - Išvalyti + Delete group + Ištrinti grupę - Never - Niekada + Move group to recycle bin? + Perkelti grupę į šiukšlinę? - [PROTECTED] - [APSAUGOTA] + Do you really want to move the group "%1" to the recycle bin? + Ar tikrai norite perkelti grupę "%1" į šiukšlinę? - Disabled - Išjungta + Successfully merged the database files. + Duomenų bazės failai sėkmingai sulieti. - Enabled - Įjungta + Database was not modified by merge operation. + + + + Shared group... + @@ -1325,7 +1673,7 @@ Ar norite sulieti savo pakeitimus? Edit entry - Taisyti įrašą + Keisti įrašą Different passwords supplied. @@ -1335,22 +1683,10 @@ Ar norite sulieti savo pakeitimus? New attribute Naujas požymis - - Confirm Remove - Patvirtinti šalinimą - Are you sure you want to remove this attribute? Ar tikrai norite pašalinti šį požymi? - - [PROTECTED] - [APSAUGOTA] - - - Press reveal to view or edit - Norėdami rodyti ar taisyti, paspauskite atskleisti - Tomorrow Rytoj @@ -1363,10 +1699,6 @@ Ar norite sulieti savo pakeitimus? %n month(s) %n mėnesis%n mėnesiai%n mėnesių%n mėnesių - - 1 year - 1 metai - Apply generated password? Naudoti sugeneruotą slaptaždoį? @@ -1377,6 +1709,26 @@ Ar norite sulieti savo pakeitimus? Entry updated successfully. + Įrašas sėkmingai atnaujintas. + + + Entry has unsaved changes + Įraše yra neįrašytų pakeitimų + + + New attribute %1 + Naujas požymis %1 + + + [PROTECTED] Press reveal to view or edit + [APSAUGOTA] Norėdami rodyti ar redaguoti, paspauskite atskleisti + + + %n year(s) + + + + Confirm Removal @@ -1608,7 +1960,7 @@ Ar norite sulieti savo pakeitimus? Edit group - Taisyti grupę + Keisti grupę Enable @@ -1623,6 +1975,97 @@ Ar norite sulieti savo pakeitimus? Paveldėti iš pirminės grupės (%1) + + EditGroupWidgetKeeShare + + Form + Forma + + + Type: + Tipas: + + + Path: + Kelias: + + + ... + ... + + + Password: + Slaptažodis: + + + Inactive + + + + Import from path + Importuoti iš kelio + + + Export to path + Eksportuoti į kelią + + + Synchronize with path + Sinchronizuoti su keliu + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + Duomenų bazės eksportavimas yra išjungtas + + + Database import is disabled + Duomenų bazės importavimas yra išjungtas + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + Išvalyti + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1680,10 +2123,6 @@ Ar norite sulieti savo pakeitimus? Unable to fetch favicon. Nepavyko gauti svetainės piktogramos. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Patarimas: Jūs galite įjungti Google kaip surogatą, perėję į Įrankiai>Nustatymai>Saugumas - Images Paveikslai @@ -1692,14 +2131,6 @@ Ar norite sulieti savo pakeitimus? All files Visi failai - - Select Image - Pasirinkite paveikslą - - - Can't read icon - Nepavyksta perskaityti piktogramos - Custom icon already exists Tinkinta piktograma jau yra @@ -1709,8 +2140,36 @@ Ar norite sulieti savo pakeitimus? Patvirtinti ištrynimą - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Šią piktogramą naudoja %1 įrašai ir ji bus pakeista numatytąja piktograma. Ar tikrai norite ją ištrinti? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + Neįkelta jokių piktogramų + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + Ši piktograma patyrė nesėkmę:Šios piktogramos patyrė nesėkmę:Šios piktogramos patyrė nesėkmę:Šios piktogramos patyrė nesėkmę: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1760,9 +2219,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Dublikatas + %1 - Clone + @@ -1804,11 +2262,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - Patvirtinti šalinimą + Ar tikrai norite pašalinti %n priedą?Ar tikrai norite pašalinti %n priedus?Ar tikrai norite pašalinti %n priedų?Ar tikrai norite pašalinti %n priedų? Save attachments @@ -1847,10 +2301,13 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - Nepavyko atverti failus: -%1 + @@ -1934,6 +2391,106 @@ This may cause the affected plugins to malfunction. Attachments Priedai + + Yes + Taip + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + Generuoti NTVS prieigos raktą + + + Close + Užverti + + + General + Bendra + + + Username + Naudotojo vardas + + + Password + Slaptažodis + + + Expiration + Galiojimas + + + URL + URL + + + Attributes + Požymiai + + + Attachments + Priedai + + + Notes + Pastabos + + + Autotype + Automatinis rinkimas + + + Window + Langas + + + Sequence + Seka + + + Searching + Paieška + + + Search + Paieška + + + Clear + Išvalyti + + + Never + Niekada + + + [PROTECTED] + [APSAUGOTA] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Įjungta + + + Disabled + Išjungta + + + Share + + EntryView @@ -1972,6 +2529,11 @@ This may cause the affected plugins to malfunction. Recycle Bin Šiukšlinė + + [empty] + group has no children + [tuščia] + HostInstaller @@ -1984,61 +2546,6 @@ This may cause the affected plugins to malfunction. - - HttpPasswordGeneratorWidget - - Length: - Ilgis: - - - Character Types - Simbolių tipai - - - Upper Case Letters - Viršutinio registro raidės - - - A-Z - A-Z - - - Lower Case Letters - Apatinio registro raidės - - - a-z - a-z - - - Numbers - Skaičiai - - - 0-9 - 0-9 - - - Special Characters - Specialūs simboliai - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Pašalinti panašiai atrodančius simbolius - - - Ensure that the password contains characters from every group - Užtikrinti, kad slaptažodyje būtų simboliai iš kiekvienos grupės - - - Extended ASCII - Papildomi ASCII - - KMessageWidget @@ -2064,6 +2571,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Neteisingas raktas arba duomenų bazės failas yra pažeistas. + + missing database headers + trūksta duomenų bazės antraščių + + + Header doesn't match hash + Antraštė neatitinka maišą + + + Invalid header id size + Neteisingas antraštės id dydis + + + Invalid header field length + Neteisingas antraštės lauko ilgis + + + Invalid header data length + Neteisingas antraštės duomenų ilgis + Kdbx3Writer @@ -2222,10 +2749,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher Nepalaikomas šifras @@ -2280,6 +2803,18 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Unsupported KeePass 2 database version. Nepalaikoma KeePass 2 duomenų bazės versija. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2351,13 +2886,9 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų History element with different uuid - - Unable to decrypt entry string - Nepavyko iššifruoti įrašo eilutės - Duplicate custom attribute found - + Rastas dubliuotas tinkintas požymis Entry string key or value missing @@ -2404,6 +2935,14 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + XML klaida: +%1 +%2 eilutė, %3 stulpelis + KeePass1OpenWidget @@ -2567,55 +3106,142 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Invalid entry field type Neteisingas įrašo lauko tipas - - - KeePass2 - AES: 256-bit - AES: 256 bitų - - - Twofish: 256-bit - Twofish: 256 bitų - - - ChaCha20: 256-bit - ChaCha20: 256 bitų - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – rekomenduojama) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Esamas vieno egzemplioriaus užrakto failas yra neteisingas. Paleidžiamas naujas egzempliorius. + Disabled share + - The lock file could not be created. Single-instance mode disabled. - Nepavyko sukurti užrakto. Vieno egzemplioriaus veiksena išjungta. + Import from + Importuoti iš - Another instance of KeePassXC is already running. - Jau yra paleistas kitas KeePassXC egzempliorius. + Export to + Eksportuoti į - Fatal error while testing the cryptographic functions. - Lemtingoji klaida, testuojant šifravimo funkcijas. + Synchronize with + - KeePassXC - Error - KeePassXC - Klaida + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + Atsisakyti + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + Pridėti %1 + + + Change %1 + Change a key component + Keisti %1 + + + Remove %1 + Remove a key component + Šalinti %1 + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Naršyti + + + Generate + Generuoti + + + Key File + Rakto failas + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Rakto failai + + + All files + Visi failai + + + Create Key File... + Sukurti rakto failą... + + + Error creating key file + Klaida kuriant rakto failą + + + Unable to create key file: %1 + Nepavyko sukurti rakto failo: %1 + + + Select a key file + Pasirinkite rakto failą @@ -2628,10 +3254,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų &Recent databases &Paskiausiai naudotos duomenų bazės - - Import - Importuoti - &Help Ž&inynas @@ -2640,14 +3262,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų E&ntries Į&rašai - - Copy att&ribute to clipboard - Kopijuoti &požymį į iškarpinę - - - Time-based one-time password - - &Groups &Grupės @@ -2676,30 +3290,10 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų &Close database &Užverti duomenų bazę - - &New database - &Nauja duomenų bazė - - - Merge from KeePassX database - Sulieti su KeePassX duomenų baze - - - &Add new entry - &Pridėti naują įrašą - - - &View/Edit entry - &Rodyti/Taisyti įrašą - &Delete entry &Ištrinti įrašą - - &Add new group - &Pridėti naują grupę - &Edit group &Taisyti grupę @@ -2712,14 +3306,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Sa&ve database as... Įraš&yti duomenų bazę kaip... - - Change &master key... - Pakeisti &pagrindinį raktą... - - - &Database settings - &Duomenų bazės nustatymai - Database settings Duomenų bazės nustatymai @@ -2728,10 +3314,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų &Clone entry &Dubliuoti įrašą - - &Find - &Rasti - Copy &username Kopijuoti &naudotojo vardą @@ -2740,10 +3322,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Copy username to clipboard Kopijuoti naudotojo vardą į iškarpinę - - Cop&y password - Kopijuoti &slaptažodį - Copy password to clipboard Kopijuoti slaptažodį į iškarpinę @@ -2756,14 +3334,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Password Generator Slaptažodžių generatorius - - &Perform Auto-Type - &Atlikti automatinį rinkimą - - - &Open URL - Atverti &URL - &Lock databases &Užrakinti duomenų bazes @@ -2774,7 +3344,7 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Copy title to clipboard - Kopijuoti antraštę į iškarpinę + Kopijuoti pavadinimą į iškarpinę &URL @@ -2796,22 +3366,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų &Export to CSV file... &Eksportuoti į CSV failą... - - Import KeePass 1 database... - Importuoti KeePass 1 duomenų bazę... - - - Import CSV file... - Importuoti CSV failą... - - - Re&pair database... - Pa&taisyti duomenų bazę... - - - Show TOTP - Rodyti NTVS - Set up TOTP... Nustatyti NTVS... @@ -2832,14 +3386,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Access error for config file %1 Konfigūracijos failo %1 prieigos klaida - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - tik skaitymui - Settings Nustatymai @@ -2852,26 +3398,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Quit KeePassXC Išeiti iš KeePassXC - - KeePass 2 Database - KeePass 2 duomenų bazė - - - All files - Visi failai - - - Open database - Atverti duomenų bazę - - - Save repaired database - Įrašyti pataisytą duomenų bazę - - - Writing the database failed. - Duomenų bazės rašymas nepavyko. - Please touch the button on your YubiKey! Prašome priliesti mygtuką ant savo YubiKey! @@ -2882,6 +3408,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + &Paaukoti + + + Report a &bug + Pranešti apie &klaidą + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + &Importuoti + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + &Nauja duomenų bazė... + + + Create a new database + Sukurti naują duomenų bazę + + + &Merge from database... + &Sulieti iš duomenų bazės... + + + Merge from another KDBX database + Sulieti iš kitos KDBX duomenų bazės + + + &New entry + &Naujas įrašas + + + Add a new entry + Pridėti naują įrašą + + + &Edit entry + &Taisyti įrašą + + + View or edit entry + Rodyti ar taisyti įrašą + + + &New group + &Nauja grupė + + + Add a new group + Pridėti naują grupę + + + Change master &key... + Keisti pagrindinį &raktą... + + + &Database settings... + &Duomenų bazės nustatymai... + + + Copy &password + Kopijuoti sla&ptažodį + + + Perform &Auto-Type + + + + Open &URL + Atverti &URL + + + KeePass 1 database... + KeePass 1 duomenų bazė... + + + Import a KeePass 1 database + Importuoti KeePass 1 duomenų bazę + + + CSV file... + CSV failas... + + + Import a CSV file + Importuoti CSV failą + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + Tikrinti, ar yra atnaujinimų... + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + Pridedama trūkstama piktograma %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Sukurti naują KeePassXC duomenų bazę... + + + Root + Root group + Šaknis + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + Ši&fravimo nustatymai + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Čia galite derinti duomenų bazės šifravimo nustatymus. Nesijaudinkite, vėliau galėsite juos keisti duomenų bazės nustatymuose. + + + Advanced Settings + Išplėstiniai nustatymai + + + Simple Settings + Paprasti nustatymai + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Šifravimo nustatymai + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Čia galite derinti duomenų bazės šifravimo nustatymus. Nesijaudinkite, vėliau galėsite juos keisti duomenų bazės nustatymuose. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Duomenų bazės pagrindinis raktas + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2983,125 +3770,30 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Dialogas + Enter password: + Įrašykite slaptažodį: - This is required for accessing your databases from ChromeIPass or PassIFox - Tai reikalinga, norint prie savo duomenų bazių gauti prieigą iš ChromeIPass ar PassIFox - - - Enable KeePassHTTP server - Įjungti KeePassHTTP serverį - - - General - Bendra - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - R&odyti pranešimą, kai reikalaujama prisijungimo duomenų - - - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Vietoj visos srities visų įrašų, grąžina tik geriausiai tam tikrą URL atitinkančius įrašus. - - - &Return only best matching entries - &Grąžinti tik labiausiai atitinkančius įrašus - - - Re&quest to unlock the database if it is locked - Už&klausti atrakinti duomenų bazę, jeigu ji yra užrakinta - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Bus grąžinami įrašai tik su ta pačia schema (http://, https://, ftp://, ...). - - - &Match URL schemes - &Atitikti URL schemas - - - Sort matching entries by &username - Rikiuoti atitinkančius įrašus pagal na&udotojo vardą - - - Sort &matching entries by title - Rikiuoti atitinkančius įrašus pagal &antraštę - - - R&emove all shared encryption keys from active database - Ša&linti iš aktyvios duomenų bazės visus bendrinamus šifravimo raktus - - - Re&move all stored permissions from entries in active database - Šal&inti iš įrašų aktyvioje duomenų bazėje visus saugomus leidimus - - - Password Generator - Slaptažodžių generatorius - - - Advanced - Išplėstiniai - - - Always allow &access to entries - Visada leisti &prieigą prie įrašų - - - Always allow &updating entries - Visada leisti įrašų at&naujinimą - - - Only the selected database has to be connected with a client. - Su klientu turi būti sujungta tik pasirinkta duomenų bazė. - - - Searc&h in all opened databases for matching entries - Ieš&koti atitinkančių įrašų visose atvertose duomenų bazėse - - - Automatically creating or updating string fields is not supported. - Automatinis eilutės laukų kūrimas ar atnaujinimas nėra palaikomas. - - - &Return advanced string fields which start with "KPH: " - &Grąžinti išplėstines eilutes, kurios prasideda "KPH: " - - - HTTP Port: - HTTP prievadas: - - - Default port: 19455 - Numatytasis prievadas: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC klausysis šio prievado ties 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Įspėjimas:</b> Šie parametrai gali būti pavojingi! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> + Confirm password: - Cannot bind to privileged ports - Nepavyksta susieti su privilegijuotais prievadais + Password + Slaptažodis - Cannot bind to privileged ports below 1024! -Using default port 19455. - Nepavyksta susieti su privilegijuotais prievadais žemiau 1024! -Naudojamas numatytasis prievadas 19455. + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Passwords do not match. + Slaptažodžiai nesutampa. + + + Generate master password + @@ -3171,18 +3863,10 @@ Naudojamas numatytasis prievadas 19455. Wordlist: Žodžių sąrašas: - - Word Count: - Žodžių skaičius: - Word Separator: Žodžių skirtukas: - - Generate - Generuoti - Copy Kopijuoti @@ -3195,10 +3879,6 @@ Naudojamas numatytasis prievadas 19455. Close Užverti - - Apply - Taikyti - Entropy: %1 bit Entropija: %1 bitų @@ -3227,6 +3907,171 @@ Naudojamas numatytasis prievadas 19455. Password quality Puikus + + ExtendedASCII + + + + Switch to advanced mode + Perjungti į išplėstinę veikseną + + + Advanced + Išplėstiniai + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + {[( + + + Punctuation + + + + .,:; + .,:; + + + Quotes + Kabutės + + + " ' + " ' + + + Math + Matematika + + + <*+!?= + <*+!?= + + + Dashes + Brūkšniai + + + \_|-/ + \_|-/ + + + Logograms + + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Perjungti į paprastą veikseną + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + Neįtraukti: + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + Žodžių ska&ičius: + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Ištrinti + + + Move + + + + Empty + + + + Remove + Šalinti + + + Skip + + + + Disable + Išjungti + + + Merge + + QObject @@ -3246,34 +4091,18 @@ Naudojamas numatytasis prievadas 19455. Cannot decrypt message Nepavyksta iššifruoti žinutės - - Timeout or cannot connect to KeePassXC - Baigėsi laikas ar nepavyksta prisijungti prie KeePassXC - Action cancelled or denied Veiksmo atsisakyta arba jis atmestas - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - Rakto keitimas nepavyko - Encryption key is not recognized Šifravimo raktas yra neatpažintas - - No saved databases found - Nerasta įrašytų duomenų bazių - Incorrect action Neteisingas veiksmas @@ -3357,7 +4186,7 @@ Naudojamas numatytasis prievadas 19455. Timeout in seconds before clearing the clipboard. - Laiko limitas, sekundėmis, prieš išvalant iškarpinę. + Skirtas laikas, sekundėmis, prieš išvalant iškarpinę. Edit an entry. @@ -3365,7 +4194,7 @@ Naudojamas numatytasis prievadas 19455. Title for the entry. - Įrašo antraštė. + Įrašo pavadinimas. title @@ -3399,10 +4228,6 @@ Naudojamas numatytasis prievadas 19455. Insert password to unlock %1: Norėdami atrakinti %1, įterpkite slaptažodį: - - Failed to load key file %1 : %2 - Nepavyko įkelti rakto failo %1 : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3484,12 +4309,6 @@ Prieinamos komandos: error reading from device klaida skaitant iš įrenginio - - file empty ! - - failas tuščias! - - malformed string netaisyklinga eilutė @@ -3526,10 +4345,6 @@ Prieinamos komandos: Created Sukurta - - Legacy Browser Integration - - Browser Integration Naršyklės integracija @@ -3558,10 +4373,6 @@ Prieinamos komandos: Word count for the diceware passphrase. - - count - kiekis - Wordlist for the diceware generator. [Default: EFF English] @@ -3572,27 +4383,442 @@ Prieinamos komandos: Generuoti naują atsitiktinį slaptažodį. - Length of the generated password. - Generuoto slaptažodžio ilgis. - - - Use lowercase characters in the generated password. + Invalid value for password length %1. - Use uppercase characters in the generated password. + Could not create entry with path %1. - Use numbers in the generated password. + Enter password for new entry: - Use special characters in the generated password. + Writing the database failed %1. + Rašymas į duomenų bazę patyrė nesėkmę %1. + + + Successfully added entry %1. + Sėkmingai pridėtas įrašas %1. + + + Copy the current TOTP to the clipboard. - Use extended ASCII in the generated password. + Invalid timeout value %1. + + + + Entry %1 not found. + Įrašas %1 nerastas. + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + Iškarpinė išvalyta! + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + kiekis + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + Ilgis %1 + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + Nepavyko įkelti rakto failo %1: %2 + + + File %1 does not exist. + Failo %1 nėra. + + + Unable to open file %1. + Nepavyko atverti failą %1. + + + Error while reading the database: +%1 + Klaida skaitant duomenų bazę: +%1 + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + Nepavyksta rasti grupės %1. + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + Nepavyko įrašyti duomenų bazę į failą : %1 + + + Unable to save database to file: %1 + Nepavyko įrašyti duomenų bazę į failą: %1 + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + Sėkmingai ištrintas įrašas %1. + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + KLAIDA: nežinomas požymis %1. + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + Nepavyko paleisti programos %1 + + + file empty + failas tuščias + + + %1: (row, col) %2,%3 + %1: (eil., stulp.) %2,%3 + + + AES: 256-bit + AES: 256 bitų + + + Twofish: 256-bit + Twofish: 256 bitų + + + ChaCha20: 256-bit + ChaCha20: 256 bitų + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – rekomenduojama) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Neteisingi nustatymai + + + Invalid Key + TOTP + Neteisingas raktas + + + Message encryption failed. + + + + No groups found + Nerasta jokių grupių + + + Create a new database. + Sukurti naują duomenų bazę. + + + File %1 already exists. + Failas %1 jau yra. + + + Loading the key file failed + Rakto failo įkėlimas nepavyko + + + No key is set. Aborting database creation. + Nenustatytas joks raktas. Duomenų bazės sukūrimas nutraukiamas. + + + Failed to save the database: %1. + Nepavyko įrašyti duomenų bazės: %1. + + + Successfully created new database. + Nauja duomenų bazė sėkmingai sukurta. + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Šalinti įrašą iš duomenų bazės. + + + Path of the entry to remove. + Įrašo, kurį šalinti, kelias. + + + Existing single-instance lock file is invalid. Launching new instance. + Esamas vieno egzemplioriaus užrakto failas yra neteisingas. Paleidžiamas naujas egzempliorius. + + + The lock file could not be created. Single-instance mode disabled. + Nepavyko sukurti užrakto. Vieno egzemplioriaus veiksena išjungta. + + + KeePassXC - cross-platform password manager + KeePassXC - daugiaplatformė slaptažodžių tvarkytuvė + + + filenames of the password databases to open (*.kdbx) + norimų atverti slaptažodžių duomenų bazių failų pavadinimai (*.kdbx) + + + path to a custom config file + kelias į tinkintą konfigūracijos failą + + + key file of the database + duomenų bazės rakto failas + + + read password of the database from stdin + nuskaityti duomenų bazės slaptažodį iš stdin + + + Parent window handle + + + + Another instance of KeePassXC is already running. + Jau yra paleistas kitas KeePassXC egzempliorius. + + + Fatal error while testing the cryptographic functions. + Lemtingoji klaida, testuojant šifravimo funkcijas. + + + KeePassXC - Error + KeePassXC - Klaida + + + Database password: + Duomenų bazės slaptažodis: + + + Cannot create new group @@ -3631,11 +4857,97 @@ Prieinamos komandos: - SearchWidget + SSHAgent - Search... - Ieškoti... + Agent connection failed. + + + Agent protocol error. + Agento protokolo klaida. + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + Raktas jau buvo pridėtas. + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + Modifikatoriai + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + Laukai + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + Pavyzdžiai + + + + SearchWidget Search Paieška @@ -3644,316 +4956,332 @@ Prieinamos komandos: Clear Išvalyti - - Case Sensitive - Skirti raidžių dydį - Limit search to selected group Riboti paiešką iki pasirinktos grupės - - - Service - KeePassXC: New key association request - KeePassXC: Naujo rakto susiejimo užklausa + Search Help + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Jūs gavote susiejimo užklausą aukščiau esančiam raktui. -Jei norite leisti jam gauti prieigą prie savo KeePassXC -duomenų bazės, suteikite jam unikalų pavadinimą, kad atpažintumėte -ir priimtumėte jį. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + - KeePassXC: Overwrite existing key? - KeePassXC: Perrašyti esamą raktą? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Bendrinamas šifravimo raktas, pavadinimu "%1" jau yra. -Ar norite jį perrašyti? - - - KeePassXC: Update Entry - KeePassXC: Atnaujinti įrašą - - - Do you want to update the information in %1 - %2? - Ar norite atnaujinti informaciją ties %1 - %2? - - - KeePassXC: Database locked! - KeePassXC: Duomenų bazė užrakinta! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Aktyvi duomenų bazė yra užrakinta! -Prašome atrakinti pasirinktą duomenų bazę arba pasirinkti kitą, kuri būtų atrakinta. - - - KeePassXC: Removed keys from database - KeePassXC: Pašalinti raktai iš duomenų bazės - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - %n šifravimo raktas sėkmingai pašalintas iš KeePassX/Http nustatymų.%n šifravimo raktai sėkmingai pašalinti iš KeePassX/Http nustatymų.%n šifravimo raktų sėkmingai pašalinta iš KeePassX/Http nustatymų.%n šifravimo raktų sėkmingai pašalinta iš KeePassX/Http nustatymų. - - - KeePassXC: No keys found - KeePassXC: Raktų nerasta - - - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp nustatymuose nerasta jokių bendrinamų šifravimo raktų. - - - KeePassXC: Settings not available! - KeePassXC: Nustatymai neprieinami! - - - The active database does not contain an entry of KeePassHttp Settings. - Aktyvioje duomenų bazėje nėra KeePassHttp nustatymų įrašo. - - - Removing stored permissions... - Šalinami saugomi leidimai... - - - Abort - Nutraukti - - - KeePassXC: Removed permissions - KeePassXC: Pašalinti leidimai - - - Successfully removed permissions from %n entries. - Leidimai sėkmingai pašalinti iš %n įrašo.Leidimai sėkmingai pašalinti iš %n įrašų.Leidimai sėkmingai pašalinti iš %n įrašų.Leidimai sėkmingai pašalinti iš %n įrašų. - - - KeePassXC: No entry with permissions found! - KeePassXC: Nerasta jokių įrašų su leidimais! - - - The active database does not contain an entry with permissions. - Aktyvioje duomenų bazėje nėra įrašo su leidimais. + Case sensitive + Skiriant raidžių registrą - SettingsWidget + SettingsWidgetKeeShare - Application Settings - Programos nustatymai + Active + - General - Bendra + Allow export + - Security - Saugumas + Allow import + - Access error for config file %1 - Konfigūracijos failo %1 prieigos klaida - - - - SettingsWidgetGeneral - - Basic Settings - Pagrindiniai nustatymai + Own certificate + - Start only a single instance of KeePassXC - Paleisti tik vieną KeePassXC egzempliorių + Fingerprint: + Kontrolinis kodas: - Remember last databases - Prisiminti paskutines duomenų bazes + Certificate: + Liudijimas: - Remember last key files and security dongles - Prisiminti paskutinius rakto failus ir saugumo saugiklius + Signer + - Load previous databases on startup - Paleidžiant programą, įkelti ankstesnes duomenų bazes + Key: + Raktas: - Automatically save on exit - Išeinant, automatiškai įrašyti + Generate + Generuoti - Automatically save after every change - Automatiškai įrašyti po kiekvieno pakeitimo + Import + Importuoti - Automatically reload the database when modified externally - Išoriškai modifikavus duomenų bazę, automatiškai įkelti ją iš naujo + Export + - Minimize when copying to clipboard - Kopijuojant į iškarpinę, suskleisti langą + Imported certificates + Importuoti liudijimai - Minimize window at application startup - Paleidus programą, suskleisti langą + Trust + - Use group icon on entry creation - Kuriant įrašus, naudoti grupės piktogramą + Ask + - Don't mark database as modified for non-data changes (e.g., expanding groups) - Nežymėti duomenų bazė kaip pakeistą, jei buvo keičiami ne duomenys, o kita (pvz., išskleidžiamos grupės) + Untrust + - Hide the Details view - Slėpti išsamų rodinį + Remove + Šalinti - Show a system tray icon - Rodyti sistemos dėklo piktogramą + Path + Kelias - Hide window to system tray when minimized - Suskleidus langą, slėpti jį į sistemos dėklą + Status + Būsena - Hide window to system tray instead of app exit - Neužverti lango, bet vietoj to, suskleisti jį į sistemos dėklą + Fingerprint + Kontrolinis kodas - Dark system tray icon - Tamsi sistemos dėklo piktograma + Certificate + Liudijimas - Language - Kalba + Trusted + - Auto-Type - Automatinis rinkimas + Untrusted + - Use entry title to match windows for global Auto-Type - Naudoti įrašo antraštę, norint sutapatinti langus visuotiniam Automatiniam rinkimui + Unknown + Nežinoma - Use entry URL to match windows for global Auto-Type - Naudoti įrašo URL, norint sutapatinti langus visuotiniam Automatiniam rinkimui + key.share + Filetype for KeeShare key + - Always ask before performing Auto-Type - Visada klausti prieš atliekant automatinį rinkimą + KeeShare key file + - Global Auto-Type shortcut - Visuotinis automatinio rinkimo spartusis klavišas + All files + Visi failai - Auto-Type delay - Automatinio rinkimo delsa + Select path + - ms - Milliseconds - ms + Exporting changed certificate + - Startup - Įjungimo + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - File Management - Failų tvarkymas - - - Safely save database files (may be incompatible with Dropbox, etc) - Saugiai įrašyti duomenų bazės failus (gali būti nesuderinama su Dropbox ir t.t.) - - - Backup database file before saving - Išsaugoti duomenų bazę prieš išsaugant - - - Entry Management - Įrašų tvarkymas - - - General - Bendra - - - - SettingsWidgetSecurity - - Timeouts - Laiko limitai - - - Clear clipboard after - Išvalyti iškarpinę po - - - sec - Seconds - sek. - - - Lock databases after inactivity of - Užrakinti duomenų bazes, kai kompiuteris neaktyvus - - - Convenience - Patogumas - - - Lock databases when session is locked or lid is closed - Užrakinti duomenų bazes, kai yra užrakinamas ekranas ar uždaromas nešiojamojo kompiuterio dangtis - - - Lock databases after minimizing the window - Suskleidus langą, užrakinti duomenų bazes - - - Don't require password repeat when it is visible - Nereikalauti pakartoti slaptažodį, kai šis yra matomas - - - Show passwords in cleartext by default - Pagal numatymą, rodyti slaptažodžius atviruoju tekstu - - - Hide passwords in the preview panel - Slėpti slaptažodžius peržiūros skydelyje - - - Hide entry notes by default - Pagal numatymą, slėpti įrašo pastabas - - - Privacy - Privatumas - - - Use Google as fallback for downloading website icons - Naudoti Google kaip surogatą svetainių piktogramų atsiuntimui - - - Re-lock previously locked database after performing Auto-Type + Signer: - SetupTotpDialog + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + Ne šį kartą + + + Never + Niekada + + + Always + Visada + + + Just this time + Tik šį kartą + + + Import from %1 failed (%2) + Importavimas iš %1 nepavyko (%2) + + + Import from %1 successful (%2) + Importavimas iš %1 sėkmingas (%2) + + + Imported from %1 + Importuota iš %1 + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + Netikėta klaida + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + Failo nėra + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + Įvyko netikėta eksportavimo klaida + + + Export to %1 failed (%2) + Eksportavimas į %1 nepavyko (%2) + + + Export to %1 successful (%2) + Eksportavimas į %1 sėkmingas (%2) + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Numatytosios trukmės slaptažodis + + + 000000 + 000000 + + + Copy + Kopijuoti + + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + Kopijuoti + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. + Užveriama po %1 sekundžių. + + + + TotpSetupDialog Setup TOTP Nustatyti NTVS @@ -3975,59 +5303,84 @@ Prašome atrakinti pasirinktą duomenų bazę arba pasirinkti kitą, kuri būtų Naudoti tinkintus nustatymus - Note: Change these settings only if you know what you are doing. - Pastaba: Keiskite šiuos nustatymus tik tuo atveju, jeigu žinote ką darote. + Custom Settings + Time step: Laiko žingsnis: - 8 digits - 8 skaitmenys - - - 6 digits - 6 skaitmenys + sec + Seconds + sek. Code size: Kodo dydis: - sec - Seconds - sek. + 6 digits + 6 skaitmenys + + + 7 digits + + + + 8 digits + 8 skaitmenys - TotpDialog + UpdateCheckDialog - Timed Password - Numatytosios trukmės slaptažodis + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - Kopijuoti + Close + Užverti - Expires in - Nustoja galioti po + Update Error! + Atnaujinimo klaida! - seconds - sekundžių + An error occurred in retrieving update information. + Gaunant atnaujinimo informaciją, įvyko klaida. - - - UnlockDatabaseWidget - Unlock database - Atrakinti duomenų bazę + Please try again later. + Bandykite dar kartą vėliau. + + + Software Update + Programinės įrangos atnaujinimas + + + A new version of KeePassXC is available! + Yra prieinama nauja KeePassXC versija! + + + KeePassXC %1 is now available — you have %2. + Dabar yra prieinama KeePassXC %1 — jūs naudojate %2. + + + Download it at keepassxc.org + Atsisiųskite ją iš keepassxc.org + + + You're up-to-date! + Naudojate naujausią versiją! + + + KeePassXC %1 is currently the newest version available + Šiuo metu KeePassXC %1 yra naujausia prieinama versija @@ -4062,41 +5415,25 @@ Prašome atrakinti pasirinktą duomenų bazę arba pasirinkti kitą, kuri būtų - main + YubiKeyEditWidget - Remove an entry from the database. - Šalinti įrašą iš duomenų bazės. + Refresh + Įkelti iš naujo - Path of the database. - Duomenų bazės kelias. + YubiKey Challenge-Response + - Path of the entry to remove. - Įrašo, kurį šalinti, kelias. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC - daugiaplatformė slaptažodžių tvarkytuvė + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - norimų atverti slaptažodžių duomenų bazių failų pavadinimai (*.kdbx) - - - path to a custom config file - kelias į tinkintą konfigūracijos failą - - - key file of the database - duomenų bazės rakto failas - - - read password of the database from stdin - nuskaityti duomenų bazės slaptažodį iš stdin - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_lv.ts b/share/translations/keepassx_lv.ts new file mode 100644 index 000000000..8e3cdadff --- /dev/null +++ b/share/translations/keepassx_lv.ts @@ -0,0 +1,5423 @@ + + + AboutDialog + + About KeePassXC + + + + About + + + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + + + + Contributors + + + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + + + + Debug Info + + + + Include the following information whenever you report a bug: + + + + Copy to clipboard + + + + Revision: %1 + + + + Distribution: %1 + + + + Libraries: + + + + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + + + + Enabled extensions: + + + + Project Maintainers: + + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + + + + Version %1 + + + + Build Type: %1 + + + + Auto-Type + + + + Browser Integration + + + + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) + + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + + + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + + + + General + + + + Security + + + + Access error for config file %1 + + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + + + + Automatically save on exit + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + + + + Hide the entry preview panel + + + + General + + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + + + + Auto-Type + + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + + + + sec + Seconds + + + + Lock databases after inactivity of + + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + + + + Use DuckDuckGo as fallback for downloading website icons + + + + + AutoType + + Couldn't find an entry that matches the window title: + + + + Auto-Type - KeePassXC + + + + Auto-Type + + + + The Syntax of your Auto-Type statement is incorrect! + + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + + + + AutoTypeAssociationsModel + + Window + + + + Sequence + + + + Default sequence + + + + + AutoTypeMatchModel + + Group + + + + Title + + + + Username + + + + Sequence + + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + + + + Select entry to Auto-Type: + + + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + + + + Remember this decision + + + + Allow + + + + Deny + + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + + + BrowserOptionDialog + + Dialog + + + + This is required for accessing your databases with KeePassXC-Browser + + + + Enable KeepassXC browser integration + + + + General + + + + Enable integration for these browsers: + + + + &Google Chrome + + + + &Firefox + + + + &Chromium + + + + &Vivaldi + + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + + + + Re&quest to unlock the database if it is locked + + + + Only entries with the same scheme (http://, https://, ...) are returned. + + + + &Match URL scheme (e.g., https://...) + + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + + + + &Return only best-matching credentials + + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + + + + Advanced + + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + + + + Only the selected database has to be connected with a client. + + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + + + + Automatically creating or updating string fields is not supported. + + + + &Return advanced string fields which start with "KPH: " + + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + + + + Update &native messaging manifest files at startup + + + + Support a proxy application between KeePassXC and browser extension. + + + + Use a &proxy application between KeePassXC and browser extension + + + + Use a custom proxy location if you installed a proxy manually. + + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + + + + Browse... + Button for opening file dialog + + + + <b>Warning:</b> The following options can be dangerous! + + + + Select custom proxy location + + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + + BrowserService + + KeePassXC: New key association request + + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + + + + Save and allow access + + + + KeePassXC: Overwrite existing key? + + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + + KeePassXC: Update Entry + + + + Do you want to update the information in %1 - %2? + + + + Abort + + + + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + + + + KeePassXC: No entry with KeePassHTTP attributes found! + + + + The active database does not contain an entry with KeePassHTTP attributes. + + + + KeePassXC: Legacy browser integration settings detected + + + + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + CloneDialog + + Clone Options + + + + Append ' - Clone' to title + + + + Replace username and password with references + + + + Copy history + + + + + CsvImportWidget + + Import CSV fields + + + + filename + + + + size, rows, columns + + + + Encoding + + + + Codec + + + + Text is qualified by + + + + Fields are separated by + + + + Comments start with + + + + First record has field names + + + + Number of headers line to discard + + + + Consider '\' an escape character + + + + Preview + + + + Column layout + + + + Not present in CSV file + + + + Imported from CSV file + + + + Original data: + + + + Error + + + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + + + CSV import: writer has errors: +%1 + + + + + CsvParserModel + + %n column(s) + + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + + + + DatabaseOpenWidget + + Enter master key + + + + Key File: + + + + Password: + + + + Browse + + + + Refresh + + + + Challenge Response: + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + Don't show this warning again + + + + All files + + + + Key files + + + + Select key file + + + + TouchID for quick unlock + + + + Unable to open the database: +%1 + + + + Can't open key file: +%1 + + + + + DatabaseSettingWidgetMetaData + + Passwords + + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + + + + Security + + + + Master Key + + + + Encryption Settings + + + + Browser Integration + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + + + + AES: 256 Bit (default) + + + + Twofish: 256 Bit + + + + Key Derivation Function: + + + + Transform rounds: + + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + + + + Number of rounds too high + Key transformation rounds + + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + + Understood, keep number + + + + Cancel + + + + Number of rounds too low + Key transformation rounds + + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + + KDF unchanged + + + + Failed to transform key with new KDF parameters; KDF unchanged. + + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + + + + Database description: + + + + Default username: + + + + History Settings + + + + Max. history items: + + + + Max. history size: + + + + MiB + + + + Use recycle bin + + + + Additional Database Settings + + + + Enable &compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget + + KeePass 2 Database + + + + All files + + + + Open database + + + + CSV file + + + + Merge database + + + + Open KeePass 1 database + + + + KeePass 1 database + + + + Export database to CSV file + + + + Writing the CSV file failed. + + + + Database creation error + + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + + + + + DatabaseWidget + + Searching... + + + + Do you really want to delete the entry "%1" for good? + + + + Do you really want to move entry "%1" to the recycle bin? + + + + Do you really want to move %n entry(s) to the recycle bin? + + + + Execute command? + + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + + + + Do you really want to delete the group "%1" for good? + + + + No current database. + + + + No source database, nothing to do. + + + + Search Results (%1) + + + + No Results + + + + File has changed + + + + The database file has changed. Do you want to load the changes? + + + + Merge Request + + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + + + + Empty recycle bin? + + + + Are you sure you want to permanently delete everything from your recycle bin? + + + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + + + File opened in read only mode. + + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + + + + Database was modified. +Save changes? + + + + Save changes? + + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords + + + + Save database as + + + + KeePass 2 Database + + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + + + + + EditEntryWidget + + Entry + + + + Advanced + + + + Icon + + + + Auto-Type + + + + Properties + + + + History + + + + SSH Agent + + + + n/a + + + + (encrypted) + + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + + + Entry history + + + + Add entry + + + + Edit entry + + + + Different passwords supplied. + + + + New attribute + + + + Are you sure you want to remove this attribute? + + + + Tomorrow + + + + %n week(s) + + + + %n month(s) + + + + Apply generated password? + + + + Do you want to apply the generated password to this entry? + + + + Entry updated successfully. + + + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + + + + EditEntryWidgetAdvanced + + Additional attributes + + + + Add + + + + Remove + + + + Edit Name + + + + Protect + + + + Reveal + + + + Attachments + + + + Foreground Color: + + + + Background Color: + + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + + + + Inherit default Auto-Type sequence from the &group + + + + &Use custom Auto-Type sequence: + + + + Window Associations + + + + + + + + + - + + + + Window title: + + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + + + + Restore + + + + Delete + + + + Delete all + + + + + EditEntryWidgetMain + + URL: + + + + Password: + + + + Repeat: + + + + Title: + + + + Notes + + + + Presets + + + + Toggle the checkbox to reveal the notes section. + + + + Username: + + + + Expires + + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + + + + Add key to agent when database is opened/unlocked + + + + Comment + + + + Decrypt + + + + n/a + + + + Copy to clipboard + + + + Private key + + + + External file + + + + Browse... + Button for opening file dialog + + + + Attachment + + + + Add to agent + + + + Remove from agent + + + + Require user confirmation when this key is used + + + + + EditGroupWidget + + Group + + + + Icon + + + + Properties + + + + Add group + + + + Edit group + + + + Enable + + + + Disable + + + + Inherit from parent group (%1) + + + + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + + EditGroupWidgetMain + + Name + + + + Notes + + + + Expires + + + + Search + + + + Auto-Type + + + + &Use default Auto-Type sequence of parent group + + + + Set default Auto-Type se&quence + + + + + EditWidgetIcons + + &Use default icon + + + + Use custo&m icon + + + + Add custom icon + + + + Delete custom icon + + + + Download favicon + + + + Unable to fetch favicon. + + + + Images + + + + All files + + + + Custom icon already exists + + + + Confirm Delete + + + + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + + + + EditWidgetProperties + + Created: + + + + Modified: + + + + Accessed: + + + + Uuid: + + + + Plugin Data + + + + Remove + + + + Delete plugin data? + + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + + + + Key + + + + Value + + + + + Entry + + %1 - Clone + + + + + EntryAttachmentsModel + + Name + + + + Size + + + + + EntryAttachmentsWidget + + Form + + + + Add + + + + Remove + + + + Open + + + + Save + + + + Select files + + + + Are you sure you want to remove %n attachment(s)? + + + + Save attachments + + + + Unable to create directory: +%1 + + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + + + + Unable to save attachments: +%1 + + + + Unable to open attachment: +%1 + + + + Unable to open attachments: +%1 + + + + Confirm remove + + + + Unable to open file(s): +%1 + + + + + EntryAttributesModel + + Name + + + + + EntryHistoryModel + + Last modified + + + + Title + + + + Username + + + + URL + + + + + EntryModel + + Ref: + Reference abbreviation + + + + Group + + + + Title + + + + Username + + + + URL + + + + Never + + + + Password + + + + Notes + + + + Expires + + + + Created + + + + Modified + + + + Accessed + + + + Attachments + + + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + + + + General + + + + Username + + + + Password + + + + Expiration + + + + URL + + + + Attributes + + + + Attachments + + + + Notes + + + + Autotype + + + + Window + + + + Sequence + + + + Searching + + + + Search + + + + Clear + + + + Never + + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + + + + Disabled + + + + Share + + + + + EntryView + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + + + + + Group + + Recycle Bin + + + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + + + + HostInstaller + + KeePassXC: Cannot save file! + + + + Cannot save the native messaging script file. + + + + + KMessageWidget + + &Close + + + + Close message + + + + + Kdbx3Reader + + Unable to calculate master key + + + + Unable to issue challenge-response. + + + + Wrong key or database file is corrupt. + + + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + + Kdbx3Writer + + Unable to issue challenge-response. + + + + Unable to calculate master key + + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + + + + Invalid header checksum size + + + + Header SHA256 mismatch + + + + Wrong key or database file is corrupt. (HMAC mismatch) + + + + Unknown cipher + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + Failed to open buffer for KDF parameters in header + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + Not a KeePass database. + + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + + + + Unsupported KeePass 2 database version. + + + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + + + + KdbxXmlReader + + XML parsing failure: %1 + + + + No root group + + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + Invalid EnableAutoType value + + + + Invalid EnableSearching value + + + + No group uuid found + + + + Null DeleteObject uuid + + + + Missing DeletedObject uuid or time + + + + Null entry uuid + + + + Invalid entry icon number + + + + History element in history entry + + + + No entry uuid found + + + + History element with different uuid + + + + Duplicate custom attribute found + + + + Entry string key or value missing + + + + Duplicate attachment found + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + XML error: +%1 +Line %2, column %3 + + + + + KeePass1OpenWidget + + Import KeePass1 database + + + + Unable to open the database. + + + + + KeePass1Reader + + Unable to read keyfile. + + + + Not a KeePass database. + + + + Unsupported encryption algorithm. + + + + Unsupported KeePass database version. + + + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + + + + Invalid number of groups + + + + Invalid number of entries + + + + Invalid content hash size + + + + Invalid transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + + + + Root + + + + Unable to calculate master key + + + + Wrong key or database file is corrupt. + + + + Key transformation failed + + + + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + unable to seek to content position + + + + + KeeShare + + Disabled share + + + + Import from + + + + Export to + + + + Synchronize with + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + + + + All files + + + + Create Key File... + + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + + + + + MainWindow + + &Database + + + + &Recent databases + + + + &Help + + + + E&ntries + + + + &Groups + + + + &Tools + + + + &Quit + + + + &About + + + + &Open database... + + + + &Save database + + + + &Close database + + + + &Delete entry + + + + &Edit group + + + + &Delete group + + + + Sa&ve database as... + + + + Database settings + + + + &Clone entry + + + + Copy &username + + + + Copy username to clipboard + + + + Copy password to clipboard + + + + &Settings + + + + Password Generator + + + + &Lock databases + + + + &Title + + + + Copy title to clipboard + + + + &URL + + + + Copy URL to clipboard + + + + &Notes + + + + Copy notes to clipboard + + + + &Export to CSV file... + + + + Set up TOTP... + + + + Copy &TOTP + + + + E&mpty recycle bin + + + + Clear history + + + + Access error for config file %1 + + + + Settings + + + + Toggle window + + + + Quit KeePassXC + + + + Please touch the button on your YubiKey! + + + + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. + + + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key + + + + PEM boundary mismatch + + + + Base64 decoding failed + + + + Key file way too small. + + + + Key file magic header id invalid + + + + Found zero keys + + + + Failed to read public key. + + + + Corrupted key file, reading private key failed + + + + No private key payload to decrypt + + + + Trying to run KDF without cipher + + + + Passphrase is required to decrypt this key + + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + + + + Unexpected EOF while reading private key + + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + + + + Unsupported key type: %1 + + + + Unknown cipher: %1 + + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + + + + + PasswordEditWidget + + Enter password: + + + + Confirm password: + + + + Password + + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Password cannot be empty. + + + + Passwords do not match. + + + + Generate master password + + + + + PasswordGeneratorWidget + + %p% + + + + Password: + + + + strength + Password strength + + + + entropy + + + + Password + + + + Character Types + + + + Upper Case Letters + + + + Lower Case Letters + + + + Numbers + + + + Special Characters + + + + Extended ASCII + + + + Exclude look-alike characters + + + + Pick characters from every group + + + + &Length: + + + + Passphrase + + + + Wordlist: + + + + Word Separator: + + + + Copy + + + + Accept + + + + Close + + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + + + + Upper Case Letters A to F + + + + A-Z + + + + Lower Case Letters A to F + + + + a-z + + + + 0-9 + + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + + + + Move + + + + Empty + + + + Remove + + + + Skip + + + + Disable + + + + Merge + + + + + QObject + + Database not opened + + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + + + + Action cancelled or denied + + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + + + + Incorrect action + + + + Empty message received + + + + No URL provided + + + + No logins found + + + + Unknown error + + + + Add a new entry to a database. + + + + Path of the database. + + + + Key file of the database. + + + + path + + + + Username for the entry. + + + + username + + + + URL for the entry. + + + + URL + + + + Prompt for the entry's password. + + + + Generate a password for the entry. + + + + Length for the generated password. + + + + length + + + + Path of the entry to add. + + + + Copy an entry's password to the clipboard. + + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + + + + Edit an entry. + + + + Title for the entry. + + + + title + + + + Path of the entry to edit. + + + + Estimate the entropy of a password. + + + + Password for which to estimate the entropy. + + + + Perform advanced analysis on the password. + + + + Extract and print the content of a database. + + + + Path of the database to extract. + + + + Insert password to unlock %1: + + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + + +Available commands: + + + + + Name of the command to execute. + + + + List database entries. + + + + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + + + + Path of the database to merge into. + + + + Path of the database to merge from. + + + + Use the same credentials for both database files. + + + + Key file of the database to merge from. + + + + Show an entry's information. + + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + + + + attribute + + + + Name of the entry to show. + + + + NULL device + + + + error reading from device + + + + malformed string + + + + missing closing quote + + + + Group + + + + Title + + + + Username + + + + Password + + + + Notes + + + + Last Modified + + + + Created + + + + Browser Integration + + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + + + + Press + + + + Passive + + + + SSH Agent + + + + Generate a new random diceware passphrase. + + + + Word count for the diceware passphrase. + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + + + + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + + + + Database password: + + + + + QtIOCompressor + + Internal zlib error when compressing: + + + + Error writing to underlying device: + + + + Error opening underlying device: + + + + Error reading data from underlying device: + + + + Internal zlib error when decompressing: + + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + + + + Internal zlib error: + + + + + SSHAgent + + Agent connection failed. + + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget + + Search + + + + Clear + + + + Limit search to selected group + + + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + + + + SettingsWidgetKeeShare + + Active + + + + Allow export + + + + Allow import + + + + Own certificate + + + + Fingerprint: + + + + Certificate: + + + + Signer + + + + Key: + + + + Generate + + + + Import + + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + + + + 000000 + + + + Copy + + + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. + + + + + TotpSetupDialog + + Setup TOTP + + + + Key: + + + + Default RFC 6238 token settings + + + + Steam token settings + + + + Use custom settings + + + + Custom Settings + + + + Time step: + + + + sec + Seconds + + + + Code size: + + + + 6 digits + + + + 7 digits + + + + 8 digits + + + + + UpdateCheckDialog + + Checking for updates + + + + Checking for updates... + + + + Close + + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + + + + Create new database + + + + Open existing database + + + + Import from KeePass 1 + + + + Import from CSV + + + + Recent databases + + + + Welcome to KeePassXC %1 + + + + + YubiKeyEditWidget + + Refresh + + + + YubiKey Challenge-Response + + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + + + No YubiKey detected, please ensure it's plugged in. + + + + No YubiKey inserted. + + + + \ No newline at end of file diff --git a/share/translations/keepassx_nb.ts b/share/translations/keepassx_nb.ts index 854ad820b..58a820a42 100644 --- a/share/translations/keepassx_nb.ts +++ b/share/translations/keepassx_nb.ts @@ -23,11 +23,11 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se bidrag på GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se Bidrag på GitHub</a> Debug Info - Feilsøkingsinformasjon + Debuggingsinfo Include the following information whenever you report a bug: @@ -35,37 +35,7 @@ Copy to clipboard - Kopier til utklippstavla - - - Version %1 - - Versjon %1 - - - - Revision: %1 - Revisjon: %1 - - - Distribution: %1 - Distribusjon: %1 - - - Libraries: - Biblioteker: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operativsystem: %1 -CPU-arkitektur: %2 -Kjerne: %3 %4 - - - Enabled extensions: - Aktive utvidelser: + Kopier til utklippstavle Project Maintainers: @@ -75,50 +45,290 @@ Kjerne: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. En spesiell takk fra KeePassXC-laget går til debfx, utvikler av programmet KeePassX. - - Build Type: %1 - - Bygge-type: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP: Bekreft tilgang - - - Remember this decision - Husk dette valget - - - Allow - Tillat - - - Deny - Avvis - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 spør om passordtilgang for følgende elementer. -Velg om du vil gi tilgang eller ikke. - AgentSettingsWidget Enable SSH Agent (requires restart) - Slå på SSH-agenten (krever programomstart) + Slå på SSH-agenten (krever omstart) + + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Applikasjonsinnstillinger + + + General + Generelt + + + Security + Sikkerhet + + + Access error for config file %1 + Feil ved tilgang til konfigurasjonsfilen %1 + + + Icon only + Kun ikon + + + Text only + Kun tekst + + + Text beside icon + Tekst ved siden av ikon + + + Text under icon + Tekst under ikon + + + Follow style + Følg stil + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Grunnleggende + + + Startup + Oppstart + + + Start only a single instance of KeePassXC + Kjør kun én instans av KeePassXC om gangen + + + Remember last databases + Husk de sist brukte databasene + + + Remember last key files and security dongles + Husk de sist brukte nøkkelfilene og kopibeskyttelsesnøklene + + + Load previous databases on startup + Åpne sist brukte databaser ved oppstart + + + Minimize window at application startup + Minimer ved programstart + + + File Management + Filhåndtering + + + Safely save database files (may be incompatible with Dropbox, etc) + Sikker lagring av database-filer (kan være uforenelig med Dropbox, etc.) + + + Backup database file before saving + Sikkerhetskopier database-filen før lagring + + + Automatically save after every change + Lagre automatisk etter hver endring + + + Automatically save on exit + Lagre automatisk ved avslutning + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Ikke marker database som endret ved ikke-dataendringer (f.eks. ekspandere grupper) + + + Automatically reload the database when modified externally + Last databasen automatisk på nytt hvis den blir endret eksternt + + + Entry Management + Oppføringshåndtering + + + Use group icon on entry creation + Bruk gruppeikon ved ny oppføring + + + Minimize when copying to clipboard + Minimer ved kopiering til utklippstavla + + + Hide the entry preview panel + + + + General + Generelt + + + Hide toolbar (icons) + Skjul verktøylinje (ikon) + + + Minimize instead of app exit + Minimer istedenfor app-avslutning + + + Show a system tray icon + Vis et ikon i systemkurven + + + Dark system tray icon + Mørkt ikon i systemkurven + + + Hide window to system tray when minimized + Skjul vindu til systemkurven når minimert + + + Language + Språk + + + Auto-Type + Autoskriv + + + Use entry title to match windows for global Auto-Type + Bruk tittel i oppføringa for å matche vindu ved global autoskriv + + + Use entry URL to match windows for global Auto-Type + Bruk URL i oppføringa for å matche vindu ved global autoskriv + + + Always ask before performing Auto-Type + Alltid spør før utførelse av autoskriv + + + Global Auto-Type shortcut + Global autoskriv-hurtigtast + + + Auto-Type typing delay + Autoskriv tidsforsinkelse + + + ms + Milliseconds + ms + + + Auto-Type start delay + Autoskriv start-forsinkelse + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + Knappestil + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Tidsavbrudd + + + Clear clipboard after + Slett utklippstavlen etter + + + sec + Seconds + sek + + + Lock databases after inactivity of + Lås databaser etter inaktivitet i + + + min + min + + + Forget TouchID after inactivity of + Glem berørings-id etter inaktivitet i + + + Convenience + Bekvemmelighet + + + Lock databases when session is locked or lid is closed + Lås databaser når økta låses eller lokket lukkes + + + Forget TouchID when session is locked or lid is closed + Glem berørings-id når økten er låst eller lokket er lukket + + + Lock databases after minimizing the window + Lås databaser når vinduet minimeres + + + Re-lock previously locked database after performing Auto-Type + Lås tidligere låst database etter utført autoskriv + + + Don't require password repeat when it is visible + Ikke krev gjentakelse av passord ved klartekst-visning + + + Don't hide passwords when editing them + Ikke skjul passord når du redigerer dem + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + Skjul notater i oppføringa som standard + + + Privacy + Personvern + + + Use DuckDuckGo as fallback for downloading website icons + AutoType Couldn't find an entry that matches the window title: - Finner ingen oppføring som samsvarer med vindustittelen: + Kunne ikke finne en oppføring som samsvarer med vindutittelen: Auto-Type - KeePassXC @@ -130,19 +340,19 @@ Velg om du vil gi tilgang eller ikke. The Syntax of your Auto-Type statement is incorrect! - Syntaksen til Autoskrivuttrykket er galt. + Syntaksen til autoskrivuttrykket er galt. This Auto-Type command contains a very long delay. Do you really want to proceed? - Denne Autoskrivkommandoen inneholder en lang forsinkelse. Vil du fortsette? + Denne autoskrivkommandoen inneholder en lang forsinkelse. Vil du fortsette? This Auto-Type command contains very slow key presses. Do you really want to proceed? - Denne Autoskriv-kommandoen inneholder svært sene tastetrykk. Vil du virkelig fortsette? + Denne autoskriv-kommandoen inneholder svært sene tastetrykk. Vil du virkelig fortsette? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - Denne Autoskriv-kommandoen inneholder argument som repeteres svært hyppig. Vil du virkelig fortsette? + Denne autoskriv-kommandoen inneholder argument som gjentas svært hyppig. Vil du virkelig fortsette? @@ -153,7 +363,7 @@ Velg om du vil gi tilgang eller ikke. Sequence - Rekkefølge + Sekvens Default sequence @@ -187,7 +397,7 @@ Velg om du vil gi tilgang eller ikke. Select entry to Auto-Type: - Velg oppføring som skal Autoskrives: + Velg oppføring som skal autoskrives: @@ -215,6 +425,26 @@ Please select whether you want to allow access. Velg om du vil gi tilgang eller ikke. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + Ok + + + Cancel + Avbryt + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -227,15 +457,15 @@ Velg om du vil gi tilgang eller ikke. Enable KeepassXC browser integration - Slå på integrasjon for nettlesere + Slå på nettlesertillegget General - Generell + Generelt Enable integration for these browsers: - Slå på integrasjon for disse nettleserne: + Bruk tillegget i disse nettleserne: &Google Chrome @@ -286,15 +516,7 @@ Velg om du vil gi tilgang eller ikke. Sort matching credentials by &username Credentials mean login data requested via browser extension - Sorter samsvarende berettigelsesbevis etter &brukernavn - - - &Disconnect all browsers - Kople &fra alle nettleserne - - - Forget all remembered &permissions - Glem alle lagrede &tillatelser + Sorter matchende identifikasjoner etter &brukernavn Advanced @@ -303,12 +525,12 @@ Velg om du vil gi tilgang eller ikke. Never &ask before accessing credentials Credentials mean login data requested via browser extension - Spør &aldri før tilgang til berettigelsesbevis gis + &Aldri spør før det gis tilgang til identifikasjon Never ask before &updating credentials Credentials mean login data requested via browser extension - Spør aldri før berettigelsesbevis &oppdateres + Aldri spør før &oppdatering av identifikasjon Only the selected database has to be connected with a client. @@ -317,7 +539,7 @@ Velg om du vil gi tilgang eller ikke. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - &Søk i de åpnede databasene etter samsvarende berettigelsesbevis + &Søk etter matchende identifikasjon i alle åpne databaser Automatically creating or updating string fields is not supported. @@ -329,7 +551,7 @@ Velg om du vil gi tilgang eller ikke. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Oppdaterer KeePassXC eller keepassxc-proxy binær-sti automatisk til innebygd meldings-skript ved oppstart. + Oppdaterer automatisk KeePassXC eller sti til binær keepassxc-proxy til lokale meldings-skript ved oppstart. Update &native messaging manifest files at startup @@ -361,21 +583,42 @@ Velg om du vil gi tilgang eller ikke. <b>Warning:</b> The following options can be dangerous! <b>Advarsel:</b> Disse innstillingene kan medføre risiko. - - Executable Files (*.exe);;All Files (*.*) - Programfiler (*.exe);;Alle filer (*.*) - - - Executable Files (*) - Kørbare filer (*) - Select custom proxy location Oppgi en selvvalgt mellomtjerneradresse - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - KeePassXC sin nettleserintegrasjon er ikke tilgjengelig for «Snap»-utgaver enda. + &Tor Browser + &Tor nettleser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + Kjørbare filer + + + All Files + Alle Filer + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Ikke spør om tillatelse til &enkel HTTP autentisering + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -415,153 +658,54 @@ Vil du overskrive den? Do you want to update the information in %1 - %2? Vil du oppdatere informasjonen i %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Database låst! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Den aktive databasen er låst! -Lås opp valgt database eller velg en annen som er åpen. - - - KeePassXC: Settings not available! - KeePassXC: Innstillinger ikke tilgjengelig! - - - The active database does not contain a settings entry. - Den aktive databasen inneholder ikke noen konfigurasjons-innstilling. - - - KeePassXC: No keys found - KeePassXC: Ingen nøkler funnet - - - No shared encryption keys found in KeePassXC Settings. - Ingen delte krypteringsnøkler funnet i oppsettet i KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: Fjernet nøkler fra database - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Fjernet %n krypteringsnøkkel(er) fra oppsettet i KeePassXC.Fjernet %n krypteringsnøkkel(er) fra oppsettet i KeePassXC. - - - Removing stored permissions… - Fjerner lagrede tillatelser... - Abort Avbryt - KeePassXC: Removed permissions - KeePassXC: Fjernet tillatelser + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). - Fjernet tillatelser fra %n oppføring(er).Fjernet tillatelser fra %n oppføring(er). + Successfully moved %n keys to custom data. + - KeePassXC: No entry with permissions found! - KeePassXC: Ingen oppføring med tillatelser funnet! + KeePassXC: No entry with KeePassHTTP attributes found! + - The active database does not contain an entry with permissions. - Den aktive databasen inneholder ikke et oppsett med tillatelser. - - - - ChangeMasterKeyWidget - - Password - Passord + The active database does not contain an entry with KeePassHTTP attributes. + - Enter password: - Angi passord: + KeePassXC: Legacy browser integration settings detected + - Repeat password: - Gjenta passord: + KeePassXC: Create a new group + - &Key file - &Nøkkelfil + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Bla - - - Create - Opprett - - - Cha&llenge Response - &Utfordrer-respons - - - Refresh - Last på ny - - - Key files - Nøkkelfiler - - - All files - Alle filer - - - Create Key File... - Opprett nøkkelfil ... - - - Unable to create Key File : - Kan ikke opprette nøkkelfil : - - - Select a key file - Velg en nøkkelfil - - - Empty password - Tomt passord - - - Do you really want to use an empty string as password? - Vil du virkelig bruke en tom streng som passord? - - - Different passwords supplied. - Forskjellige passord oppgitt. - - - Failed to set %1 as the Key file: -%2 - Klarte ikke å bruke %1 som nøkkelfil: -%2 - - - Legacy key file format - Eldre nøkkelfilformat - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Nøkkelfilen du bruker er av et eldre filformat som kan miste støtten i framtidige programversjoner. - -Vurder å opprette en ny nøkkelfil. - - - Changing master key failed: no YubiKey inserted. - Klonevalg + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -572,11 +716,11 @@ Vurder å opprette en ny nøkkelfil. Append ' - Clone' to title - Tilføy ' - Clone' til tittel + Tilføy ' - Klone' til tittel Replace username and password with references - Bytt ut brukernamn og passord med referansene + Bytt ut brukernavn og passord med referansene Copy history @@ -607,7 +751,7 @@ Vurder å opprette en ny nøkkelfil. Text is qualified by - Tekst er kvalifisert av + Tekst er markert ved Fields are separated by @@ -641,14 +785,6 @@ Vurder å opprette en ny nøkkelfil. Not present in CSV file Ikke tilstede i CSV-fil - - Empty fieldname - Tomt filnavn - - - column - kolonne - Imported from CSV file Importert fra CSV-fil @@ -657,49 +793,90 @@ Vurder å opprette en ny nøkkelfil. Original data: Originale data: - - Error(s) detected in CSV file ! - Feil oppdaget i CSV filen ! - - - more messages skipped] - hoppet over flere meldinger] - Error Feil + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - CSV import: skriver har feil: - - - - CsvImportWizard - - Error - Feil - - - Unable to calculate master key - Kan ikke kalkulere hovednøkkel +%1 + CsvParserModel - - %n byte(s), - %n byte(s), %n byte(s), - - - %n row(s), - %n rad(er), %n rad(er), - %n column(s) %n kolonne(r)%n kolonne(r) + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + Rot + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Lås opp database - KeePassXC + DatabaseOpenWidget @@ -717,7 +894,7 @@ Vurder å opprette en ny nøkkelfil. Browse - Bla gjennom + Bla Refresh @@ -727,14 +904,6 @@ Vurder å opprette en ny nøkkelfil. Challenge Response: Utfordrer-respons: - - Unable to open the database. - Klarte ikke åpne databasen. - - - Can't open key file - Klarte ikke åpne nøkkelfilen. - Legacy key file format Eldre nøkkelfilformat @@ -764,53 +933,248 @@ Vurder å opprette en ny nøkkelfil. Select key file Velg nøkkelfil - - - DatabaseRepairWidget - Repair database - Reparer database + TouchID for quick unlock + - Error - Feil + Unable to open the database: +%1 + - Can't open key file - Klarte ikke åpne nøkkelfilen. - - - Unable to open the database. - Klarte ikke åpne databasen. - - - Database opened fine. Nothing to do. - Databasen ble åpnet uten feil. Ikke mer å gjøre. - - - Success - Vellykket - - - The database has been successfully repaired -You can now save it. - Databasen er reparert. -Du kan nå lagre den. - - - Unable to repair the database. - Klarte ikke reparere databasen. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Passord + + + + DatabaseSettingsDialog + + Advanced Settings + + General Generelt - Encryption - Kryptering + Security + Sikkerhet + + + Master Key + Hovednøkkel + + + Encryption Settings + Krypteringsinnstillinger + + + Browser Integration + Nettlesertillegg + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC nettleser-innstillinger + + + &Disconnect all browsers + Kople &fra alle nettleserne + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + Lagrede nøkler + + + Remove + Fjern + + + Delete the selected key? + Slette den valgte nøkkelen? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + Nøkkel + + + Value + Verdi + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + Koble fra alle nettlesere + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: Ingen nøkler funnet + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: Fjernet nøkler fra database + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Fjerner lagrede tillatelser... + + + Abort + Avbryt + + + KeePassXC: Removed permissions + KeePassXC: Fjernet tillatelser + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: Ingen oppføring med tillatelser funnet! + + + The active database does not contain an entry with permissions. + Den aktive databasen inneholder ikke et oppsett med tillatelser. + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Krypteringsalgoritme: + + + AES: 256 Bit (default) + AES: 256 Bit (standard) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Nøkkelavledningsfunksjon: + + + Transform rounds: + Transformasjonsrunder: + + + Benchmark 1-second delay + Testmåling 1 sek. forsinkelse + + + Memory Usage: + Minnebruk: + + + Parallelism: + Parallellitet: + + + Decryption Time: + Krypteringstid: + + + ?? s + + + + Change + Endring + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + Databaseformat: + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + KDBX 4.0 (anbefalt) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + uendret Number of rounds too high @@ -823,7 +1187,7 @@ Du kan nå lagre den. If you keep this number, your database may take hours or days (or even longer) to open! Du bruker et svært høyt antall nøkkeltransformasjons-runder med Argon2. -Dersom du beholder dette tallet så vil det ta timer eller dager (og kanskje lengre) å åpne databasen! +Dersom du beholder dette antallet så vil det ta timer eller dager (og kanskje lengre) å åpne databasen! Understood, keep number @@ -857,47 +1221,22 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke! MiB Abbreviation for Mebibytes (KDF settings) - MiB MiB + MiBMiB thread(s) Threads for parallel execution (KDF settings) tråd(er)tråd(er) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Krypteringsalgoritme + + %1 ms + milliseconds + %1 s%1 ms - - AES: 256 Bit (default) - AES: 256 Bit (standard) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Nøkkelavledningsfunksjon: - - - Transform rounds: - Transformasjonsrunder: - - - Benchmark 1-second delay - Testmåling 1 sek. forsinkelse - - - Memory Usage: - Minnebruk: - - - Parallelism: - Parallellitet: + + %1 s + seconds + %1 s%1 s @@ -920,15 +1259,15 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke! History Settings - Historie-innstillinger + Historikk-innstillinger Max. history items: - Maks. historisk antall: + Maks. historikk-antall: Max. history size: - Maks. historisk størrelse: + Maks. historikk-størrelse: MiB @@ -948,15 +1287,86 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Rot + Sharing + Deling + + Breadcrumb + + + + Type + Type + + + Path + Sti + + + Last Signer + + + + Certificates + Sertifikat + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Legg til ekstra beskyttelse + + + No encryption key added + Ingen krypteringsnøkkel lagt til + + + You must add at least one encryption key to secure your database! + Du må legge til minst en krypteringsnøkkel for å sikre databasen! + + + No password set + Passord ikke satt + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + Ukjent feil + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database - KeePass 2 Database + KeePass2-database All files @@ -966,73 +1376,21 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!Open database Åpne database - - File not found! - Finner ikke filen! - - - Unable to open the database. - Kunne ikke åpne databasen. - - - File opened in read only mode. - Fil åpnet i skrivebeskyttet modus. - - - Open CSV file - Åpne CSV fil - CSV file CSV fil - - All files (*) - Alle filer (*) - Merge database Slå sammen database Open KeePass 1 database - Åpne KeePass 1 database + Åpne KeePass1-database KeePass 1 database - KeePass 1 database - - - Close? - Lukk? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" blir redigert. -Vil du likevel avvise endringene? - - - Save changes? - Lagre endringer? - - - "%1" was modified. -Save changes? - "%1" er endet. -Lagre endringer? - - - Writing the database failed. - Skriving av databasen feilet. - - - Passwords - Passord - - - Save database as - Lagre database som + KeePass1-database Export database to CSV file @@ -1043,40 +1401,40 @@ Lagre endringer? Skriving av CSV fil feilet. - New database + Database creation error + + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + Velg CSV fil + + + New Database Ny database - locked - låst + %1 [New Database] + Database tab name modifier + - Lock database - Lås database + %1 [Locked] + Database tab name modifier + - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Kan ikke låse database fordi du redigerer den. -Klikk avbryt for å fullføre endringene eller forkaste dem. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Denne databasen er blitt endret. -Vil du lagre databasen før låsing? -Ellers blir endringene dine tapt. - - - Disable safe saves? - Deaktivere sikker lagring? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC har mislykkes i å lagre databasen flere ganger. Dette er trolig forårsaket av at synkroniserings-tjenester har låst lagrings-filen. -Deaktivere sikker lagring og prøve igjen? + %1 [Read-only] + Database tab name modifier + @@ -1085,38 +1443,14 @@ Deaktivere sikker lagring og prøve igjen? Searching... Søker... - - Change master key - Endre hovednøkkel - - - Delete entry? - Slette oppføring? - Do you really want to delete the entry "%1" for good? Vil du virkelig slette oppføringen "%1" for godt? - - Delete entries? - Slett oppføringer? - - - Do you really want to delete %1 entries for good? - Vil du virkelig slette %1 oppføringer for godt? - - - Move entry to recycle bin? - Flytte oppføring til søppelkurven? - Do you really want to move entry "%1" to the recycle bin? Ønsker du virkelig å flytte oppføring "%1" til søppelkurven? - - Move entries to recycle bin? - Flytt oppføringer til søppelkurven? - Do you really want to move %n entry(s) to the recycle bin? Ønsker du virkelig å flytte %n oppføring(er) til søppelkurven?Ønsker du virkelig å flytte %n oppføring(er) til søppelkurven? @@ -1133,18 +1467,10 @@ Deaktivere sikker lagring og prøve igjen? Remember my choice Husk mitt valg - - Delete group? - Slett gruppe - Do you really want to delete the group "%1" for good? Ønsker du virkelig å slette gruppen "%1" for godt? - - Unable to calculate master key - Kan ikke kalkulere hovednøkkel - No current database. Ingen nåværende database. @@ -1179,10 +1505,6 @@ Do you want to merge your changes? Databasefila er endra og du har ulagra endringer. Vil du slå sammen fila med endringene dine? - - Could not open the new database file while attempting to autoreload this database. - Kunne ikke åpne den nye databasen så lenge denne databasen blir auto-lastet. - Empty recycle bin? Tom papirkurv? @@ -1191,88 +1513,108 @@ Vil du slå sammen fila med endringene dine? Are you sure you want to permanently delete everything from your recycle bin? Er du sikker på at du ønsker å slette alt i papirkurven permanent? - - - DetailsWidget - - Generate TOTP Token - Opprett TOTP Token + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - Lukk + File opened in read only mode. + Fil åpnet i skrivebeskyttet modus. - General - Generell + Lock Database? + Låse database? - Password + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" er endet. +Lagre endringer? + + + Database was modified. +Save changes? + + + + Save changes? + Lagre endringer? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + Deaktivere sikker lagring? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC har mislykkes i å lagre databasen flere ganger. Dette er trolig forårsaket av at synkroniserings-tjenester har låst lagrings-filen. +Deaktivere sikker lagring og prøve igjen? + + + Writing the database failed. +%1 + + + + Passwords Passord - URL - Adresse + Save database as + Lagre database som - Expiration - Utløp + KeePass 2 Database + KeePass2-database - Username - Brukernavn + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Autotype - Autoskriv + Delete group + Slett gruppe - Searching - Søking + Move group to recycle bin? + - Attributes - Attributter + Do you really want to move the group "%1" to the recycle bin? + - Attachments - Vedlegg + Successfully merged the database files. + - Notes - Notater + Database was not modified by merge operation. + - Window - Vindu - - - Sequence - Rekkefølge - - - Search - Søk - - - Clear - Tøm - - - Never - Aldri - - - [PROTECTED] - [BESKYTTET] - - - Disabled - Deaktivert - - - Enabled - Aktivert + Shared group... + @@ -1299,7 +1641,7 @@ Vil du slå sammen fila med endringene dine? History - Historikk + Historie SSH Agent @@ -1345,22 +1687,10 @@ Vil du slå sammen fila med endringene dine? New attribute Ny attributt - - Confirm Remove - Bekreft fjerning - Are you sure you want to remove this attribute? Er du sikker på at du ønsker å fjerne denne attributten? - - [PROTECTED] - [BESKYTTET] - - - Press reveal to view or edit - Klikk for å vise eller endre - Tomorrow I morgen @@ -1373,22 +1703,38 @@ Vil du slå sammen fila med endringene dine? %n month(s) %n måned(er)%n måned(er) - - 1 year - 1 år - Apply generated password? - Bruk generert passord? + Vil du bruke det lagde passordet? Do you want to apply the generated password to this entry? - Vil du bruke det genererte passordet for denne oppføringen? + Vil du bruke det lagde passordet for denne oppføringen? Entry updated successfully. Oppføring oppdatert. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1433,15 +1779,15 @@ Vil du slå sammen fila med endringene dine? EditEntryWidgetAutoType Enable Auto-Type for this entry - Slå på Autoskriv for denne oppføringa + Aktiver autoskriv for denne oppføringa Inherit default Auto-Type sequence from the &group - Arv standard Autoskriv-sekvens fra &gruppen + Arv standard autoskriv-sekvens fra &gruppen &Use custom Auto-Type sequence: - Br&uk tilpasset Autoskriv-sekvens: + Br&uk tilpasset autoskriv-sekvens: Window Associations @@ -1487,7 +1833,7 @@ Vil du slå sammen fila med endringene dine? EditEntryWidgetMain URL: - Adresse: + URL: Password: @@ -1566,7 +1912,7 @@ Vil du slå sammen fila med endringene dine? Copy to clipboard - Kopier til utklippstavla + Kopier til utklippstavle Private key @@ -1633,6 +1979,97 @@ Vil du slå sammen fila med endringene dine? Arv fra foreldre-gruppe (%1) + + EditGroupWidgetKeeShare + + Form + Skjema + + + Type: + + + + Path: + Sti: + + + ... + ... + + + Password: + Passord: + + + Inactive + Inaktiv + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + Tøm + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1657,18 +2094,18 @@ Vil du slå sammen fila med endringene dine? &Use default Auto-Type sequence of parent group - Br&uk standard Autoskriv-sekvens fra foreldre-gruppa + &Bruk standard autoskriv-sekvens fra foreldre-gruppa Set default Auto-Type se&quence - Angi standard Autoskriv-&sekvens + &Angi standard autoskriv-sekvens EditWidgetIcons &Use default icon - &Bruk et standardikon + &Bruk standard ikon Use custo&m icon @@ -1680,7 +2117,7 @@ Vil du slå sammen fila med endringene dine? Delete custom icon - Fjern selvvalgt ikon + Slett selvvalgt ikon Download favicon @@ -1690,10 +2127,6 @@ Vil du slå sammen fila med endringene dine? Unable to fetch favicon. Kan ikke hente favorittikon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Tips: Du kan aktivere Google som reserve under Verktøy > Oppsett > Sikkerhet - Images Bilder @@ -1702,14 +2135,6 @@ Vil du slå sammen fila med endringene dine? All files Alle filer - - Select Image - Velg bilde - - - Can't read icon - Kan ikke lese ikon - Custom icon already exists Tilpasset ikon finnes allerede @@ -1719,8 +2144,36 @@ Vil du slå sammen fila med endringene dine? Bekreft sletting - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Dette ikonet er brukt av %1 oppføringer, og vil bli erstattet av standardikonet. Er du sikker på at du vil slette det? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1771,9 +2224,8 @@ Dette kan føre til feil for de berørte programtilleggene. Entry - - Clone - Suffix added to cloned entries - - Klone + %1 - Clone + @@ -1817,10 +2269,6 @@ Dette kan føre til feil for de berørte programtilleggene. Are you sure you want to remove %n attachment(s)? Er du sikker på at du vil fjerne %n vedlegg?Er du sikker på at du vil fjerne %n vedlegg? - - Confirm Remove - Bekreft fjerning - Save attachments Lagre vedlegg @@ -1858,10 +2306,13 @@ Dette kan føre til feil for de berørte programtilleggene. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - Kan ikke åpne filer: -%1 + @@ -1887,7 +2338,7 @@ Dette kan føre til feil for de berørte programtilleggene. URL - Adresse + URL @@ -1911,7 +2362,7 @@ Dette kan føre til feil for de berørte programtilleggene. URL - Adresse + URL Never @@ -1945,6 +2396,106 @@ Dette kan føre til feil for de berørte programtilleggene. Attachments Vedlegg + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + Opprett TOTP Token + + + Close + Lukk + + + General + Generelt + + + Username + Brukernavn + + + Password + Passord + + + Expiration + Utløp + + + URL + Adresse + + + Attributes + Attributter + + + Attachments + Vedlegg + + + Notes + Notater + + + Autotype + Autoskriv + + + Window + Vindu + + + Sequence + Rekkefølge + + + Searching + Søking + + + Search + Søk + + + Clear + Tøm + + + Never + Aldri + + + [PROTECTED] + [BESKYTTET] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + Aktivert + + + Disabled + Deaktivert + + + Share + + EntryView @@ -1954,11 +2505,11 @@ Dette kan føre til feil for de berørte programtilleggene. Hide Usernames - Skjul brukernavn + Masker brukernavn Hide Passwords - Skjul passord + Masker passord Fit to window @@ -1970,7 +2521,7 @@ Dette kan føre til feil for de berørte programtilleggene. Reset to defaults - Tilbakestill til standardinnstillinger + Resette til standard Attachments (icon) @@ -1983,6 +2534,11 @@ Dette kan føre til feil for de berørte programtilleggene. Recycle Bin Papirkurv + + [empty] + group has no children + + HostInstaller @@ -1995,61 +2551,6 @@ Dette kan føre til feil for de berørte programtilleggene. Kan ikke lagre den lokale meldings-skriptfilen. - - HttpPasswordGeneratorWidget - - Length: - Lengde: - - - Character Types - Tegntyper - - - Upper Case Letters - Store bokstaver - - - A-Z - A-Z - - - Lower Case Letters - Små bokstaver - - - a-z - a-z - - - Numbers - Tall - - - 0-9 - 0-9 - - - Special Characters - Spesialtegn - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Ekskluder tegn som er nesten makne - - - Ensure that the password contains characters from every group - Pass på at passordet inneholder tegn fra hver gruppe - - - Extended ASCII - Utvida ASCII - - KMessageWidget @@ -2075,6 +2576,26 @@ Dette kan føre til feil for de berørte programtilleggene. Wrong key or database file is corrupt. Feil nøkkel eller databasefil er skadet. + + missing database headers + manglende database-headere + + + Header doesn't match hash + + + + Invalid header id size + Ugyldig: Header id size + + + Invalid header field length + Ugyldig: Header field length + + + Invalid header data length + Ugyldig: Header data length + Kdbx3Writer @@ -2091,7 +2612,7 @@ Dette kan føre til feil for de berørte programtilleggene. Kdbx4Reader missing database headers - Manglende database-headere. + manglende database-headere Unable to calculate master key @@ -2115,15 +2636,15 @@ Dette kan føre til feil for de berørte programtilleggene. Invalid header id size - Ugyldig størrelse: header-id + Ugyldig: Header id size Invalid header field length - Ugyldig lengde: header-felt + Ugyldig: Header field length Invalid header data length - Ugyldig lengde: header-data + Ugyldig: Header data length Failed to open buffer for KDF parameters in header @@ -2139,15 +2660,15 @@ Dette kan føre til feil for de berørte programtilleggene. Invalid inner header id size - Ugyldig størrelse: indre header-id + Ugyldig: Inner header id size Invalid inner header field length - Ugyldig lengde: indre header-felt + Ugyldig: Inner header field length Invalid inner header binary size - Ugyldig størrelse: binary inner header + Ugyldig: Inner header binary size Unsupported KeePass variant map version. @@ -2233,10 +2754,6 @@ Dette kan føre til feil for de berørte programtilleggene. KdbxReader - - Invalid cipher uuid length - Ugyldig: Cipher uuid length - Unsupported cipher Ikke støttet kryptering @@ -2282,14 +2799,26 @@ Dette kan føre til feil for de berørte programtilleggene. You can import it by clicking on Database > 'Import KeePass 1 database...'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. - Den valgte fila er en gammel KeePass 1-database (.kdb). + Den valgte fila er en gammel KeePass1-database (.kdb). -Du kan importere den ved å velge «Database → Importer KeePass 1-database...» +Du kan importere den ved å velge «Database → Importer KeePass1-database...» Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med den gamle versjonen KeePassX 0.4. Unsupported KeePass 2 database version. - Ikke støttet KeePass2 databaseversjon. + Ikke støttet KeePass2-databaseversjon. + + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + @@ -2362,10 +2891,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de History element with different uuid Historikkelement med forskjellig uuid - - Unable to decrypt entry string - Kan ikke dekryptere streng i oppføring - Duplicate custom attribute found Duplikat: Custom attribute @@ -2376,7 +2901,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Duplicate attachment found - Duplikat: Attachment found + Duplikat: Attachment Entry binary key or value missing @@ -2415,16 +2940,22 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Translator meant is a binary data inside an entry Kan ikke dekryptere binær + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget Import KeePass1 database - Importer KeePass 1-database + Importer KeePass1-database Unable to open the database. - Kunne ikke åpne databasen. + Kan ikke åpne databasen. @@ -2452,11 +2983,11 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Invalid number of groups - Ugyldig: Number of groups + Ugyldig antall grupper Invalid number of entries - Ugyldig: Number of entries + Ugyldig antall oppføringer Invalid content hash size @@ -2504,11 +3035,11 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Incorrect group id field size - Stemmer ikke: Group id field size + Feil: Group id field size Incorrect group creation time field size - Stemmer ikke: Group creation time field size + Feil: Group creation time field size Incorrect group modification time field size @@ -2532,19 +3063,19 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Invalid group field type - Ugyldig felttype: gruppe + Ugyldig: Group field type Missing group id or level - Manglende gruppe-id eller nivå + Mangler: group id or level Missing entry field type number - Manglende felt-type i oppføring: nummer + Mangler: Entry field type number Invalid entry field size - Ugyldig felt-størrelse i oppføring + Ugyldig: Entry field size Read entry field data doesn't match size @@ -2552,81 +3083,168 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Invalid entry uuid field size - Ugyldig felt-størrelse i oppføring: uuid + Ugyldig: Entry uuid field size Invalid entry group id field size - Ugyldig felt-størrelse i oppføring: gruppe-id + Ugyldig: Entry group id field size Invalid entry icon field size - Ugyldig felt-størrelse i oppføring: ikon + Ugyldig: Entry icon field size Invalid entry creation time field size - Ugyldig felt-størrelse i oppføring: opprettelsestidspunkt + Ugyldig: Entry creation time field size Invalid entry modification time field size - Ugyldig felt-størrelse i oppføring: endringstidspunkt + Ugyldig: Entry modification time field size Invalid entry expiry time field size - Ugyldig felt-størrelse i oppføring: utløpstidspunkt + Ugyldig: Entry expiry time field size Invalid entry field type - Ugyldig felt-type i oppføring + Ugyldig: Entry field type + + + unable to seek to content position + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + - Twofish: 256-bit - Twofish: 256-bit + Import from + - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – anbefalt) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Eksisterende enbrukermodus lock-fil er ugyldig. Starter ny instans. + Key Component + - The lock file could not be created. Single-instance mode disabled. - Lock-filen kunne ikke opprettes. Enbrukermodus deaktivert. + Key Component Description + - Another instance of KeePassXC is already running. - En annen instans av KeePassXC kjører allerede. + Cancel + Avbryt - Fatal error while testing the cryptographic functions. - Alvorlig feil ved testing av de kryptografiske funksjonene. + Key Component set, click to change or remove + - KeePassXC - Error - KeePassXC - Feil + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Bla gjennom + + + Generate + Lag passord + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + Eldre nøkkelfil-format + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Nøkkelfiler + + + All files + Alle filer + + + Create Key File... + Opprett nøkkelfil ... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Velg en nøkkelfil @@ -2639,10 +3257,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de &Recent databases N&ylige databaser - - Import - Importer - &Help &Hjelp @@ -2651,14 +3265,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de E&ntries &Oppføringer - - Copy att&ribute to clipboard - Kopier attributt til &utklippstavla - - - Time-based one-time password - &Tidsbasert engangspassord - &Groups &Grupper @@ -2687,30 +3293,10 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de &Close database &Lukk database - - &New database - &Ny database - - - Merge from KeePassX database - Slå sammen med en KeePassX-database - - - &Add new entry - &Lag ny oppføring - - - &View/Edit entry - &Vis/Rediger oppføring - &Delete entry &Slett oppføring - - &Add new group - &Lag ny gruppe - &Edit group &Rediger gruppe @@ -2721,15 +3307,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Sa&ve database as... - La&gre database som... - - - Change &master key... - Endre &hovednøkkel - - - &Database settings - &Databaseoppsett + Lag&re database som... Database settings @@ -2739,10 +3317,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de &Clone entry &Klon oppføring - - &Find - &Finn - Copy &username Kopier &brukernavn @@ -2751,10 +3325,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Copy username to clipboard Kopier brukernavn til utklippstavlen - - Cop&y password - Kopier &passord - Copy password to clipboard Kopier passord til utklippstavlen @@ -2767,14 +3337,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Password Generator Passordgenerator - - &Perform Auto-Type - Kjør &Autoskriv - - - &Open URL - Åpne &nettadresse - &Lock databases &Lås databaser @@ -2807,22 +3369,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de &Export to CSV file... &Eksporter som CSV-fil... - - Import KeePass 1 database... - Importer KeePass 1-database... - - - Import CSV file... - Importer CSV-fil... - - - Re&pair database... - &Reparer database - - - Show TOTP - Vis TOTP - Set up TOTP... Sett opp TOTP... @@ -2841,15 +3387,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Access error for config file %1 - Feil ved tilgang for filen %1 - - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Det ser ut som du bruker KeePassHTTP som nettleserintegrasjon. Denne funksjonen har blitt utdatert og vil bli fjerna i framtida.<br>Vennligst bytt til KeePassXC-nettleseren isteden! For hjelp med overgang, besøk vår <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">overgangs-håndbok</a> (advarsel %1 of 3).</p> - - - read-only - skrivebeskyttet + Feil ved tilgang for konfigurasjonsfilen %1 Settings @@ -2863,26 +3401,6 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Quit KeePassXC Avslutt KeePassXC - - KeePass 2 Database - KeePass 2 Database - - - All files - Alle filer - - - Open database - Åpne database - - - Save repaired database - Lagre reparert database - - - Writing the database failed. - Skriving av databasen feilet. - Please touch the button on your YubiKey! Vennligst trykk på knappen på din YubiKey! @@ -2895,6 +3413,268 @@ This version is not meant for production use. Det er stor risiko for inkonsistens, ha en sikkerhetskopi av databasene dine. Denne versjonen er ikke ment for produksjonsmiljø. + + &Donate + &Donér + + + Report a &bug + Meld inn en &feil + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + ADVARSEL: Qt-versjon du bruker kan føre til at KeePassXC kræsjer med et skjermtastatur! +Vi anbefaler at du bruker det AppImage som er tilgjengelig på nedlastingssiden. + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Rot + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Krypteringsinnstillinger + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2984,7 +3764,7 @@ Denne versjonen er ikke ment for produksjonsmiljø. Cipher IV is too short for MD5 kdf - Cipher IV er for kort for MD5 kdf + Krypterings-IV er for kort for MD5 kdf Unknown KDF: %1 @@ -2996,125 +3776,30 @@ Denne versjonen er ikke ment for produksjonsmiljø. - OptionDialog + PasswordEditWidget - Dialog - Vindu + Enter password: + Angi passord: - This is required for accessing your databases from ChromeIPass or PassIFox - Dette kreves for å få tilgang til databasene dine fra ChromeIPass eller PassIFox + Confirm password: + - Enable KeePassHTTP server - Aktiver KeePassHTTP-server + Password + Passord - General - Generell + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Vi&s beskjed når det blir bedt om identifikasjon + Passwords do not match. + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Returnerer bare beste matcher for en spesifikk URL i stedet for alle oppføringer i hele domenet. - - - &Return only best matching entries - &Returner bare de beste matchende oppføringene - - - Re&quest to unlock the database if it is locked - Spør om å låse opp dersom databasen er låst - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Bare oppføringer med samme protokoll (http://, https://,, ftp://, ...) er returnert. - - - &Match URL schemes - &Match URL-skjema - - - Sort matching entries by &username - Sorter matchende oppføringer etter &brukernavn - - - Sort &matching entries by title - Sorter &matchende oppføringer etter tittel - - - R&emove all shared encryption keys from active database - Fj&ern alle delte krypteringsnøkler fra aktiv database - - - Re&move all stored permissions from entries in active database - Fjer&n alle lagrede tillatelser fra oppføringer i aktiv database - - - Password Generator - Passordgenerator - - - Advanced - Avansert - - - Always allow &access to entries - Tillat alltid tilg&ang til oppføringer - - - Always allow &updating entries - Alltid tillat å oppdatere oppføringer - - - Only the selected database has to be connected with a client. - Kun den valgte databasen behøver å kobles til en klient. - - - Searc&h in all opened databases for matching entries - Sø&k i alle åpne databaser etter matchende oppføringer - - - Automatically creating or updating string fields is not supported. - Automatisk registrering eller endring av tekstfelt er ikke støttet. - - - &Return advanced string fields which start with "KPH: " - &Returner avanserte tekstfelt som begynner med "KPH: " - - - HTTP Port: - HTTP-port: - - - Default port: 19455 - Standard port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC vil lytte på denne porten på 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Advarsel:</b> Disse innstillingene kan medføre risiko. - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP er blitt gammeldags og vil bli fjerna i framtida.<br>Vær vennlig å bytt til KeePassXC-nettleseren isteden! For hjelp med overgangen, besøk vår <a href="https://keepassxc.org/docs/keepassxc-browser-migration">overgangs-håndbok</a>.</p> - - - Cannot bind to privileged ports - Kan ikke bruke privilegerte porter - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Kan ikke bruke privilegerte porter under 1024! -Bruker standard port 19455. + Generate master password + @@ -3170,7 +3855,7 @@ Bruker standard port 19455. Pick characters from every group - Bruk tegn fra hver gruppe + Velg tegn fra hver gruppe &Length: @@ -3178,23 +3863,15 @@ Bruker standard port 19455. Passphrase - Adgangsfrase + Passordfrase Wordlist: Ordliste: - - Word Count: - Antall ord: - Word Separator: - Skilleord: - - - Generate - Generer + Ord-skilletegn: Copy @@ -3208,10 +3885,6 @@ Bruker standard port 19455. Close Lukk - - Apply - Bruk - Entropy: %1 bit Entropi: %1 bit @@ -3233,13 +3906,178 @@ Bruker standard port 19455. Good Password quality - God + Bra Excellent Password quality Utmerket + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Avansert + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Slett + + + Move + + + + Empty + + + + Remove + Fjern + + + Skip + + + + Disable + Deaktiver + + + Merge + + QObject @@ -3259,34 +4097,18 @@ Bruker standard port 19455. Cannot decrypt message Kan ikke dekryptere melding - - Timeout or cannot connect to KeePassXC - Tidsavbrudd eller kan ikke koble til KeePassXC - Action cancelled or denied Handlingen er kansellert eller avvist - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Kan ikke kryptere melding eller offentlig nøkkel ikke funnet. Er lokal meldingsutveksling aktivert i KeePassXC? - KeePassXC association failed, try again Assosiering av KeePassXC mislyktes, prøv igjen - - Key change was not successful - Endring av nøkkel var ikke vellykket - Encryption key is not recognized Krypteringsnøkkel er ikke gjenkjent - - No saved databases found - Ingen lagrede databaser funnet - Incorrect action Feil handling @@ -3329,7 +4151,7 @@ Bruker standard port 19455. username - brukernamn + brukernavn URL for the entry. @@ -3345,11 +4167,11 @@ Bruker standard port 19455. Generate a password for the entry. - Generer et passord til oppføringen. + Generer et passord til oppføringa. Length for the generated password. - Lengde for det genererte passordet. + Lengde på det genererte passordet. length @@ -3390,7 +4212,7 @@ Bruker standard port 19455. Estimate the entropy of a password. - Beregn entropien til pasordet. + Beregn entropien til et passord. Password for which to estimate the entropy. @@ -3412,10 +4234,6 @@ Bruker standard port 19455. Insert password to unlock %1: Sett inn passord for å låse opp %1: - - Failed to load key file %1 : %2 - Klarte ikke å laste nøkkelfil %1 : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3481,7 +4299,7 @@ Tilgjengelige kommandoer: Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - Navn på attributtene som skal vises. Dette alternativet kan spesifiseres mer enn en gang, med hvert attributt vist ett per linje i den oppgitte rekkefølgen. Hvis ingen attributter er oppgitt, er det gitt en oppsummering av standardattributtene. + Navn på attributtene som skal vises. Dette alternativet kan spesifiseres mer enn en gang, med hvert attributt vist ett per linje i den oppgitte rekkefølgen. Hvis ingen attributter er oppgitt, blir det gitt en oppsummering av standardattributtene. attribute @@ -3499,12 +4317,6 @@ Tilgjengelige kommandoer: error reading from device Feil ved lesing fra enhet - - file empty ! - - Tom fil ! - - malformed string Ugyldig streng @@ -3535,23 +4347,19 @@ Tilgjengelige kommandoer: Last Modified - Sist endret + Sist endra Created Oppretta - - Legacy Browser Integration - Eldre nettlesertillegg - Browser Integration Nettlesertillegg YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] challenge-respons - slot %2 - %3 + YubiKey[%1] utfordrings-respons - slot %2 - %3 Press @@ -3573,10 +4381,6 @@ Tilgjengelige kommandoer: Word count for the diceware passphrase. Antall ord i diceware-passordfrasen. - - count - Antall - Wordlist for the diceware generator. [Default: EFF English] @@ -3585,31 +4389,445 @@ Tilgjengelige kommandoer: Generate a new random password. - Lag et nytt tilfeldig passord. + Generer et nytt tilfeldig passord. - Length of the generated password. - Lengde på det genererte passordet. + Invalid value for password length %1. + - Use lowercase characters in the generated password. - Bruk små bokstaver i det genererte passordet. + Could not create entry with path %1. + - Use uppercase characters in the generated password. - Bruk store bokstaver i det genererte passordet. + Enter password for new entry: + - Use numbers in the generated password. - Bruk tall i det genererte passordet. + Writing the database failed %1. + - Use special characters in the generated password. - Bruk spesialtegn i det genererte passordet. + Successfully added entry %1. + - Use extended ASCII in the generated password. - Bruk utvida ASCII i det genererte passordet. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + Antall + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – anbefalt) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Fjern oppføring fra databasen. + + + Path of the entry to remove. + Sti til oppføring som skal fjernes. + + + Existing single-instance lock file is invalid. Launching new instance. + Eksisterende enbrukermodus lock-fil er ugyldig. Starter ny instans. + + + The lock file could not be created. Single-instance mode disabled. + Lock-filen kunne ikke opprettes. Enbrukermodus deaktivert. + + + KeePassXC - cross-platform password manager + KeePassXC - en multiplattforms passordhåndterer + + + filenames of the password databases to open (*.kdbx) + Filnavn på passord-databasene som skal åpnes (*.kdbx) + + + path to a custom config file + Sti til tilpasset konfigurasjonsfil + + + key file of the database + Database-nøkkelfil + + + read password of the database from stdin + Les database-passord fra standard input + + + Parent window handle + Foreldre-vindu handle + + + Another instance of KeePassXC is already running. + En annen instans av KeePassXC kjører allerede. + + + Fatal error while testing the cryptographic functions. + Alvorlig feil ved testing av de kryptografiske funksjonene. + + + KeePassXC - Error + KeePassXC - Feil + + + Database password: + Databasepassord: + + + Cannot create new group + @@ -3647,11 +4865,97 @@ Tilgjengelige kommandoer: - SearchWidget + SSHAgent - Search... - Søk... + Agent connection failed. + Agentforbindelse mislyktes. + + Agent protocol error. + Agent protokollfeil. + + + No agent running, cannot add identity. + Ingen agent kjører. Kan ikke identifisere. + + + No agent running, cannot remove identity. + Ingen agent kjører, kan ikke fjerne identitet. + + + Agent refused this identity. Possible reasons include: + Agent nektet denne identiteten. Mulige grunner er: + + + The key has already been added. + Nøkkelen er alt blitt lagt til. + + + Restricted lifetime is not supported by the agent (check options). + Begrenset levetid støttes ikke av agenten (sjekk alternativene). + + + A confirmation request is not supported by the agent (check options). + En bekreftelsesforespørsel støttes ikke av agenten (sjekk alternativene). + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Søk @@ -3660,358 +4964,289 @@ Tilgjengelige kommandoer: Clear Tøm - - Case Sensitive - Versalsensitiv - Limit search to selected group Avgrens søket til valgt gruppe - - - Service - KeePassXC: New key association request - KeePassXC: Tilknytningsforespørsel for ny nøkkel. + Search Help + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Du har mottatt en tilknytningsforespørsel for den ovennevnte nøkkelen. -Gi den et unikt navn dersom du vil gi den tilgang til KeePassXC-databasen. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + - KeePassXC: Overwrite existing key? - KeePassXC: Overskrive eksisterende nøkkel? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - En delt krypteringsnøkkel eksisterer allerede med navn "%1". -Ønsker du å overskrive den? - - - KeePassXC: Update Entry - KeePassXC: Oppdater oppføring. - - - Do you want to update the information in %1 - %2? - Vil du oppdatere informasjonen i %1 - %2? - - - KeePassXC: Database locked! - KeePassXC: Database låst! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Den aktive databasen er låst! -Lås opp valgt database eller velg en annen som er åpen. - - - KeePassXC: Removed keys from database - KeePassXC: Fjernet nøkler fra database - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Fjerna %n krypteringsnøkkel(er) fra KeePassX/Http-oppføringa.Fjerna %n krypteringsnøkkel(er) fra KeePassX/Http-oppføringa. - - - KeePassXC: No keys found - KeePassXC: Ingen nøkler funnet - - - No shared encryption-keys found in KeePassHttp Settings. - Ingen delte krypteringsnøkler funnet i KeePassHttp-innstillinger - - - KeePassXC: Settings not available! - KeePassXC: Innstillinger ikke tilgjengelig! - - - The active database does not contain an entry of KeePassHttp Settings. - Den aktive databasen mangler oppføring for KeePassHttp-innstillinger. - - - Removing stored permissions... - Fjerner lagrede tillatelser... - - - Abort - Avbryt - - - KeePassXC: Removed permissions - KeePassXC: Fjernet tillatelser - - - Successfully removed permissions from %n entries. - Fjernet tillatelser fra %n oppføringer.Fjernet tillatelser fra %n oppføringer. - - - KeePassXC: No entry with permissions found! - KeePassXC: Ingen oppføring med tillatelser funnet! - - - The active database does not contain an entry with permissions. - Den aktive databasen inneholder ikke et oppsett med tillatelser. + Case sensitive + - SettingsWidget + SettingsWidgetKeeShare - Application Settings - Applikasjonsinnstillinger + Active + - General - Generelt + Allow export + - Security - Sikkerhet + Allow import + - Access error for config file %1 - Feil ved tilgang for filen %1 - - - - SettingsWidgetGeneral - - Basic Settings - Grunnleggende + Own certificate + - Start only a single instance of KeePassXC - Kjør kun én instans av KeePassXC om gangen + Fingerprint: + - Remember last databases - Husk de sist brukte databasene + Certificate: + - Remember last key files and security dongles - Husk de sist brukte nøkkelfilene og kopibeskyttelsesnøklene - - - Load previous databases on startup - Åpne sist brukte databaser ved oppstart - - - Automatically save on exit - Lagre automatisk ved avslutning - - - Automatically save after every change - Lagre automatisk etter enhver endring - - - Automatically reload the database when modified externally - Last databasen automatisk på nytt hvis den blir endret eksternt - - - Minimize when copying to clipboard - Minimer ved kopiering til utklippstavla - - - Minimize window at application startup - Minimer ved programstart - - - Use group icon on entry creation - Bruk gruppeikon ved ny oppføring - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Ikke marker database som endret ved non-dataendringer (f.eks. ekspandere grupper) - - - Hide the Details view - Skjul detaljvisninga - - - Show a system tray icon - Vis et ikon i systemkurven - - - Hide window to system tray when minimized - Skjul vindu til systemstatusfelt når minimert - - - Hide window to system tray instead of app exit - Skjul vindu til systemstatusfelt i stedet for app-avslutning - - - Dark system tray icon - Mørkt ikon i systemkurven - - - Language - Språk - - - Auto-Type - Autoskriv - - - Use entry title to match windows for global Auto-Type - Bruk tittel i oppføringa for å matche vindu ved global Autoskriv - - - Use entry URL to match windows for global Auto-Type - Bruk URL i oppføringa for å matche vindu ved global Autoskriv - - - Always ask before performing Auto-Type - Alltid spør før utførelse av Autoskriv - - - Global Auto-Type shortcut - Global Autoskriv-hurtigtast - - - Auto-Type delay - Autoskriv tidsforsinkelse - - - ms - Milliseconds - ms - - - Startup - Oppstart - - - File Management - Filhåndtering - - - Safely save database files (may be incompatible with Dropbox, etc) - Sikker lagring av database-filer (kan være uforenelig med Dropbox, etc.) - - - Backup database file before saving - Sikkerhetskopier database-filen før lagring - - - Entry Management - Oppførings-administrasjon - - - General - Generell - - - - SettingsWidgetSecurity - - Timeouts - Tidsavbrudd - - - Clear clipboard after - Slett utklippstavlen etter - - - sec - Seconds - sek - - - Lock databases after inactivity of - Lås databaser etter inaktivitet i - - - Convenience - Bekvemmelighet - - - Lock databases when session is locked or lid is closed - Lås databaser når økta låses eller lokket lukkes - - - Lock databases after minimizing the window - Lås databaser når vinduet minimeres - - - Don't require password repeat when it is visible - Ikke krev gjentakelse av passord ved klartekst-visning - - - Show passwords in cleartext by default - Vis passord i klartekst som standard - - - Hide passwords in the preview panel - Skjul passord i forhåndsvisnings-panelet - - - Hide entry notes by default - Skjul notater i oppføringa som standard - - - Privacy - Personvern - - - Use Google as fallback for downloading website icons - Bruk Google som reserve ved nedlasting av nettsted-ikon - - - Re-lock previously locked database after performing Auto-Type - Lås tidligere låst database etter utført Autoskriv - - - - SetupTotpDialog - - Setup TOTP - Oppsett TOTP + Signer + Key: Nøkkel: - Default RFC 6238 token settings - Standard RFC 6238 token innstillinger + Generate + Lag passord - Steam token settings - Steam token-innstillinger + Import + Importer - Use custom settings - Bruk selvvalgt oppsett + Export + Eksporter - Note: Change these settings only if you know what you are doing. - Merk: Endre disse innstillingene bare dersom du vet hva du gjør. + Imported certificates + Importerte sertikikat - Time step: - Tidsintervall: + Trust + - 8 digits - 8 siffer + Ask + Spør - 6 digits - 6 siffer + Untrust + - Code size: - Kodestørrelse: + Remove + Fjern - sec - Seconds - sek + Path + Sti + + + Status + Status + + + Fingerprint + Fingeravtrykk + + + Certificate + Sertifikat + + + Trusted + Klarert + + + Untrusted + Uklarert + + + Unknown + Ukjent + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Alle filer + + + Select path + Velg sti + + + Exporting changed certificate + Eksporterer endret sertifikat + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Eksportert sertifikat er ikke det samme som det som er i bruk. Vil du eksportere gjeldende sertifikat? + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + Aldri + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + Kunne ikke skrive eksport-container + + + Unexpected export error occurred + Uventet feil oppstått + + + Export to %1 failed (%2) + Eksport til %1 feilet (%2) + + + Export to %1 successful (%2) + Eksport til %1 vellykket (%2) + + + Export to %1 + Eksporter til %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + @@ -4028,20 +5263,132 @@ Lås opp valgt database eller velg en annen som er åpen. Copy Kopier - - Expires in - Utløper om - - - seconds - sekunder + + Expires in <b>%n</b> second(s) + Utløper om %n sekundUtløper om <b>%n</b> sekunder - UnlockDatabaseWidget + TotpExportSettingsDialog - Unlock database - Lås opp databasen + Copy + Kopier + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + MERK: Disse TOTP-innstillingene er egendefinerte og fungerer kanskje ikke med andre autentifikatorer. + + + There was an error creating the QR code. + Feil ved opprettelse av QR-koden. + + + Closing in %1 seconds. + Lukker om %1 sekunder. + + + + TotpSetupDialog + + Setup TOTP + Oppsett TOTP + + + Key: + Nøkkel: + + + Default RFC 6238 token settings + Standard RFC 6238 token-innstillinger + + + Steam token settings + Steam token-innstillinger + + + Use custom settings + Bruk egendefinerte innstillinger + + + Custom Settings + Egendefinerte innstillinger + + + Time step: + Tidsintervall: + + + sec + Seconds + sek + + + Code size: + Kodestørrelse: + + + 6 digits + 6 siffer + + + 7 digits + 7 siffer + + + 8 digits + 8 siffer + + + + UpdateCheckDialog + + Checking for updates + Sjekker for oppdateringer + + + Checking for updates... + Sjekker for oppdateringer... + + + Close + Lukk + + + Update Error! + Feil ved oppdatering! + + + An error occurred in retrieving update information. + En feil oppstod ved mottak av oppdateringsinformasjon. + + + Please try again later. + Prøv igjen senere. + + + Software Update + Programvareoppdatering + + + A new version of KeePassXC is available! + En ny versjon av KeePassXC er tilgjengelig! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 er nå tilgjengelig — du har %2. + + + Download it at keepassxc.org + Lastes ned fra keepassxc.org + + + You're up-to-date! + Du er oppdatert! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 er nå nyeste versjon som er tilgjengelig @@ -4060,11 +5407,11 @@ Lås opp valgt database eller velg en annen som er åpen. Import from KeePass 1 - Importer fra KeePass 1 + Importer KeePass1-database Import from CSV - Importer fra CSV + Importer fra CSV-fil Recent databases @@ -4076,42 +5423,26 @@ Lås opp valgt database eller velg en annen som er åpen. - main + YubiKeyEditWidget - Remove an entry from the database. - Fjern oppføring fra databasen. + Refresh + Last på ny - Path of the database. - Database-sti. + YubiKey Challenge-Response + YubiKey utfordrings-respons - Path of the entry to remove. - Sti til oppføring som skal fjernes. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Dersom du har en <a href="https://www.yubico.com/">YubiKey</a>, så kan du bruke den for økt sikkerhet.</p><p>Ett av sporene på YubiKey må programmeres med <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 utfordrings-respons</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - en multiplattforms passordhåndterer + No YubiKey detected, please ensure it's plugged in. + Ingen YubiKey oppdaga. Sjekk om den er satt inn. - filenames of the password databases to open (*.kdbx) - Filnavn på passord-databasene som skal åpnes (*.kdbx) - - - path to a custom config file - Sti til tilpasset konfigurasjonsfil - - - key file of the database - Database-nøkkelfil - - - read password of the database from stdin - Les database-passord fra stdin - - - Parent window handle - Adresse til foreldre-vindu + No YubiKey inserted. + Ingen YubiKey satt inn. \ No newline at end of file diff --git a/share/translations/keepassx_nl_NL.ts b/share/translations/keepassx_nl_NL.ts index 15bd21554..6b25466e6 100644 --- a/share/translations/keepassx_nl_NL.ts +++ b/share/translations/keepassx_nl_NL.ts @@ -15,7 +15,7 @@ KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - KeePassXC wordt verspreid onder de voorwaarden van de GNU General Public License (GPL) versie 2 of (deswenst) versie 3. + KeePassXC wordt verspreid onder de voorwaarden van de GNU General Public License (GPL) versie 2 of (desgewenst) versie 3. Contributors @@ -37,74 +37,13 @@ Copy to clipboard Naar klembord kopiëren - - Version %1 - - Versie %1 - - - - Revision: %1 - Revisie: %1 - - - Distribution: %1 - Distributie: %1 - - - Libraries: - Bibliotheken: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Besturingssysteem: %1 -CPU-architectuur: %2 -Kernelversie: %3 %4 - - - Enabled extensions: - Geactiveerde extensies: - Project Maintainers: Projectbeheerders: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Een extra dank-u-wel van het KeePassXC-team voor debfx voor het creëren van het oorspronkelijke KeePassX. - - - Build Type: %1 - - Bouwtype: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP-toegang bevestigen - - - Remember this decision - Deze keuze onthouden - - - Allow - Toestaan - - - Deny - Weigeren - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 vraagt toegang tot jouw wachtwoorden voor het volgende). -Geef aan of je toegang wilt verlenen of niet. + Een extra dank-je-wel van het KeePassXC-team gaat naar debfx voor het creëren van het oorspronkelijke KeePassX. @@ -113,6 +52,277 @@ Geef aan of je toegang wilt verlenen of niet. Enable SSH Agent (requires restart) SSH-agent activeren (vereist herstart) + + Use OpenSSH for Windows instead of Pageant + Gebruik OpenSSH voor Windows in plaats van Pageant + + + + ApplicationSettingsWidget + + Application Settings + Programma-instellingen + + + General + Algemeen + + + Security + Beveiliging + + + Access error for config file %1 + Geen toegang tot configuratiebestand %1 + + + Icon only + Alleen pictogram + + + Text only + Alleen tekst + + + Text beside icon + Tekst naast pictogram + + + Text under icon + Tekst onder pictogram + + + Follow style + Volg stijl + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Basisinstellingen + + + Startup + Opstarten + + + Start only a single instance of KeePassXC + Start niet meer dan één instantie van KeePassXC + + + Remember last databases + Laatstgebruikte databases onthouden + + + Remember last key files and security dongles + Laatstgebruikte sleutelbestanden en beveiligingsdongles onthouden + + + Load previous databases on startup + Laatstgebruikte databases openen bij het opstarten + + + Minimize window at application startup + Scherm minimaliseren bij het opstarten + + + File Management + Bestandsbeheer + + + Safely save database files (may be incompatible with Dropbox, etc) + Veilig opslaan van databasebestanden (mogelijk incompatibel met Dropbox, etc.) + + + Backup database file before saving + Back-up databasebestand voor het opslaan + + + Automatically save after every change + Automatisch opslaan na iedere wijziging + + + Automatically save on exit + Automatisch opslaan bij afsluiten + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Markeer de database niet als gewijzigd voor non-data wijzigingen (bijv. uitgebreide groepen) + + + Automatically reload the database when modified externally + Database automatisch opnieuw laden als deze van buitenaf is gewijzigd + + + Entry Management + Itembeheer + + + Use group icon on entry creation + Gebruik groepspictogram voor nieuwe items + + + Minimize when copying to clipboard + Minimaliseer bij kopiëren naar klembord + + + Hide the entry preview panel + Verberg voorvertoning + + + General + Algemeen + + + Hide toolbar (icons) + Verberg werkbalk (pictogrammen) + + + Minimize instead of app exit + Minimaliseren in plaats van app afsluiten + + + Show a system tray icon + Pictogram in het systeemvak weergeven + + + Dark system tray icon + Donker systeemvak-pictogram + + + Hide window to system tray when minimized + Minimaliseren naar systeemvak + + + Language + Taal + + + Auto-Type + Auto-type + + + Use entry title to match windows for global Auto-Type + Gebruik naam van item als vensternaam voor Auto-type + + + Use entry URL to match windows for global Auto-Type + Laat URL overeenkomen met item bij Auto-type + + + Always ask before performing Auto-Type + Altijd vragen voor toepassen Auto-type + + + Global Auto-Type shortcut + Globale sneltoets voor Auto-type + + + Auto-Type typing delay + Auto-typevertraging + + + ms + Milliseconds + ms + + + Auto-Type start delay + Auto-type startvertraging + + + Check for updates at application startup + Controleer op updates bij het starten van de applicatie + + + Include pre-releases when checking for updates + Zoek ook naar pre-releases bij het controleren op updates + + + Movable toolbar + Beweegbare gereedschapsbalk + + + Button style + Knopstijl + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Time-outs + + + Clear clipboard after + Klembord leegmaken na + + + sec + Seconds + sec + + + Lock databases after inactivity of + Databases vergrendelen na inactiviteit van + + + min + min + + + Forget TouchID after inactivity of + Vergeet TouchID na inactiviteit van + + + Convenience + Gemak + + + Lock databases when session is locked or lid is closed + Databases vergrendelen als de gebruikerssessie wordt vergrendeld of bij het sluiten van de deksel + + + Forget TouchID when session is locked or lid is closed + Vergeet TouchID wanneer sessie is vergrendeld of deksel is gesloten + + + Lock databases after minimizing the window + Databases vergrendelen bij het minimaliseren van het venster + + + Re-lock previously locked database after performing Auto-Type + Vergrendelde database na Auto-type weer vergrendelen + + + Don't require password repeat when it is visible + Geen herhaling van wachtwoord vragen als deze zichtbaar is + + + Don't hide passwords when editing them + Wachtwoord niet verbergen tijdens bewerken + + + Don't use placeholder for empty password fields + Tijdelijke aanduiding voor lege wachtwoordvelden niet gebruiken + + + Hide passwords in the entry preview panel + Verberg wachtwoorden in voorvertoning + + + Hide entry notes by default + Notities standaard verbergen + + + Privacy + Privacy + + + Use DuckDuckGo as fallback for downloading website icons + Gebruik DuckDuckGo voor het downloaden van de website-pictogrammen + AutoType @@ -211,10 +421,31 @@ Geef aan of je toegang wilt verlenen of niet. %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. - %1 vraagt toegang tot jouw wachtwoorden voor het volgende). + %1 vraagt toegang tot jouw wachtwoorden voor het volgende. Geef aan of je toegang wilt verlenen of niet. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-browser: Item opslaan + + + Ok + Oké + + + Cancel + Annuleren + + + You have multiple databases open. +Please select the correct database for saving credentials. + Je hebt meerdere databases open. +Selecteer de database voor het opslaan van de inloggegevens. + + BrowserOptionDialog @@ -288,14 +519,6 @@ Geef aan of je toegang wilt verlenen of niet. Credentials mean login data requested via browser extension Sorteer overeenkomende inloggegevens op &gebruikersnaam - - &Disconnect all browsers - &Verbreek verbinding met alle browsers - - - Forget all remembered &permissions - Vergeet alle &permissies - Advanced Geavanceerd @@ -345,7 +568,7 @@ Geef aan of je toegang wilt verlenen of niet. Use a custom proxy location if you installed a proxy manually. - Gebruik een aangepaste proxy-locatie als je een proxy handmatig hebt geïnstalleerd. + Gebruik een aangepaste proxy-locatie als je zelf een proxy hebt geïnstalleerd. Use a &custom proxy location @@ -361,21 +584,42 @@ Geef aan of je toegang wilt verlenen of niet. <b>Warning:</b> The following options can be dangerous! <b>Waarschuwing:</b> De volgende opties kunnen gevaarlijk zijn! - - Executable Files (*.exe);;All Files (*.*) - Uitvoerbare bestanden (*.exe);; Alle bestanden (*.*) - - - Executable Files (*) - Uitvoerbare bestanden (*) - Select custom proxy location Selecteer aangepaste proxy-locatie - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Het spijt ons, maar KeePassXC-Browser wordt momenteel niet ondersteund voor Snap releases. + &Tor Browser + &Tor browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Waarschuwing</b>, de keepassxc-proxy-applicatie is niet gevonden!<br />Controleer de installatiemap van KeePassXC of bevestig het aangepaste pad in geavanceerde opties.<br />De browserintegratie zal NIET WERKEN zonder de proxy-applicatie.<br />Verwacht pad: + + + Executable Files + Uitvoerbare bestanden + + + All Files + Alle bestanden + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Vraag geen toestemming voor HTTP en Basis Authentificatie + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,153 +660,55 @@ Wil je deze overschrijven? Do you want to update the information in %1 - %2? Wil je de gegevens in %1 - %2 bijwerken? - - KeePassXC: Database locked! - KeePassXC: Database vergrendeld! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - De actieve database is vergrendeld! -Ontgrendel de geselecteerde database of kies een ontgrendelde database. - - - KeePassXC: Settings not available! - KeePassXC: Instellingen niet beschikbaar! - - - The active database does not contain a settings entry. - De actieve database bevat geen instellingen. - - - KeePassXC: No keys found - KeePassXC: Geen sleutels gevonden - - - No shared encryption keys found in KeePassXC Settings. - Geen gedeelde encryptiesleutels gevonden in KeePassXC-instellingen. - - - KeePassXC: Removed keys from database - KeePassXC: Sleutels uit database verwijderd - - - Successfully removed %n encryption key(s) from KeePassXC settings. - %n encryptie-sleutel verwijderd uit KeePassXC-instellingen.%n encryptie-sleutels verwijderd uit KeePassXC-instellingen. - - - Removing stored permissions… - Opgeslagen permissies verwijderen… - Abort Afbreken - KeePassXC: Removed permissions - KeePassXC: Permissies verwijderd + Converting attributes to custom data… + Kenmerken worden omgezet in speciala data... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Geconverteerde KeePassHTTP kenmerken + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Kenmerken van %1 item(s) is/zijn geconverteerd. +%2 sleutels naar speciale data verplaatst. - Successfully removed permissions from %n entry(s). - Permissies zijn verwijderd uit %n item.Permissies zijn verwijderd uit %n items. + Successfully moved %n keys to custom data. + Sleutel is verplaats naar speciale data.Sleutels zijn verplaats naar speciale data. - KeePassXC: No entry with permissions found! - KeePassXC: Geen item met permissies gevonden! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Geen item met KeePassHTTP kenmerken gevonden! - The active database does not contain an entry with permissions. - De actieve database bevat geen items met permissies. - - - - ChangeMasterKeyWidget - - Password - Wachtwoord + The active database does not contain an entry with KeePassHTTP attributes. + De actieve database bevat geen item met KeePassHTTP attributen. - Enter password: - Wachtwoord invoeren: + KeePassXC: Legacy browser integration settings detected + KeePassXC: instellingen voor oudere browserintegratie gedetecteerd - Repeat password: - Wachtwoord herhalen: + KeePassXC: Create a new group + - &Key file - &Sleutelbestand + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Bladeren - - - Create - Aanmaken - - - Cha&llenge Response - Test - Antwoord - - - Refresh - Vernieuwen - - - Key files - Sleutelbestanden - - - All files - Alle bestanden - - - Create Key File... - Sleutelbestand aanmaken… - - - Unable to create Key File : - Het aanmaken van het sleutelbestand is mislukt: - - - Select a key file - Kies een sleutelbestand - - - Empty password - Leeg wachtwoord - - - Do you really want to use an empty string as password? - Weet je zeker dat je geen wachtwoord wil gebruiken? - - - Different passwords supplied. - De wachtwoorden komen niet overeen. - - - Failed to set %1 as the Key file: -%2 - Het instellen van %1 als sleutelbestand is mislukt: -%2 - - - Legacy key file format - Verouderd sleutelbestandsformaat - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Je gebruikt een verouderd sleutelbestandsformaat dat in de toekomst niet ondersteund zal worden. - -Overweeg a.u.b. een nieuw sleutelbestand te genereren. - - - Changing master key failed: no YubiKey inserted. - Verandering sleutelbestand mislukt: geen YubiKey gedetecteerd. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -642,14 +788,6 @@ Overweeg a.u.b. een nieuw sleutelbestand te genereren. Not present in CSV file Niet aanwezig in CSV-bestand - - Empty fieldname - Lege veldnaam - - - column - Kolom - Imported from CSV file Geïmporteerd uit CSV-bestand @@ -658,50 +796,91 @@ Overweeg a.u.b. een nieuw sleutelbestand te genereren. Original data: Originele gegevens: - - Error(s) detected in CSV file ! - Fout(en) gedetecteerd in CSV-bestand! - - - more messages skipped] - meer berichten overgeslagen] - Error Fout + + Empty fieldname %1 + Lege fieldname %1 + + + column %1 + kolom %1 + + + Error(s) detected in CSV file! + Fout(en) gevonden in CSV-bestand! + + + [%n more message(s) skipped] + [%n meer bericht(en) overgeslagen][%n meer bericht(en) overgeslagen] + CSV import: writer has errors: - - CSV-import - fouten opgetreden: - - - - - CsvImportWizard - - Error - Fout - - - Unable to calculate master key - Niet mogelijk om hoofdsleutel te berekenen +%1 + CSV importeren: schrijver heeft fouten: +%1 CsvParserModel - - %n byte(s), - 1 byte,%n byte(s), - - - %n row(s), - 1 rij,%n rij(en), - %n column(s) 1 kolom%n kolom(men) + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte (s)%n byte(s) + + + %n row(s) + %n rij(en)%n rij(en) + + + + Database + + Root + Root group name + Alles + + + File %1 does not exist. + Bestand %1 bestaat niet. + + + Unable to open file %1. + Kan bestand %1 niet openen. + + + Error while reading the database: %1 + Fout bij het lezen van de database: %1 + + + Could not save, database has no file name. + Kan niet opslaan, database heeft geen bestandsnaam. + + + File cannot be written as it is opened in read-only mode. + Bestand kan niet worden geschreven omdat het in de alleen-lezen modus is geopend. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Ontgrendel database - KeePassXC + DatabaseOpenWidget @@ -727,15 +906,7 @@ Overweeg a.u.b. een nieuw sleutelbestand te genereren. Challenge Response: - Test - Resultaat: - - - Unable to open the database. - Niet mogelijk om de database te openen. - - - Can't open key file - Niet mogelijk om het sleutelbestand te openen + Challenge/response: Legacy key file format @@ -766,105 +937,173 @@ Overweeg a.u.b. een nieuw sleutelbestand te genereren. Select key file Kies sleutelbestand - - - DatabaseRepairWidget - Repair database - Database repareren + TouchID for quick unlock + TouchID voor snel ontgrendelen - Error - Fout + Unable to open the database: +%1 + Kan database niet openen: +%1 - Can't open key file - Niet mogelijk om het sleutelbestand te openen - - - Unable to open the database. - Niet mogelijk om de database te openen. - - - Database opened fine. Nothing to do. - Database zonder problemen geopend. Niets te doen. - - - Success - Gelukt - - - The database has been successfully repaired -You can now save it. - De database is met succes gerepareerd -Je kunt deze nu opslaan. - - - Unable to repair the database. - De database is niet te repareren. + Can't open key file: +%1 + Kan sleutelbestand niet openen: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Wachtwoorden + + + + DatabaseSettingsDialog + + Advanced Settings + Geavanceerde instellingen + General Algemeen - Encryption - Versleuteling + Security + Beveiliging - Number of rounds too high - Key transformation rounds - Aantal iteraties te hoog + Master Key + Hoofdsleutel - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! - Je gebruikt een zeer groot aantal sleuteltransformatie-iteratiesmet Argon2. - -Als je dit aantal aanhoudt, kan het uren, dagen (of zelfs langer) duren om de database te openen! + Encryption Settings + Versleuteling instellingen - Understood, keep number - Begrepen, aantal aanhouden + Browser Integration + Browserintegratie + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-browser instellingen - Cancel - Annuleren + &Disconnect all browsers + &Verbreek verbinding met alle browsers - Number of rounds too low - Key transformation rounds - Aantal iteraties te laag + Forg&et all site-specific settings on entries + Vergeet alle site-specifieke instellingen bij items - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! - Je gebruikt een zeer laag aantal sleuteltransformatie-iteraties met AES-KDF. - -Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kraken! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Verplaats KeePassHTTP kenmerken naar KeePassXC-browser &speciale data - KDF unchanged - KDF ongewijzigd + Stored keys + Opgeslagen sleutels - Failed to transform key with new KDF parameters; KDF unchanged. - Het transformeren van de sleutel met de nieuwe KDF-parameters is mislukt; KDF is ongewijzigd. + Remove + Verwijderen + + + Delete the selected key? + De geselecteerde sleutel verwijderen? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Wil je de geselecteerde sleutel echt verwijderen? +Hierdoor werkt de verbinding met de browser plugin mogelijk niet meer. + + + Key + Sleutel + + + Value + Waarde + + + Enable Browser Integration to access these settings. + Activeer browser integratie om deze instellingen te kunnen wijzigen. + + + Disconnect all browsers + Verbreek verbinding met alle browsers + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Wil je echt de verbinding met alle browsers verbreken? +Hierdoor werkt de verbinding met de browser plugin mogelijk niet meer. + + + KeePassXC: No keys found + KeePassXC: Geen sleutels gevonden + + + No shared encryption keys found in KeePassXC settings. + Geen gedeelde coderingssleutels gevonden in KeePassXC instellingen. + + + KeePassXC: Removed keys from database + KeePassXC: Sleutels uit database verwijderd - MiB - Abbreviation for Mebibytes (KDF settings) - MiBMiB + Successfully removed %n encryption key(s) from KeePassXC settings. + %n coderingssleutel uit KeePassXC instellingen verwijderd.%n coderingssleutel(s) uit KeePassXC instellingen verwijderd. + + + Forget all site-specific settings on entries + Vergeet alle site-specifieke instellingen bij items + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Wilt u echt alle site-specifieke instellingen bij items vergeten? Machtigingen voor toegang zullen worden ingetrokken. + + + Removing stored permissions… + Opgeslagen machtigingen verwijderen… + + + Abort + Afbreken + + + KeePassXC: Removed permissions + KeePassXC: machtigingen verwijderd - thread(s) - Threads for parallel execution (KDF settings) - executie-thread executie-thread(s) + Successfully removed permissions from %n entry(s). + Machtigingen zijn verwijderd uit %n item(s).Machtigingen zijn verwijderd uit %n item(s). + + + KeePassXC: No entry with permissions found! + KeePassXC: Geen item met machtigingen gevonden! + + + The active database does not contain an entry with permissions. + De actieve database bevat geen items met machtigingen. + + + Move KeePassHTTP attributes to custom data + Verplaats KeePassHTTP kenmerken naar speciale data + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Wil je echt alle instellingen voor de oudere browserintegratie veranderen naar de nieuwste standaard? +Dit is nodig om compatibiliteit met de browser plugin te behouden. @@ -901,6 +1140,113 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr Parallelism: Parallelliteit: + + Decryption Time: + Decoderingstijd: + + + ?? s + ?? s + + + Change + Wijzigen + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Hogere waarden bieden meer bescherming, maar laten het openen van de database langer duren. + + + Database format: + Database-indeling: + + + This is only important if you need to use your database with other programs. + Dit is alleen van belang als je de database met andere programma's wil gebruiken. + + + KDBX 4.0 (recommended) + KDBX 4.0 (aanbevolen) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + ongewijzigd + + + Number of rounds too high + Key transformation rounds + Aantal iteraties te hoog + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + Je gebruikt een zeer groot aantal sleuteltransformatie-iteraties met Argon2. + +Als je dit aantal aanhoudt, kan het uren, dagen (of zelfs langer) duren om de database te openen! + + + Understood, keep number + Begrepen, aantal aanhouden + + + Cancel + Annuleren + + + Number of rounds too low + Key transformation rounds + Aantal iteraties te laag + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + Je gebruikt een zeer laag aantal sleuteltransformatie-iteraties met AES-KDF. + +Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kraken! + + + KDF unchanged + KDF ongewijzigd + + + Failed to transform key with new KDF parameters; KDF unchanged. + Het transformeren van de sleutel met de nieuwe KDF-parameters is mislukt; KDF is ongewijzigd. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + thread(s)thread(s) + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + DatabaseSettingsWidgetGeneral @@ -950,12 +1296,85 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Alles + Sharing + Delen + + Breadcrumb + Broodkruimel + + + Type + Type + + + Path + Pad + + + Last Signer + Laatste Ondertekenaar + + + Certificates + Certificaten + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Extra beveiliging toevoegen... + + + No encryption key added + Geen coderingssleutel toegevoegd + + + You must add at least one encryption key to secure your database! + Je moet minstens één coderingssleutel aan uw database toevoegen om deze te beveiligen! + + + No password set + Geen wachtwoord ingesteld + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + WAARSCHUWING! Je hebt geen wachtwoord ingesteld. Een database gebruiken zonder wachtwoord wordt sterk afgeraden! + +Weet je zeker dat je door wilt gaan zonder wachtwoord? + + + Unknown error + Onbekende fout + + + Failed to change master key + Hoofdsleutel wijzigen is niet gelukt + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Database naam: + + + Description: + Beschrijving: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2-database @@ -968,30 +1387,10 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr Open database Database openen - - File not found! - Bestand niet gevonden! - - - Unable to open the database. - Het is niet mogelijk om de database te openen. - - - File opened in read only mode. - Bestand geopend in lees-modus. - - - Open CSV file - CSV-bestand openen - CSV file CSV-bestand - - All files (*) - Alle bestanden (*) - Merge database Database samenvoegen @@ -1004,38 +1403,6 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr KeePass 1 database KeePass 1-database - - Close? - Sluiten? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" is gewijzigd. -Wijzigingen ongedaan maken en doorgaan met sluiten? - - - Save changes? - Wijzigingen opslaan? - - - "%1" was modified. -Save changes? - "%1" is gewijzigd. -Wijzigingen opslaan? - - - Writing the database failed. - Het opslaan van de database is mislukt. - - - Passwords - Wachtwoorden - - - Save database as - Database Opslaan Als - Export database to CSV file Database exporteren naar CSV-bestand @@ -1045,40 +1412,41 @@ Wijzigingen opslaan? Schrijven van het CSV-bestand mislukt. - New database + Database creation error + Fout bij creëren van de database: + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + De aangemaakte database heeft geen sleutel of KDF, dit weiger ik op te slaan. +Dit is zeker een bug, rapporteer dit a.u.b. aan de ontwikkelaars. + + + The database file does not exist or is not accessible. + Het databasebestand bestaat niet of is niet toegankelijk. + + + Select CSV file + Selecteer CSV-bestand + + + New Database Nieuwe database - locked - vergrendeld + %1 [New Database] + Database tab name modifier + %1 [nieuwe database] - Lock database - Database vergrendelen + %1 [Locked] + Database tab name modifier + %1 [vergrendeld] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Kan de database niet vergrendelen omdat deze momenteel bewerkt wordt. -Druk op annuleren om je wijzigingen te voltooien of af te danken. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Deze database is gewijzigd. -Wil je de database opslaan voordat je deze vergrendelt? -Zo nee, dan gaan de wijzigingen verloren. - - - Disable safe saves? - Veilig opslaan uitschakelen? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC heeft meerdere keren geprobeerd de database op te slaan. Dit wordt waarschijnlijk veroorzaakt door een blokkade op het bestand door een synchronisatie-dienst. -Veilig opslaan afschakelen en opnieuw proberen? + %1 [Read-only] + Database tab name modifier + %1 [alleen lezen] @@ -1087,38 +1455,14 @@ Veilig opslaan afschakelen en opnieuw proberen? Searching... Bezig met zoeken… - - Change master key - Hoofdsleutel wijzigen - - - Delete entry? - Item verwijderen? - Do you really want to delete the entry "%1" for good? - Weet je zeker dat je het item "%1" wil verwijderen? - - - Delete entries? - Items wissen? - - - Do you really want to delete %1 entries for good? - Weet je zeker dat je %1 items wil wissen? - - - Move entry to recycle bin? - Wilt u het item naar de prullenbak verplaatsen? + Weet je zeker dat je het item "%1" definitief wil verwijderen? Do you really want to move entry "%1" to the recycle bin? Weet je zeker dat je item "%1" naar de prullenbak wil verplaatsen? - - Move entries to recycle bin? - Items naar de prullenbak verplaatsen? - Do you really want to move %n entry(s) to the recycle bin? Wil je echt %n item naar de Prullenbak verplaatsen?Wil je echt %n item(s) naar de Prullenbak verplaatsen? @@ -1135,18 +1479,10 @@ Veilig opslaan afschakelen en opnieuw proberen? Remember my choice Mijn keuze onthouden - - Delete group? - Groep verwijderen? - Do you really want to delete the group "%1" for good? Weet je zeker dat je de groep "%1" wil verwijderen? - - Unable to calculate master key - Niet mogelijk om hoofdsleutel te berekenen - No current database. Geen actuele database. @@ -1181,10 +1517,6 @@ Do you want to merge your changes? Het databasebestand is veranderd en er zijn niet-opgeslagen wijzigingen. Wil je de wijzigingen samenvoegen? - - Could not open the new database file while attempting to autoreload this database. - De nieuwe database kan niet worden geopend tijdens het automatisch herladen van deze database. - Empty recycle bin? Prullenbak legen? @@ -1193,88 +1525,111 @@ Wil je de wijzigingen samenvoegen? Are you sure you want to permanently delete everything from your recycle bin? Weet je zeker dat je alles uit de prullenbak definitief wil verwijderen? - - - DetailsWidget - - Generate TOTP Token - TOTP-token genereren + + Do you really want to delete %n entry(s) for good? + Wilt u echt %n item(s) voorgoed verwijderen?Wilt u echt %n item(s) voorgoed verwijderen? + + + Delete entry(s)? + Verwijderen entry(s)?Item(s) verwijderen? + + + Move entry(s) to recycle bin? + Item(s) naar prullenbak verplaatsen?Item(s) naar prullenbak verplaatsen? - Close - Sluiten + File opened in read only mode. + Bestand geopend in lees-modus. - General - Algemeen + Lock Database? + Database vergrendelen? - Password - Wachtwoord + You are editing an entry. Discard changes and lock anyway? + Je bewerkt een item. De wijzigingen verwerpen en toch vergrendelen? - URL - URL + "%1" was modified. +Save changes? + "%1" is gewijzigd. +Wijzigingen opslaan? - Expiration - Vervaldatum + Database was modified. +Save changes? + Database is gewijzigd. +Wijzigingen opslaan? - Username - Gebruikersnaam + Save changes? + Wijzigingen opslaan? - Autotype - Auto-type + Could not open the new database file while attempting to autoreload. +Error: %1 + Kan het nieuwe databasebestand niet openen tijdens het automatisch herladen. +Fout: %1 - Searching - Zoeken + Disable safe saves? + Veilig opslaan uitschakelen? - Attributes - Kenmerken + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC heeft meerdere keren geprobeerd de database op te slaan maar het is niet gelukt. Dit wordt waarschijnlijk veroorzaakt doordat een synchronisatie-dienst het bestand bezet houd. +Veilig opslaan afschakelen en opnieuw proberen? - Attachments - Bijlagen + Writing the database failed. +%1 + Het schrijven van de database is mislukt. +%1 - Notes - Notities + Passwords + Wachtwoorden - Window - Venster + Save database as + Database opslaan als - Sequence - Tekenreeks + KeePass 2 Database + KeePass 2-database - Search - Zoeken + Replace references to entry? + Referenties naar items vervangen? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Vermelding "%1" heeft %2 reference(s). Wilt u verwijzingen vervangen door waarden, dit bericht overslaan of verwijderen toch?Item "%1" heeft %2 referentie(s). Wilt u verwijzingen vervangen door waarden, dit bericht overslaan of toch verwijderen ? - Clear - Wissen + Delete group + Verwijder groep - Never - Nooit + Move group to recycle bin? + Groep naar prullenbak verplaatsen? - [PROTECTED] - [BEVEILIGD] + Do you really want to move the group "%1" to the recycle bin? + Wilt u echt de groep '%1' naar de prullenbak verplaatsen? - Disabled - Uitgeschakeld + Successfully merged the database files. + De databasebestanden zijn samengevoegd. - Enabled - Geactiveerd + Database was not modified by merge operation. + Database werd niet gewijzigd door het samenvoegen. + + + Shared group... + @@ -1347,22 +1702,10 @@ Wil je de wijzigingen samenvoegen? New attribute Nieuw kenmerk - - Confirm Remove - Verwijdering bevestigen - Are you sure you want to remove this attribute? Weet je zeker dat je dit kenmerk wil verwijderen? - - [PROTECTED] - [BEVEILIGD] - - - Press reveal to view or edit - Druk Weergeven om te bekijken of bewerken - Tomorrow Morgen @@ -1375,10 +1718,6 @@ Wil je de wijzigingen samenvoegen? %n month(s) %n maand%n maanden - - 1 year - 1 jaar - Apply generated password? Gegenereerd wachtwoord toepassen? @@ -1391,6 +1730,26 @@ Wil je de wijzigingen samenvoegen? Entry updated successfully. Het item is bijgewerkt. + + Entry has unsaved changes + Het item heeft niet opgeslagen wijzigingen + + + New attribute %1 + Nieuw kenmerk %1 + + + [PROTECTED] Press reveal to view or edit + [BEVEILIGD] Klik toon om de kijken of wijzigen + + + %n year(s) + %n jaar%n jaren + + + Confirm Removal + Verwijdering bevestigen + EditEntryWidgetAdvanced @@ -1416,7 +1775,7 @@ Wil je de wijzigingen samenvoegen? Reveal - Weergeven + Tonen Attachments @@ -1470,7 +1829,7 @@ Wil je de wijzigingen samenvoegen? EditEntryWidgetHistory Show - Weergeven + Tonen Restore @@ -1513,7 +1872,7 @@ Wil je de wijzigingen samenvoegen? Toggle the checkbox to reveal the notes section. - Selecteer om notities weer te geven. + Schakelen aan om notities te tonen. Username: @@ -1635,6 +1994,97 @@ Wil je de wijzigingen samenvoegen? Overnemen van bovenliggende groep (%1) + + EditGroupWidgetKeeShare + + Form + Formulier + + + Type: + Type: + + + Path: + Pad: + + + ... + ... + + + Password: + Wachtwoord: + + + Inactive + Inactief + + + Import from path + Importeren van pad + + + Export to path + Exporteren naar pad + + + Synchronize with path + Synchroniseren met pad + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Uw KeePassXC-versie biedt geen ondersteuning voor het delen van uw Containertype. Gebruik %1. + + + Database sharing is disabled + Database delen is uitgeschakeld + + + Database export is disabled + Database exporteren is uitgeschakeld + + + Database import is disabled + Database importeren is uitgeschakeld + + + KeeShare unsigned container + KeeShare niet-ondertekende container + + + KeeShare signed container + KeeShare ondertekende container + + + Select import source + Selecteer bron voor import + + + Select export target + Selecteer doel voor export + + + Select import/export file + Selecteer import/export bestand + + + Clear + Wissen + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1692,10 +2142,6 @@ Wil je de wijzigingen samenvoegen? Unable to fetch favicon. Favicon kan niet worden opgehaald. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Tip: Je kunt Google gebruiken als alternatief via Extra>Instellingen>Beveiliging - Images Afbeeldingen @@ -1704,25 +2150,45 @@ Wil je de wijzigingen samenvoegen? All files Alle bestanden - - Select Image - Kies afbeelding - - - Can't read icon - Kan icoon niet lezen - Custom icon already exists - Aangepast icoon bestaat al + Icoon bestaat al Confirm Delete Verwijdering bevestigen - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Dit icoon wordt gebruikt door %1 items en zal worden vervangen door de standaardicoon. Weet je zeker dat je het wil verwijderen? + Custom icon successfully downloaded + Pictogram is gedownload + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Tip: Je kunt DuckDuckGo als alternatief inschakelen onder Extra>Instellingen>Beveiliging + + + Select Image(s) + Selecteer afbeelding(en) + + + Successfully loaded %1 of %n icon(s) + %1 van %n pictogram(men) geladen%1 van %n pictogram(men) geladen + + + No icons were loaded + Geen pictogrammen werden geladen + + + %n icon(s) already exist in the database + %n pictogram(men) al aanwezig in de database%n pictogram(men) al aanwezig in de database + + + The following icon(s) failed: + De volgende pictogram(men) mislukten:De volgende pictogram(men) mislukten: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wilt verwijderen?Dit pictogram wordt gebruikt door %n item(s) en zal worden vervangen door het standaardpictogram. Weet je zeker dat je het wilt verwijderen? @@ -1773,9 +2239,8 @@ Hierdoor werken de plugins mogelijk niet meer goed. Entry - - Clone - Suffix added to cloned entries - - Kloon + %1 - Clone + %1 - kloon @@ -1819,10 +2284,6 @@ Hierdoor werken de plugins mogelijk niet meer goed. Are you sure you want to remove %n attachment(s)? Weet je zeker dat je %n bijlage wil verwijderen?Weet je zeker dat je %n bijlagen wil verwijderen? - - Confirm Remove - Verwijdering bevestigen - Save attachments Bijlagen opslaan @@ -1856,14 +2317,17 @@ Hierdoor werken de plugins mogelijk niet meer goed. Unable to open attachments: %1 - Bijlagen niet kunnen openen: + Kon de bijlagen niet openen: %1 - Unable to open files: + Confirm remove + Verwijderen bevestigen + + + Unable to open file(s): %1 - Bestanden niet kunnen openen: -%1 + Kan niet openen van bestanden: %1Kan bestand(en): %1 niet openen @@ -1947,6 +2411,106 @@ Hierdoor werken de plugins mogelijk niet meer goed. Attachments Bijlagen + + Yes + Ja + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + TOTP-token genereren + + + Close + Sluiten + + + General + Algemeen + + + Username + Gebruikersnaam + + + Password + Wachtwoord + + + Expiration + Vervaldatum + + + URL + URL + + + Attributes + Kenmerken + + + Attachments + Bijlagen + + + Notes + Notities + + + Autotype + Auto-type + + + Window + Venster + + + Sequence + Tekenreeks + + + Searching + Zoeken + + + Search + Zoeken + + + Clear + Wissen + + + Never + Nooit + + + [PROTECTED] + [BEVEILIGD] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Geactiveerd + + + Disabled + Uitgeschakeld + + + Share + Delen + EntryView @@ -1985,6 +2549,11 @@ Hierdoor werken de plugins mogelijk niet meer goed. Recycle Bin Prullenbak + + [empty] + group has no children + [leeg] + HostInstaller @@ -1997,61 +2566,6 @@ Hierdoor werken de plugins mogelijk niet meer goed. Kan het native messaging scriptbestand niet opslaan. - - HttpPasswordGeneratorWidget - - Length: - Lengte: - - - Character Types - Tekens - - - Upper Case Letters - Hoofdletters - - - A-Z - A-Z - - - Lower Case Letters - Kleine letters - - - a-z - a-z - - - Numbers - Cijfers - - - 0-9 - 0-9 - - - Special Characters - Speciale tekens - - - /*_& ... - /*_& … - - - Exclude look-alike characters - Op elkaar lijkende tekens uitsluiten - - - Ensure that the password contains characters from every group - Zorg ervoor dat het wachtwoord tekens uit iedere groep bevat - - - Extended ASCII - Uitgebreide ASCII - - KMessageWidget @@ -2071,18 +2585,38 @@ Hierdoor werken de plugins mogelijk niet meer goed. Unable to issue challenge-response. - Kan Test-Resultaat niet uitgeven. + Kan challenge/response niet uitvoeren. Wrong key or database file is corrupt. Verkeerde sleutel of beschadigde database. + + missing database headers + ontbrekende database-koppen + + + Header doesn't match hash + Header komt niet overeen met hash + + + Invalid header id size + Ongeldige grootte van header-ID + + + Invalid header field length + Ongeldige lengte van header-veld + + + Invalid header data length + Ongeldige lengte van header-data + Kdbx3Writer Unable to issue challenge-response. - Kan Test-Resultaat niet uitgeven. + Kan challenge/response niet uitvoeren. Unable to calculate master key @@ -2159,22 +2693,22 @@ Hierdoor werken de plugins mogelijk niet meer goed. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - Ongeldige lengte van de variant map entry + Ongeldige lengte van een variant map item naam Invalid variant map entry name data Translation: variant map = data structure for storing meta data - Ongeldige data in de variant map entry name + Ongeldige data in een variant map item naam Invalid variant map entry value length Translation: variant map = data structure for storing meta data - Ongeldige lengte van de variant map waarde + Ongeldige lengte van een variant map waarde Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - Ongeldige data in de variant map waarde + Ongeldige data in een variant map waarde Invalid variant map Bool entry value length @@ -2235,10 +2769,6 @@ Hierdoor werken de plugins mogelijk niet meer goed. KdbxReader - - Invalid cipher uuid length - Ongeldige lengte versleuteling uuid - Unsupported cipher Niet ondersteund versleutelingsalgoritme @@ -2293,6 +2823,18 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open Unsupported KeePass 2 database version. Niet-ondersteunde KeePass 2-databaseversie. + + Invalid cipher uuid length: %1 (length=%2) + Ongeldige cipher uuid lengte: %1 (lengte=2%) + + + Unable to parse UUID: %1 + Geen geldige UUID: %1 + + + Failed to read database file. + Lezen van databasebestand is mislukt. + KdbxXmlReader @@ -2364,10 +2906,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open History element with different uuid Geschiedenis element met ander uuid - - Unable to decrypt entry string - Het is niet gelukt om de tekst te ontcijferen - Duplicate custom attribute found Duplicaat aangepast kenmerk gevonden @@ -2417,6 +2955,14 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open Translator meant is a binary data inside an entry Het is niet gelukt om de binary uit te pakken + + XML error: +%1 +Line %2, column %3 + XML fout: +%1 +Lijn %2, kolom %3 + KeePass1OpenWidget @@ -2580,55 +3126,145 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open Invalid entry field type Ongeldig item veldtype - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 - aanbevolen) + unable to seek to content position + niet in staat om naar positie te springen - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Het bestaande single-instance vergrendelingsbestand is niet geldig. Een nieuwe instantie wordt gestart. + Disabled share + Delen uitgeschakeld - The lock file could not be created. Single-instance mode disabled. - Het vergrendelingsbestand kon niet worden aangemaakt. Single-instance mode uitgeschakeld. + Import from + Importeren uit - Another instance of KeePassXC is already running. - Een andere instantie van KeePassXC is reeds gestart. + Export to + Exporteren naar - Fatal error while testing the cryptographic functions. - Fatale fout bij het testen van de cryptografische functies. + Synchronize with + Synchroniseren met - KeePassXC - Error - KeePassXC - Fout + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Sleutelcomponent + + + Key Component Description + Sleutelcomponent beschrijving + + + Cancel + Annuleren + + + Key Component set, click to change or remove + Sleutelcomponent verzameling, klik om te wijzigen of verwijderen + + + Add %1 + Add a key component + Toevoegen van %1 + + + Change %1 + Change a key component + Wijzigen van %1 + + + Remove %1 + Remove a key component + Verwijder %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 ingesteld, klik om te wijzigen of verwijderen + + + + KeyFileEditWidget + + Browse + Bladeren + + + Generate + Genereren + + + Key File + Sleutelbestand + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Je kunt een sleutelbestand toevoegen met willekeurige bytes voor extra veiligheid.</p> <p>Je moet het sleutelbestand geheim houden en nooit verliezen anders wordt je buiten gesloten!</p> + + + Legacy key file format + Verouderd sleutelbestandsformaat + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Je gebruikt een verouderd sleutelbestandsformaat dat in de toekomst niet ondersteund zal worden. + +Ga a.u.b. naar de hoofdsleutel instellingen en genereer een nieuw sleutelbestand. + + + Error loading the key file '%1' +Message: %2 + Er ging iets fout bij het laden van het sleutelbestand '%1' +Bericht: %2 + + + Key files + Sleutelbestanden + + + All files + Alle bestanden + + + Create Key File... + Sleutelbestand aanmaken… + + + Error creating key file + Er ging iets fout bij het maken van het sleutelbestand + + + Unable to create key file: %1 + Kan sleutelbestand niet maken: %1 + + + Select a key file + Kies een sleutelbestand @@ -2641,10 +3277,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open &Recent databases &Recente databases - - Import - Importeren - &Help &Help @@ -2653,14 +3285,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open E&ntries Items - - Copy att&ribute to clipboard - Kenmerk naar klembord kopiëren - - - Time-based one-time password - Tijd-gebaseerd eenmalig wachtwoord - &Groups &Groepen @@ -2689,30 +3313,10 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open &Close database Database &Sluiten - - &New database - &Nieuwe database - - - Merge from KeePassX database - KeePassX database samenvoegen - - - &Add new entry - Nieuw item toe&voegen - - - &View/Edit entry - Item &Bekijken/bewerken - &Delete entry Item &Verwijderen - - &Add new group - Nieuwe groep Toe&voegen - &Edit group Groep B&ewerken @@ -2725,14 +3329,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open Sa&ve database as... Database Opslaan &Als… - - Change &master key... - &Hoofdwachtwoord wijzigen… - - - &Database settings - &Database-instellingen - Database settings Database-instellingen @@ -2741,10 +3337,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open &Clone entry Item &Klonen - - &Find - &Zoeken - Copy &username &Gebruikersnaam kopiëren @@ -2753,10 +3345,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open Copy username to clipboard Gebruikersnaam naar klembord kopiëren - - Cop&y password - Wachtwoord kopiëren - Copy password to clipboard Wachtwoord naar klembord kopiëren @@ -2769,14 +3357,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open Password Generator Wachtwoordgenerator - - &Perform Auto-Type - Auto-type uit&voeren - - - &Open URL - URL &Openen - &Lock databases Databases &Vergrendelen @@ -2809,22 +3389,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open &Export to CSV file... &Exporteren naar CSVbestand… - - Import KeePass 1 database... - Importeer een KeePass 1-database… - - - Import CSV file... - Importeer een CSV-bestand… - - - Re&pair database... - Database Re&pareren… - - - Show TOTP - TOTP weergeven - Set up TOTP... TOTP instellen… @@ -2845,14 +3409,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open Access error for config file %1 Geen toegang tot configuratiebestand %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Het lijkt erop dat je KeePassHTTP voor integratie met de browser gebruikt. Deze functie is verouderd en zal worden verwijderd. <br>Schakel a.u.b. over naar KeePassXC-Browser! Voor hulp bij migratie, bezoek onze <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration"> migratiehandleiding</a> (waarschuwing %1 van 3).</p> - - - read-only - alleen-lezen - Settings Instellingen @@ -2865,26 +3421,6 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open Quit KeePassXC KeePassXC afsluiten - - KeePass 2 Database - KeePass 2-database - - - All files - Alle bestanden - - - Open database - Database openen - - - Save repaired database - Gerepareerde database opslaan - - - Writing the database failed. - Opslaan van de database is mislukt. - Please touch the button on your YubiKey! Druk de knop op uw YubiKey! @@ -2897,6 +3433,269 @@ This version is not meant for production use. Deze versie is niet bedoeld voor dagelijks gebruik. Er is een hoog risico op beschadiging. Bewaar een back-up van jouw databases. + + &Donate + & Doneren + + + Report a &bug + Rapporteer een &bug + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + WAARSCHUWING: Jouw Qt-versie kan KeePassXC laten crashen bij gebruik van een schermtoetsenbord! +Wij raden je aan om de AppImage te gebruiken welke beschikbaar is op onze downloadpagina. + + + &Import + &Importeer + + + Copy att&ribute... + Kopieer &kenmerk... + + + TOTP... + TOTP... + + + &New database... + &Nieuwe database... + + + Create a new database + Een nieuwe database maken + + + &Merge from database... + & Samenvoegen uit database... + + + Merge from another KDBX database + Samenvoegen uit een andere KDBX database + + + &New entry + &Nieuw item + + + Add a new entry + Een nieuw item toevoegen + + + &Edit entry + &Edit item + + + View or edit entry + Bekijk/bewerk item + + + &New group + & Nieuwe groep + + + Add a new group + Een nieuwe groep toevoegen + + + Change master &key... + &Hoofdsleutel veranderen + + + &Database settings... + & Database instellingen... + + + Copy &password + &Wachtwoord kopiëren + + + Perform &Auto-Type + Uitvoeren & Auto-Type + + + Open &URL + Open & URL + + + KeePass 1 database... + KeePass 1 database... + + + Import a KeePass 1 database + Een KeePass 1-database importeren + + + CSV file... + CSV-bestand... + + + Import a CSV file + Importeren een CSV-bestand + + + Show TOTP... + Toon TOTP… + + + Show TOTP QR Code... + Toon TOTP QR code... + + + Check for Updates... + Controleren op Updates... + + + Share entry + Deel item + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + Opmerking: U gebruikt een pre-release versie van KeePassXC! +Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor productiedoeleinden. + + + Check for updates on startup? + Controleren op updates bij het opstarten? + + + Would you like KeePassXC to check for updates on startup? + Wil je dat KeePassXC controleert op updates bij het opstarten? + + + You can always check for updates manually from the application menu. + U kunt altijd handmatig controleren op updates vanuit het programmamenu. + + + + Merger + + Creating missing %1 [%2] + Creëren van ontbrekende %1 [%2] + + + Relocating %1 [%2] + Verhuizen van %1 [%2] + + + Overwriting %1 [%2] + Overschrijven van %1 [%2] + + + older entry merged from database "%1" + ouder item samengevoegd uit database '%1' + + + Adding backup for older target %1 [%2] + Voeg back-up toe voor ouder doel %1 [%2] + + + Adding backup for older source %1 [%2] + Voeg back-up toe voor oudere bron %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Ouder doel item is opnieuw toegepast over nieuwer bron item %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Ouder bron item is opnieuw toegepast over nieuwer doel item %1 [%2] + + + Synchronizing from newer source %1 [%2] + Synchroniseren van nieuwere bron %1 [%2] + + + Synchronizing from older source %1 [%2] + Synchroniseren van oudere bron %1 [%2] + + + Deleting child %1 [%2] + Verwijderen van kind %1 [%2] + + + Deleting orphan %1 [%2] + Verwijderen wees %1 [%2] + + + Changed deleted objects + Verwijderde objecten gewijzigd + + + Adding missing icon %1 + Toevoegen van ontbrekend pictogram %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Nieuwe KeePassXC database aanmaken... + + + Root + Root group + Alles + + + + NewDatabaseWizardPage + + WizardPage + Wizard pagina + + + En&cryption Settings + En&cryptie-instellingen + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Hier kun je de coderingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen. + + + Advanced Settings + Geavanceerde instellingen + + + Simple Settings + Eenvoudige instellingen + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Versleuteling instellingen + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Hier kun je de coderingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Database hoofdsleutel + + + A master key known only to you protects your database. + Een hoofdsleutel die alleen aan jou bekend is beschermt de database. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Algemene database-informatie + + + Please fill in the display name and an optional description for your new database: + Geef de weergavenaam en een optionele beschrijving voor de nieuwe database: + OpenSSHKey @@ -2918,7 +3717,7 @@ Er is een hoog risico op beschadiging. Bewaar een back-up van jouw databases. Key file magic header id invalid - Ongeldig magic header-id in sleutelbestand + Ongeldig 'magic header id' in sleutelbestand Found zero keys @@ -2998,125 +3797,30 @@ Er is een hoog risico op beschadiging. Bewaar een back-up van jouw databases. - OptionDialog + PasswordEditWidget - Dialog - Dialoog + Enter password: + Wachtwoord invoeren: - This is required for accessing your databases from ChromeIPass or PassIFox - Dit wordt vereist om toegang te krijgen tot jouw databases vanaf ChromeIPass of PassIFox + Confirm password: + Bevestig wachtwoord: - Enable KeePassHTTP server - KeePassHTTP-server activeren + Password + Wachtwoord - General - Algemeen + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Een wachtwoord is de primaire methode voor het beveiligen van een database.</p> <p>Goede wachtwoorden zijn lang en uniek. KeePassXC kan er een voor je genereren.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Toon een melding wanneer inloggegevens worden aangevraagd + Passwords do not match. + Wachtwoorden komen niet overeen. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Levert alleen de beste overeenkomsten voor een specifieke URL in plaats van alle invoer voor het hele domein. - - - &Return only best matching entries - Lever alleen de best ove&reenkomende items - - - Re&quest to unlock the database if it is locked - Verzoek om database te ontgrendelen - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Lever alleen items van hetzelfde schema (http://, https://, ftp://, …). - - - &Match URL schemes - &Vergelijk URL sche&ma's - - - Sort matching entries by &username - Sorteer items op $gebruikersnaam - - - Sort &matching entries by title - Sorteer items op &naam - - - R&emove all shared encryption keys from active database - Verwijder alle gedeelde encryptiesleutels uit de actieve database - - - Re&move all stored permissions from entries in active database - Verwijder alle opgeslagen permissies van items uit de actieve database - - - Password Generator - Wachtwoordgenerator - - - Advanced - Geavanceerd - - - Always allow &access to entries - Altijd &toegang verlenen tot items - - - Always allow &updating entries - Altijd &bewerken toestaan op items - - - Only the selected database has to be connected with a client. - Alleen de geselecteerde database hoeft verbonden te zijn. - - - Searc&h in all opened databases for matching entries - Zoek in alle geopende databases naar overeenkomende items - - - Automatically creating or updating string fields is not supported. - Het automatisch aanmaken of wijzigen van tekenreeks-velden wordt niet ondersteund. - - - &Return advanced string fields which start with "KPH: " - Lever &geavanceerde tekenreeks-velden die met "KPH: " beginnen. - - - HTTP Port: - HTTP-poort: - - - Default port: 19455 - Standaard poort: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC zal deze poort op 127.0.0.1 beluisteren - - - <b>Warning:</b> The following options can be dangerous! - <b>Waarschuwing:</b> De volgende opties kunnen gevaarlijk zijn! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP is verouderd en wordt in de toekomst verwijderd. <br>Schakel a.u.b. over naar KeePassXC-Browser! Voor hulp bij migratie, bezoek onze <a href="https://keepassxc.org/docs/keepassxc-browser-migration"> migratiehandleiding</a>.</p> - - - Cannot bind to privileged ports - Kan niet koppelen op bevoorrechte poorten - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Kan niet koppelen naar bevoorrechte poorten onder 1024! -Standaardpoort 19455 wordt gebruikt. + Generate master password + Genereer een hoofdwachtwoord @@ -3168,11 +3872,11 @@ Standaardpoort 19455 wordt gebruikt. Exclude look-alike characters - Op elkaar lijkende tekens uitsluiten + Op elkaar lijkende tekens niet gebruiken Pick characters from every group - Zorg dat het wachtwoord tekens uit iedere groep bevat + Gebruik tekens uit iedere groep &Length: @@ -3186,18 +3890,10 @@ Standaardpoort 19455 wordt gebruikt. Wordlist: Woordenlijst: - - Word Count: - Aantal woorden: - Word Separator: Scheidingsteken: - - Generate - Genereren - Copy Kopiëren @@ -3210,10 +3906,6 @@ Standaardpoort 19455 wordt gebruikt. Close Sluiten - - Apply - Toepassen - Entropy: %1 bit Entropie: %1 bit @@ -3242,6 +3934,171 @@ Standaardpoort 19455 wordt gebruikt. Password quality Uitstekend + + ExtendedASCII + Uitgebreid ASCII + + + Switch to advanced mode + Schakel over naar de geavanceerde modus + + + Advanced + Geavanceerd + + + Upper Case Letters A to F + Hoofdletters A tot F + + + A-Z + A-Z + + + Lower Case Letters A to F + Kleine letters A tot F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Haakjes + + + {[( + {[( + + + Punctuation + Leestekens + + + .,:; + .,:; + + + Quotes + Quotes + + + " ' + " ' + + + Math + Wiskunde + + + <*+!?= + <*+!? = + + + Dashes + Streepjes + + + \_|-/ + \_|-/ + + + Logograms + Logogrammen + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Schakel over naar de simpele modus + + + Simple + Eenvoudig + + + Character set to exclude from generated password + Tekenset die niet gebruikt mag worden in het gegenereerde wachtwoord + + + Do not include: + Niet gebruiken: + + + Add non-hex letters to "do not include" list + Voeg niet-hex karakters toe aan de "niet gebruiken" lijst + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Niet te gebruiken karakters: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Aantal woorden: + + + Regenerate + Regenereren + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Selecteer + + + + QMessageBox + + Overwrite + Overschrijven + + + Delete + Verwijderen + + + Move + Verplaatsen + + + Empty + Leeg + + + Remove + Verwijderen + + + Skip + Overslaan + + + Disable + Uitschakelen + + + Merge + Samenvoegen + QObject @@ -3261,34 +4118,18 @@ Standaardpoort 19455 wordt gebruikt. Cannot decrypt message Kan het bericht niet ontcijferen - - Timeout or cannot connect to KeePassXC - Timeout of geen verbinding met KeePassXC - Action cancelled or denied Actie afgebroken of geweigerd - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Kan bericht niet versleutelen of openbare sleutel niet gevonden. Is native messaging geactiveerd in KeePassXC? - KeePassXC association failed, try again KeePassXC-koppeling is mislukt, probeer het opnieuw - - Key change was not successful - Sleuteluitwisseling is mislukt - Encryption key is not recognized De versleutelingssleutel is niet herkend - - No saved databases found - Geen opgeslagen databases gevonden - Incorrect action Onjuiste actie @@ -3363,7 +4204,7 @@ Standaardpoort 19455 wordt gebruikt. Copy an entry's password to the clipboard. - Gebruikerswachtwoord naar het klembord kopiëren. + Item's wachtwoord naar het klembord kopiëren. Path of the entry to clip. @@ -3380,7 +4221,7 @@ Standaardpoort 19455 wordt gebruikt. Title for the entry. - Naam voor deze invoer. + Naam voor deze entry. title @@ -3414,10 +4255,6 @@ Standaardpoort 19455 wordt gebruikt. Insert password to unlock %1: Geef het wachtwoord voor %1: - - Failed to load key file %1 : %2 - Laden sleutelbestand mislukt %1: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3483,7 +4320,7 @@ Beschikbare opdrachten: Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - Namen van de weer te geven kenmerken. Deze optie kan meer dan eens worden opgegeven, waarbij elk kenmerk op een regel wordt getoond in de opgegeven volgorde. Als er geen kenmerken worden opgegeven, wordt een samenvatting van de standaardkenmerken gegeven. + Namen van de te tonen kenmerken. Deze optie kan meer dan eens worden opgegeven, waarbij elk kenmerk op een regel wordt getoond in de opgegeven volgorde. Als er geen kenmerken worden opgegeven, wordt een samenvatting van de standaardkenmerken gegeven. attribute @@ -3501,12 +4338,6 @@ Beschikbare opdrachten: error reading from device fout bij het lezen van apparaat - - file empty ! - - leeg bestand! - - malformed string beschadigde tekst @@ -3543,17 +4374,13 @@ Beschikbare opdrachten: Created Aangemaakt - - Legacy Browser Integration - Verouderde browserintegratie - Browser Integration Browserintegratie YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] Test - Resultaat - Slot %2 - %3 + YubiKey[%1] challenge/response - slot %2 - %3 Press @@ -3575,10 +4402,6 @@ Beschikbare opdrachten: Word count for the diceware passphrase. Aantal woorden voor de Diceware wachtwoordzin. - - count - aantal - Wordlist for the diceware generator. [Default: EFF English] @@ -3590,28 +4413,445 @@ Beschikbare opdrachten: Genereer een willekeurig wachtwoord - Length of the generated password. - Lengte van het gegenereerde wachtwoord. + Invalid value for password length %1. + Ongeldige waarde voor wachtwoordlengte %1. - Use lowercase characters in the generated password. - Gebruik kleine letters in het gegenereerde wachtwoord + Could not create entry with path %1. + Kan geen item maken met pad %1. - Use uppercase characters in the generated password. - Gebruik hoofdletters in het gegenereerde wachtwoord + Enter password for new entry: + Voer wachtwoord in voor nieuw item: - Use numbers in the generated password. - Gebruik cijfers in het gegenereerde wachtwoord + Writing the database failed %1. + Het schrijven van de database is mislukt %1. - Use special characters in the generated password. - Gebruik speciale karakters in het gegenereerde wachtwoord. + Successfully added entry %1. + Item %1 toegevoegd. - Use extended ASCII in the generated password. - Gebruik uitgebreide ASCII tekens in het gegenereerde wachtwoord. + Copy the current TOTP to the clipboard. + Kopieer de huidige TOTP naar het klembord. + + + Invalid timeout value %1. + Ongeldige time-out waarde %1. + + + Entry %1 not found. + Item %1 niet gevonden. + + + Entry with path %1 has no TOTP set up. + Item met pad %1 heeft geen TOTP instellingen. + + + Entry's current TOTP copied to the clipboard! + De huidige TOTP naar het klembord gekopieerd! + + + Entry's password copied to the clipboard! + Het wachtwoord is naar het klembord gekopieerd! + + + Clearing the clipboard in %1 second(s)... + Het klemboard wordt over %1 seconde(n) gewist...Het klemboard wordt over %1 seconde(n) gewist... + + + Clipboard cleared! + Klembord gewist! + + + Silence password prompt and other secondary outputs. + Verberg wachtwoord prompt en andere bijkomstige output. + + + count + CLI parameter + aantal + + + Invalid value for password length: %1 + Ongeldige waarde voor wachtwoordlengte %1. + + + Could not find entry with path %1. + Kan item met pad %1 niet vinden. + + + Not changing any field for entry %1. + Geen enkel veld in item %1 is gewijzigd. + + + Enter new password for entry: + Voer nieuw wachtwoord in voor item: + + + Writing the database failed: %1 + Het schrijven van de database is mislukt: %1 + + + Successfully edited entry %1. + Item %1 is gewijzigd. + + + Length %1 + Lengte %1 + + + Entropy %1 + Entropie %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Multi-word extra bits %1 + + + Type: Bruteforce + Type: bruut geweld + + + Type: Dictionary + Type: woordenboek + + + Type: Dict+Leet + Type: woordenboek + Leet + + + Type: User Words + Type: Gebruikerwoorden + + + Type: User+Leet + Type: Gebruikerwoorden + Leet + + + Type: Repeated + Type: Herhaald + + + Type: Sequence + Type: Reeks + + + Type: Spatial + Type: Ruimtelijk + + + Type: Date + Type: Datum + + + Type: Bruteforce(Rep) + Type: bruut geweld (herhalend) + + + Type: Dictionary(Rep) + Type: woordenboek (herhalend) + + + Type: Dict+Leet(Rep) + Type: woordenboek+Leet (herhalend) + + + Type: User Words(Rep) + Type: Gebruikerwoorden (herhalend) + + + Type: User+Leet(Rep) + Type: Gebruikerwoorden + Leet (herhalend) + + + Type: Repeated(Rep) + Type: herhaald (herhalend) + + + Type: Sequence(Rep) + Type: Reeks (herhalend) + + + Type: Spatial(Rep) + Type: Ruimtelijk (herhalend) + + + Type: Date(Rep) + Type: Datum (herhalend) + + + Type: Unknown%1 + Type: Onbekend %1 + + + Entropy %1 (%2) + Entropie %1 (2 %) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Wachtwoordlengte (%1) ! = som van de lengte van de onderdelen (%2) *** + + + Failed to load key file %1: %2 + Er ging iets fout bij het laden van sleutelbestand %1: %2 + + + File %1 does not exist. + Bestand %1 bestaat niet. + + + Unable to open file %1. + Kan bestand %1 niet openen. + + + Error while reading the database: +%1 + Fout bij het lezen van de database: +%1 + + + Error while parsing the database: +%1 + Fout bij het ontleden van de database: +%1 + + + Length of the generated password + Lengte van het gegenereerde wachtwoord + + + Use lowercase characters + Gebruik kleine letters + + + Use uppercase characters + Gebruik hoofdletters + + + Use numbers. + Getallen gebruiken. + + + Use special characters + Speciale tekens gebruiken + + + Use extended ASCII + Uitgebreide ASCII tekens gebruikt + + + Exclude character set + Niet te gebruiken karakterset + + + chars + karakters + + + Exclude similar looking characters + Op elkaar lijkende tekens niet gebruiken + + + Include characters from every selected group + Neem tekens uit iedere geslecteerde groep + + + Recursively list the elements of the group. + Recursief de elementen van de groep opsommen + + + Cannot find group %1. + Kan groep %1 niet vinden. + + + Error reading merge file: +%1 + Er ging iets fout bij het lezen van het samenvoegbestand: +%1 + + + Unable to save database to file : %1 + Kan de database niet bewaren naar bestand: %1 + + + Unable to save database to file: %1 + Kan de database niet bewaren naar bestand: %1 + + + Successfully recycled entry %1. + Item %1 is hergebruikt. + + + Successfully deleted entry %1. + Item %1 is verwijderd. + + + Show the entry's current TOTP. + Toon de huidige TOTP van het item. + + + ERROR: unknown attribute %1. + FOUT: onbekend kenmerk %1. + + + No program defined for clipboard manipulation + Geen programma ingesteld voor klembord manipulatie + + + Unable to start program %1 + Kon programma niet starten %1 + + + file empty + leeg bestand + + + %1: (row, col) %2,%3 + %1: (rij, col) 2%,3% + + + AES: 256-bit + AES: 256-bits + + + Twofish: 256-bit + Twofish: 256-bits + + + ChaCha20: 256-bit + ChaCha20: 256-bits + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – aanbevolen) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Ongeldige instellingen + + + Invalid Key + TOTP + Ongeldige sleutel + + + Message encryption failed. + Berichtcodering is mislukt. + + + No groups found + Geen groepen gevonden + + + Create a new database. + Nieuwe database aanmaken + + + File %1 already exists. + Bestand %1 bestaat al. + + + Loading the key file failed + Er ging iets fout bij het laden van het sleutelbestand + + + No key is set. Aborting database creation. + Geen sleutel ingesteld. Aanmaken van de database is gestopt. + + + Failed to save the database: %1. + Opslaan van de database is mislukt: %1 + + + Successfully created new database. + Nieuwe database is gemaakt + + + Insert password to encrypt database (Press enter to leave blank): + Voer het wachtwoord in voor het versleutelen van de database (druk op enter om het te laat leeg): + + + Creating KeyFile %1 failed: %2 + Creëren van sleutelbestand %1 is mislukt: %2 + + + Loading KeyFile %1 failed: %2 + Laden van sleutelbestand %1 is mislukt: %2 + + + Remove an entry from the database. + Een item uit de database verwijderen. + + + Path of the entry to remove. + Pad van het te verwijderen item. + + + Existing single-instance lock file is invalid. Launching new instance. + Het bestaande single-instance vergrendelingsbestand is niet geldig. Een nieuwe instantie wordt gestart. + + + The lock file could not be created. Single-instance mode disabled. + Het vergrendelingsbestand kon niet worden aangemaakt. Single-instance mode uitgeschakeld. + + + KeePassXC - cross-platform password manager + KeepassXC - multi-platform wachtwoordbeheerder + + + filenames of the password databases to open (*.kdbx) + bestandsnamen van de te openen wachtwoorddatabases (*.kdbx) + + + path to a custom config file + pad naar een configuratiebestand + + + key file of the database + sleutelbestand van de database + + + read password of the database from stdin + lees wachtwoord van de database uit stdin + + + Parent window handle + Parent window handle + + + Another instance of KeePassXC is already running. + Een andere instantie van KeePassXC is reeds gestart. + + + Fatal error while testing the cryptographic functions. + Fatale fout bij het testen van de cryptografische functies. + + + KeePassXC - Error + KeePassXC - Fout + + + Database password: + Databasewachtwoord: + + + Cannot create new group + @@ -3649,11 +4889,97 @@ Beschikbare opdrachten: - SearchWidget + SSHAgent - Search... - Zoeken… + Agent connection failed. + Agent verbinding mislukt. + + Agent protocol error. + Agent-protocolfout. + + + No agent running, cannot add identity. + Geen agent wordt uitgevoerd, kan geen identiteit toevoegen. + + + No agent running, cannot remove identity. + Geen agent wordt uitgevoerd, niet het verwijderen van identiteit. + + + Agent refused this identity. Possible reasons include: + Agent weigerde deze identiteit. Mogelijke redenen zijn onder andere: + + + The key has already been added. + De sleutel was al toegevoegd. + + + Restricted lifetime is not supported by the agent (check options). + Beperkte levensduur wordt niet ondersteund door de agent (selectievakje opties). + + + A confirmation request is not supported by the agent (check options). + Een aanvraag voor transactiebevestiging wordt niet ondersteund door de agent (selectievakje opties). + + + + SearchHelpWidget + + Search Help + Zoek hulp + + + Search terms are as follows: [modifiers][field:]["]term["] + Zoektermen zijn als volgt: [parameters][veld:]["]term["] + + + Every search term must match (ie, logical AND) + Elke zoekterm moet overeenkomen (een logisch EN) + + + Modifiers + Modifiers + + + exclude term from results + zoekterm uit resultaten weglaten + + + match term exactly + zoekterm moet exact overeenkomen + + + use regex in term + regex gebruiken in zoekopdracht + + + Fields + Velden + + + Term Wildcards + Zoekterm jokertekens + + + match anything + elke overeenkomst + + + match one + één overeenkomst + + + logical OR + logische OF + + + Examples + Voorbeelden + + + + SearchWidget Search Zoeken @@ -3662,315 +4988,332 @@ Beschikbare opdrachten: Clear Wissen - - Case Sensitive - Hoofdlettergevoelig - Limit search to selected group Beperk het zoeken tot de geselecteerde groep + + Search Help + Zoek hulp + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Zoeken (%1)... + + + Case sensitive + Hoofdlettergevoelig + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Nieuw verzoek voor sleutelkoppeling + Active + Actieve - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Je hebt een koppelingsverzoek ontvangen voor bovenstaande sleutel. -Als je de sleutel toegang tot jouw KeePassXC-database wil geven, -geef het dan een unieke naam ter identificatie en accepteer het verzoek. + Allow export + Exporteren toestaan - KeePassXC: Overwrite existing key? - KeePassXC: Bestaande sleutel overschrijven? + Allow import + Importeren toestaan - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Een gedeelde encryptiesleutel met de naam "%1" bestaat al. -Wil je deze overschrijven? + Own certificate + Eigen certificaat - KeePassXC: Update Entry - KeePassXC: Item bijwerken + Fingerprint: + Vingerafdruk - Do you want to update the information in %1 - %2? - Wil je de gegevens in %1 - %2 bijwerken? + Certificate: + Certificaat: - KeePassXC: Database locked! - KeePassXC: Database vergrendeld! + Signer + Ondertekenaar - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - De actieve database is vergrendeld! -Ontgrendel de geselecteerde database of kies een ontgrendelde database. + Key: + Sleutel: - KeePassXC: Removed keys from database - KeePassXC: Sleutels uit database verwijderd + Generate + Genereren + + + Import + Importeren + + + Export + Exporteren + + + Imported certificates + Geïmporteerde certificaten + + + Trust + Vertrouwen + + + Ask + Vraag + + + Untrust + Niet vertrouwen + + + Remove + Verwijderen + + + Path + Pad + + + Status + Status + + + Fingerprint + Vingerafdruk + + + Certificate + Certificaat + + + Trusted + Vertrouwd + + + Untrusted + Niet-vertrouwd + + + Unknown + Onbekend + + + key.share + Filetype for KeeShare key + Key.share + + + KeeShare key file + KeeShare sleutelbestand + + + All files + Alle bestanden + + + Select path + Pad selecteren + + + Exporting changed certificate + Gewijzigd certificaat exporteren + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Het geëxporteerde certificaat is niet hetzelfde als die in gebruik is. Wilt u het huidige certificaat exporteren? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Importeren vanuit de container zonder handtekening + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + De bron van de gedeelde container kan niet gecontroleerd worden omdat het niet is ondertekend. Wil je echt uit %1 importeren? + + + Import from container with certificate + Importeren uit de container met certificaat + + + Not this time + Deze keer niet + + + Never + Nooit + + + Always + Altijd + + + Just this time + Alleen deze keer + + + Import from %1 failed (%2) + Importeren van %1 is mislukt (%2) + + + Import from %1 successful (%2) + Importeren van %1 is gelukt (%2) + + + Imported from %1 + Geïmporteerd van %1 + + + Signed share container are not supported - import prevented + Ondertekende deel-containers worden niet ondersteund - import is voorkomen + + + File is not readable + Bestand is niet leesbaar + + + Invalid sharing container + Ongeldige deel-container + + + Untrusted import prevented + Niet vertrouwde import voorkomen + + + Successful signed import + Ondertekende import is voltooid + + + Unexpected error + Onverwachte fout + + + Unsigned share container are not supported - import prevented + Niet ondertekende deel-container worden niet ondersteund - import is voorkomen + + + Successful unsigned import + Niet ondertekende import voltooid + + + File does not exist + Bestand bestaat niet + + + Unknown share container type + Type van deel-container is onbekend + + + Overwriting signed share container is not supported - export prevented + Het overschrijven van een ondertekende deel-container wordt niet ondersteund - export is voorkomen + + + Could not write export container (%1) + Kan geen export container schrijven (%1) + + + Overwriting unsigned share container is not supported - export prevented + Overschrijven van een niet-ondertekende deel-container wordt niet ondersteund - export is voorkomen + + + Could not write export container + Kan niet schrijven naar export container + + + Unexpected export error occurred + Onverwachte fout bij het exporteren + + + Export to %1 failed (%2) + Exporteren naar %1 is mislukt (%2) + + + Export to %1 successful (%2) + Exporteren naar %1 gelukt (%2) + + + Export to %1 + Exporteer naar %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Wilt u %1 met de vingerafdruk van %2 vanaf %3 vertrouwen? {1 ?} {2 ?}  + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Tijdgebonden wachtwoord + + + 000000 + 000000 + + + Copy + Kopiëren - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Encryptie-sleutel verwijderd uit KeePassX/Http-instellingen.%n encryptie-sleutels verwijderd uit KeePassX/Http-instellingen. - - - KeePassXC: No keys found - KeePassXC: Geen sleutels gevonden - - - No shared encryption-keys found in KeePassHttp Settings. - Geen gedeelde encryptiesleutels gevonden in de KeePassHttp-instellingen. - - - KeePassXC: Settings not available! - KeePassXC: Instellingen niet beschikbaar! - - - The active database does not contain an entry of KeePassHttp Settings. - De actieve database bevat geen KeePassHttp-instellingen. - - - Removing stored permissions... - Opgeslagen permissies verwijderen… - - - Abort - Afbreken - - - KeePassXC: Removed permissions - KeePassXC: Permissies verwijderd - - - Successfully removed permissions from %n entries. - Permissies verwijderd uit %n item.Permissies verwijderd uit %n items. - - - KeePassXC: No entry with permissions found! - KeePassXC: Geen item met permissies gevonden! - - - The active database does not contain an entry with permissions. - De actieve database bevat geen items met permissies. + Expires in <b>%n</b> second(s) + Verloopt in <b>%n</b> seconde(n)Verloopt in <b>%n</b> seconde(n) - SettingsWidget + TotpExportSettingsDialog - Application Settings - Programma-instellingen + Copy + Kopiëren - General - Algemeen + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + Let op: deze TOTP-instellingen zijn op maat en werken mogelijk niet met andere authenticators. - Security - Beveiliging + There was an error creating the QR code. + Er was een fout bij het maken van de QR-code. - Access error for config file %1 - Geen toegang tot configuratiebestand %1 + Closing in %1 seconds. + Sluiten in %1 seconden. - SettingsWidgetGeneral - - Basic Settings - Basisinstellingen - - - Start only a single instance of KeePassXC - Hoogstens een enkele instantie van KeePassXC starten - - - Remember last databases - Laatstgebruikte databases onthouden - - - Remember last key files and security dongles - Laatstgebruikte sleutelbestanden en beveiligingsdongles onthouden - - - Load previous databases on startup - Laatstgebruikte databases openen bij het opstarten - - - Automatically save on exit - Automatisch opslaan bij afsluiten - - - Automatically save after every change - Automatisch opslaan na iedere wijziging - - - Automatically reload the database when modified externally - Database automatisch opnieuw laden als deze van buitenaf is gewijzigd - - - Minimize when copying to clipboard - Minimaliseer bij kopiëren naar klembord - - - Minimize window at application startup - Scherm minimaliseren bij het opstarten - - - Use group icon on entry creation - Gebruik groepsicoon voor nieuwe items - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Markeer de database niet als gewijzigd voor non-data wijzigingen (bijv. uitgebreide groepen) - - - Hide the Details view - Detailweergave verbergen - - - Show a system tray icon - Icoon in het systeemvak weergeven - - - Hide window to system tray when minimized - Minimaliseren naar systeemvak - - - Hide window to system tray instead of app exit - Sluiten naar systeemvak in plaats van volledig afsluiten - - - Dark system tray icon - Donker systeemvak-icoon - - - Language - Taal - - - Auto-Type - Auto-type - - - Use entry title to match windows for global Auto-Type - Gebruik naam van item als vensternaam voor Auto-type - - - Use entry URL to match windows for global Auto-Type - Laat URL overeenkomen met item bij Auto-type - - - Always ask before performing Auto-Type - Altijd vragen voor toepassen Auto-type - - - Global Auto-Type shortcut - Globale sneltoets voor Auto-type - - - Auto-Type delay - Auto-typevertraging - - - ms - Milliseconds - ms - - - Startup - Opstarten - - - File Management - Bestandsbeheer - - - Safely save database files (may be incompatible with Dropbox, etc) - Veilig opslaan van databasebestanden (mogelijk incompatibel met Dropbox, etc.) - - - Backup database file before saving - Back-up databasebestand voor het opslaan - - - Entry Management - Itembeheer - - - General - Algemeen - - - - SettingsWidgetSecurity - - Timeouts - Time-outs - - - Clear clipboard after - Klembord leegmaken na - - - sec - Seconds - sec - - - Lock databases after inactivity of - Databases vergrendelen na inactiviteit van - - - Convenience - Gemak - - - Lock databases when session is locked or lid is closed - Databases vergrendelen als de gebruikerssessie wordt vergrendeld of bij het sluiten van de deksel - - - Lock databases after minimizing the window - Databases vergrendelen bij het minimaliseren van het venster - - - Don't require password repeat when it is visible - Geen herhaling van wachtwoord vragen als deze zichtbaar is - - - Show passwords in cleartext by default - Wachtwoorden standaard weergeven - - - Hide passwords in the preview panel - Wachtwoorden verbergen in het informatiepaneel - - - Hide entry notes by default - Notities standaard verbergen - - - Privacy - Privacy - - - Use Google as fallback for downloading website icons - Gebruik Google om eventueel website-iconen te downloaden - - - Re-lock previously locked database after performing Auto-Type - Vergrendelde database na Auto-type weer vergrendelen. - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP TOTP-instellen @@ -3992,59 +5335,84 @@ Ontgrendel de geselecteerde database of kies een ontgrendelde database.Aangepaste instellingen gebruiken - Note: Change these settings only if you know what you are doing. - Let op: wijzig deze instellingen alleen als je weet wat je doet. + Custom Settings + Aangepaste instellingen Time step: Tijdsinterval: - 8 digits - 8 cijfers - - - 6 digits - 6 cijfers + sec + Seconds + sec Code size: Grootte van de code: - sec - Seconds - sec + 6 digits + 6 cijfers + + + 7 digits + 7 cijfers + + + 8 digits + 8 cijfers - TotpDialog + UpdateCheckDialog - Timed Password - Tijdgebonden wachtwoord + Checking for updates + Controleren op updates - 000000 - 000000 + Checking for updates... + Controleren op updates... - Copy - Kopiëren + Close + Sluiten - Expires in - Verloopt over + Update Error! + Update fout! - seconds - seconden + An error occurred in retrieving update information. + Er is iets fout gegaan bij het ophalen van update informatie. - - - UnlockDatabaseWidget - Unlock database - Database ontgrendelen + Please try again later. + Probeer het later nog eens. + + + Software Update + Software-update + + + A new version of KeePassXC is available! + Er is een nieuwe versie van KeePassXC! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 is nu beschikbaar — jij hebt %2. + + + Download it at keepassxc.org + Download het op keepassxc.org + + + You're up-to-date! + Je bent up-to-date! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 is de nieuwste versie @@ -4079,42 +5447,26 @@ Ontgrendel de geselecteerde database of kies een ontgrendelde database. - main + YubiKeyEditWidget - Remove an entry from the database. - Een item uit de database verwijderen. + Refresh + Vernieuwen - Path of the database. - Pad naar de database. + YubiKey Challenge-Response + YubiKey challenge/response: - Path of the entry to remove. - Pad van het te verwijderen item. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Als je zelf een <a href="https://www.yubico.com/"> YubiKey</a> hebt, kun je deze gebruiken voor extra beveiliging.</p> <p>De YubiKey vereist dat een van zijn "slots" wordt geprogrammeerd als <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/"> HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager - KeepassXC - multi-platform wachtwoordbeheerder + No YubiKey detected, please ensure it's plugged in. + Geen YubiKey gedetecteerd, plug deze a.u.b. in. - filenames of the password databases to open (*.kdbx) - bestandsnamen van de te openen wachtwoorddatabases (*.kdbx) - - - path to a custom config file - pad naar een configuratiebestand - - - key file of the database - sleutelbestand van de database - - - read password of the database from stdin - lees wachtwoord van de database uit stdin - - - Parent window handle - Parent window handle + No YubiKey inserted. + Geen YubiKey ingeplugd. \ No newline at end of file diff --git a/share/translations/keepassx_pl.ts b/share/translations/keepassx_pl.ts index 49a1e633b..ed32eff41 100644 --- a/share/translations/keepassx_pl.ts +++ b/share/translations/keepassx_pl.ts @@ -31,42 +31,12 @@ Include the following information whenever you report a bug: - Uwzględnij następujące informacje, gdy zgłaszasz błąd: + Przy zgłaszaniu błędów uwzględnij następujące informacje: Copy to clipboard Skopiuj do schowka - - Version %1 - - Wersja %1 - - - - Revision: %1 - Rewizja: %1 - - - Distribution: %1 - Dystrybucja: %1 - - - Libraries: - Biblioteki: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - System operacyjny: %1 -Architektura CPU: %2 -Jądro: %3 %4 - - - Enabled extensions: - Włączone rozszerzenia: - Project Maintainers: Opiekunowie projektu: @@ -75,37 +45,6 @@ Jądro: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Specjalne podziękowania od zespołu KeePassXC dla debfx za stworzenie oryginalnego KeePassX. - - Build Type: %1 - - Typ kompilacji: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - Potwierdź dostęp KeePassXC HTTP - - - Remember this decision - Zapamiętaj tę decyzję - - - Allow - Zezwól - - - Deny - Odmów - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 zażądał dostępu do haseł dla następujących element(ów). -Wybierz, czy chcesz zezwolić na dostęp. - AgentSettingsWidget @@ -113,36 +52,307 @@ Wybierz, czy chcesz zezwolić na dostęp. Enable SSH Agent (requires restart) Włącz agenta SSH (wymaga ponownego uruchomienia) + + Use OpenSSH for Windows instead of Pageant + Użyj OpenSSH dla Windows zamiast Pageanta + + + + ApplicationSettingsWidget + + Application Settings + Ustawienia aplikacji + + + General + Ogólne + + + Security + Bezpieczeństwo + + + Access error for config file %1 + Błąd dostępu pliku konfiguracyjnego %1 + + + Icon only + Tylko ikona + + + Text only + Tylko tekst + + + Text beside icon + Tekst obok ikony + + + Text under icon + Tekst pod ikoną + + + Follow style + Utrzymaj styl + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Ustawienia podstawowe + + + Startup + Uruchamianie + + + Start only a single instance of KeePassXC + Uruchom tylko jedną instancję KeePassXC + + + Remember last databases + Pamiętaj ostatnią bazę danych + + + Remember last key files and security dongles + Zapamiętaj ostatnie pliki klucze i klucze sprzętowe + + + Load previous databases on startup + Załaduj poprzednie bazy danych podczas uruchomienia + + + Minimize window at application startup + Minimalizuj okno podczas uruchomienia aplikacji + + + File Management + Zarządzanie plikami + + + Safely save database files (may be incompatible with Dropbox, etc) + Bezpiecznie zapisuj pliki bazy danych (może być niezgodne z Dropbox itp.) + + + Backup database file before saving + Utwórz kopię zapasową pliku bazy danych przed zapisaniem + + + Automatically save after every change + Automatycznie zapisz po każdej zmianie + + + Automatically save on exit + Automatycznie zapisz przy wyjściu + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Nie zaznaczaj bazy danych jako zmodyfikowanej dla zmian innych niż dane (np. rozwijanie grup) + + + Automatically reload the database when modified externally + Automatycznie przeładuj bazę danych, gdy zostanie zmodyfikowana zewnętrznie + + + Entry Management + Zarządzanie wpisami + + + Use group icon on entry creation + Użyj ikony grupy podczas tworzenia wpisu + + + Minimize when copying to clipboard + Zminimalizuj po skopiowaniu do schowka + + + Hide the entry preview panel + Ukryj panel podglądu wpisu + + + General + Ogólne + + + Hide toolbar (icons) + Ukryj pasek narzędzi (ikony) + + + Minimize instead of app exit + Zminimalizuj zamiast wyjść z aplikacji + + + Show a system tray icon + Pokaż ikonę w zasobniku systemowym + + + Dark system tray icon + Ciemna ikona w zasobniku systemowym + + + Hide window to system tray when minimized + Schowaj okno do zasobnika podczas minimalizacji + + + Language + Język + + + Auto-Type + Autowpisywanie + + + Use entry title to match windows for global Auto-Type + Użyj tytułu wpisy, aby dopasować okna dla globalnego autowpisywania + + + Use entry URL to match windows for global Auto-Type + Użyj adresu URL wpisu, aby dopasować okna dla globalnego autowpisywania + + + Always ask before performing Auto-Type + Zawsze pytaj przed wykonaniem autowpisywania + + + Global Auto-Type shortcut + Globalny skrót autowpisywania + + + Auto-Type typing delay + Opóźnienie pisania autowpisywania + + + ms + Milliseconds + ms + + + Auto-Type start delay + Opóźnienie rozpoczęcia autowpisywania + + + Check for updates at application startup + Sprawdź aktualizacje podczas uruchomienia aplikacji + + + Include pre-releases when checking for updates + Uwzględnij wstępne wydania podczas sprawdzania aktualizacji + + + Movable toolbar + Ruchomy pasek narzędzi + + + Button style + Styl przycisku + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Limity czasowe + + + Clear clipboard after + Wyczyść schowek po + + + sec + Seconds + s + + + Lock databases after inactivity of + Zablokuj bazę danych po nieaktywności + + + min + min + + + Forget TouchID after inactivity of + Zapomnij TouchID po nieaktywności + + + Convenience + Poręczność + + + Lock databases when session is locked or lid is closed + Zablokuj bazy danych, gdy sesja jest zablokowana albo pokrywa jest zamknięta + + + Forget TouchID when session is locked or lid is closed + Zapomnij TouchID, gdy sesja jest zablokowana lub pokrywa jest zamknięta + + + Lock databases after minimizing the window + Zablokuj bazę danych po zminimalizowaniu okna + + + Re-lock previously locked database after performing Auto-Type + Ponownie zablokuj poprzednio zablokowaną bazę danych po wykonaniu autowpisywania + + + Don't require password repeat when it is visible + Nie wymagaj powtarzania hasła, gdy jest widoczne + + + Don't hide passwords when editing them + Nie ukrywaj haseł podczas ich edycji + + + Don't use placeholder for empty password fields + Nie używaj symboli zastępczych w pustych polach hasła + + + Hide passwords in the entry preview panel + Ukryj hasła w panelu podglądu wpisu + + + Hide entry notes by default + Domyślnie ukrywaj wpisy notatek + + + Privacy + Prywatność + + + Use DuckDuckGo as fallback for downloading website icons + Użyj DuckDuckGo jako zastępstwo dla pobierania ikon witryn + AutoType Couldn't find an entry that matches the window title: - Nie mogę znaleźć wpisu, który by pasował do tytułu okna: + Nie znaleziono wpisu pasującego do nazwy okna: Auto-Type - KeePassXC - Auto-uzupełnianie - KeePassXC + Autowpisywanie - KeePassXC Auto-Type - Auto-uzupełnianie + Autowpisywanie The Syntax of your Auto-Type statement is incorrect! - Składnia instrukcji auto-uzupełniania jest niepoprawna! + Składnia instrukcji autowpisywania jest niepoprawna! This Auto-Type command contains a very long delay. Do you really want to proceed? - Polecenie auto-uzupełniania zawiera bardzo długie opóźnienie. Czy chcesz kontynuować? + Polecenie autowpisywania zawiera bardzo długie opóźnienie. Czy chcesz kontynuować? This Auto-Type command contains very slow key presses. Do you really want to proceed? - Polecenie auto-uzupełniania zawiera bardzo wolne wciśnięcia klawiszy. Czy chcesz kontynuować? + Polecenie autowpisywania zawiera bardzo wolne wciśnięcia klawiszy. Czy chcesz kontynuować? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - Polecenie auto-uzupełniania zawiera argumenty, które powtarzają się bardzo często. Czy chcesz kontynuować? + Polecenie autowpisywania zawiera argumenty, które powtarzają się bardzo często. Czy chcesz kontynuować? @@ -183,11 +393,11 @@ Wybierz, czy chcesz zezwolić na dostęp. AutoTypeSelectDialog Auto-Type - KeePassXC - Auto-uzupełnianie - KeePassXC + Autowpisywanie - KeePassXC Select entry to Auto-Type: - Wybierz wpis do auto-uzupełniania: + Wybierz wpis do autowpisywania: @@ -215,6 +425,27 @@ Please select whether you want to allow access. Wybierz, czy chcesz zezwolić na dostęp. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + Zapisz wpis KeePassXC-Browser + + + Ok + OK + + + Cancel + Anuluj + + + You have multiple databases open. +Please select the correct database for saving credentials. + Masz wiele otwartych baz danych. +Wybierz właściwą bazę danych do zapisania danych uwierzytelniających. + + BrowserOptionDialog @@ -223,11 +454,11 @@ Wybierz, czy chcesz zezwolić na dostęp. This is required for accessing your databases with KeePassXC-Browser - Wymagane jest to w celu uzyskania dostępu do baz danych za pomocą KeePassXC-Browser + Wymagane jest to aby uzyskać dostęp do baz danych za pomocą KeePassXC-Browser Enable KeepassXC browser integration - Włącz integrację KeepassXC z przeglądarką + Włącz integrację KeePassXC z przeglądarką General @@ -272,7 +503,7 @@ Wybierz, czy chcesz zezwolić na dostęp. Only returns the best matches for a specific URL instead of all entries for the whole domain. - Zwracaj tylko najlepsze dopasowania wpisów dla URL zamiast wszystkich wpisów całej domeny. + Zwracaj tylko najlepsze dopasowania wpisów dla URL zamiast wszystkich wpisów domeny. &Return only best-matching credentials @@ -288,14 +519,6 @@ Wybierz, czy chcesz zezwolić na dostęp. Credentials mean login data requested via browser extension Sortuj dopasowane poświadczenia według &użytkownika - - &Disconnect all browsers - &Odłącz wszystkie przeglądarki - - - Forget all remembered &permissions - Zapomnij wszystkie zapamiętane &uprawnienia - Advanced Zaawansowane @@ -329,11 +552,11 @@ Wybierz, czy chcesz zezwolić na dostęp. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Aktualizuje automatycznie ścieżkę binarną KeePassXC albo keepassxc-proxy do skryptów Native Messaging podczas uruchamiania. + Aktualizuje automatycznie ścieżkę binarną KeePassXC albo keepassxc-proxy do skryptów Native Messaging podczas uruchomienia. Update &native messaging manifest files at startup - Aktualizuj pliki manifestu &Native Messaging podczas uruchamiania + Aktualizuj pliki manifestu &Native Messaging podczas uruchomienia Support a proxy application between KeePassXC and browser extension. @@ -341,11 +564,11 @@ Wybierz, czy chcesz zezwolić na dostęp. Use a &proxy application between KeePassXC and browser extension - Używaj aplikacj &proxy pomiędzy KeePassXC a rozszerzeniem przeglądarki + Używaj aplikację &proxy pomiędzy KeePassXC a rozszerzeniem przeglądarki Use a custom proxy location if you installed a proxy manually. - Używaj niestandardowej lokalizacji proxy, jeżeli zainstalowałeś proxy ręcznie. + Używaj niestandardowej lokalizacji proxy, jeżeli została zainstalowana ręcznie. Use a &custom proxy location @@ -361,21 +584,42 @@ Wybierz, czy chcesz zezwolić na dostęp. <b>Warning:</b> The following options can be dangerous! <b>Ostrzeżenie:</b> Poniższe opcje mogą być niebezpieczne! - - Executable Files (*.exe);;All Files (*.*) - Pliki wykonywalne (*.exe);;Wszystkie pliki (*.*) - - - Executable Files (*) - Pliki wykonywalne (*) - Select custom proxy location Wybierz niestandardową lokalizację proxy - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Przykro nam, ale KeePassXC-Browser obecnie nie obsługuje wydań Snap. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Ostrzeżenie</b>, aplikacja keepassxc-proxy nie została znaleziona!<br />Proszę sprawdzić katalog instalacyjny KeePassXC albo potwierdzić niestandardową ścieżkę w opcjach zaawansowanych.<br />Integracja z przeglądarką NIE BĘDZIE DZIAŁAĆ bez aplikacji proxy.<br />Oczekiwana ścieżka: + + + Executable Files + Pliki wykonywalne + + + All Files + Wszystkie pliki + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Nie pytaj o uprawnienie dla HTTP &Basic Auth + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,154 +660,55 @@ Czy chcesz go nadpisać? Do you want to update the information in %1 - %2? Czy chcesz uaktualnić informację w %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Baza danych zablokowana! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Aktywna baza danych jest zablokowana! -Proszę odblokować wybraną bazę albo wybrać inną, która jest odblokowana. - - - KeePassXC: Settings not available! - KeePassXC: Ustawienia niedostępne! - - - The active database does not contain a settings entry. - Aktywna baza danych nie zawiera wpisu z ustawieniami. - - - KeePassXC: No keys found - KeePassXC: Nie znaleziono kluczy - - - No shared encryption keys found in KeePassXC Settings. - Nie znaleziono współdzielonych kluczy szyfrujących w ustawieniach KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: Usunięto klucze z bazy danych - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Pomyślnie usunięto %n klucz szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n klucze szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n kluczy szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n kluczy szyfrowania z ustawień KeePassXC. - - - Removing stored permissions… - Usuwanie przechowywanych uprawnień... - Abort Zaniechaj - KeePassXC: Removed permissions - KeePassXC: Usunięto uprawnienia + Converting attributes to custom data… + Konwertowanie atrybutów na niestandardowe dane... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Przekonwertowane atrybuty KeePassHTTP + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Pomyślnie przekonwertowano atrybuty z %1 wpis(ów). +Przeniesiono %2 klucze do niestandardowych danych. - Successfully removed permissions from %n entry(s). - Pomyślnie usunięto uprawnienia z %n wpisu.Pomyślnie usunięto uprawnienia z %n wpisów.Pomyślnie usunięto uprawnienia z %n wpisów.Pomyślnie usunięto uprawnienia z %n wpisów. + Successfully moved %n keys to custom data. + Pomyślnie przeniesiono %n klucz do niestandardowych danych.Pomyślnie przeniesiono %n klucze do niestandardowych danych.Pomyślnie przeniesiono %n kluczy do niestandardowych danych.Pomyślnie przeniesiono %n kluczy do niestandardowych danych. - KeePassXC: No entry with permissions found! - KeePassXC: Nie znaleziono wpisu z uprawnieniami! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nie znaleziono wpisu z atrybutami KeePassHTTP! - The active database does not contain an entry with permissions. - Aktywna baza danych nie zawiera wpisu z uprawnieniami. - - - - ChangeMasterKeyWidget - - Password - Hasło + The active database does not contain an entry with KeePassHTTP attributes. + Aktywna baza danych nie zawiera wpisu z atrybutami KeePassHTTP. - Enter password: - Wprowadź hasło: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Wykryto ustawienia przestarzałej integracji z przeglądarką - Repeat password: - Wprowadź ponownie hasło: + KeePassXC: Create a new group + - &Key file - &Plik klucza + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Przeglądaj - - - Create - Stwórz - - - Cha&llenge Response - &Wyzwanie-odpowiedź - - - Refresh - Odśwież - - - Key files - Pliki kluczy - - - All files - Wszystkie pliki - - - Create Key File... - Utwórz plik klucza... - - - Unable to create Key File : - Nie można utworzyć pliku klucza : - - - Select a key file - Wybierz plik z kluczem - - - Empty password - Puste hasło - - - Do you really want to use an empty string as password? - Czy na pewno chcesz używać pustego ciągu jako hasła? - - - Different passwords supplied. - Podano różne hasła. - - - Failed to set %1 as the Key file: -%2 - Błąd w ustawieniu %1 jako plik klucza: -%2 - - - Legacy key file format - Przestarzały format pliku klucza - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Używasz przestarzałego formatu pliku klucza, który może być -nieobsługiwany w przyszłości. - -Proszę rozważyć wygenerowanie nowego pliku klucza. - - - Changing master key failed: no YubiKey inserted. - Zmiana klucza głównego nie powiodła się: nie włożono YubiKey. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -643,65 +788,98 @@ Proszę rozważyć wygenerowanie nowego pliku klucza. Not present in CSV file Nie występuje w pliku CSV - - Empty fieldname - Puste pole tytuł - - - column - kolumna - Imported from CSV file Importowane z pliku CSV Original data: - Oryginalne dane: - - - Error(s) detected in CSV file ! - Wykryto błąd lub błędy w pliku CSV ! - - - more messages skipped] - więcej komunikatów pominięto] + Oryginalne dane: Error Błąd + + Empty fieldname %1 + Pusta nazwa pola %1 + + + column %1 + kolumna %1 + + + Error(s) detected in CSV file! + Wykryto błąd lub błędy w pliku CSV! + + + [%n more message(s) skipped] + [%n więcej komunikat pominięto] [%n więcej komunikatów pominięto] [%n więcej komunikatów pominięto] [%n więcej komunikatów pominięto] + CSV import: writer has errors: - +%1 Import CSV: zapisywanie z błędami: - - - - - CsvImportWizard - - Error - Błąd - - - Unable to calculate master key - Nie mogę wyliczyć głównego klucza +%1 CsvParserModel - - %n byte(s), - %n bajt, %n bajty, %n bajtów, %n bajt, - - - %n row(s), - %n rząd, %n rzędy, %n rzędów, %n rząd, - %n column(s) - %n kolumna%n kolumny%n kolumn%n kolumna + %n kolumna%n kolumny%n kolumn%n kolumn + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bajt%n bajty%n bajtów%n bajtów + + + %n row(s) + %n rząd%n rzędy%n rzędów%n rzędów + + + + Database + + Root + Root group name + Główna + + + File %1 does not exist. + Plik %1 nie istnieje. + + + Unable to open file %1. + Nie można otworzyć pliku %1. + + + Error while reading the database: %1 + Błąd podczas odczytu bazy danych: %1 + + + Could not save, database has no file name. + Nie można zapisać, baza danych nie ma nazwy pliku. + + + File cannot be written as it is opened in read-only mode. + Plik nie może zostać zapisany, ponieważ jest otwarty w trybie tylko do odczytu. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Odblokuj bazę danych - KeePassXC @@ -730,14 +908,6 @@ Proszę rozważyć wygenerowanie nowego pliku klucza. Challenge Response: Wyzwanie-odpowiedź: - - Unable to open the database. - Nie można otworzyć bazy danych. - - - Can't open key file - Nie mogę otworzyć pliku z kluczem - Legacy key file format Przestarzały format pliku klucza @@ -747,8 +917,8 @@ Proszę rozważyć wygenerowanie nowego pliku klucza. unsupported in the future. Please consider generating a new key file. - Używasz przestarzałego formatu pliku klucza, który może być -nieobsługiwany w przyszłości. + Używasz przestarzałego formatu pliku klucza, który może nie być +obsługiwany w przyszłości. Proszę rozważyć wygenerowanie nowego pliku klucza. @@ -766,107 +936,176 @@ Proszę rozważyć wygenerowanie nowego pliku klucza. Select key file - Wybierz plik z kluczem + Wybierz plik klucza + + + TouchID for quick unlock + TouchID do szybkiego odblokowania + + + Unable to open the database: +%1 + Nie można otworzyć bazy danych: +%1 + + + Can't open key file: +%1 + Nie można otworzyć pliku klucza: +%1 - DatabaseRepairWidget + DatabaseSettingWidgetMetaData - Repair database - Napraw bazę danych - - - Error - Błąd - - - Can't open key file - Nie mogę otworzyć pliku z kluczem - - - Unable to open the database. - Nie można otworzyć bazy danych. - - - Database opened fine. Nothing to do. - Pomyślnie otworzono bazę danych. Nic do zrobienia. - - - Success - Sukces - - - The database has been successfully repaired -You can now save it. - Baza danych została naprawiona -Możesz teraz ją już zapisać. - - - Unable to repair the database. - Nie mogę naprawić bazy danych. + Passwords + Hasła - DatabaseSettingsWidget + DatabaseSettingsDialog + + Advanced Settings + Ustawienia zaawansowane + General Ogólne - Encryption - Szyfrowanie + Security + Bezpieczeństwo - Number of rounds too high - Key transformation rounds - Liczba rund zbyt duża + Master Key + Klucz główny - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! - Używasz bardzo dużej liczby rund transformacji klucza z Argon2. - -Jeśli zachowasz ten numer, otworzenie twojej bazy danych może zająć kilka godzin lub dni (lub nawet dłużej)! + Encryption Settings + Ustawienia szyfrowania - Understood, keep number - Zrozumiano, zachowaj numer + Browser Integration + Integracja z przeglądarką + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Ustawienia KeePassXC-Browser - Cancel - Anuluj + &Disconnect all browsers + &Odłącz wszystkie przeglądarki - Number of rounds too low - Key transformation rounds - Liczba rund zbyt mała + Forg&et all site-specific settings on entries + Za&pomnij wszystkie ustawienia witryn dla wpisów - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! - Używasz bardzo małej liczby rund transformacji klucza z AES-KDF. - -Jeśli zachowasz ten numer, twoja baza danych może być zbyt łatwa do złamania! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Przenieś atrybuty KeePassHTTP do &niestandardowych danych KeePassXC-Browser - KDF unchanged - KDF niezmieniona + Stored keys + Przechowywane klucze - Failed to transform key with new KDF parameters; KDF unchanged. - Nie udało się transformować klucza za pomocą nowych parametrów KDF; KDF bez zmian. + Remove + Usuń + + + Delete the selected key? + Usunąć wybrany klucz? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Czy na pewno chcesz usunąć wybrany klucz? +Może to uniemożliwić połączenie z wtyczką przeglądarki. + + + Key + Klucz + + + Value + Wartość + + + Enable Browser Integration to access these settings. + Włącz integrację z przeglądarką, aby uzyskać dostęp do tych ustawień. + + + Disconnect all browsers + Odłącz wszystkie przeglądarki + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Czy na pewno chcesz odłączyć wszystkie przeglądarki? +Może to uniemożliwić połączenie z wtyczką przeglądarki. + + + KeePassXC: No keys found + KeePassXC: Nie znaleziono kluczy + + + No shared encryption keys found in KeePassXC settings. + Nie znaleziono współdzielonych kluczy szyfrujących w ustawieniach KeePassXC. + + + KeePassXC: Removed keys from database + KeePassXC: Usunięto klucze z bazy danych - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB MiB MiB + Successfully removed %n encryption key(s) from KeePassXC settings. + Pomyślnie usunięto %n klucz szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n klucze szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n kluczy szyfrowania z ustawień KeePassXC.Pomyślnie usunięto %n kluczy szyfrowania z ustawień KeePassXC. + + + Forget all site-specific settings on entries + Zapomnij wszystkie ustawienia witryn dla wpisów + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Czy na pewno chcesz zapomnieć wszystkie ustawienia witryn dla każdego wpisu? +Uprawnienia dostępu do wpisów zostaną odwołane. + + + Removing stored permissions… + Usuwanie przechowywanych uprawnień... + + + Abort + Zaniechaj + + + KeePassXC: Removed permissions + KeePassXC: Usunięto uprawnienia - thread(s) - Threads for parallel execution (KDF settings) - wątek wątki wątków wątków + Successfully removed permissions from %n entry(s). + Pomyślnie usunięto uprawnienia z %n wpisu.Pomyślnie usunięto uprawnienia z %n wpisów.Pomyślnie usunięto uprawnienia z %n wpisów.Pomyślnie usunięto uprawnienia z %n wpisów. + + + KeePassXC: No entry with permissions found! + KeePassXC: Nie znaleziono wpisu z uprawnieniami! + + + The active database does not contain an entry with permissions. + Aktywna baza danych nie zawiera wpisu z uprawnieniami. + + + Move KeePassHTTP attributes to custom data + Przenieś atrybuty KeePassHTTP do niestandardowych danych + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Czy na pewno chcesz przenieść wszystkie dane przestarzałej integracji z przeglądarką do najnowszego standardu? +Jest to konieczne, aby zachować zgodność z wtyczką przeglądarki. @@ -903,6 +1142,113 @@ Jeśli zachowasz ten numer, twoja baza danych może być zbyt łatwa do złamani Parallelism: Paralelizm: + + Decryption Time: + Czas odszyfrowania: + + + ?? s + ?? s + + + Change + Zmień + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Wyższe wartości zapewniają lepszą ochronę, ale otwarcie bazy danych potrwa dłużej. + + + Database format: + Format bazy danych: + + + This is only important if you need to use your database with other programs. + Jest to ważne tylko wtedy, gdy musisz korzystać z bazy danych z innymi programami. + + + KDBX 4.0 (recommended) + KDBX 4.0 (zalecany) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + niezmieniony + + + Number of rounds too high + Key transformation rounds + Zbyt duża liczba rund + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + Używasz bardzo dużej liczby rund transformacji klucza z Argon2. + +Jeśli zachowasz ten numer, otworzenie twojej bazy danych może zająć kilka godzin lub dni (lub nawet dłużej)! + + + Understood, keep number + Zrozumiano, zachowaj numer + + + Cancel + Anuluj + + + Number of rounds too low + Key transformation rounds + Za mała liczba rund + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + Używasz bardzo małej liczby rund transformacji klucza z AES-KDF. + +Jeśli zachowasz tę liczbę, twoja baza danych może być zbyt łatwa do złamania! + + + KDF unchanged + KDF niezmieniona + + + Failed to transform key with new KDF parameters; KDF unchanged. + Nie udało się transformować klucza za pomocą nowych parametrów KDF; KDF bez zmian. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + wątek wątki wątków wątków + + + %1 ms + milliseconds + %1 ms%1 ms%1 ms%1 ms + + + %1 s + seconds + %1 s%1 s%1 s%1 s + DatabaseSettingsWidgetGeneral @@ -952,12 +1298,85 @@ Jeśli zachowasz ten numer, twoja baza danych może być zbyt łatwa do złamani - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Główna + Sharing + Udostępnianie + + Breadcrumb + Nawigacja okruszkowa + + + Type + Typ + + + Path + Ścieżka + + + Last Signer + Ostatni podpisujący + + + Certificates + Certyfikaty + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Dodaj dodatkową ochronę... + + + No encryption key added + Nie dodano klucza szyfrowania + + + You must add at least one encryption key to secure your database! + Musisz dodać co najmniej jeden klucz szyfrowania, aby zabezpieczyć bazę danych! + + + No password set + Brak hasła + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + OSTRZEŻENIE! Nie ustawiłeś hasła. Używanie bazy danych bez hasła jest zdecydowanie odradzane! + +Czy na pewno chcesz kontynuować bez hasła? + + + Unknown error + Nieznany błąd + + + Failed to change master key + Nie udało się zmienić klucza głównego + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nazwa bazy danych: + + + Description: + Opis: + + + + DatabaseTabWidget KeePass 2 Database Baza danych KeePass 2 @@ -968,119 +1387,68 @@ Jeśli zachowasz ten numer, twoja baza danych może być zbyt łatwa do złamani Open database - Otwieranie bazy danych - - - File not found! - Nie znaleziono pliku! - - - Unable to open the database. - Nie można otworzyć bazy danych. - - - File opened in read only mode. - Plik otwarty w trybie tylko do odczytu. - - - Open CSV file - Otwieranie pliku CSV + Otwórz bazę danych CSV file plik CSV - - All files (*) - Wszystkie pliki (*) - Merge database - Połączenie baz danych + Scal bazę danych Open KeePass 1 database - Otwieranie bazy danych KeePass 1 + Otwórz bazę danych KeePass 1 KeePass 1 database Baza danych KeePass 1 - - Close? - Zamknąć? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" jest w trybie edytowania. -Odrzucić zmiany i zamknąć? - - - Save changes? - Zapisać zmiany? - - - "%1" was modified. -Save changes? - "%1" został zmieniony. -Zapisać zmiany? - - - Writing the database failed. - Błąd w zapisywaniu bazy danych. - - - Passwords - Hasła - - - Save database as - Zapisz bazę danych jako - Export database to CSV file - Eksportowanie bazy danych do pliku CSV + Eksportuj bazę danych do pliku CSV Writing the CSV file failed. Błąd przy zapisywaniu pliku CSV. - New database + Database creation error + Błąd tworzenia bazy danych + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + Utworzona baza danych nie ma klucza ani KDF, odmawiam jej zapisania. +Jest to z pewnością błąd, zgłoś go programistom. + + + The database file does not exist or is not accessible. + Plik bazy danych nie istnieje lub nie jest dostępny. + + + Select CSV file + Wybierz plik CSV + + + New Database Nowa baza danych - locked - zablokowana + %1 [New Database] + Database tab name modifier + %1 [Nowa baza danych] - Lock database - Zablokuj bazę danych + %1 [Locked] + Database tab name modifier + %1 [Zablokowana] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Nie można zablokować bazy danych, którą edytujesz. -Naciśnij anuluj, aby zakończyć zmiany albo porzucić je. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Baza danych została zmodyfikowana. -Czy chcesz zapisać przed zablokowaniem jej? -W przeciwnym wypadku zmiany zostaną porzucone. - - - Disable safe saves? - Wyłączyć bezpieczne zapisywanie? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC nie zdołał wielokrotnie zapisać bazy danych. Jest to prawdopodobnie spowodowane przez usługi synchronizacji plików, które blokują plik zapisu. -Wyłączyć bezpieczne zapisywanie i spróbować ponownie? + %1 [Read-only] + Database tab name modifier + %1 [Tylko do odczytu] @@ -1089,41 +1457,17 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie? Searching... Wyszukiwanie... - - Change master key - Zmień główne hasło - - - Delete entry? - Skasować wpis? - Do you really want to delete the entry "%1" for good? Czy na pewno całkowicie usunąć wpis "%1" ? - - Delete entries? - Usunąć wpisy? - - - Do you really want to delete %1 entries for good? - Czy na prawdę chcesz usunąć %1 wpisów na dobre? - - - Move entry to recycle bin? - Przenieść wpis do kosza? - Do you really want to move entry "%1" to the recycle bin? - Czy na pewno chcesz przenieść wpis" %1" do kosza? - - - Move entries to recycle bin? - Przenieść wpisy do kosza? + Czy na pewno chcesz przenieść wpis "%1" do kosza? Do you really want to move %n entry(s) to the recycle bin? - Czy na pewno chcesz przenieść %n wpis do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza? + Czy na pewno chcesz przenieść %n wpis do kosza?Czy na pewno chcesz przenieść %n wpisy do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza? Execute command? @@ -1137,18 +1481,10 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie? Remember my choice Zapamiętaj mój wybór - - Delete group? - Usunąć grupę? - Do you really want to delete the group "%1" for good? Czy na pewno całkowicie usunąć grupę "%1"? - - Unable to calculate master key - Nie mogę wyliczyć głównego klucza - No current database. Brak bieżącej bazy danych. @@ -1175,17 +1511,13 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie? Merge Request - Połącz żądanie + Żądanie scalenia The database file has changed and you have unsaved changes. Do you want to merge your changes? Plik bazy danych został zmieniony, a masz niezapisane zmiany. -Czy chcesz połączyć twoje zmiany? - - - Could not open the new database file while attempting to autoreload this database. - Nie można otworzyć nowego pliku bazy danych podczas próby automatycznego przeładowania tej bazy. +Czy chcesz scalić twoje zmiany? Empty recycle bin? @@ -1195,88 +1527,111 @@ Czy chcesz połączyć twoje zmiany? Are you sure you want to permanently delete everything from your recycle bin? Czy na pewno chcesz nieodwracalnie usunąć wszystko z twojego kosza? - - - DetailsWidget - - Generate TOTP Token - Wygeneruj token TOTP + + Do you really want to delete %n entry(s) for good? + Czy naprawdę chcesz usunąć %n wpis na dobre?Czy naprawdę chcesz usunąć %n wpisy na dobre?Czy naprawdę chcesz usunąć %n wpisów na dobre?Czy naprawdę chcesz usunąć %n wpisów na dobre? + + + Delete entry(s)? + Usunąć wpis?Usunąć wpisy?Usunąć wpisy?Usunąć wpisy? + + + Move entry(s) to recycle bin? + Przenieść wpis do kosza?Przenieść wpisy do kosza?Przenieść wpisy do kosza?Przenieść wpisy do kosza? - Close - Zamknij + File opened in read only mode. + Plik otwarty w trybie tylko do odczytu. - General - Ogólne + Lock Database? + Zablokować bazę danych? - Password - Hasło + You are editing an entry. Discard changes and lock anyway? + Edytujesz wpis. Odrzucić zmiany i mimo to zablokować? - URL - URL + "%1" was modified. +Save changes? + "%1" został zmieniony. +Zapisać zmiany? - Expiration - Wygaśnięcie + Database was modified. +Save changes? + Baza danych została zmodyfikowana. +Zapisać zmiany? - Username - Użytkownik + Save changes? + Zapisać zmiany? - Autotype - Autouzupełnianie + Could not open the new database file while attempting to autoreload. +Error: %1 + Nie można otworzyć nowego pliku bazy danych podczas próby automatycznego przeładowania. +Błąd: %1 - Searching - Wyszukiwanie + Disable safe saves? + Wyłączyć bezpieczne zapisywanie? - Attributes - Atrybuty + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC nie zdołał wielokrotnie zapisać bazy danych. Jest to prawdopodobnie spowodowane przez usługi synchronizacji plików, które blokują plik zapisu. +Wyłączyć bezpieczne zapisywanie i spróbować ponownie? - Attachments - Załączniki + Writing the database failed. +%1 + Błąd zapisu bazy danych. +%1 - Notes - Notatki + Passwords + Hasła - Window - Okno + Save database as + Zapisz bazę danych jako - Sequence - Sekwencja + KeePass 2 Database + Baza danych KeePass 2 - Search - Szukaj + Replace references to entry? + Zastąpić odniesienia do wpisu? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Wpis "%1" ma %2 odniesienie. Czy chcesz zastąpić odniesienia wartościami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesienia. Czy chcesz zastąpić odniesienia wartościami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesień. Czy chcesz zastąpić odniesienia wartościami, pominąć ten wpis, czy usunąć mimo to?Wpis "%1" ma %2 odniesień. Czy chcesz zastąpić odniesienia wartościami, pominąć ten wpis, czy usunąć mimo to? - Clear - Wyczyść + Delete group + Usuń grupę - Never - Nigdy + Move group to recycle bin? + Przenieść grupę do kosza? - [PROTECTED] - [CHRONIONE] + Do you really want to move the group "%1" to the recycle bin? + Czy na pewno chcesz przenieść grupę "%1" do kosza? - Disabled - Wyłączone + Successfully merged the database files. + Pomyślnie scalono pliki bazy danych. - Enabled - Włączone + Database was not modified by merge operation. + Baza danych nie została zmodyfikowana operacją scalania. + + + Shared group... + @@ -1295,7 +1650,7 @@ Czy chcesz połączyć twoje zmiany? Auto-Type - Auto-uzupełnianie + Autowpisywanie Properties @@ -1349,37 +1704,21 @@ Czy chcesz połączyć twoje zmiany? New attribute Nowy atrybut - - Confirm Remove - Potwierdź usunięcie - Are you sure you want to remove this attribute? Czy na pewno chcesz usunąć ten atrybut? - - [PROTECTED] - [CHRONIONE] - - - Press reveal to view or edit - Wciśnij Odsłoń, aby obejrzeć lub edytować - Tomorrow Jutro %n week(s) - %n tydzień%n tygodni(e)%n tygodni(e)%n tygodni(e) + %n tydzień%n tygodnie%n tygodni%n tygodni %n month(s) - %n miesiąc%n miesiąc(e)%n miesiąc(e)%n miesiąc(e) - - - 1 year - 1 rok + %n miesiąc%n miesiące%n miesięcy%n miesięcy Apply generated password? @@ -1393,6 +1732,26 @@ Czy chcesz połączyć twoje zmiany? Entry updated successfully. Wpis został pomyślnie zaktualizowany. + + Entry has unsaved changes + Wpis ma niezapisane zmiany + + + New attribute %1 + Nowy atrybut %1 + + + [PROTECTED] Press reveal to view or edit + [CHRONIONE] Wciśnij Odsłoń, aby zobaczyć albo edytować + + + %n year(s) + %n rok%n lata%n lat%n lat + + + Confirm Removal + Potwierdź usunięcie + EditEntryWidgetAdvanced @@ -1437,15 +1796,15 @@ Czy chcesz połączyć twoje zmiany? EditEntryWidgetAutoType Enable Auto-Type for this entry - Włącz auto-uzupełnianie dla tego wpisu + Włącz autowpisywanie dla tego wpisu Inherit default Auto-Type sequence from the &group - Dziedzicz domyślną sekwencję auto-uzupełniania z &grupy + Dziedzicz domyślną sekwencję autowpisywania z &grupy &Use custom Auto-Type sequence: - &Używaj niestandardowej sekwencji auto-uzupełniania: + &Używaj niestandardowej sekwencji autowpisywania: Window Associations @@ -1637,6 +1996,97 @@ Czy chcesz połączyć twoje zmiany? Dziedzicz z nadrzędnej grupy (%1) + + EditGroupWidgetKeeShare + + Form + Formularz + + + Type: + Typ: + + + Path: + Ścieżka: + + + ... + ... + + + Password: + Hasło: + + + Inactive + Nieaktywne + + + Import from path + Importuj ze ścieżki + + + Export to path + Eksportuj do ścieżki + + + Synchronize with path + Synchronizuj ze ścieżką + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Twoja wersja KeePassXC nie obsługuje udostępniania tego typu kontenera. Proszę użyć %1. + + + Database sharing is disabled + Udostępnianie bazy danych jest wyłączone + + + Database export is disabled + Eksportowanie bazy danych jest wyłączone + + + Database import is disabled + Importowanie bazy danych jest wyłączone + + + KeeShare unsigned container + Niepodpisany kontener KeeShare + + + KeeShare signed container + Podpisany kontener KeeShare + + + Select import source + Wybierz cel importu + + + Select export target + Wybierz cel eksportu + + + Select import/export file + Wybierz plik importu/eksportu + + + Clear + Wyczyść + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1657,15 +2107,15 @@ Czy chcesz połączyć twoje zmiany? Auto-Type - Auto-uzupełnianie + Autowpisywanie &Use default Auto-Type sequence of parent group - &Korzystaj z domyślnej sekwencji auto-uzupełniania z nadrzędnej grupy + &Korzystaj z domyślnej sekwencji autowpisywania z nadrzędnej grupy Set default Auto-Type se&quence - Ustaw domyślną se&kwencję auto-uzupełniania + Ustaw domyślną se&kwencję autowpisywania @@ -1694,10 +2144,6 @@ Czy chcesz połączyć twoje zmiany? Unable to fetch favicon. Nie można pobrać ikony ulubionych. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Wskazówka: możesz włączyć Google jako zastępstwo w menu Narzędzia>Ustawienia>Bezpieczeństwo - Images Obrazy @@ -1706,14 +2152,6 @@ Czy chcesz połączyć twoje zmiany? All files Wszystkie pliki - - Select Image - Wybierz obraz - - - Can't read icon - Nie można odczytać ikony - Custom icon already exists Ikona niestandardowa już istnieje @@ -1723,8 +2161,36 @@ Czy chcesz połączyć twoje zmiany? Potwierdź usunięcie - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Ta ikona używana jest przez %1 wpisów i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć? + Custom icon successfully downloaded + Ikona niestandardowa została pomyślnie pobrana + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Podpowiedź: Możesz włączyć DuckDuckGo jako zastępstwo w menu Narzędzia>Ustawienia>Bezpieczeństwo + + + Select Image(s) + Wybierz obraz(y) + + + Successfully loaded %1 of %n icon(s) + Pomyślnie załadowano %1 z %n ikonyPomyślnie załadowano %1 z %n ikonPomyślnie załadowano %1 z %n ikonPomyślnie załadowano %1 z %n ikon + + + No icons were loaded + Żadne ikony nie zostały załadowane + + + %n icon(s) already exist in the database + %n ikona już istnieje w bazie danych%n ikony już istnieją w bazie danych%n ikon już istnieje w bazie danych%n ikon już istnieje w bazie danych + + + The following icon(s) failed: + Niepowodzenie następującej ikony:Niepowodzenie następujących ikon:Niepowodzenie następujących ikon:Niepowodzenie następujących ikon: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Ta ikona używana jest przez %n wpis i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć?Ta ikona używana jest przez %n wpisy i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć?Ta ikona używana jest przez %n wpisów i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć?Ta ikona używana jest przez %n wpisów i zostanie zamieniona na ikonę domyślną. Czy na pewno chcesz ją usunąć? @@ -1775,9 +2241,8 @@ Może to spowodować nieprawidłowe działanie wtyczek. Entry - - Clone - Suffix added to cloned entries - - Klon + %1 - Clone + %1 - klon @@ -1821,10 +2286,6 @@ Może to spowodować nieprawidłowe działanie wtyczek. Are you sure you want to remove %n attachment(s)? Czy na pewno chcesz usunąć %n załącznik?Czy na pewno chcesz usunąć %n załączniki?Czy na pewno chcesz usunąć %n załączników?Czy na pewno chcesz usunąć %n załączników? - - Confirm Remove - Potwierdź usunięcie - Save attachments Zapisz załączniki @@ -1862,10 +2323,17 @@ Może to spowodować nieprawidłowe działanie wtyczek. %1 - Unable to open files: + Confirm remove + Potwierdź usunięcie + + + Unable to open file(s): %1 - Nie można otworzyć plików: -%1 + Nie można otworzyć pliku: +%1Nie można otworzyć plików: +%1Nie można otworzyć plików: +%1Nie można otworzyć plików: +%1 @@ -1899,7 +2367,7 @@ Może to spowodować nieprawidłowe działanie wtyczek. Ref: Reference abbreviation - Odniesienie: + Odniesienie: Group @@ -1949,6 +2417,106 @@ Może to spowodować nieprawidłowe działanie wtyczek. Attachments Załączniki + + Yes + Tak + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Wygeneruj token TOTP + + + Close + Zamknij + + + General + Ogólne + + + Username + Użytkownik + + + Password + Hasło + + + Expiration + Wygaśnięcie + + + URL + URL + + + Attributes + Atrybuty + + + Attachments + Załączniki + + + Notes + Notatki + + + Autotype + Autowpisywanie + + + Window + Okno + + + Sequence + Sekwencja + + + Searching + Wyszukiwanie + + + Search + Szukaj + + + Clear + Wyczyść + + + Never + Nigdy + + + [PROTECTED] + [CHRONIONE] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Włączone + + + Disabled + Wyłączone + + + Share + Udział + EntryView @@ -1987,6 +2555,11 @@ Może to spowodować nieprawidłowe działanie wtyczek. Recycle Bin Kosz + + [empty] + group has no children + [pusty] + HostInstaller @@ -1999,61 +2572,6 @@ Może to spowodować nieprawidłowe działanie wtyczek. Nie można zapisać pliku skryptu Native Messaging. - - HttpPasswordGeneratorWidget - - Length: - Długość: - - - Character Types - Typy znaków - - - Upper Case Letters - Wielkie litery - - - A-Z - A-Z - - - Lower Case Letters - Małe litery - - - a-z - a-z - - - Numbers - Liczby - - - 0-9 - 0-9 - - - Special Characters - Znaki specjalne - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Wyklucz podobnie wyglądające znaki - - - Ensure that the password contains characters from every group - Zapewnij, że hasło będzie zawierało znaki ze wszystkich grup - - - Extended ASCII - Rozszerzony ASCII - - KMessageWidget @@ -2079,6 +2597,26 @@ Może to spowodować nieprawidłowe działanie wtyczek. Wrong key or database file is corrupt. Błędny klucz lub baza danych jest uszkodzona. + + missing database headers + brakuje nagłówków bazy danych + + + Header doesn't match hash + Nagłówek nie pasuje do hasza + + + Invalid header id size + Nieprawidłowy rozmiar identyfikatora nagłówka + + + Invalid header field length + Nieprawidłowa długość pola nagłówka + + + Invalid header data length + Nieprawidłowa długość danych nagłowka + Kdbx3Writer @@ -2237,10 +2775,6 @@ Może to spowodować nieprawidłowe działanie wtyczek. KdbxReader - - Invalid cipher uuid length - Nieprawidłowa długość szyfru uuid - Unsupported cipher Nieobsługiwany szyfr @@ -2295,6 +2829,18 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Unsupported KeePass 2 database version. Nieobsługiwana wersja bazy danych KeePass 2. + + Invalid cipher uuid length: %1 (length=%2) + Nieprawidłowa długość szyfru uuid: %1 (długość=%2) + + + Unable to parse UUID: %1 + Nie można parsować UUID: %1 + + + Failed to read database file. + Nie udało się odczytać pliku bazy danych. + KdbxXmlReader @@ -2366,10 +2912,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz History element with different uuid Element historii z innym uuid - - Unable to decrypt entry string - Nie można odszyfrować ciągu wejściowego - Duplicate custom attribute found Znaleziono zduplikowany niestandardowy atrybut @@ -2388,7 +2930,7 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Auto-type association window or sequence missing - Brak przypisanego okna lub sekwencji auto-uzupełniania + Brak przypisanego okna lub sekwencji autowpisywania Invalid bool value @@ -2419,6 +2961,14 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Translator meant is a binary data inside an entry Nie można zdekompresować pliku binarnego + + XML error: +%1 +Line %2, column %3 + Błąd XML: +%1 +Wiersz %2, kolumna %3 + KeePass1OpenWidget @@ -2435,7 +2985,7 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz KeePass1Reader Unable to read keyfile. - Nie można otworzyć pliku z kluczem. + Nie można otworzyć pliku klucza. Not a KeePass database. @@ -2582,55 +3132,146 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Invalid entry field type Nieprawidłowy typ pola wpisu - - - KeePass2 - AES: 256-bit - AES: 256-bitowy - - - Twofish: 256-bit - Twofish: 256-bitowy - - - ChaCha20: 256-bit - ChaCha20: 256-bitowy - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – zalecany) + unable to seek to content position + niezdolny do szukania pozycji treści - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Istniejący plik blokady pojedynczego wystąpienia jest nieprawidłowy. Uruchamianie nowego wystąpienia. + Disabled share + Wyłączony udział - The lock file could not be created. Single-instance mode disabled. - Nie można utworzyć pliku blokady. Tryb pojedynczej instancji jest wyłączony. + Import from + Importuj z - Another instance of KeePassXC is already running. - Inna instancja KeePassXC jest już uruchomiona. + Export to + Eksportuj do - Fatal error while testing the cryptographic functions. - Błąd krytyczny podczas testowania funkcji kryptograficznych. + Synchronize with + Synchronizuj z - KeePassXC - Error - KeePassXC - Błąd + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Składnik klucza + + + Key Component Description + Opis składnika klucza + + + Cancel + Anuluj + + + Key Component set, click to change or remove + Ustawiono składnik klucza, kliknij, aby zmienić lub usunąć + + + Add %1 + Add a key component + Dodaj %1 + + + Change %1 + Change a key component + Zmień %1 + + + Remove %1 + Remove a key component + Usuń %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 ustawiono, kliknij, aby zmienić lub usunąć + + + + KeyFileEditWidget + + Browse + Przeglądaj + + + Generate + Wygeneruj + + + Key File + Plik klucza + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Możesz dodać plik klucza zawierający losowe bajty do zwiększenia bezpieczeństwa.</p><p>Musisz trzymać go w tajemnicy i nigdy go nie stracić, bo zostaniesz zablokowany!</p> + + + Legacy key file format + Przestarzały format pliku klucza + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Używasz przestarzałego formatu pliku klucza, który może być +nieobsługiwany w przyszłości. + +Przejdź do ustawień klucza głównego i wygeneruj nowy plik klucza. + + + Error loading the key file '%1' +Message: %2 + Błąd ładowania pliku klucza '%1' +Komunikat: %2 + + + Key files + Pliki kluczy + + + All files + Wszystkie pliki + + + Create Key File... + Utwórz plik klucza... + + + Error creating key file + Błąd tworzenia pliku klucza + + + Unable to create key file: %1 + Nie można utworzyć pliku klucza: %1 + + + Select a key file + Wybierz plik klucza @@ -2643,10 +3284,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz &Recent databases &Ostatnie bazy danych - - Import - Importuj - &Help &Pomoc @@ -2655,14 +3292,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz E&ntries W&pisy - - Copy att&ribute to clipboard - Skopiuj atry&but do schowka - - - Time-based one-time password - Hasło jednorazowe zależne od czasu (TOTP) - &Groups &Grupy @@ -2691,30 +3320,10 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz &Close database Zamknij bazę da&nych - - &New database - &Nowa baza danych - - - Merge from KeePassX database - Połącz z bazą danych KeePassX - - - &Add new entry - &Dodaj nowy wpis - - - &View/Edit entry - &Podgląd/Edycja wpisu - &Delete entry &Usuń wpis - - &Add new group - Dod&aj nową grupę - &Edit group &Edytuj grupę @@ -2727,14 +3336,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Sa&ve database as... &Zapisz bazę danych jako... - - Change &master key... - Zmień główne &hasło... - - - &Database settings - Ustawienia bazy &danych - Database settings Ustawienia bazy danych @@ -2743,10 +3344,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz &Clone entry &Sklonuj wpis - - &Find - &Znajdź - Copy &username Skopi&uj użytkownika @@ -2755,10 +3352,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Copy username to clipboard Skopiuj użytkownika do schowka - - Cop&y password - Sko&piuj hasło - Copy password to clipboard Skopiuj hasło do schowka @@ -2771,14 +3364,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Password Generator Generator hasła - - &Perform Auto-Type - &Wykonaj auto-uzupełnianie - - - &Open URL - &Otwórz URL - &Lock databases &Zablokuj bazy danych @@ -2811,22 +3396,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz &Export to CSV file... &Eksportuj do pliku CSV... - - Import KeePass 1 database... - Importuj bazę danych KeePass 1... - - - Import CSV file... - Importuj plik CSV... - - - Re&pair database... - Na&praw bazę danych... - - - Show TOTP - Pokaż TOTP - Set up TOTP... Ustaw TOTP... @@ -2847,14 +3416,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Access error for config file %1 Błąd dostępu pliku konfiguracyjnego %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Wygląda na to, że używasz KeePassHTTP do integracji z przeglądarką. Ta funkcja została uznana za przestarzałą i zostanie usunięta w przyszłości.<br>Zamiast tego proszę przejść na KeePassXC-Browser! Aby uzyskać pomoc dotyczącą migracji, odwiedź nasz <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">przewodnik migracji</a> (ostrzeżenie %1 z 3).</p> - - - read-only - Tylko do odczytu - Settings Ustawienia @@ -2867,26 +3428,6 @@ Jest to migracja w jedną stronę. Nie będzie można otworzyć importowanej baz Quit KeePassXC Zakończ KeePassXC - - KeePass 2 Database - Baza danych KeePass 2 - - - All files - Wszystkie pliki - - - Open database - Otwieranie bazy danych - - - Save repaired database - Zapisz naprawioną bazę danych - - - Writing the database failed. - Błąd przy zapisie bazy danych. - Please touch the button on your YubiKey! Proszę dotknąć przycisku na twoim YubiKey! @@ -2899,6 +3440,268 @@ This version is not meant for production use. Istnieje duże ryzyko uszkodzenia, utrzymuj kopie zapasowe baz danych. Ta wersja nie jest przeznaczona do użytku produkcyjnego. + + &Donate + &Wspomóż + + + Report a &bug + Zgłoś &błąd + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + OSTRZEŻENIE: Twoja wersja Qt może powodować awarie KeePassXC z klawiaturą ekranową! +Zalecamy korzystanie z AppImage dostępnego na naszej stronie pobierania. + + + &Import + &Importuj + + + Copy att&ribute... + Skopiuj atry&but... + + + TOTP... + TOTP... + + + &New database... + &Nowa baza danych... + + + Create a new database + Stwórz nową bazę danych + + + &Merge from database... + &Scal z bazą danych... + + + Merge from another KDBX database + Scal z inną bazą KDBX + + + &New entry + &Nowy wpis + + + Add a new entry + Dodaj nowy wpis + + + &Edit entry + &Edytuj wpis + + + View or edit entry + Podgląd lub edycja wpisu + + + &New group + &Nowa grupa + + + Add a new group + Dodaj nową grupę + + + Change master &key... + Zmień &klucz główny... + + + &Database settings... + Ustawienia bazy &danych... + + + Copy &password + Skopiuj &hasło + + + Perform &Auto-Type + Wykonaj &autowpisywanie + + + Open &URL + Otwórz &URL + + + KeePass 1 database... + Baza danych KeePass 1... + + + Import a KeePass 1 database + Importuj bazę danych KeePass 1 + + + CSV file... + Plik CSV... + + + Import a CSV file + Importuj plik CSV + + + Show TOTP... + Pokaż TOTP... + + + Show TOTP QR Code... + Pokaż kod QR TOTP... + + + Check for Updates... + Sprawdź aktualizacje... + + + Share entry + Udostępnij wpis + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + UWAGA: Używasz wstępnej wersji KeePassXC! Spodziewaj się pewnych błędów i drobnych problemów, ta wersja nie jest przeznaczona do użytku produkcyjnego. + + + Check for updates on startup? + Sprawdzać aktualizacje podczas uruchomienia? + + + Would you like KeePassXC to check for updates on startup? + Czy chcesz, aby KeePassXC sprawdzał aktualizacje podczas uruchomienia? + + + You can always check for updates manually from the application menu. + Zawsze możesz sprawdzić aktualizacje ręcznie w menu aplikacji. + + + + Merger + + Creating missing %1 [%2] + Tworzenie brakującego %1 [%2] + + + Relocating %1 [%2] + Przemieszczanie %1 [%2] + + + Overwriting %1 [%2] + Nadpisywanie %1 [%2] + + + older entry merged from database "%1" + starszy wpis scalony z bazy danych "%1" + + + Adding backup for older target %1 [%2] + Dodawanie kopii zapasowej dla starszego celu %1 [%2] + + + Adding backup for older source %1 [%2] + Dodawanie kopii zapasowej dla starszego źródła %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Ponowne stosowanie starszego wpisu docelowego na nowszym źródle %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Ponowne stosowanie starszego wpisu źródłowego na nowszym celu %1 [%2] + + + Synchronizing from newer source %1 [%2] + Synchronizacja z nowszego źródła %1 [%2] + + + Synchronizing from older source %1 [%2] + Synchronizacja ze starszego źródła %1 [%2] + + + Deleting child %1 [%2] + Usuwanie dziecka %1 [%2] + + + Deleting orphan %1 [%2] + Usuwanie sieroty %1 [%2] + + + Changed deleted objects + Zmieniono usunięte obiekty + + + Adding missing icon %1 + Dodawanie brakującej ikony %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Stwórz nową bazę danych KeePassXC... + + + Root + Root group + Główna + + + + NewDatabaseWizardPage + + WizardPage + WizardPage + + + En&cryption Settings + Ustawienia &szyfrowania + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw się, możesz je później zmienić w ustawieniach bazy danych. + + + Advanced Settings + Ustawienia zaawansowane + + + Simple Settings + Ustawienia proste + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Ustawienia szyfrowania + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw się, możesz je później zmienić w ustawieniach bazy danych. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Klucz główny bazy danych + + + A master key known only to you protects your database. + Klucz główny znany tylko tobie chroni twoją bazę danych. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Ogólne informacje o bazie danych + + + Please fill in the display name and an optional description for your new database: + Uzupełnij wyświetlaną nazwę i opcjonalny opis nowej bazy danych: + OpenSSHKey @@ -3000,125 +3803,30 @@ Ta wersja nie jest przeznaczona do użytku produkcyjnego. - OptionDialog + PasswordEditWidget - Dialog - Dialog + Enter password: + Wprowadź hasło: - This is required for accessing your databases from ChromeIPass or PassIFox - Wymagane jest to w celu uzyskania dostępu do baz danych z ChromeIPass albo PassIFox + Confirm password: + Potwierdź hasło: - Enable KeePassHTTP server - Włącz serwer KeePassHTTP + Password + Hasło - General - Ogólne + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Hasło jest podstawową metodą zabezpieczania bazy danych.</p><p>Dobre hasła są długie i niepowtarzalne. KeePassXC może je wygenerować dla ciebie.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - P&okaż powiadomienie, gdy wymagane są poświadczenia + Passwords do not match. + Hasła nie pasują do siebie. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Zwracaj tylko najlepsze dopasowania wpisów dla URL zamiast wszystkich wpisów całej domeny. - - - &Return only best matching entries - Z&wróć tylko najlepiej pasujące wpisy - - - Re&quest to unlock the database if it is locked - Żąda&j odblokowania bazy danych, jeżeli jest zablokowana - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Tylko wpisy z tym samym schematem (http://, https://, ftp://, ...) są zwracane. - - - &Match URL schemes - &Dopasuj schematy adresów URL - - - Sort matching entries by &username - Sortuj dopasowane wpisy według &użytkownika - - - Sort &matching entries by title - Sortuj dopasowane wpisy według &tytułu - - - R&emove all shared encryption keys from active database - U&suń wszystkie współdzielone klucze szyfrujące z aktywnej bazy danych - - - Re&move all stored permissions from entries in active database - U&suń wszystkie przechowywane uprawnienia z wpisów w aktywnej bazie danych - - - Password Generator - Generator hasła - - - Advanced - Zaawansowane - - - Always allow &access to entries - Zawsze zezwalaj na d&ostęp do wpisów - - - Always allow &updating entries - Zawsze zezwalaj na a&ktualizowanie wpisów - - - Only the selected database has to be connected with a client. - Tylko wybrana baza danych musi być podłączona do klienta. - - - Searc&h in all opened databases for matching entries - Szuk&aj we wszystkich otwartych bazach danych dopasowanych wpisów - - - Automatically creating or updating string fields is not supported. - Automatyczne tworzenie albo aktualizowanie pól ciągów znaków nie jest obsługiwane. - - - &Return advanced string fields which start with "KPH: " - &Zwracaj zaawansowane pola ciągów znaków, które zaczynają się od "KPH: " - - - HTTP Port: - Port HTTP: - - - Default port: 19455 - Port domyślny: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC będzie nasłuchiwać ten port na 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Ostrzeżenie:</b> Poniższe opcje mogą być niebezpieczne! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP został porzucony i zostanie usunięty w przyszłości. <br>Proszę zamiast tego przejść na KeePassXC-browser! Aby uzyskać pomoc dotyczącą migracji, odwiedź nasz <a href="https://keepassxc.org/docs/keepassxc-browser-migration"> Przewodnik migracji</a>.</p> - - - Cannot bind to privileged ports - Nie można powiązać do uprzywilejowanych portów - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Nie można powiązać do uprzywilejowanych portów poniżej 1024! -Używam domyślnego portu 19455. + Generate master password + Wygeneruj hasło główne @@ -3188,18 +3896,10 @@ Używam domyślnego portu 19455. Wordlist: Lista słów: - - Word Count: - Liczba słów: - Word Separator: Separator słów: - - Generate - Wygeneruj - Copy Skopiuj @@ -3212,10 +3912,6 @@ Używam domyślnego portu 19455. Close Zamknij - - Apply - Zastosuj - Entropy: %1 bit Entropia: %1 bity @@ -3244,6 +3940,171 @@ Używam domyślnego portu 19455. Password quality Znakomita + + ExtendedASCII + Rozszerzony ASCII + + + Switch to advanced mode + Zmień na tryb zaawansowany + + + Advanced + Zaawansowane + + + Upper Case Letters A to F + Duże litery A do F + + + A-Z + A-Z + + + Lower Case Letters A to F + Małe litery A do F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Nawiasy klamrowe + + + {[( + {[( + + + Punctuation + Interpunkcja + + + .,:; + .,:; + + + Quotes + Cudzysłowy + + + " ' + " ' + + + Math + Matematyka + + + <*+!?= + <*+!?= + + + Dashes + Myślniki + + + \_|-/ + \_|-/ + + + Logograms + Logogramy + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Zmień na tryb prosty + + + Simple + Prosty + + + Character set to exclude from generated password + Zestaw znaków do wykluczenia w wygenerowanym haśle + + + Do not include: + Nie zawiera: + + + Add non-hex letters to "do not include" list + Dodaj nieheksadecymalne litery do listy "nie dołączaj" + + + Hex + Heksadecymalne + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Wykluczone znaki: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + &Liczba słów: + + + Regenerate + Regeneruj + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Wybierz + + + + QMessageBox + + Overwrite + Zastąp + + + Delete + Usuń + + + Move + Przenieś + + + Empty + Pusty + + + Remove + Usuń + + + Skip + Pomiń + + + Disable + Wyłącz + + + Merge + Scal + QObject @@ -3263,34 +4124,18 @@ Używam domyślnego portu 19455. Cannot decrypt message Nie można odszyfrować wiadomości - - Timeout or cannot connect to KeePassXC - Przekroczony limit czasu lub nie można podłączyć się do KeePassXC - Action cancelled or denied Działanie anulowane lub odrzucone - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Nie można zaszyfrować wiadomości lub nie znaleziono klucza publicznego. Czy Native Messaging jest włączone w KeePassXC? - KeePassXC association failed, try again Skojarzenie KeePassXC nie powiodło się, spróbuj ponownie - - Key change was not successful - Zmiana klucza nie powiodła się - Encryption key is not recognized Klucz szyfrowania nie jest rozpoznawany - - No saved databases found - Nie znaleziono zapisanych baz danych - Incorrect action Nieprawidłowe działanie @@ -3353,7 +4198,7 @@ Używam domyślnego portu 19455. Length for the generated password. - Długość wygenerowanego hasła + Długość wygenerowanego hasła. length @@ -3416,10 +4261,6 @@ Używam domyślnego portu 19455. Insert password to unlock %1: Wprowadź hasło by odblokować %1: - - Failed to load key file %1 : %2 - Nieudane ładowanie pliku z kluczem %1 : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3454,7 +4295,7 @@ Dostępne polecenia: Find entries quickly. - Szybkie wyszukiwanie wpisów. + Szybkie wyszukiwanie wpisów. Search term. @@ -3462,7 +4303,7 @@ Dostępne polecenia: Merge two databases. - Połącz dwie bazy danych. + Scal dwie bazy danych. Path of the database to merge into. @@ -3504,12 +4345,6 @@ Dostępne polecenia: error reading from device błąd odczytu z urządzenia - - file empty ! - - plik pusty ! - - malformed string nieprawidłowy ciąg @@ -3546,10 +4381,6 @@ Dostępne polecenia: Created Stworzone - - Legacy Browser Integration - Przestarzała integracja z przeglądarką - Browser Integration Integracja z przeglądarką @@ -3578,10 +4409,6 @@ Dostępne polecenia: Word count for the diceware passphrase. Liczba słów dla hasła diceware. - - count - liczba - Wordlist for the diceware generator. [Default: EFF English] @@ -3593,70 +4420,573 @@ Dostępne polecenia: Wygeneruj nowe hasło losowe. - Length of the generated password. - Długość wygenerowanego hasła. + Invalid value for password length %1. + Niepoprawna wartość długości hasła %1. - Use lowercase characters in the generated password. - Użyj małych liter w wygenerowanym haśle. + Could not create entry with path %1. + Nie można utworzyć wpisu ze ścieżką %1. - Use uppercase characters in the generated password. - Użyj dużych liter w wygenerowanym haśle. + Enter password for new entry: + Wprowadź hasło dla nowego wpisu: - Use numbers in the generated password. - Użyj liczb w wygenerowanym haśle. + Writing the database failed %1. + Błąd przy zapisie bazy danych %1. - Use special characters in the generated password. - Użyj znaków specjalnych w wygenerowanym haśle. + Successfully added entry %1. + Pomyślnie dodano wpis %1. - Use extended ASCII in the generated password. - Użyj rozszerzone ASCII w wygenerowanym haśle. + Copy the current TOTP to the clipboard. + Skopiuj bieżące TOTP do schowka. + + + Invalid timeout value %1. + Nieprawidłowa wartość limitu czasu %1. + + + Entry %1 not found. + Nie znaleziono wpisu %1. + + + Entry with path %1 has no TOTP set up. + Wpis ze ścieżką %1 nie ma ustawionego TOTP. + + + Entry's current TOTP copied to the clipboard! + Bieżące TOTP wpisu zostało skopiowane do schowka! + + + Entry's password copied to the clipboard! + Hasło wpisu zostało skopiowane do schowka! + + + Clearing the clipboard in %1 second(s)... + Czyszczenie schowka za %1 sekundę...Czyszczenie schowka za %1 sekundy...Czyszczenie schowka za %1 sekund...Czyszczenie schowka za %1 sekund... + + + Clipboard cleared! + Schowek wyczyszczony! + + + Silence password prompt and other secondary outputs. + Cichy monit o hasło i inne wyjścia pomocnicze. + + + count + CLI parameter + liczba + + + Invalid value for password length: %1 + Niepoprawna wartość długości hasła: %1 + + + Could not find entry with path %1. + Nie można znaleźć wpisu ze ścieżką %1. + + + Not changing any field for entry %1. + Bez zmiany żadnego pola dla wpisu %1. + + + Enter new password for entry: + Wprowadź nowe hasło dls wpisu: + + + Writing the database failed: %1 + Błąd zapisu bazy danych: %1 + + + Successfully edited entry %1. + Pomyślnie edytowano wpis %1. + + + Length %1 + Długość %1 + + + Entropy %1 + Entropia %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Dodatkowe bity w wielu wyrazach %1 + + + Type: Bruteforce + Typ: Bruteforce + + + Type: Dictionary + Type: Słownikowy + + + Type: Dict+Leet + Typ: Słownikowy+Leet + + + Type: User Words + Typ: Słowa użytkownika + + + Type: User+Leet + Typ: Użytkownika+Leet + + + Type: Repeated + Typ: Powtarzany + + + Type: Sequence + Typ: Sekwencja + + + Type: Spatial + Typ: Przestrzenny + + + Type: Date + Typ: Data + + + Type: Bruteforce(Rep) + Typ: Bruteforce(Powt.) + + + Type: Dictionary(Rep) + Typ: Słownikowy(Powt.) + + + Type: Dict+Leet(Rep) + Typ: Słownikowy+Leet(Powt.) + + + Type: User Words(Rep) + Typ: Słowa użytkownika(Powt.) + + + Type: User+Leet(Rep) + Typ: Użytkownika+Leet(Powt.) + + + Type: Repeated(Rep) + Typ: Powtarzany(Powt.) + + + Type: Sequence(Rep) + Typ: Sekwencja(Powt.) + + + Type: Spatial(Rep) + Typ: Przestrzenny(Powt.) + + + Type: Date(Rep) + Typ: Data(Powt.) + + + Type: Unknown%1 + Typ: Nieznany%1 + + + Entropy %1 (%2) + Entropia %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Długość hasła (%1) != suma długości części (%2) *** + + + Failed to load key file %1: %2 + Nie udało się załadować pliku klucza %1: %2 + + + File %1 does not exist. + Plik %1 nie istnieje. + + + Unable to open file %1. + Nie można otworzyć pliku %1. + + + Error while reading the database: +%1 + Błąd podczas odczytu bazy danych: +%1 + + + Error while parsing the database: +%1 + Błąd podczas parsowania bazy danych: +%1 + + + Length of the generated password + Długość wygenerowanego hasła + + + Use lowercase characters + Użyj małych liter + + + Use uppercase characters + Użyj dużych liter + + + Use numbers. + Użyj liczb. + + + Use special characters + Użyj znaków specjalnych + + + Use extended ASCII + Użyj rozszerzonego ASCII + + + Exclude character set + Wyklucz zestaw znaków + + + chars + znaki + + + Exclude similar looking characters + Wyklucz podobnie wyglądające znaki + + + Include characters from every selected group + Uwzględnij znaki z każdej wybranej grupy + + + Recursively list the elements of the group. + Rekurencyjnie wylistuj elementy grupy. + + + Cannot find group %1. + Nie można znaleźć grupy %1. + + + Error reading merge file: +%1 + Błąd odczytu pliku scalania: +%1 + + + Unable to save database to file : %1 + Nie można zapisać bazy danych do pliku : %1 + + + Unable to save database to file: %1 + Nie można zapisać bazy danych do pliku: %1 + + + Successfully recycled entry %1. + Pomyślnie przeniesiono do kosza wpis %1. + + + Successfully deleted entry %1. + Pomyślnie usunięto wpis %1. + + + Show the entry's current TOTP. + Pokaż bieżące TOTP wpisu. + + + ERROR: unknown attribute %1. + BŁĄD: nieznany atrybut %1. + + + No program defined for clipboard manipulation + Nie zdefiniowano żadnego programu do manipulacji schowkiem + + + Unable to start program %1 + Nie można uruchomić programu %1 + + + file empty + plik pusty + + + %1: (row, col) %2,%3 + %1: (rząd, kolumna) %2,%3 + + + AES: 256-bit + AES: 256-bitowy + + + Twofish: 256-bit + Twofish: 256-bitowy + + + ChaCha20: 256-bit + ChaCha20: 256-bitowy + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – zalecany) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Ustawienia nieprawidłowe + + + Invalid Key + TOTP + Nieprawidłowy klucz + + + Message encryption failed. + Szyfrowanie wiadomości nie powiodło się. + + + No groups found + Nie znaleziono grup + + + Create a new database. + Stwórz nową bazę danych. + + + File %1 already exists. + Plik %1 już istnieje. + + + Loading the key file failed + Ładowanie pliku klucza nie powiodło się + + + No key is set. Aborting database creation. + Żaden klawisz nie jest ustawiony. Przerwanie tworzenia bazy danych. + + + Failed to save the database: %1. + Nie udało się zapisać bazy danych: %1. + + + Successfully created new database. + Pomyślnie utworzono nową bazę danych. + + + Insert password to encrypt database (Press enter to leave blank): + Wstaw hasło, aby zaszyfrować bazę danych (naciśnij Enter, aby pozostawić puste): + + + Creating KeyFile %1 failed: %2 + Tworzenie pliku klucza %1 nie powiodło się: %2 + + + Loading KeyFile %1 failed: %2 + Ładowanie pliku klucza %1 nie powiodło się: %2 + + + Remove an entry from the database. + Usuń wpis z bazy danych. + + + Path of the entry to remove. + Ścieżka wpisu do usunięcia. + + + Existing single-instance lock file is invalid. Launching new instance. + Istniejący plik blokady pojedynczego wystąpienia jest nieprawidłowy. Uruchamianie nowego wystąpienia. + + + The lock file could not be created. Single-instance mode disabled. + Nie można utworzyć pliku blokady. Tryb pojedynczej instancji jest wyłączony. + + + KeePassXC - cross-platform password manager + KeePassXC - wieloplatformowy menedżer haseł + + + filenames of the password databases to open (*.kdbx) + nazwy plików baz danych haseł do otwarcia (*.kdbx) + + + path to a custom config file + ścieżka do pliku z ustawieniami + + + key file of the database + plik klucza bazy danych + + + read password of the database from stdin + odczytaj hasło bazy danych z stdin + + + Parent window handle + Uchwyt okna nadrzędnego + + + Another instance of KeePassXC is already running. + Inna instancja KeePassXC jest już uruchomiona. + + + Fatal error while testing the cryptographic functions. + Błąd krytyczny podczas testowania funkcji kryptograficznych. + + + KeePassXC - Error + KeePassXC - Błąd + + + Database password: + Hasło bazy danych: + + + Cannot create new group + QtIOCompressor Internal zlib error when compressing: - Błąd wewnętrzny zlib podczas kompresowania: + Błąd wewnętrzny zlib podczas kompresowania: Error writing to underlying device: - Błąd w zapisie na urządzenie: + Błąd w zapisie na urządzenie: Error opening underlying device: - Błąd w otwieraniu z urządzenia: + Błąd w otwieraniu z urządzenia: Error reading data from underlying device: - Błąd w odczycie danych z urządzenia: + Błąd w odczycie danych z urządzenia: Internal zlib error when decompressing: - Błąd wewnętrzny zlib podczas dekompresowania: + Błąd wewnętrzny zlib podczas dekompresowania: QtIOCompressor::open The gzip format not supported in this version of zlib. - Format gzip nie wspierany przez tą wersję zlib. + Format gzip nie wspierany przez tę wersję zlib. Internal zlib error: - Błąd wewnętrzny zlib: + Błąd wewnętrzny zlib: + + + + SSHAgent + + Agent connection failed. + Połączenie agenta nie powiodło się. + + + Agent protocol error. + Błąd protokołu agenta. + + + No agent running, cannot add identity. + Żaden agent nie działa, nie można dodać tożsamości. + + + No agent running, cannot remove identity. + Żaden agent nie działa, nie można usunąć tożsamości. + + + Agent refused this identity. Possible reasons include: + Agent odmówił tej tożsamości. Możliwe przyczyny to: + + + The key has already been added. + Klucz został już dodany. + + + Restricted lifetime is not supported by the agent (check options). + Ograniczony czas życia nie jest obsługiwany przez agenta (sprawdź opcje). + + + A confirmation request is not supported by the agent (check options). + Żądanie potwierdzenia nie jest obsługiwane przez agenta (sprawdź opcje). + + + + SearchHelpWidget + + Search Help + Przeszukaj pomoc + + + Search terms are as follows: [modifiers][field:]["]term["] + Zapytania wyszukiwania są następujące: [modyfikatory][pole:]["]zapytanie["] + + + Every search term must match (ie, logical AND) + Każde zapytanie wyszukiwania musi pasować (tj. logiczny AND) + + + Modifiers + Modyfikatory + + + exclude term from results + wyklucz zapytanie z wyników + + + match term exactly + dopasuj dokładnie zapytanie + + + use regex in term + użyj wyrażenia regularnego w zapytaniu + + + Fields + Pola + + + Term Wildcards + Wieloznacznik zapytania + + + match anything + dopasuj cokolwiek + + + match one + dopasuj jeden + + + logical OR + logiczny OR + + + Examples + Przykłady SearchWidget - - Search... - Szukaj... - Search Szukaj @@ -3665,316 +4995,332 @@ Dostępne polecenia: Clear Wyczyść - - Case Sensitive - Rozróżniaj wielkość znaków - Limit search to selected group Ogranicz wyszukiwanie do wybranych grup + + Search Help + Przeszukaj pomoc + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Szukaj (%1)... + + + Case sensitive + Rozróżniaj wielkość znaków + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Nowe żądanie skojarzenia klucza + Active + Aktywuj - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Otrzymałeś żądanie skojarzenia powyższego klucza. -Jeżeli chcesz zezwolić na dostęp do twojej bazy danych KeePassXC, -nadaj unikatową nazwę do zidentyfikowania i zaakceptuj. + Allow export + Pozwól eksportować - KeePassXC: Overwrite existing key? - KeePassXC: Nadpisać istniejący klucz? + Allow import + Pozwól importować - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Współdzielony klucz szyfrujący o nazwie "%1" już istnieje. -Czy chcesz go nadpisać? + Own certificate + Własny certyfikat - KeePassXC: Update Entry - KeePassXC: Aktualizacja wpisu + Fingerprint: + Odcisk palca: - Do you want to update the information in %1 - %2? - Czy chcesz uaktualnić informację w %1 - %2? + Certificate: + Certyfikat: - KeePassXC: Database locked! - KeePassXC: Baza danych zablokowana! + Signer + Podpisujący - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Aktywna baza danych jest zablokowana! -Proszę odblokować wybraną bazę albo wybrać inną, która jest odblokowana. + Key: + Klucz: - KeePassXC: Removed keys from database - KeePassXC: Usunięto klucze z bazy danych + Generate + Wygeneruj + + + Import + Importuj + + + Export + Eksportuj + + + Imported certificates + Importowane certyfikaty + + + Trust + Zaufaj + + + Ask + Zapytaj + + + Untrust + Nie ufaj + + + Remove + Usuń + + + Path + Ścieżka + + + Status + Status + + + Fingerprint + Odcisk palca + + + Certificate + Certyfikat + + + Trusted + Zaufany + + + Untrusted + Niezaufany + + + Unknown + Nieznany + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + Plik klucza KeeShare + + + All files + Wszystkie pliki + + + Select path + Wybierz ścieżkę + + + Exporting changed certificate + Eksportowanie zmienionego certyfikatu + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Wyeksportowany certyfikat nie jest tym samym, co używany. Czy chcesz wyeksportować bieżący certyfikat? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Importuj z kontenera bez podpisu + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Nie możemy zweryfikować źródła udostępnionego kontenera, ponieważ nie jest on podpisany. Czy na pewno chcesz importować dane z %1? + + + Import from container with certificate + Importuj z kontenera z certyfikatem + + + Not this time + Nie tym razem + + + Never + Nigdy + + + Always + Zawsze + + + Just this time + Tylko tym razem + + + Import from %1 failed (%2) + Import z %1 zakończył się niepomyślnie (%2) + + + Import from %1 successful (%2) + Import z %1 zakończył się pomyślnie (%2) + + + Imported from %1 + Importowane z %1 + + + Signed share container are not supported - import prevented + Podpisany kontener udostępniania nie jest obsługiwany - import został zablokowany + + + File is not readable + Plik nie jest czytelny + + + Invalid sharing container + Nieprawidłowy kontener udostępniania + + + Untrusted import prevented + Uniemożliwiono niezaufany import + + + Successful signed import + Pomyślnie podpisany import + + + Unexpected error + Niespodziewany błąd + + + Unsigned share container are not supported - import prevented + Niepodpisany kontener udostępniania nie jest obsługiwany - import został zablokowany + + + Successful unsigned import + Pomyślnie niepodpisany import + + + File does not exist + Plik nie istnieje + + + Unknown share container type + Nieznany typ kontenera udostępniania + + + Overwriting signed share container is not supported - export prevented + Zastąpienie podpisanego kontenera udostępniania nie jest obsługiwane - eksport został zablokowany + + + Could not write export container (%1) + Nie można zapisać kontenera eksportu (%1) + + + Overwriting unsigned share container is not supported - export prevented + Zastąpienie niepodpisanego kontenera udostępniania nie jest obsługiwane - eksport został zablokowany + + + Could not write export container + Nie można zapisać kontenera eksportu + + + Unexpected export error occurred + Wystąpił nieoczekiwany błąd eksportu + + + Export to %1 failed (%2) + Eksport do %1 zakończył się niepomyślnie (%2) + + + Export to %1 successful (%2) + Eksport do %1 zakończył się pomyślnie (%2) + + + Export to %1 + Eksportuj do %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Czy chcesz zaufać %1 z odciskiem palca %2 z %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Hasło zależne od czasu + + + 000000 + 000000 + + + Copy + Skopiuj - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Pomyślnie usunięto %n klucz szyfrowania z ustawień KeePassX/Http.Pomyślnie usunięto %n klucze szyfrowania z ustawień KeePassX/Http.Pomyślnie usunięto %n kluczy szyfrowania z ustawień KeePassX/Http.Pomyślnie usunięto %n klucz szyfrowania z ustawień KeePassX/Http. - - - KeePassXC: No keys found - KeePassXC: Nie znaleziono kluczy - - - No shared encryption-keys found in KeePassHttp Settings. - Nie znaleziono współdzielonych kluczy szyfrujących w ustawieniach KeePassHTTP. - - - KeePassXC: Settings not available! - KeePassXC: Ustawienia niedostępne! - - - The active database does not contain an entry of KeePassHttp Settings. - Aktywna baza danych nie zawiera wpisu z ustawieniami KeePassHTTP. - - - Removing stored permissions... - Usuwanie przechowywanych uprawnień... - - - Abort - Zaniechaj - - - KeePassXC: Removed permissions - KeePassXC: Usunięto uprawnienia - - - Successfully removed permissions from %n entries. - Pomyślnie usunięto uprawnienia z %n wpisu.Pomyślnie usunięto uprawnienia z %n wpisów.Pomyślnie usunięto uprawnienia z %n wpisów.Pomyślnie usunięto uprawnienia z %n wpisu. - - - KeePassXC: No entry with permissions found! - KeePassXC: Nie znaleziono wpisu z uprawnieniami! - - - The active database does not contain an entry with permissions. - Aktywna baza danych nie zawiera wpisu z uprawnieniami. + Expires in <b>%n</b> second(s) + Wygasa za <b>%n</b> sekundęWygasa za <b>%n</b> sekundyWygasa za <b>%n</b> sekundWygasa za <b>%n</b> sekund - SettingsWidget + TotpExportSettingsDialog - Application Settings - Ustawienia aplikacji + Copy + Skopiuj - General - Główne + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + UWAGA: Te ustawienia TOTP są niestandardowe i mogą nie działać z innymi autoryzatoram. - Security - Bezpieczeństwo + There was an error creating the QR code. + Wystąpił błąd podczas tworzenia kodu QR. - Access error for config file %1 - Błąd dostępu pliku konfiguracyjnego %1 + Closing in %1 seconds. + Zamykanie za %1 sekund. - SettingsWidgetGeneral - - Basic Settings - Ustawienia podstawowe - - - Start only a single instance of KeePassXC - Uruchom tylko jedną instancję KeePassXC - - - Remember last databases - Pamiętaj ostatnią bazę danych - - - Remember last key files and security dongles - Zapamiętaj ostatnie pliki klucze i klucze sprzętowe - - - Load previous databases on startup - Załaduj poprzednie bazy danych podczas uruchomienia - - - Automatically save on exit - Automatycznie zapisz przy wyjściu - - - Automatically save after every change - Automatycznie zapisz po każdej zmianie - - - Automatically reload the database when modified externally - Automatycznie przeładuj bazę danych, gdy zostanie zmodyfikowana zewnętrznie - - - Minimize when copying to clipboard - Zminimalizuj po skopiowaniu do schowka - - - Minimize window at application startup - Minimalizuj okno podczas uruchomienia aplikacji - - - Use group icon on entry creation - Użyj ikony grupy podczas tworzenia wpisu - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Nie zaznaczaj bazy danych jako zmodyfikowanej dla zmian innych niż dane (np. rozwijanie grup) - - - Hide the Details view - Ukryj widok Szczegóły - - - Show a system tray icon - Pokaż ikonę w zasobniku systemowym - - - Hide window to system tray when minimized - Schowaj okno do zasobnika podczas minimalizacji - - - Hide window to system tray instead of app exit - Schowaj okno do zasobnika zamiast wyłączenia aplikacji - - - Dark system tray icon - Ciemna ikona w zasobniku systemowym - - - Language - Język - - - Auto-Type - Auto-uzupełnianie - - - Use entry title to match windows for global Auto-Type - Użyj tytułu wpisy, aby dopasować okna dla globalnego auto-uzupełniania - - - Use entry URL to match windows for global Auto-Type - Użyj adresu URL wpisy, aby dopasować okna dla globalnego auto-uzupełniania - - - Always ask before performing Auto-Type - Zawsze pytaj przed wykonaniem auto-uzupełninia - - - Global Auto-Type shortcut - Globalny skrót auto-uzupełnianie - - - Auto-Type delay - Opóźnienie auto-uzupełniania - - - ms - Milliseconds - ms - - - Startup - Uruchamianie - - - File Management - Zarządzanie plikami - - - Safely save database files (may be incompatible with Dropbox, etc) - Bezpiecznie zapisuj pliki bazy danych (może być niezgodne z Dropbox itp.) - - - Backup database file before saving - Utwórz kopię zapasową pliku bazy danych przed zapisaniem - - - Entry Management - Zarządzanie wpisami - - - General - Ogólne - - - - SettingsWidgetSecurity - - Timeouts - Limity czasowe - - - Clear clipboard after - Wyczyść schowek po - - - sec - Seconds - s - - - Lock databases after inactivity of - Zablokuj bazę danych po nieaktywności - - - Convenience - Poręczność - - - Lock databases when session is locked or lid is closed - Zablokuj bazy danych, gdy sesja jest zablokowana albo pokrywa jest zamknięta - - - Lock databases after minimizing the window - Zablokuj bazę danych po zminimalizowaniu okna - - - Don't require password repeat when it is visible - Nie wymagaj powtarzania hasła, gdy jest widoczne - - - Show passwords in cleartext by default - Domyślnie pokazuj hasła - - - Hide passwords in the preview panel - Ukryj hasła w panelu podglądu - - - Hide entry notes by default - Domyślnie ukrywaj wpisy notatek - - - Privacy - Prywatność - - - Use Google as fallback for downloading website icons - Użyj Google jako zastępstwa dla pobierania ikon witryn internetowych - - - Re-lock previously locked database after performing Auto-Type - Ponownie zablokuj poprzednio zablokowaną bazę danych po wykonaniu auto-uzupełninia - - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Ustaw TOTP @@ -3996,59 +5342,84 @@ Proszę odblokować wybraną bazę albo wybrać inną, która jest odblokowana.< Użyj niestandardowych ustawień - Note: Change these settings only if you know what you are doing. - Uwaga: zmień te ustawienia tylko wtedy, gdy wiesz, co robisz. + Custom Settings + Ustawienia niestandardowe Time step: Krok czasowy: - 8 digits - 8 cyfr - - - 6 digits - 6 cyfr + sec + Seconds + s Code size: Rozmiar kodu: - sec - Seconds - s + 6 digits + 6 cyfr + + + 7 digits + 7 cyfr + + + 8 digits + 8 cyfr - TotpDialog + UpdateCheckDialog - Timed Password - Hasło zależne od czasu + Checking for updates + Sprawdzanie aktualizacji - 000000 - 000000 + Checking for updates... + Sprawdzanie aktualizacji... - Copy - Skopiuj + Close + Zamknij - Expires in - Wygasa za + Update Error! + Błąd aktualizacji! - seconds - sekund + An error occurred in retrieving update information. + Wystąpił błąd podczas pobierania informacji o aktualizacji. - - - UnlockDatabaseWidget - Unlock database - Odblokuj bazę danych + Please try again later. + Spróbuj ponownie później. + + + Software Update + Aktualizacja oprogramowania + + + A new version of KeePassXC is available! + Nowa wersja KeePassXC jest dostępna! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 jest już dostępny — masz %2. + + + Download it at keepassxc.org + Pobierz to z keepassxc.org + + + You're up-to-date! + Jesteś aktualny! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 to obecnie najnowsza dostępna wersja @@ -4083,42 +5454,26 @@ Proszę odblokować wybraną bazę albo wybrać inną, która jest odblokowana.< - main + YubiKeyEditWidget - Remove an entry from the database. - Usuń wpis z bazy danych. + Refresh + Odśwież - Path of the database. - Ścieżka bazy danych. + YubiKey Challenge-Response + Wyzwanie-odpowiedź YubiKey - Path of the entry to remove. - Ścieżka wpisu do usunięcia. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Jeśli jesteś właścicielem <a href="https://www.yubico.com/">YubiKey</a>, możesz go użyć do zwiększenia bezpieczeństwa.</p><p>YubiKey wymaga zaprogramowania jednego z jego slotów jako<a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - wieloplatformowy menedżer haseł + No YubiKey detected, please ensure it's plugged in. + Nie wykryto YubiKey, upewnij się, że jest włożony. - filenames of the password databases to open (*.kdbx) - nazwy plików baz danych haseł do otwarcia (*.kdbx) - - - path to a custom config file - ścieżka do pliku z ustawieniami - - - key file of the database - plik klucza bazy danych - - - read password of the database from stdin - odczytaj hasło bazy danych z stdin - - - Parent window handle - Uchwyt okna nadrzędnego + No YubiKey inserted. + Nie włożono YubiKey. \ No newline at end of file diff --git a/share/translations/keepassx_pt.ts b/share/translations/keepassx_pt.ts new file mode 100644 index 000000000..71df82a7b --- /dev/null +++ b/share/translations/keepassx_pt.ts @@ -0,0 +1,5479 @@ + + + AboutDialog + + About KeePassXC + Sobre o KeePassXC + + + About + Sobre + + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Reporte os erros em: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + KeePassXC é distribuído sob os termos da GNU General Public License (GPL) versão 2 ou (em sua opção) versão 3. + + + Contributors + Colaboradores + + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Consulte os contributos no GitHub</a> + + + Debug Info + Informação de depuração + + + Include the following information whenever you report a bug: + Inclua as seguintes informações sempre que reportar um erro: + + + Copy to clipboard + Copiar para a área de transferência + + + Project Maintainers: + Manutenção do projeto: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Um agradecimento especial da equipa do KeePassXC a debfx por ter criado a aplicação KeePassX. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Ativar agente SSH (tem que reiniciar) + + + Use OpenSSH for Windows instead of Pageant + Utilizar OpeSSH for Windows em vez de Pageant + + + + ApplicationSettingsWidget + + Application Settings + Definições da aplicação + + + General + Geral + + + Security + Segurança + + + Access error for config file %1 + Erro de acesso ao ficheiro %1 + + + Icon only + Apenas ícones + + + Text only + Apenas texto + + + Text beside icon + Texto ao lado dos ícones + + + Text under icon + Texto por baixo dos ícones + + + Follow style + Seguir estilo + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Definições básicas + + + Startup + Arranque + + + Start only a single instance of KeePassXC + Abrir apenas uma instância do KeepassXC + + + Remember last databases + Memorizar últimas bases de dados + + + Remember last key files and security dongles + Memorizar últimos ficheiros-chave e dispositivos de segurança + + + Load previous databases on startup + Ao iniciar, carregar a última base de dados utilizada + + + Minimize window at application startup + Minimizar janela ao iniciar a aplicação + + + File Management + Gestão de ficheiros + + + Safely save database files (may be incompatible with Dropbox, etc) + Guardar bases de dados em segurança (pode ser incompatível com DropBox e outros serviços) + + + Backup database file before saving + Criar backup da base de dados antes de guardar + + + Automatically save after every change + Guardar automaticamente a cada alteração + + + Automatically save on exit + Guardar automaticamente ao fechar + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Não marcar base de dados como alterada para modificações não efetuadas em dados (ex.: expansão de grupos) + + + Automatically reload the database when modified externally + Recarregar base de dados se esta for modificada externamente + + + Entry Management + Gestão de entradas + + + Use group icon on entry creation + Utilizar ícone do grupo ao criar a entrada + + + Minimize when copying to clipboard + Minimizar ao copiar para a área de transferência + + + Hide the entry preview panel + Ocultar painel de pré-visualização de entradas + + + General + Geral + + + Hide toolbar (icons) + Ocultar barra de ferramentas (ícones) + + + Minimize instead of app exit + Minimizar aplicação em vez de fechar + + + Show a system tray icon + Mostrar ícone na bandeja do sistema + + + Dark system tray icon + Ícone escuro na bandeja + + + Hide window to system tray when minimized + Ao minimizar, ocultar a janela na bandeja do sistema + + + Language + Idioma + + + Auto-Type + Escrita automática + + + Use entry title to match windows for global Auto-Type + Utilizar título da entrada para fazer coincidir com a escrita automática + + + Use entry URL to match windows for global Auto-Type + Utilizar URL da entrada para fazer coincidir com a escrita automática + + + Always ask before performing Auto-Type + Perguntar antes de executar a escrita automática + + + Global Auto-Type shortcut + Atalho global para escrita automática + + + Auto-Type typing delay + Atraso para escrita automática + + + ms + Milliseconds + ms + + + Auto-Type start delay + Atraso para iniciar a escrita automática + + + Check for updates at application startup + Ao iniciar, verificar se existem atualizações + + + Include pre-releases when checking for updates + Incluir pré-lançamentos ao verificar se existem atualizações + + + Movable toolbar + Barra de ferramentas amovível + + + Button style + Estilo do botão + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Tempo limite + + + Clear clipboard after + Limpar área de transferência após + + + sec + Seconds + seg + + + Lock databases after inactivity of + Bloquear base de dados se inativa durante + + + min + min + + + Forget TouchID after inactivity of + Esquecer TouchID após inatividade de + + + Convenience + Conveniência + + + Lock databases when session is locked or lid is closed + Bloquear base de dados ao bloquear a sessão ou ao fechar a tampa do portátil + + + Forget TouchID when session is locked or lid is closed + Esquecer TouchID ao bloquear a sessão ou ao fechar a tampa do portátil + + + Lock databases after minimizing the window + Bloquear base de dados ao minimizar a janela + + + Re-lock previously locked database after performing Auto-Type + Bloquear novamente a base de dados depois de usar a escrita automática + + + Don't require password repeat when it is visible + Não pedir repetição da palavra-passe se esta estiver visível + + + Don't hide passwords when editing them + Não ocultar palavras-passe durante a edição + + + Don't use placeholder for empty password fields + Não utilizar marcadores de posição para campos vazios + + + Hide passwords in the entry preview panel + Ocultar palavras-passe no painel de pré-visualização de entradas + + + Hide entry notes by default + Por definição, ocultar notas da entrada + + + Privacy + Privacidade + + + Use DuckDuckGo as fallback for downloading website icons + Utilizar DuckDuckGo como recurso para descarregar os ícones dos sites + + + + AutoType + + Couldn't find an entry that matches the window title: + Não foi encontrada uma entrada coincidente com o título da janela: + + + Auto-Type - KeePassXC + KeePassXC - Escrita automática + + + Auto-Type + Escrita automática + + + The Syntax of your Auto-Type statement is incorrect! + A sintaxe da instrução de escrita automática está errada! + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + O comando de escrita automática tem um atraso muito grande. Deseja mesmo continuar? + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + O comando de escrita automática tem uma pressão de teclas muito lenta. Deseja mesmo continuar? + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + O comando de escrita automática contém argumentos que se repetem muitas vezes. Deseja mesmo continuar? + + + + AutoTypeAssociationsModel + + Window + Janela + + + Sequence + Sequência + + + Default sequence + Sequência padrão + + + + AutoTypeMatchModel + + Group + Grupo + + + Title + Título + + + Username + Nome de utilizador + + + Sequence + Sequência + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + KeePassXC - Escrita automática + + + Select entry to Auto-Type: + Selecionar entrada para escrita automática: + + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + KeePassXC-Browser - Confirmar acesso + + + Remember this decision + Memorizar esta escolha + + + Allow + Permitir + + + Deny + Recusar + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + %1 solicitou o acesso a palavras-passe para o(s) seguinte(s) itens. +Selecione se deseja permitir o acesso. + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser - Guardar entrada + + + Ok + Aceitar + + + Cancel + Cancelar + + + You have multiple databases open. +Please select the correct database for saving credentials. + Existem várias bases de dados abertas. +Selecione a base de dados correta para guardar as credenciais. + + + + BrowserOptionDialog + + Dialog + Diálogo + + + This is required for accessing your databases with KeePassXC-Browser + Necessário para aceder às suas bases de dados com KeePassXC-Browser + + + Enable KeepassXC browser integration + Ativar integração com o navegador + + + General + Geral + + + Enable integration for these browsers: + Ativar integração para estes navegadores: + + + &Google Chrome + &Google Chrome + + + &Firefox + &Firefox + + + &Chromium + &Chromium + + + &Vivaldi + &Vivaldi + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + Mostrar &notificação se as credenciais forem solicitadas + + + Re&quest to unlock the database if it is locked + Pe&dir para desbloquear a base de dados se esta estiver bloqueada + + + Only entries with the same scheme (http://, https://, ...) are returned. + Apenas serão devolvidas as entradas com o mesmo esquema (http://, https://, ...). + + + &Match URL scheme (e.g., https://...) + Corresponder com os esque&mas do URL (https://...) + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + Apenas devolve as melhores entradas para o URL específico em vez das entradas para o domínio. + + + &Return only best-matching credentials + Devolve&r apenas as credenciais mais parecidas + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + Ordenar credenciais coi&ncidentes por título + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + Ordenar credenciais coincidentes por nome de &utilizador + + + Advanced + Avançado + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + Nunc&a perguntar antes de aceder às credenciais + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + Nun&ca perguntar antes de atualizar as credenciais + + + Only the selected database has to be connected with a client. + Apenas a base de dados selecionada tem que estar conectada a um cliente. + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + Pesquisar por credenciais semel&hantes em todas as base de dados abertas + + + Automatically creating or updating string fields is not supported. + A criação ou atualização dos campos de cadeias não é suportada. + + + &Return advanced string fields which start with "KPH: " + Most&rar campos avançados que começem com "KPH: " + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + Ao iniciar, atualizar automaticamente o caminho do KeePassXC ou do binário keepassxc-proxy para os 'sripts' nativos de mensagens. + + + Update &native messaging manifest files at startup + Ao iniciar, atualizar ficheiros de mensagens &nativas + + + Support a proxy application between KeePassXC and browser extension. + Suporte à utilização de uma aplicação proxy entre o KeePassXC a a extensão do navegador. + + + Use a &proxy application between KeePassXC and browser extension + Utilizar uma aplicação de &proxy entre o KeePassXC e a extensão do navegador + + + Use a custom proxy location if you installed a proxy manually. + Utilize um proxy personalizado caso o tenha instalado manualmente. + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + Utilizar pro&xy personalizado + + + Browse... + Button for opening file dialog + Explorar... + + + <b>Warning:</b> The following options can be dangerous! + <b>Aviso</b>: as opções seguintes podem ser perigosas! + + + Select custom proxy location + Selecionar localização do proxy personalizado + + + &Tor Browser + Navegador &Tor + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Atenção</b>, a aplicação keepassxc-proxy não foi encontrada!<br />Verifique o diretório de instalação do KeePassXC ou confirme o caminho nas definições avançadas.<br />A integração com o navegador não irá funcionar sem esta aplicação.<br />Caminho esperado: + + + Executable Files + Ficheiros executáveis + + + All Files + Todos os ficheiros + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Não pedir permissão para autorização &básica HTTP + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + + + + + BrowserService + + KeePassXC: New key association request + KeePassXC: Pedido de associação da nova chave + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + Recebeu um pedido de associação para a chave acima indicada. + +Se quiser permitir o acesso à sua base de dados do KeePassXC, +introduza um nome identificável e aceite o pedido. + + + Save and allow access + Guardar e permitir acesso + + + KeePassXC: Overwrite existing key? + KeePassXC: Substituir chave existente? + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + Já existe uma chave de cifra partilhada com o nome "%1". +Deseja substituir a chave existente? + + + KeePassXC: Update Entry + KeePassXC: Atualizar entrada + + + Do you want to update the information in %1 - %2? + Deseja atualizar as informações em %1 - %2? + + + Abort + Abortar + + + Converting attributes to custom data… + A converter atributos para dados personalizados... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Atributos KeePassHTTP convertidos + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Os atributos para %1 entrada(s) foram convertidos. +%2 chaves movidas para dados personalizados. + + + Successfully moved %n keys to custom data. + %n chave movida para dados personalizados.%n chaves movidas para dados personalizados. + + + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Não existem entradas com atributos KeePassHTTP! + + + The active database does not contain an entry with KeePassHTTP attributes. + A base de dados ativa não tem entradas com atributos KePassHTTP. + + + KeePassXC: Legacy browser integration settings detected + KeePassXC: Detetadas definições de integração legada com o navegador + + + KeePassXC: Create a new group + + + + A request for creating a new group "%1" has been received. +Do you want to create this group? + + + + + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + + + + + CloneDialog + + Clone Options + Opções de clonagem + + + Append ' - Clone' to title + Adicionar ' -Clone' ao título + + + Replace username and password with references + Substituir nome de utilizador e palavra-passe por referências + + + Copy history + Histórico de cópias + + + + CsvImportWidget + + Import CSV fields + Importar campos do CSV + + + filename + nome do ficheiro + + + size, rows, columns + tamanho, linhas, colunas + + + Encoding + Codificação + + + Codec + Codificador + + + Text is qualified by + Texto qualificado por + + + Fields are separated by + Campos separados por + + + Comments start with + Comentários iniciados por + + + First record has field names + Primeiro registo tem nome dos campos + + + Number of headers line to discard + Número de linhas de cabeçalho a ignorar + + + Consider '\' an escape character + Considerar '\' como carácter de escape + + + Preview + Antevisão + + + Column layout + Disposição de colunas + + + Not present in CSV file + Não existente no ficheiro CSV + + + Imported from CSV file + Importar de ficheiro CSV + + + Original data: + Dados originais: + + + Error + Erro + + + Empty fieldname %1 + Nome de campo vazio %1 + + + column %1 + coluna %1 + + + Error(s) detected in CSV file! + Detetado(s) erro(s) no ficheiro CSV! + + + [%n more message(s) skipped] + [%n mensagem ignorada][%n mensagens ignoradas] + + + CSV import: writer has errors: +%1 + Importação CSV com erros: +%1 + + + + CsvParserModel + + %n column(s) + %n coluna,%n coluna(s), + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes + + + %n row(s) + %n linha%n linhas + + + + Database + + Root + Root group name + Raiz + + + File %1 does not exist. + %1 não existe. + + + Unable to open file %1. + Não foi possível abrir o ficheiro %1. + + + Error while reading the database: %1 + Erro ao ler a base de dados: %1 + + + Could not save, database has no file name. + Não é possível guardar porque a base de dados não tem nome. + + + File cannot be written as it is opened in read-only mode. + Não é possível escrever no ficheiro porque este foi aberto no modo de leitura. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + KeePassXC - Desbloquear base de dados + + + + DatabaseOpenWidget + + Enter master key + Introduza a chave-mestre + + + Key File: + Ficheiro-chave: + + + Password: + Palavra-passe: + + + Browse + Explorar + + + Refresh + Recarregar + + + Challenge Response: + Pergunta de segurança: + + + Legacy key file format + Ficheiro-chave no formato legado + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + Está a utilizar um formato legado que pode, no futuro, deixar +de ser suportado. + +Deve considerar a geração de um novo ficheiro-chave. + + + Don't show this warning again + Não mostrar novamente + + + All files + Todos os ficheiros + + + Key files + Ficheiros-chave + + + Select key file + Selecione o ficheiro-chave + + + TouchID for quick unlock + TouchID para desbloqueio rápido + + + Unable to open the database: +%1 + Não foi possível abrir a base de dados: +%1 + + + Can't open key file: +%1 + Não foi possível abrir o ficheiro-chave: +%1 + + + + DatabaseSettingWidgetMetaData + + Passwords + Palavras-passe + + + + DatabaseSettingsDialog + + Advanced Settings + Definições avançadas + + + General + Geral + + + Security + Segurança + + + Master Key + Chave-mestre + + + Encryption Settings + Definições de cifra + + + Browser Integration + Integração com navegador + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Definições KeePassXC-Browser + + + &Disconnect all browsers + &Desconectar de todos os navegadores + + + Forg&et all site-specific settings on entries + &Esquecer definições específicas dos sites (nas entradas) + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Mover atributos KeePassHTTP para dados personalizados KeePassX&C-Browser + + + Stored keys + Chaves guardadas + + + Remove + Remover + + + Delete the selected key? + Eliminar a chave selecionada? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Tem a certeza de que deseja eliminar a chave selecionada? +Esta ação pode impedir a ligação ao suplemento do navegador. + + + Key + Chave + + + Value + Valor + + + Enable Browser Integration to access these settings. + Ative a integração com o navegador para aceder a estas definições. + + + Disconnect all browsers + Desconectar de todos os navegadores + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Tem a certeza de que deseja desconectar todos os navegadores? +Esta ação pode interferir com a ligação ao suplemento. + + + KeePassXC: No keys found + KeePassXC: Nenhuma chave encontrada + + + No shared encryption keys found in KeePassXC settings. + Não foram encontradas chaves de cifra nas definições do KeePassXC. + + + KeePassXC: Removed keys from database + KeePassXC: Chaves removidas da base de dados + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Removida com sucesso %n chave de cifra das definições do KeePassXC.Removidas com sucesso %n chaves de cifra das definições do KeePassXC. + + + Forget all site-specific settings on entries + Esquecer definições específicas dos sites (nas entradas) + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Tem a certeza de que deseja esquecer as definições específicas de todas as entradas? +Serão removidas todas as permissões para aceder às entradas. + + + Removing stored permissions… + A remover permissões guardadas... + + + Abort + Abortar + + + KeePassXC: Removed permissions + KeePassXC: Permissões removidas + + + Successfully removed permissions from %n entry(s). + Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas. + + + KeePassXC: No entry with permissions found! + KeePassXC: Não existem entradas com permissões! + + + The active database does not contain an entry with permissions. + A base de dados ativa não contém uma entrada com permissões. + + + Move KeePassHTTP attributes to custom data + Mover atributos KeePassHTTP para dados personalizados + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Tem a certeza de que deseja atualizar todos os dados legados para a versão mais recente? +Esta atualização é necessária para manter a compatibilidade com o suplemento. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algoritmo de cifra: + + + AES: 256 Bit (default) + AES: 256 bits (padrão) + + + Twofish: 256 Bit + Twofish: 256 bits + + + Key Derivation Function: + Função derivação de chave: + + + Transform rounds: + Ciclos de transformação: + + + Benchmark 1-second delay + Testar atraso de 1 segundo + + + Memory Usage: + Utilização de memória: + + + Parallelism: + Paralelismo: + + + Decryption Time: + Tempo para decifrar: + + + ?? s + ?? s + + + Change + Alterar + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Os valores mais altos oferecem mais proteção mas também pode demorar mais tempo para abrir a base de dados. + + + Database format: + Formato da base de dados: + + + This is only important if you need to use your database with other programs. + Apenas relevante se necessitar de utilizar a base de dados com outros programas. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recomendado) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + inalterado + + + Number of rounds too high + Key transformation rounds + Número de ciclos muito alto + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + Está a utilizar um número muito alto para a transformação de chaves com Argon2. + +Se mantiver este número, a sua base de dados pode levar muitas horas/dias (ou ainda mais) para ser aberta! + + + Understood, keep number + Percebi, manter número + + + Cancel + Cancelar + + + Number of rounds too low + Key transformation rounds + Número de ciclos muito baixo + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + Está a utilizar um número muito baixo para a transformação de chaves com Argon2. + +Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilmente! + + + KDF unchanged + KDF inalterado + + + Failed to transform key with new KDF parameters; KDF unchanged. + Erro ao transformar a chave com os novos parâmetros KDF; KDF inalterado. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + processoprocessos + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + Meta-dados da base de dados + + + Database name: + Nome da base de dados: + + + Database description: + Descrição da base de dados: + + + Default username: + Nome de utilizador padrão: + + + History Settings + Definições do histórico + + + Max. history items: + Número máximo de itens no histórico: + + + Max. history size: + Tamanho máximo para o histórico: + + + MiB + MiB + + + Use recycle bin + Utilizar reciclagem + + + Additional Database Settings + Definições extra para a base de dados + + + Enable &compression (recommended) + Ativar compr&essão (recomendado) + + + + DatabaseSettingsWidgetKeeShare + + Sharing + Partilha + + + Breadcrumb + Breadcrumb + + + Type + Tipo + + + Path + Caminho + + + Last Signer + Último signatário + + + Certificates + Certificados + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Adicionar proteção extra... + + + No encryption key added + Chave de cifra não adicionada + + + You must add at least one encryption key to secure your database! + Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados! + + + No password set + Palavra-passe não definida + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida! + +Tem a certeza de que deseja continuar? + + + Unknown error + Erro desconhecido + + + Failed to change master key + Erro ao alterar a chave-mestre + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nome da base de dados: + + + Description: + Descrição: + + + + DatabaseTabWidget + + KeePass 2 Database + Base de dados do KeePass 2 + + + All files + Todos os ficheiros + + + Open database + Abrir base de dados + + + CSV file + Ficheiro CSV + + + Merge database + Combinar base de dados + + + Open KeePass 1 database + Abrir base de dados do KeePass 1 + + + KeePass 1 database + Base de dados do KeePass 1 + + + Export database to CSV file + Exportar base de dados para ficheiro CSV + + + Writing the CSV file failed. + Erro ao escrever no ficheiro CSV. + + + Database creation error + Erro ao criar a base de dados + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + A base de dados criada não tem chave ou KDF e não pode ser guardada. +Existe aqui um erro que deve ser reportado aos programadores. + + + The database file does not exist or is not accessible. + O ficheiro da base de dados não existe ou não pode ser acedido. + + + Select CSV file + Selecionar ficheiro CSV + + + New Database + Nova base de dados + + + %1 [New Database] + Database tab name modifier + %1 [Nova base de dados] + + + %1 [Locked] + Database tab name modifier + %1 [Bloqueada] + + + %1 [Read-only] + Database tab name modifier + %1 [Apenas leitura] + + + + DatabaseWidget + + Searching... + Pesquisar.. + + + Do you really want to delete the entry "%1" for good? + Tem a certeza de que deseja eliminar permanentemente a entrada "%1"? + + + Do you really want to move entry "%1" to the recycle bin? + Tem a certeza de que deseja mover a entrada "%1" para a reciclagem? + + + Do you really want to move %n entry(s) to the recycle bin? + Tem a certeza de que deseja mover %n entrada para a reciclagem?Tem a certeza de que deseja mover %n entradas para a reciclagem? + + + Execute command? + Executar comando? + + + Do you really want to execute the following command?<br><br>%1<br> + Tem a certeza de que deseja executar este comando?<br><br>%1<br> + + + Remember my choice + Memorizar escolha + + + Do you really want to delete the group "%1" for good? + Tem a certeza de que deseja eliminar permanentemente o grupo "%1"? + + + No current database. + Nenhuma base de dados. + + + No source database, nothing to do. + Não existe base de dados de origem, nada a fazer. + + + Search Results (%1) + Resultados da pesquisa (%1) + + + No Results + Sem resultados + + + File has changed + Ficheiro alterado + + + The database file has changed. Do you want to load the changes? + O ficheiro da base de dados foi alterado. Deseja carregar as alterações? + + + Merge Request + Pedido de combinação + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + A base de dados foi alterada e tem alterações não guardadas. +Deseja combinar as suas alterações? + + + Empty recycle bin? + Limpar reciclagem? + + + Are you sure you want to permanently delete everything from your recycle bin? + Tem a certeza de que deseja eliminar permanentemente os itens da reciclagem? + + + Do you really want to delete %n entry(s) for good? + Tem a certeza de que deseja eliminar %n entrada?Tem a certeza de que deseja eliminar %n entradas? + + + Delete entry(s)? + Eliminar entrada?Eliminar entradas? + + + Move entry(s) to recycle bin? + Mover entrada para a reciclagem?Mover entradas para a reciclagem? + + + File opened in read only mode. + Ficheiro aberto no modo de leitura. + + + Lock Database? + Bloquear base de dados? + + + You are editing an entry. Discard changes and lock anyway? + Está a editar uma entrada. Rejeitar alterações e bloquear? + + + "%1" was modified. +Save changes? + "%1" foi modificada. +Guardar alterações? + + + Database was modified. +Save changes? + A base de dados foi modificada. +Guardar alterações? + + + Save changes? + Guardar alterações? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Não foi possível abrir a nova base de dados durante o carregamento +Erro: %1 + + + Disable safe saves? + Desativar salvaguardas? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + O KeePassXC não conseguiu guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram. +Desativar salvaguardas e tentar novamente? + + + Writing the database failed. +%1 + Erro ao escrever na base de dados: +%1 + + + Passwords + Palavras-passe + + + Save database as + Guardar base de dados como + + + KeePass 2 Database + Base de dados do KeePass 2 + + + Replace references to entry? + Substituir referências na entrada? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + A entrada "%1" tem %2 referência. Deseja substituir as referências com valores, ignorar a entrada ou eliminar?A entrada "%1" tem %2 referências. Deseja substituir as referências com valores, ignorar a entrada ou eliminar? + + + Delete group + Eliminar grupo + + + Move group to recycle bin? + Mover grupo para a reciclagem? + + + Do you really want to move the group "%1" to the recycle bin? + Tem a certeza de que deseja mover o grupo "%1" para a reciclagem? + + + Successfully merged the database files. + Bases de dados combinadas com sucesso. + + + Database was not modified by merge operation. + A base de dados não foi alterada pela combinação. + + + Shared group... + + + + + EditEntryWidget + + Entry + Entrada + + + Advanced + Avançado + + + Icon + Ícone + + + Auto-Type + Escrita automática + + + Properties + Propriedades + + + History + Histórico + + + SSH Agent + Agente SSH + + + n/a + n/d + + + (encrypted) + (cifrada) + + + Select private key + Selecionar chave privada + + + File too large to be a private key + Ficheiro muito grande para ser uma chave privada + + + Failed to open private key + Erro ao abrir a chave privada + + + Entry history + Histórico da entrada + + + Add entry + Adicionar entrada + + + Edit entry + Editar entrada + + + Different passwords supplied. + As palavras-passe não são iguais. + + + New attribute + Novo atributo + + + Are you sure you want to remove this attribute? + Tem a certeza de que deseja remover este atributo? + + + Tomorrow + Amanhã + + + %n week(s) + %n semana%n semanas + + + %n month(s) + %n mês%n meses + + + Apply generated password? + Aplicar palavra-passe gerada? + + + Do you want to apply the generated password to this entry? + Deseja aplicar a palavra-passe gerada para esta entrada? + + + Entry updated successfully. + Entrada atualizada com sucesso. + + + Entry has unsaved changes + A entrada tem alterações por guardar + + + New attribute %1 + Novo atributo %1 + + + [PROTECTED] Press reveal to view or edit + [PROTEGIDA] Por favor revele para ver ou editar + + + %n year(s) + %n ano%n anos + + + Confirm Removal + Confirmação de remoção + + + + EditEntryWidgetAdvanced + + Additional attributes + Atributos adicionais + + + Add + Adicionar + + + Remove + Remover + + + Edit Name + Editar nome + + + Protect + Proteger + + + Reveal + Mostrar + + + Attachments + Anexos + + + Foreground Color: + Cor principal: + + + Background Color: + Cor secundária: + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + Ativar escrita automática para esta entrada + + + Inherit default Auto-Type sequence from the &group + Utilizar sequência de escrita automática deste &grupo + + + &Use custom Auto-Type sequence: + &Utilizar sequência personalizada de escrita automática: + + + Window Associations + Associação de janelas + + + + + + + + + - + - + + + Window title: + Título da janela: + + + Use a specific sequence for this association: + Utilizar sequência específica para esta associação: + + + + EditEntryWidgetHistory + + Show + Mostrar + + + Restore + Restaurar + + + Delete + Eliminar + + + Delete all + Eliminar tudo + + + + EditEntryWidgetMain + + URL: + URL: + + + Password: + Palavra-passe: + + + Repeat: + Repetição: + + + Title: + Título: + + + Notes + Notas + + + Presets + Predefinições + + + Toggle the checkbox to reveal the notes section. + Alternar caixa de seleção para mostrar a secção de notas. + + + Username: + Nome de utilizador: + + + Expires + Expira + + + + EditEntryWidgetSSHAgent + + Form + Formulário + + + Remove key from agent after + Remover chave do agente depois de + + + seconds + segundos + + + Fingerprint + Impressão digital + + + Remove key from agent when database is closed/locked + Remover chave do agente ao fechar/bloquear a base de dados + + + Public key + Chave pública + + + Add key to agent when database is opened/unlocked + Adicionar chave ao agente ao abrir/desbloquear a base de dados + + + Comment + Comentário + + + Decrypt + Decifrar + + + n/a + n/d + + + Copy to clipboard + Copiar para a área de transferência + + + Private key + Chave privada + + + External file + Ficheiro externo + + + Browse... + Button for opening file dialog + Procurar... + + + Attachment + Anexo + + + Add to agent + Adicionar ao agente + + + Remove from agent + Remover do agente + + + Require user confirmation when this key is used + Solicitar confirmação para utilizar esta chave + + + + EditGroupWidget + + Group + Grupo + + + Icon + Ícone + + + Properties + Propriedades + + + Add group + Adicionar grupo + + + Edit group + Editar grupo + + + Enable + Ativar + + + Disable + Desativar + + + Inherit from parent group (%1) + Herdar do grupo (%1) + + + + EditGroupWidgetKeeShare + + Form + Formulário + + + Type: + Tipo: + + + Path: + Caminho: + + + ... + ... + + + Password: + Palavra-passe: + + + Inactive + Inativo + + + Import from path + Importar do caminho + + + Export to path + Exportar para o caminho + + + Synchronize with path + Sincronizar com o caminho + + + Your KeePassXC version does not support sharing your container type. Please use %1. + A sua versão do KeePassXC não tem suporte a partilha do tipo de contentor. +Por favor utilize %1. + + + Database sharing is disabled + A partilha da base de dados está desativada + + + Database export is disabled + A exportação da base de dados está desativada + + + Database import is disabled + A importação da base de dados está desativada + + + KeeShare unsigned container + Contentor KeeShare não assinado + + + KeeShare signed container + Contentor KeeShare assinado + + + Select import source + Selecione a origem da importação + + + Select export target + Selecione o destino da exportação + + + Select import/export file + Selecione o ficheiro de importação/exportação + + + Clear + Limpar + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + + + EditGroupWidgetMain + + Name + Nome + + + Notes + Notas + + + Expires + Expira + + + Search + Pesquisa + + + Auto-Type + Escrita automática + + + &Use default Auto-Type sequence of parent group + &Utilizar sequência de escrita automática do grupo relacionado + + + Set default Auto-Type se&quence + Definir se&quência padrão para escrita automática + + + + EditWidgetIcons + + &Use default icon + &Utilizar ícone padrão + + + Use custo&m icon + Utilizar íco&ne personalizado + + + Add custom icon + Adicionar ícone personalizado + + + Delete custom icon + Eliminar ícone personalizado + + + Download favicon + Descarregar 'favicon' + + + Unable to fetch favicon. + Não foi possível obter o 'favicon'. + + + Images + Imagens + + + All files + Todos os ficheiros + + + Custom icon already exists + Já existe um ícone personalizado + + + Confirm Delete + Confirmação de eliminação + + + Custom icon successfully downloaded + Ícone personalizado descarregado com sucesso + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Dica: pode ativar o serviço DuckDuckGo como recurso em Ferramentas -> Definições -> Segurança + + + Select Image(s) + Selecionar imagens + + + Successfully loaded %1 of %n icon(s) + %1 de %n ícones carregado com sucesso.%1 de %n ícones carregados com sucesso. + + + No icons were loaded + Não foram carregados ícones + + + %n icon(s) already exist in the database + %n ícone já existe na sua base de dados.%n ícones já existem na sua base de dados. + + + The following icon(s) failed: + O ícone seguinte falhou:Os ícones seguintes falharam: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Este ícone é utilizado por % entrada e será substituído pelo ícone padrão. Tem a certeza de que deseja eliminar o ícone?Este ícone é utilizado por % entradas e será substituído pelo ícone padrão. Tem a certeza de que deseja eliminar o ícone? + + + + EditWidgetProperties + + Created: + Criada: + + + Modified: + Modificada: + + + Accessed: + Acedida: + + + Uuid: + UUID: + + + Plugin Data + Dados do suplemento + + + Remove + Remover + + + Delete plugin data? + Eliminar dados do suplemento? + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + Tem a certeza de que deseja eliminar os dados do suplemento? +Esta ação pode implicar um funcionamento errático. + + + Key + Chave + + + Value + Valor + + + + Entry + + %1 - Clone + %1 - Clone + + + + EntryAttachmentsModel + + Name + Nome + + + Size + Tamanho + + + + EntryAttachmentsWidget + + Form + Formulário + + + Add + Adicionar + + + Remove + Remover + + + Open + Abrir + + + Save + Guardar + + + Select files + Selecionar ficheiros + + + Are you sure you want to remove %n attachment(s)? + Tem a certeza de que deseja remover %n anexo?Tem a certeza de que deseja remover %n anexos? + + + Save attachments + Guardar anexos + + + Unable to create directory: +%1 + Não foi possível criar o diretório: +%1 + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + Tem a certeza de que deseja substituir o ficheiro "%1" pelo anexo? + + + Confirm overwrite + Confirmação de substituição + + + Unable to save attachments: +%1 + Não foi possível guardar os anexos: +%1 + + + Unable to open attachment: +%1 + Não foi possível abrir o anexo: +%1 + + + Unable to open attachments: +%1 + Não foi possível abrir os anexos: +%1 + + + Confirm remove + Confirmação de remoção + + + Unable to open file(s): +%1 + Não foi possível abrir o ficheiro: +%1Não foi possível abrir os ficheiros: +%1 + + + + EntryAttributesModel + + Name + Nome + + + + EntryHistoryModel + + Last modified + Última modificação + + + Title + Título + + + Username + Nome de utilizador + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + Ref: + + + Group + Grupo + + + Title + Título + + + Username + Nome de utilizador + + + URL + URL + + + Never + Nunca + + + Password + Palavra-passe + + + Notes + Notas + + + Expires + Expira + + + Created + Criada + + + Modified + Modificada + + + Accessed + Acedida + + + Attachments + Anexos + + + Yes + Sim + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + A gerar token TOTP + + + Close + Fechar + + + General + Geral + + + Username + Nome de utilizador + + + Password + Palavra-passe + + + Expiration + Expira + + + URL + URL + + + Attributes + Atributos + + + Attachments + Anexos + + + Notes + Notas + + + Autotype + Escrita automática + + + Window + Janela + + + Sequence + Sequência + + + Searching + Pesquisa + + + Search + Pesquisa + + + Clear + Limpar + + + Never + Nunca + + + [PROTECTED] + [PROTEGIDA] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Ativada + + + Disabled + Desativada + + + Share + Partilhar + + + + EntryView + + Customize View + Vista personalizada + + + Hide Usernames + Ocultar nome de utilizador + + + Hide Passwords + Ocultar palavras-passe + + + Fit to window + Ajustar à janela + + + Fit to contents + Ajustar ao conteúdo + + + Reset to defaults + Repor predefinições + + + Attachments (icon) + Anexos (ícone) + + + + Group + + Recycle Bin + Reciclagem + + + [empty] + group has no children + [vazia] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: Ficheiro não guardado! + + + Cannot save the native messaging script file. + Não foi possível guardar o ficheiro de mensagens nativas. + + + + KMessageWidget + + &Close + Fe&char + + + Close message + Fechar mensagem + + + + Kdbx3Reader + + Unable to calculate master key + Não foi possível calcular a chave-mestre + + + Unable to issue challenge-response. + Não foi possível emitir a pergunta de segurança. + + + Wrong key or database file is corrupt. + Chave errada ou base de dados danificada. + + + missing database headers + cabeçalhos em falta + + + Header doesn't match hash + Disparidade de 'hash' no cabeçalho + + + Invalid header id size + Tamanho do id do cabeçalho inválido + + + Invalid header field length + Comprimento do campo de cabeçalho inválido + + + Invalid header data length + Comprimento dos dados de cabeçalho inválido + + + + Kdbx3Writer + + Unable to issue challenge-response. + Não foi possível emitir a pergunta de segurança. + + + Unable to calculate master key + Não foi possível calcular a chave-mestre + + + + Kdbx4Reader + + missing database headers + cabeçalhos em falta + + + Unable to calculate master key + Não foi possível calcular a chave-mestre + + + Invalid header checksum size + Tamanho inválido para o 'checksum' do cabeçalho + + + Header SHA256 mismatch + Disparidade no cabeçalho SHA256 + + + Wrong key or database file is corrupt. (HMAC mismatch) + Chave errada ou base de dados danificada (disparidade HMAC) + + + Unknown cipher + Cifra desconhecida + + + Invalid header id size + Tamanho do id do cabeçalho inválido + + + Invalid header field length + Comprimento do campo de cabeçalho inválido + + + Invalid header data length + Comprimento dos dados de cabeçalho inválido + + + Failed to open buffer for KDF parameters in header + Erro ao processar os parâmetros KDF no cabeçalho + + + Unsupported key derivation function (KDF) or invalid parameters + Função de derivação de chave (KDF) não suportada ou parâmetros inválidos + + + Legacy header fields found in KDBX4 file. + Encontrados campos legados no ficheiro KDBX4. + + + Invalid inner header id size + Tamanho do id do cabeçalho interno inválido + + + Invalid inner header field length + Comprimento do campo de cabeçalho interno inválido + + + Invalid inner header binary size + Tamanho binário do cabeçalho interno inválido + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + Versão não suportada do mapa variante KeePass. + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + Comprimento inválido no nome da entrada da variante do mapa + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + Dados inválidos no nome da entrada da variante do mapa + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + Comprimento inválido no valor de entrada do mapa + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + Dados inválidos no valor da entrada da variante do mapa + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + Comprimento inválido do valor booleano da entrada da variante do mapa + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + Comprimento inválido do valor da entrada Int32 da variante do mapa + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + Comprimento inválido do valor da entrada UInt32 da variante do mapa + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + Comprimento inválido do valor da entrada Int64 da variante do mapa + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + Comprimento inválido do valor da entrada UInt64 da variante do mapa + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + Tipo inválido da entrada da variante do mapa + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + Tamanho inválido do tipo de campo da variante do mapa + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + Algoritmo inválido de cifra simétrica. + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + Tamanho inválido da cifra simétrica IV. + + + Unable to calculate master key + Não foi possível calcular a chave-mestre + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + Erro ao serializar os parâmetros KDF da variante do mapa + + + + KdbxReader + + Unsupported cipher + Cifra não suportada + + + Invalid compression flags length + Comprimento inválido da compressão de flags + + + Unsupported compression algorithm + Algoritmo de compressão não suportado + + + Invalid master seed size + Tamanho inválido da semente mestre + + + Invalid transform seed size + Tamanho inválido da semente de transformação + + + Invalid transform rounds size + Tamanho inválido para os ciclos de transformação + + + Invalid start bytes size + Tamanho inválido dos bytes iniciais + + + Invalid random stream id size + Tamanho inválido do ID do fluxo aleatório + + + Invalid inner random stream cipher + Cifra inválida de fluxo aleatório interno + + + Not a KeePass database. + Não é uma base de dados do KeePass. + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + O ficheiro selecionado é uma base de dados do KeePass 1 (.kdb). + +Pode importá-lo clicando em Base de dados - > 'Importar base de dados do KeePass 1...'. +Esta é uma migração unidirecional. Não será possível abrir a base de dados importada com a versão 0.4 do KeePassX. + + + Unsupported KeePass 2 database version. + Versão da base de dados KeePass2 não suportada. + + + Invalid cipher uuid length: %1 (length=%2) + Tamanho inválido para o UUID da cifra: %1 (tamanho=%2) + + + Unable to parse UUID: %1 + Não foi possível processar UUID: %1 + + + Failed to read database file. + Não foi possível ler o ficheiro da base de dados. + + + + KdbxXmlReader + + XML parsing failure: %1 + Erro ao processar o XML: %1 + + + No root group + Sem grupo root + + + Missing icon uuid or data + Dados ou UUID do ícone em falta + + + Missing custom data key or value + Valor ou chave de dados personalizados em falta + + + Multiple group elements + Múltiplos elementos de grupo + + + Null group uuid + UUID de grupo nulo + + + Invalid group icon number + Número inválido de ícone de grupo + + + Invalid EnableAutoType value + Valor inválido para EnableAutoType + + + Invalid EnableSearching value + Valor inválido para EnableSearching + + + No group uuid found + UUID de grupo não encontrado + + + Null DeleteObject uuid + UUID nulo em DeleteObject + + + Missing DeletedObject uuid or time + Tempo ou UUID em falta para DeletedObject + + + Null entry uuid + Entrada de UUID nula + + + Invalid entry icon number + Número inválido na entrada de ícone + + + History element in history entry + Elemento de histórico na entrada do histórico + + + No entry uuid found + Não foi encontrado o UUID da entrada + + + History element with different uuid + Elemento do histórico com UUID diferente + + + Duplicate custom attribute found + Encontrado atributo personalizado em duplicado + + + Entry string key or value missing + Chave 'string' ou valor em falta + + + Duplicate attachment found + Encontrado anexo em duplicado + + + Entry binary key or value missing + Chave binária ou valor em falta + + + Auto-type association window or sequence missing + Associação de escrita automática ou sequência em falta + + + Invalid bool value + Valor booleano inválido + + + Invalid date time value + Valor de data/hora inválido + + + Invalid color value + Valor de cor inválido + + + Invalid color rgb part + Parte da cor RGB inválida + + + Invalid number value + Valor numérico inválido + + + Invalid uuid value + Valor UUID inválido + + + Unable to decompress binary + Translator meant is a binary data inside an entry + Não foi possível descomprimir o binário + + + XML error: +%1 +Line %2, column %3 + Erro no XML: +%1 +Linha %2, coluna %3 + + + + KeePass1OpenWidget + + Import KeePass1 database + Importar base de dados do KeePass 1 + + + Unable to open the database. + Não foi possível abrir a base de dados. + + + + KeePass1Reader + + Unable to read keyfile. + Não foi possível ler o ficheiro-chave. + + + Not a KeePass database. + Não é uma base de dados do KeePass. + + + Unsupported encryption algorithm. + Algoritmo de cifra não suportado. + + + Unsupported KeePass database version. + Versão da base de dados KeePass não suportada. + + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + Não foi possível ler a cifra IV + + + Invalid number of groups + Número inválido de grupos + + + Invalid number of entries + Número inválido de entradas + + + Invalid content hash size + Tamanho inválido para a 'hash' do conteúdo + + + Invalid transform seed size + Tamanho inválido da semente de transformação + + + Invalid number of transform rounds + Número inválido para os ciclos de transformação + + + Unable to construct group tree + Não foi possível criar a árvore de grupo + + + Root + Raiz + + + Unable to calculate master key + Não foi possível calcular a chave-mestre + + + Wrong key or database file is corrupt. + Chave errada ou base de dados danificada. + + + Key transformation failed + Erro ao transformar a chave + + + Invalid group field type number + Número inválido do tipo de grupo de campo + + + Invalid group field size + Tamanho inválido do grupo de campo + + + Read group field data doesn't match size + Leitura de grupo de dados do campo não coincidem no tamanho + + + Incorrect group id field size + Tamanho incorreto de campo de ID de grupo + + + Incorrect group creation time field size + Tamanho incorreto do campo do grupo de tempo de criação + + + Incorrect group modification time field size + Tamanho de campo de hora de alteração de grupo incorreto + + + Incorrect group access time field size + Tamanho de campo de tempo de acesso de grupo incorreto + + + Incorrect group expiry time field size + Tamanho de campo de tempo de expiração de grupo incorreto + + + Incorrect group icon field size + Tamanho do campo do ícone de grupo incorreto + + + Incorrect group level field size + Tamanho de campo do nível de grupo incorreto + + + Invalid group field type + Tipo inválido para o campo de grupo + + + Missing group id or level + ID ou nível de grupo em falta + + + Missing entry field type number + Falta a entrada de tipo número no campo + + + Invalid entry field size + Tamanho inválido para o campo da entrada + + + Read entry field data doesn't match size + Dados de campo de entrada não coincidem no tamanho + + + Invalid entry uuid field size + Tamanho da entrada para o campo UUID inválido + + + Invalid entry group id field size + Tamanho da entrada para o campo identificador de grupo inválido + + + Invalid entry icon field size + Tamanho da entrada para o campo ícone inválido + + + Invalid entry creation time field size + Tamanho da entrada para o campo tempo de criação inválido + + + Invalid entry modification time field size + Tamanho da entrada para o campo tempo de alteração inválido + + + Invalid entry expiry time field size + Tamanho da entrada para o campo tempo de expiração inválido + + + Invalid entry field type + Tipo inválido para o campo da entrada + + + unable to seek to content position + Não foi possível pesquisar no conteúdo + + + + KeeShare + + Disabled share + Partilha desativada + + + Import from + Importar de + + + Export to + Exportar para + + + Synchronize with + Sincronizar com + + + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Componente chave + + + Key Component Description + Descrição do componente chave + + + Cancel + Cancelar + + + Key Component set, click to change or remove + Componente chave definido, clique para alterar ou remover + + + Add %1 + Add a key component + Adicionar %1 + + + Change %1 + Change a key component + Alterar %1 + + + Remove %1 + Remove a key component + Remover %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 definido, clique para alterar ou remover + + + + KeyFileEditWidget + + Browse + Explorar + + + Generate + Gerar + + + Key File + Ficheiro-chave + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Para mais segurança, pode adicionar um ficheiro-chave que contenha dados aleatórios.</p><p>Tem que o manter secreto e não o pode perder pois se o fizer não mais poderá abrir a base de dados.</p> + + + Legacy key file format + Formato legado de ficheiro-chave + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Está a utilizar um formato legado que pode, no futuro, deixar +de ser suportado. + +Aceda às definições da chave-mestre para gerar um novo ficheiro-chave. + + + Error loading the key file '%1' +Message: %2 + Erro ao carregar o ficheiro-chave %1 +Mensagem: %2 + + + Key files + Ficheiros-chave + + + All files + Todos os ficheiros + + + Create Key File... + Criar ficheiro-chave... + + + Error creating key file + Erro ao criar o ficheiro-chave + + + Unable to create key file: %1 + Não foi possível criar o ficheiro-chave: %1 + + + Select a key file + Selecione o ficheiro-chave + + + + MainWindow + + &Database + Base &de dados + + + &Recent databases + Bases de dados &recentes + + + &Help + Aj&uda + + + E&ntries + E&ntradas + + + &Groups + &Grupos + + + &Tools + Ferramen&tas + + + &Quit + &Sair + + + &About + &Acerca + + + &Open database... + Abrir base de dad&os... + + + &Save database + Guardar base de dado&s + + + &Close database + Fe&char base de dados + + + &Delete entry + Eliminar &entrada + + + &Edit group + &Editar grupo + + + &Delete group + Eliminar &grupo + + + Sa&ve database as... + G&uardar base de dados como... + + + Database settings + Definições da base de dados + + + &Clone entry + &Clonar entrada + + + Copy &username + Copiar nome de &utilizador + + + Copy username to clipboard + Copiar nome de utilizador para a área de transferência + + + Copy password to clipboard + Copiar palavra-passe para a área de transferência + + + &Settings + Definiçõe&s + + + Password Generator + Gerador de palavras-passe + + + &Lock databases + B&loquear bases de dados + + + &Title + &Título + + + Copy title to clipboard + Copiar título para a área de transferência + + + &URL + &URL + + + Copy URL to clipboard + Copiar URL para a área de transferência + + + &Notes + &Notas + + + Copy notes to clipboard + Copiar notas para a área de transferência + + + &Export to CSV file... + &Exportar para ficheiro CSV... + + + Set up TOTP... + Configurar TOTP... + + + Copy &TOTP + Copiar &TOTP + + + E&mpty recycle bin + Limpar reciclage&m + + + Clear history + Limpar histórico + + + Access error for config file %1 + Erro de acesso ao ficheiro %1 + + + Settings + Definições + + + Toggle window + Alternar janela + + + Quit KeePassXC + Sair do KeePassXC + + + Please touch the button on your YubiKey! + Toque no botão da sua YubiKey! + + + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. + AVISO: está a utilizar uma versão instável do KeePassXC! +Existe um risco bastante grande e deve efetuar um backup da base de dados. +Esta versão não deve ser utilizada para uma utilização regular. + + + &Donate + &Donativos + + + Report a &bug + Reportar um &erro + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + AVISO: a versão Qt do seu sistema pode causar o encerramento do KeePassXC se estiver a utilizar o teclado no ecrã (On-Screen Keyboard)! +Recomendamos que utilize a versão AppImage disponível no nosso site. + + + &Import + &Importar + + + Copy att&ribute... + Copiar at&ributo... + + + TOTP... + TOTP... + + + &New database... + &Nova base de dados... + + + Create a new database + Criar uma nova base de dados + + + &Merge from database... + Co&mbinar bases de dados... + + + Merge from another KDBX database + Combinar com outra base de dados KDBX + + + &New entry + &Nova entrada + + + Add a new entry + Adicionar uma nova entrada + + + &Edit entry + &Editar entrada + + + View or edit entry + Ver ou editar entrada + + + &New group + &Novo grupo + + + Add a new group + Adicionar um novo grupo + + + Change master &key... + Alterar chave-&mestre... + + + &Database settings... + &Definições da base de dados... + + + Copy &password + Copiar &palavra-passe + + + Perform &Auto-Type + Execut&ar escrita automática + + + Open &URL + Abrir &URL + + + KeePass 1 database... + Base de dados do KeePass 1... + + + Import a KeePass 1 database + Importar base de dados do KeePass 1 + + + CSV file... + Ficheiro CSV... + + + Import a CSV file + Importar ficheiro CSV + + + Show TOTP... + Mostrar TOTP... + + + Show TOTP QR Code... + Mostrar código QR TOTP... + + + Check for Updates... + Procurar atualizações... + + + Share entry + Partilhar entrada + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + NOTA: está a utilizar uma versão de teste do KeePassXC! +Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes de produção. + + + Check for updates on startup? + Verificar se existem atualizações ao iniciar? + + + Would you like KeePassXC to check for updates on startup? + Deseja que o KeePassXC procure atualizações ao iniciar? + + + You can always check for updates manually from the application menu. + Também pode verificar se existem atualizações através do menu da aplicação. + + + + Merger + + Creating missing %1 [%2] + A criar %1 [%2] + + + Relocating %1 [%2] + A alocar %1 [%2] + + + Overwriting %1 [%2] + A substituir %1 [%2] + + + older entry merged from database "%1" + entrada antiga combinada da base de dados %1 + + + Adding backup for older target %1 [%2] + A adicionar backup para o destino antigo %1 [%2] + + + Adding backup for older source %1 [%2] + A adicionar backup para a origem antiga %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + A reaplicar a entrada de destino antiga na origem recente %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + A reaplicar a entrada de origem antiga no destinio recente %1 [%2] + + + Synchronizing from newer source %1 [%2] + A sincronizar da origem recente %1 [%2] + + + Synchronizing from older source %1 [%2] + A sincronizar da origem antiga %1 [%2] + + + Deleting child %1 [%2] + A eliminar dependente %1 [%2] + + + Deleting orphan %1 [%2] + A eliminar órfão %1 [%2] + + + Changed deleted objects + Objetos eliminados alterados + + + Adding missing icon %1 + Adicionar ícone em falta %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + A criar uma nova base de dados do KeePassXC... + + + Root + Root group + Raiz + + + + NewDatabaseWizardPage + + WizardPage + Assistente + + + En&cryption Settings + Definições de &cifra + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições. + + + Advanced Settings + Definições avançadas + + + Simple Settings + Definições básicas + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Definições de cifra + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Chave-mestre da base de dados + + + A master key known only to you protects your database. + Uma chave-mestre apenas sua e que protege a base de dados. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Informação geral sobre a base de dados + + + Please fill in the display name and an optional description for your new database: + Preencha o nome de exibição e uma descrição extra para a sua nova base de dados: + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key + Chave inválida, esperada chave OpenSSH + + + PEM boundary mismatch + Disparidade nos limites PEM + + + Base64 decoding failed + Erro de descodificação Base64 + + + Key file way too small. + Ficheiro-chave muito pequeno. + + + Key file magic header id invalid + ID do cabeçalho mágico do ficheiro-chave inválida + + + Found zero keys + Encontradas zero chaves + + + Failed to read public key. + Erro ao ler a chave pública. + + + Corrupted key file, reading private key failed + Ficheiro danificado, erro ao ler a chave privada + + + No private key payload to decrypt + Não existe chave privada para decifrar + + + Trying to run KDF without cipher + A tentar executar KDF sem cifra + + + Passphrase is required to decrypt this key + Requer frase-chave para decifrar esta chave + + + Key derivation failed, key file corrupted? + Erro na derivação da chave, ficheiro-chave danificado? + + + Decryption failed, wrong passphrase? + Erro ao decifrar, frase-chave errada? + + + Unexpected EOF while reading public key + EOF inesperado ao ler a chave pública + + + Unexpected EOF while reading private key + EOF inesperado ao ler a chave privada + + + Can't write public key as it is empty + Incapaz de escrever a chave pública porque está vazia + + + Unexpected EOF when writing public key + EOF inesperado ao escrever a chave pública + + + Can't write private key as it is empty + Incapaz de escrever a chave privada porque está vazia + + + Unexpected EOF when writing private key + EOF inesperado ao escrever a chave privada + + + Unsupported key type: %1 + Tipo de chave não suportado: %1 + + + Unknown cipher: %1 + Cifra desconhecida: %1 + + + Cipher IV is too short for MD5 kdf + Cifra IV é muito curta para MD kdf + + + Unknown KDF: %1 + KDF desconhecido: %1 + + + Unknown key type: %1 + Tipo de chave desconhecido: %1 + + + + PasswordEditWidget + + Enter password: + Introduza a palavra-passe: + + + Confirm password: + Confirmação de palavra-passe: + + + Password + Palavra-passe + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>A palavra-passe é o método primário para proteger a sua base de dados.</p><p>As boas palavras-passe são extensão e únicas. O KeePassXC pode gerar uma palavra-passe por si.</p> + + + Passwords do not match. + Disparidade nas palavras-passe. + + + Generate master password + Gerar palavra-passe principal + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + Palavra-passe: + + + strength + Password strength + qualidade + + + entropy + entropia + + + Password + Palavra-passe + + + Character Types + Tipos de caracteres + + + Upper Case Letters + Letras maiúsculas + + + Lower Case Letters + Letras minúsculas + + + Numbers + Números + + + Special Characters + Caracteres especiais + + + Extended ASCII + ASCII expandido + + + Exclude look-alike characters + Excluir caracteres semelhantes + + + Pick characters from every group + Obter caracteres de todos os grupos + + + &Length: + &Comprimento: + + + Passphrase + Frase-chave + + + Wordlist: + Lista de palavras: + + + Word Separator: + Separador de palavras: + + + Copy + Copiar + + + Accept + Aceitar + + + Close + Fechar + + + Entropy: %1 bit + Entropia: %1 bit + + + Password Quality: %1 + Qualidade da palavra-passe: %1 + + + Poor + Password quality + + + + Weak + Password quality + Fraca + + + Good + Password quality + Boa + + + Excellent + Password quality + Excelente + + + ExtendedASCII + ASCII expandido + + + Switch to advanced mode + Ativar modo avançado + + + Advanced + Avançado + + + Upper Case Letters A to F + Letras maiúsculas de A até F + + + A-Z + A-Z + + + Lower Case Letters A to F + Letras minúsculas de A até F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Parênteses + + + {[( + {[( + + + Punctuation + Pontuação + + + .,:; + .,:; + + + Quotes + Aspas + + + " ' + " ' + + + Math + Matemática + + + <*+!?= + <*+!?= + + + Dashes + Traços + + + \_|-/ + \_|-/ + + + Logograms + Logo-gramas + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Trocar para o modo básico + + + Simple + Básico + + + Character set to exclude from generated password + Conjunto de caracteres a excluir da palavra-passe gerada + + + Do not include: + Não incluir: + + + Add non-hex letters to "do not include" list + Adicionar letras 'non-hex' à lista de exclusão + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caracteres excluídos: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + &Número de palavras: + + + Regenerate + Recriar + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Selecionar + + + + QMessageBox + + Overwrite + Substituir + + + Delete + Eliminar + + + Move + Mover + + + Empty + Vazio + + + Remove + Remover + + + Skip + Ignorar + + + Disable + Desativar + + + Merge + Combinar + + + + QObject + + Database not opened + Base de dados não aberta + + + Database hash not available + 'Hash' da base de dados não disponível + + + Client public key not received + Chave pública do cliente não recebida + + + Cannot decrypt message + Não foi possível decifrar a mensagem + + + Action cancelled or denied + Ação cancelada ou recusada + + + KeePassXC association failed, try again + Erro ao associar o KeePassXC. Tente novamente. + + + Encryption key is not recognized + Chave de cifra não reconhecida + + + Incorrect action + Ação incorreta + + + Empty message received + Recebida mensagem vazia + + + No URL provided + URL não disponibilizado + + + No logins found + Não existem credenciais + + + Unknown error + Erro desconhecido + + + Add a new entry to a database. + Adicionar entrada à base de dados. + + + Path of the database. + Caminho da base de dados. + + + Key file of the database. + Ficheiro-chave da base de dados. + + + path + caminho + + + Username for the entry. + Nome de utilizador para a entrada. + + + username + nome de utilizador + + + URL for the entry. + URL para a entrada. + + + URL + URL + + + Prompt for the entry's password. + Pedir palavra-passe para a entrada. + + + Generate a password for the entry. + Gerar palavra-passe para a entrada. + + + Length for the generated password. + Tamanho da palavra-passe gerada. + + + length + tamanho + + + Path of the entry to add. + Caminho da entrada a adicionar. + + + Copy an entry's password to the clipboard. + Copiar palavra-passe da entrada para a área de transferência. + + + Path of the entry to clip. + clip = copy to clipboard + Caminho da entrada a copiar. + + + Timeout in seconds before clearing the clipboard. + Tempo limite, em segundos, antes de limpar a área de transferência. + + + Edit an entry. + Editar entrada. + + + Title for the entry. + Título para a entrada. + + + title + título + + + Path of the entry to edit. + Caminho da entrada a editar. + + + Estimate the entropy of a password. + Estimar entropia da palavra-passe. + + + Password for which to estimate the entropy. + Palavra-passe para a qual será estimada a entropia. + + + Perform advanced analysis on the password. + Executar análise avançada da palavra-passe. + + + Extract and print the content of a database. + Extrair e mostrar o conteúdo da base de dados. + + + Path of the database to extract. + Caminho da base de dados a extrair. + + + Insert password to unlock %1: + Introduza a palavra-passe para desbloquear %1: + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + AVISO: está a utilizar um formato legado que pode, no futuro, deixar +de ser suportado. + +Deve considerar a geração de uma novo ficheiro-chave. + + + + +Available commands: + + + +Comandos disponíveis: + + + + Name of the command to execute. + Nome do comando a executar. + + + List database entries. + Listar entradas da base de dados. + + + Path of the group to list. Default is / + Caminho do grupo a listar. Padrão é / + + + Find entries quickly. + Localizar entradas rapidamente. + + + Search term. + Termo de pesquisa. + + + Merge two databases. + Combinar duas bases de dados. + + + Path of the database to merge into. + Caminho da base de dados de destino da combinação. + + + Path of the database to merge from. + Caminho da base de dados de origem da combinação. + + + Use the same credentials for both database files. + Utilizar as mesmas credenciais para ambos os ficheiros. + + + Key file of the database to merge from. + Ficheiro-chave da base de dados para a combinação. + + + Show an entry's information. + Mostrar informações de uma entrada. + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + Nome dos atributos a mostrar. Esta opção pode ser especificada mais do que uma vez, sendo que os atributos são mostrados um por linha, na ordem indicada. Se não especificar atributos, será dado um resumo dos atributos padrão. + + + attribute + atributo + + + Name of the entry to show. + Nome da entrada a mostrar. + + + NULL device + Dispositivo NULL + + + error reading from device + erro ao ler do dispositivo + + + malformed string + cadeira mal fomada + + + missing closing quote + carácter de fecho em falta + + + Group + Grupo + + + Title + Título + + + Username + Nome de utilizador + + + Password + Palavra-passe + + + Notes + Notas + + + Last Modified + Última modificação + + + Created + Criada + + + Browser Integration + Integração com navegador + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey[%1] Pergunta de segurança - Slot %2 - %3 + + + Press + Prima + + + Passive + Passiva + + + SSH Agent + Agente SSH + + + Generate a new random diceware passphrase. + Gerar uma nova palavra-passe baseada em dados (diceware). + + + Word count for the diceware passphrase. + Número de palavras para a palavra-passe. + + + Wordlist for the diceware generator. +[Default: EFF English] + Lista de palavras para o gerador. +[Padrão: EFF inglês] + + + Generate a new random password. + Gerar nova palavra-passe aleatória. + + + Invalid value for password length %1. + Valor inválido para o tamanho da palavra-passe %1 + + + Could not create entry with path %1. + Não foi possível criar a entrada com o caminho %1 + + + Enter password for new entry: + Introduza a palavra-passe para a nova entrada: + + + Writing the database failed %1. + Erro ao escrever na base de dados %1. + + + Successfully added entry %1. + Entrada %1 adicionada com sucesso + + + Copy the current TOTP to the clipboard. + Copiar TOTP atual para a área de transferência + + + Invalid timeout value %1. + Valor limite inválido %1 + + + Entry %1 not found. + Entrada %1 não encontrada + + + Entry with path %1 has no TOTP set up. + A entrada com o caminho %1 não tem uma TOTP configurada. + + + Entry's current TOTP copied to the clipboard! + TOTP da entrada atual copiada para a área de transferência! + + + Entry's password copied to the clipboard! + Palavra-passe da entrada atual copiada para a área de transferência! + + + Clearing the clipboard in %1 second(s)... + A área de transferência será limpa dentro de %1 segundo...A área de transferência será limpa dentro de %1 segundos... + + + Clipboard cleared! + Área de transferência limpa! + + + Silence password prompt and other secondary outputs. + Silenciar pedidos de palavra-passe e outros resultados secundários. + + + count + CLI parameter + número + + + Invalid value for password length: %1 + Valor inválido para o tamanho da palavra-passe: %1 + + + Could not find entry with path %1. + Não foi possível encontrar a entrada com o caminho %1. + + + Not changing any field for entry %1. + Não foi alterado qualquer campo para a entrada %1. + + + Enter new password for entry: + Introduza a nova palavra-passe da entrada: + + + Writing the database failed: %1 + Erro ao escrever na base de dados: %1 + + + Successfully edited entry %1. + Entrada %1 editada com sucesso. + + + Length %1 + Tamanho %1 + + + Entropy %1 + Entropia %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Bits extra multi-palavra %1 + + + Type: Bruteforce + Tipo: Bruteforce + + + Type: Dictionary + Tipo: Dictionary + + + Type: Dict+Leet + Tipo: Dict+Leet + + + Type: User Words + Tipo: User Words + + + Type: User+Leet + Tipo: User+Leet + + + Type: Repeated + Tipo: Repeated + + + Type: Sequence + Tipo: Sequence + + + Type: Spatial + Tipo: Spatial + + + Type: Date + Tipo: Date + + + Type: Bruteforce(Rep) + Tipo: Bruteforce(Rep) + + + Type: Dictionary(Rep) + Tipo: Dictionary(Rep) + + + Type: Dict+Leet(Rep) + Tipo: Dict+Leet(Rep) + + + Type: User Words(Rep) + Tipo: User Words(Rep) + + + Type: User+Leet(Rep) + Tipo: User+Leet(Rep) + + + Type: Repeated(Rep) + Tipo: Repeated(Rep) + + + Type: Sequence(Rep) + Tipo: Sequence(Rep) + + + Type: Spatial(Rep) + Tipo: Spatial(Rep) + + + Type: Date(Rep) + Tipo: Date(Rep) + + + Type: Unknown%1 + Tipo: Desconhecido%1 + + + Entropy %1 (%2) + Entropia %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Tamanho da palavra-passe (%1) != soma do tamanho das partes (%2) *** + + + Failed to load key file %1: %2 + Erro ao carregar o ficheiro-chave %1: %2 + + + File %1 does not exist. + %1 não existe. + + + Unable to open file %1. + Não foi possível abrir o ficheiro %1. + + + Error while reading the database: +%1 + Erro ao ler a base de dados: +%1 + + + Error while parsing the database: +%1 + Erro ao analisar a base de dados: +%1 + + + Length of the generated password + Tamanho da palavra-passe gerada + + + Use lowercase characters + Utilizar letras minúsculas + + + Use uppercase characters + Utilizar letras maiúsculas + + + Use numbers. + Utilizar números + + + Use special characters + Utilizar caracteres especiais + + + Use extended ASCII + Utilizar ASCII expandido + + + Exclude character set + Conjunto de caracteres a excluir + + + chars + caracteres + + + Exclude similar looking characters + Excluir caracteres semelhantes + + + Include characters from every selected group + Incluir caracteres de todos os grupos selecionados + + + Recursively list the elements of the group. + Listar recursivamente todos os elementos do grupo + + + Cannot find group %1. + Não foi possível encontrar o grupo %1. + + + Error reading merge file: +%1 + Erro ao ler o ficheiro de combinação: +%1 + + + Unable to save database to file : %1 + Não foi possível guardar a base de dados no ficheiro: %1 + + + Unable to save database to file: %1 + Não foi possível guardar a base de dados no ficheiro: %1 + + + Successfully recycled entry %1. + A entrada %1 foi movida para a reciclagem. + + + Successfully deleted entry %1. + A entrada %1 foi eliminada. + + + Show the entry's current TOTP. + Mostrar TOTP atual da entrada. + + + ERROR: unknown attribute %1. + Erro: atributo desconhecido %1 + + + No program defined for clipboard manipulation + Não definiu um programa para manipulação da área de transferência + + + Unable to start program %1 + Não foi possível iniciar %1 + + + file empty + ficheiro vazio + + + %1: (row, col) %2,%3 + %1: (linha, coluna) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recomendado) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Definições inválidas + + + Invalid Key + TOTP + Chave inválida + + + Message encryption failed. + Erro ao cifrar a mensagem. + + + No groups found + Não foram encontrados grupos + + + Create a new database. + Criar uma nova base de dados. + + + File %1 already exists. + O ficheiro %1 já existe. + + + Loading the key file failed + Não foi possível carregar o ficheiro-chave. + + + No key is set. Aborting database creation. + Chave não definida. A abortar criação da base de dados. + + + Failed to save the database: %1. + Não foi possível criar a base de dados: %1. + + + Successfully created new database. + A base de dados foi criada com sucesso. + + + Insert password to encrypt database (Press enter to leave blank): + Introduza a palavra-passe para cifrar a base de dados (prima Enter para não cifrar): + + + Creating KeyFile %1 failed: %2 + Não foi possível criar o ficheiro-chave %1: %2 + + + Loading KeyFile %1 failed: %2 + Não foi possível carregar o ficheiro-chave %1: %2 + + + Remove an entry from the database. + Remover uma entrada da base de dados. + + + Path of the entry to remove. + Caminho da entrada a remover. + + + Existing single-instance lock file is invalid. Launching new instance. + O ficheiro de bloqueio da instância única é inválido. A iniciar nova instância. + + + The lock file could not be created. Single-instance mode disabled. + Não foi possível criar o ficheiro de bloqueio. Modo de única instância desativado. + + + KeePassXC - cross-platform password manager + KeePassXC - Gestor de palavras-passe multi-plataforma + + + filenames of the password databases to open (*.kdbx) + nome de ficheiro das bases de dados a abrir (*.kdbx) + + + path to a custom config file + caminho para um ficheiro de configuração personalizado + + + key file of the database + ficheiro-chave da base de dados + + + read password of the database from stdin + ler palavra-passe da base de dados a partir de stdin + + + Parent window handle + Gestão da janela parental + + + Another instance of KeePassXC is already running. + Já está em execução uma instância do KeePassXC. + + + Fatal error while testing the cryptographic functions. + Erro fatal ao testar as funções de criptografia. + + + KeePassXC - Error + KeePassXC - Erro + + + Database password: + Palavra-passe da base de dados: + + + Cannot create new group + + + + + QtIOCompressor + + Internal zlib error when compressing: + Erro interno zlib durante a compressão: + + + Error writing to underlying device: + Erro de escrita no dispositivo subjacente: + + + Error opening underlying device: + Erro ao abrir o dispositivo subjacente: + + + Error reading data from underlying device: + Erro de leitura no dispositivo subjacente: + + + Internal zlib error when decompressing: + Erro interno zlib durante a descompressão: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + O formato gzip não é suportado por esta versão zlib. + + + Internal zlib error: + Erro interno zlib: + + + + SSHAgent + + Agent connection failed. + Erro ao conectar com o agente. + + + Agent protocol error. + Erro de protocolo do agente. + + + No agent running, cannot add identity. + O agente não está em execução e não é possível adicionar a identidade. + + + No agent running, cannot remove identity. + O agente não está em execução e não é possível remover a identidade. + + + Agent refused this identity. Possible reasons include: + O agente recusou esta identidade. Causas possíveis: + + + The key has already been added. + A chave já foi adicionada. + + + Restricted lifetime is not supported by the agent (check options). + O tempo de vida restrito não é suportado pelo agente (verificar opções). + + + A confirmation request is not supported by the agent (check options). + O agente não tem suporte a pedidos de confirmação (consulte as opções). + + + + SearchHelpWidget + + Search Help + Pesquisar na ajuda + + + Search terms are as follows: [modifiers][field:]["]term["] + Introduza os termos de pesquisa da seguinte forma: [modificadores][campo:]["]termo["] + + + Every search term must match (ie, logical AND) + Todos os termos de pesquisa coincidentes (AND lógico) + + + Modifiers + Modificadores + + + exclude term from results + excluir termo dos resultados + + + match term exactly + coincidência exata + + + use regex in term + utilizar regex no termo + + + Fields + Campos + + + Term Wildcards + Caracteres universais do termo + + + match anything + coincidência relativa + + + match one + uma coincidência + + + logical OR + OU lógico + + + Examples + Exemplos + + + + SearchWidget + + Search + Pesquisa + + + Clear + Limpar + + + Limit search to selected group + Limitar pesquisa ao grupo selecionado + + + Search Help + Pesquisar na ajuda + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Pesquisa (%1)... + + + Case sensitive + Sensível ao tipo + + + + SettingsWidgetKeeShare + + Active + Ativo + + + Allow export + Permitir exportação + + + Allow import + Permitir importação + + + Own certificate + Certificado próprio + + + Fingerprint: + Impressão digital: + + + Certificate: + Certificado: + + + Signer + Signatário: + + + Key: + Chave: + + + Generate + Gerar + + + Import + Importar + + + Export + Exportar + + + Imported certificates + Certificados importados + + + Trust + Confiar + + + Ask + Perguntar + + + Untrust + Deixar de confiar + + + Remove + Remover + + + Path + Caminho + + + Status + Estado + + + Fingerprint + Impressão digital + + + Certificate + Certificado + + + Trusted + Confiável + + + Untrusted + Não confiável + + + Unknown + Desconhecido + + + key.share + Filetype for KeeShare key + partilha da chave + + + KeeShare key file + Ficheiro-chave KeeShare + + + All files + Todos os ficheiros + + + Select path + Selecionar caminho + + + Exporting changed certificate + A exportar certificado alterado + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + O certificado exportado não é o que está a ser utilizado. Deseja exportar o certificado atual? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Importar de um contentor sem assinatura + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Não foi possível verificar a fonte do contentor partilhado, porque não está assinado. Tem a certeza de que o quer importar de %1? + + + Import from container with certificate + Importar de um contentor com certificado + + + Not this time + Agora não + + + Never + Nunca + + + Always + Sempre + + + Just this time + Apenas agora + + + Import from %1 failed (%2) + A importação de %1 falhou (%2) + + + Import from %1 successful (%2) + A importação de %1 foi bem sucedida (%2) + + + Imported from %1 + Importado de %1 + + + Signed share container are not supported - import prevented + O contentor de partilha assinado não é suportado - importação evitada + + + File is not readable + O ficheiro não é legível + + + Invalid sharing container + Contentor de partilha inválido + + + Untrusted import prevented + Importação não fiável impedida + + + Successful signed import + Importação assinada bem sucedida + + + Unexpected error + Erro inesperado + + + Unsigned share container are not supported - import prevented + O contentor de partilha não assinado não é suportado - importação evitada + + + Successful unsigned import + Importação não assinada bem sucedida + + + File does not exist + O ficheiro não existe + + + Unknown share container type + Tipo de contentor de partilha desconhecido + + + Overwriting signed share container is not supported - export prevented + A substituição de contentor de partilha não assinado não é suportada - exportação evitada + + + Could not write export container (%1) + Não foi possível escrever contentor de exportação (%1) + + + Overwriting unsigned share container is not supported - export prevented + A substituição de contentor de partilha assinado não é suportada - exportação evitada + + + Could not write export container + Não foi possível escrever contentor de exportação + + + Unexpected export error occurred + Ocorreu um erro inesperado ao exportar + + + Export to %1 failed (%2) + A exportação para %1 falhou (%2) + + + Export to %1 successful (%2) + A exportação para %1 foi bem sucedida (%2) + + + Export to %1 + Exportar para %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Deseja confiar em %1 com a impressão digital de %2 em %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Palavra-passe limitada + + + 000000 + 000000 + + + Copy + Copiar + + + Expires in <b>%n</b> second(s) + Expira em <b>%n</b> segundoExpira em <b>%n</b> segundos + + + + TotpExportSettingsDialog + + Copy + Copiar + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + Nota: estas definições TOTP são personalizadas e podem não funcionar com outros autenticadores. + + + There was an error creating the QR code. + Ocorreu um erro ao criar o código QR. + + + Closing in %1 seconds. + A fechar dentro de %1 segundos. + + + + TotpSetupDialog + + Setup TOTP + Configurar TOTP + + + Key: + Chave: + + + Default RFC 6238 token settings + Definições padrão do token RFC 6238 + + + Steam token settings + Definições do token do fluxo + + + Use custom settings + Utilizar definições personalizadas + + + Custom Settings + Definições personalizadas + + + Time step: + Avanço de tempo: + + + sec + Seconds + seg + + + Code size: + Tamanho do código: + + + 6 digits + 6 dígitos + + + 7 digits + 7 dígitos + + + 8 digits + 8 dígitos + + + + UpdateCheckDialog + + Checking for updates + A verificar se existem atualizações + + + Checking for updates... + A verificar se existem atualizações... + + + Close + Fechar + + + Update Error! + Erro ao atualizar! + + + An error occurred in retrieving update information. + Surgiu um erro ao obter a informação de atualização. + + + Please try again later. + Por favor tente mais tarde + + + Software Update + Atualização do programa + + + A new version of KeePassXC is available! + Está disponível uma nova versão do KeePassXC! + + + KeePassXC %1 is now available — you have %2. + O KeePassXC %1 já está disponível — tem a versão %2. + + + Download it at keepassxc.org + Descarregue em keepassxc.org + + + You're up-to-date! + Está atualizado! + + + KeePassXC %1 is currently the newest version available + O KeePassXC %1 é neste momento a versão mais recente disponível + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + Armazene as suas palavras-passe em segurança com o KeePassXC + + + Create new database + Criar nova base de dados + + + Open existing database + Abrir base de dados existente + + + Import from KeePass 1 + Importar do KeePass 1 + + + Import from CSV + Importar de ficheiro CSV + + + Recent databases + Bases de dados recentes + + + Welcome to KeePassXC %1 + Bem-vindo ao KeePassXC %1 + + + + YubiKeyEditWidget + + Refresh + Recarregar + + + YubiKey Challenge-Response + Pergunta de segurança YubiKey + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Se você tiver uma <a href="https://www.yubico.com/">YubiKey</a>, pode utiliza-la para obter mais segurança.</p><p>A YubiKey requer que uma das suas ranhuras seja programada como uma <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + + No YubiKey detected, please ensure it's plugged in. + Yubikey não detetada. verifique se está inserida corretamente. + + + No YubiKey inserted. + Youbikey não inserida. + + + \ No newline at end of file diff --git a/share/translations/keepassx_pt_BR.ts b/share/translations/keepassx_pt_BR.ts index 1295e117d..3199b21e0 100644 --- a/share/translations/keepassx_pt_BR.ts +++ b/share/translations/keepassx_pt_BR.ts @@ -23,11 +23,11 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Ver colaborações no GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Ver Colaborações no GitHub</a> Debug Info - Informações de depuração + Informações de Depuração Include the following information whenever you report a bug: @@ -37,81 +37,291 @@ Copy to clipboard Copiar para a área de transferência - - Version %1 - - Versão %1 - - - - Revision: %1 - Revisão: %1 - - - Distribution: %1 - Distribuição: %1 - - - Libraries: - Bibliotecas: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operacional: %1 -Arquitetura da CPU: %2 -Kernel: %3 %4 - - - Enabled extensions: - Extensões habilitadas: - Project Maintainers: - Mantedores do projeto: + Mantedores do Projeto: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - A equipe do KeePassXC agradece especialmente a debfx pela criação do KeePassX original. - - - Build Type: %1 - - Tipo de compilação: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Confirmar Acesso - - - Remember this decision - Lembrar esta escolha - - - Allow - Permitir - - - Deny - Negar - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 solicitou acesso a senhas para o(s) seguinte(s) iten(s). -Selecione se deseja permitir o acesso. + A equipe KeePassXC agradece especialmente a debfx pela criação do KeePassX original. AgentSettingsWidget Enable SSH Agent (requires restart) - Habilitar agente SSH (requer reinicialização) + Habilitar Agente SSH (requer reinicialização) + + + Use OpenSSH for Windows instead of Pageant + Usar o OpenSSH para Windows em vez de Pageant + + + + ApplicationSettingsWidget + + Application Settings + Configurações do Aplicativo + + + General + Geral + + + Security + Segurança + + + Access error for config file %1 + Erro de acesso para o arquivo de configuração %1 + + + Icon only + Só Ícones + + + Text only + Só textos + + + Text beside icon + Texto ao lado do ícone + + + Text under icon + Texto abaixo do ícone + + + Follow style + Seguir o estilo + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Configurações Básicas + + + Startup + Inicialização + + + Start only a single instance of KeePassXC + Iniciar apenas uma única instância do KeePassXC + + + Remember last databases + Lembrar dos últimos bancos de dados + + + Remember last key files and security dongles + Lembre-se de arquivos de chave passados e dongles de segurança + + + Load previous databases on startup + Carregar bancos de dados anteriores na inicialização + + + Minimize window at application startup + Iniciar programa com janela minimizada + + + File Management + Gerenciamento de Arquivo + + + Safely save database files (may be incompatible with Dropbox, etc) + Salvar seguramente os arquivos de banco de dados (pode ser incompatível com o Dropbox, etc) + + + Backup database file before saving + Fazer cópia de segurança do banco de dados antes de salvar + + + Automatically save after every change + Salvar automaticamente depois de cada alteração + + + Automatically save on exit + Salvar automaticamente ao sair + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Não marcar o banco de dados como modificado para alterações sem dados (por exemplo, expansão de grupos) + + + Automatically reload the database when modified externally + Automaticamente recarregar o banco de dados quando houver modificações externas + + + Entry Management + Gerenciamento de entrada + + + Use group icon on entry creation + Usar ícone de grupo na criação da entrada + + + Minimize when copying to clipboard + Minimizar ao copiar para área de transferência + + + Hide the entry preview panel + Ocultar entrada do painel de visualização + + + General + Geral + + + Hide toolbar (icons) + Ocultar barra de ferramentas (ícones) + + + Minimize instead of app exit + Minimizar em vez de sair do aplicativo + + + Show a system tray icon + Mostrar um ícone da bandeja do sistema + + + Dark system tray icon + Ícone de bandeja do sistema escuro + + + Hide window to system tray when minimized + Ocultar janela na bandeja de sistema quando minimizada + + + Language + Idioma + + + Auto-Type + Autodigitação + + + Use entry title to match windows for global Auto-Type + Usar o título de entrada para coincidir com a janela para Auto-Digitar global + + + Use entry URL to match windows for global Auto-Type + Use o URL de entrada para coincidir com a janela para Auto-Digitar global + + + Always ask before performing Auto-Type + Sempre perguntar antes de executar o Auto-Digitar + + + Global Auto-Type shortcut + Atalho para Auto-Digitação Global + + + Auto-Type typing delay + Atraso na digitação do Auto-Digitar + + + ms + Milliseconds + ms + + + Auto-Type start delay + Atraso ao iniciar Auto-Digitar + + + Check for updates at application startup + Verificar atualizações na inicialização do aplicativo + + + Include pre-releases when checking for updates + Incluir pré-lançamentos quando checar por atualizações + + + Movable toolbar + Barra de Ferramentas Móvel + + + Button style + Estilo de botão + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Tempos limite + + + Clear clipboard after + Limpar área de transferência após + + + sec + Seconds + seg + + + Lock databases after inactivity of + Travar bancos de dados após inatividade de + + + min + min + + + Forget TouchID after inactivity of + Esqueça o TouchID após inatividade de + + + Convenience + Conveniência + + + Lock databases when session is locked or lid is closed + Bloqueio de bancos de dados quando a sessão estiver bloqueada ou a tampa está fechada + + + Forget TouchID when session is locked or lid is closed + Esqueça o TouchID quando a sessão está bloqueada ou a tampa está fechada + + + Lock databases after minimizing the window + Bloquear bancos de dados após minimizar a janela + + + Re-lock previously locked database after performing Auto-Type + Bloquear novamente o banco de dados anteriormente bloqueado depois de executar o Auto-Digitar + + + Don't require password repeat when it is visible + Quando a senha for visível não pedir para repeti-la + + + Don't hide passwords when editing them + Não ocultar senhas quando estiver editando elas + + + Don't use placeholder for empty password fields + Não use espaço reservado para campos de senha vazios + + + Hide passwords in the entry preview panel + Ocultar senhas no painel da prévia de entrada + + + Hide entry notes by default + Esconder notas de entrada por padrão + + + Privacy + Privacidade + + + Use DuckDuckGo as fallback for downloading website icons + Use DuckDuckGo como substituto para baixar ícones de sites @@ -122,27 +332,27 @@ Selecione se deseja permitir o acesso. Auto-Type - KeePassXC - Autodigitação - KeePassXC + Auto-Digitação - KeePassXC Auto-Type - Autodigitação + Auto-Digitação The Syntax of your Auto-Type statement is incorrect! - A sintaxe da sua sequência de autodigitação está incorreta! + A sintaxe da sua sequência de Auto-Digitação está incorreta! This Auto-Type command contains a very long delay. Do you really want to proceed? - Este comando de autodigitação contém um tempo de espera muito longo. Você tem certeza de que deseja continuar? + Este comando de Auto-Digitação contém um tempo de espera muito longo. Você tem certeza que deseja continuar? This Auto-Type command contains very slow key presses. Do you really want to proceed? - Este comando de autodigitação contém pressionamentos de teclas muito lentos. Você tem certeza de que deseja continuar? + Este comando Autotipo contém pressionamentos de teclas muito lentos. Você realmente deseja prosseguir? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - Este comando de autodigitação contém parâmetros que são repetidos muitas vezes. Você tem certeza de que deseja continuar? + Este comando Auto-Type contém os argumentos que são repetidos muitas vezes. Você realmente deseja prosseguir? @@ -183,11 +393,11 @@ Selecione se deseja permitir o acesso. AutoTypeSelectDialog Auto-Type - KeePassXC - Autodigitação - KeePassXC + Auto-Digitação - KeePassXC Select entry to Auto-Type: - Escolha uma entrada para digitar automaticamente: + Escolha uma entrada para Auto-Digitar: @@ -215,6 +425,27 @@ Please select whether you want to allow access. Selecione se deseja permitir o acesso. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Salvar Entrada + + + Ok + Ok + + + Cancel + Cancelar + + + You have multiple databases open. +Please select the correct database for saving credentials. + Você tem vários bancos de dados abertos. +Por favor, selecione o banco de dados correto para salvar as credenciais. + + BrowserOptionDialog @@ -288,14 +519,6 @@ Selecione se deseja permitir o acesso. Credentials mean login data requested via browser extension Ordenar credenciais correspondentes por &nome de usuário - - &Disconnect all browsers - &Desconectar todos os navegadores - - - Forget all remembered &permissions - Descartar todas as &permissões salvas - Advanced Avançado @@ -303,7 +526,7 @@ Selecione se deseja permitir o acesso. Never &ask before accessing credentials Credentials mean login data requested via browser extension - Nunca peça confirmação antes de &acessar as credenciais + Nunca peça confirmação antes de acessar as credenciais Never ask before &updating credentials @@ -317,7 +540,7 @@ Selecione se deseja permitir o acesso. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - &Buscar em todos os bancos de dados abertos por credenciais correspondêntes + &Buscar em todos os bancos de dados abertos por credenciais correspondentes Automatically creating or updating string fields is not supported. @@ -333,7 +556,7 @@ Selecione se deseja permitir o acesso. Update &native messaging manifest files at startup - Atualizar arquivos de manifesto de mensagens &nativas na inicialização + Atualizar arquivos de manifesto de mensagens nativos na inicialização Support a proxy application between KeePassXC and browser extension. @@ -361,21 +584,42 @@ Selecione se deseja permitir o acesso. <b>Warning:</b> The following options can be dangerous! <b>AVISO:</b> As seguintes opções podem ser perigosas! - - Executable Files (*.exe);;All Files (*.*) - Arquivos Executáveis (*.exe);;Todos os Arquivos (*.*) - - - Executable Files (*) - Arquivos Executáveis (*) - Select custom proxy location Selecione localização para o proxy - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Desculpe, o KeePassXC-Browser não é suportado em versões Snap no momento. + &Tor Browser + &Navegador Tor + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Alerta</b>, o aplicativo keepassxc-proxy não foi encontrado!<br />Por favor, verifique o diretório de instalação do KeePassXC ou confirme o caminho personalizado nas opções avançadas.<br />A integração do navegador não funcionará sem o aplicativo proxy.<br />Caminho esperado: + + + Executable Files + Arquivos Executáveis + + + All Files + Todos os arquivos + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Não pedir permissão para HTTP &Basic Auth + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -404,8 +648,8 @@ Se você gostaria de permitir acesso ao seu banco de dados KeePassXC, atribua um A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - Uma chave de criptografia compartilhada com o nome "%1" já existe. -Você deseja sobrescrever-la? + Uma chave de criptografia compartilhada com o nome "% 1" já existe. +Você deseja sobrescreve-la? KeePassXC: Update Entry @@ -415,153 +659,55 @@ Você deseja sobrescrever-la? Do you want to update the information in %1 - %2? Deseja atualizar as informações em %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Banco de dados bloqueado! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - A base de dados ativa está bloqueada! -Desbloqueie base de dados selecionada ou escolha outra que esteja desbloqueada. - - - KeePassXC: Settings not available! - KeePassXC: Configurações não disponíveis! - - - The active database does not contain a settings entry. - O banco de dados ativo não contém uma entrada de configuração. - - - KeePassXC: No keys found - KeePassXC: Nenhuma chave localizada - - - No shared encryption keys found in KeePassXC Settings. - Nenhuma chave criptográfica compartilhada encontrada nas Configurações do KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: Chaves removidas do banco de dados - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Removido com sucesso %n chave(s) criptográficas das configurações do KeePassXC.Removido com sucesso %n chave(s) criptográficas das configurações do KeePassXC. - - - Removing stored permissions… - Removendo permissões armazenadas... - Abort Cancelar - KeePassXC: Removed permissions - KeePassXC: Permissões removidas + Converting attributes to custom data… + Convertendo atributos para dados personalizados... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Convertido KeePassHTTP atributos + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Atributos convertidos com sucesso de %1 entrada(s). +Movido %2 chaves para dados personalizados. - Successfully removed permissions from %n entry(s). - Removido com êxito as permissões de %n entrada(s).Removido com êxito as permissões de %n entrada(s). + Successfully moved %n keys to custom data. + Movido com sucesso %n chaves para dados personalizados.Movido com sucesso %n chaves para dados personalizados. - KeePassXC: No entry with permissions found! - KeePassXC: Nenhuma entrada com permissões localizada! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nenhuma entrada com os atributos KeePassHTTP encontrados! - The active database does not contain an entry with permissions. - A base de dados ativa não contém uma entrada com permissões. - - - - ChangeMasterKeyWidget - - Password - Senha + The active database does not contain an entry with KeePassHTTP attributes. + O banco de dados ativo não contém uma entrada com atributos KeePassHTTP. - Enter password: - Insira senha: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Configurações de integração do navegador herdado detectadas - Repeat password: - Repita senha: + KeePassXC: Create a new group + - &Key file - &Arquivo-Chave + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Navegar - - - Create - Criar - - - Cha&llenge Response - &Desafio Resposta - - - Refresh - Atualizar - - - Key files - Arquivos-Chave - - - All files - Todos os Arquivos - - - Create Key File... - Criar Arquivo-Chave... - - - Unable to create Key File : - Não foi possível criar o Arquivo-Chave : - - - Select a key file - Escolha um arquivo-chave - - - Empty password - Senha vazia - - - Do you really want to use an empty string as password? - Você realmente quer usar uma sequência vazia como senha? - - - Different passwords supplied. - Senhas diferentes fornecidas. - - - Failed to set %1 as the Key file: -%2 - Falha ao definir %1 como o Arquivo-Chave: -%2 - - - Legacy key file format - Formato de chave antigo - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Você está usando um formato de arquivo de chave legado que pode tornar-se sem suporte no futuro. - -Por favor, considere gerar um novo arquivo de chave. - - - Changing master key failed: no YubiKey inserted. - Mudança da senha mestre falhou: YubiKey não inserido. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -641,14 +787,6 @@ Por favor, considere gerar um novo arquivo de chave. Not present in CSV file Não existe no arquivo CSV - - Empty fieldname - Nome de campo vazio - - - column - coluna - Imported from CSV file Importado do arquivo CSV @@ -657,49 +795,90 @@ Por favor, considere gerar um novo arquivo de chave. Original data: Dados originais: - - Error(s) detected in CSV file ! - Erro(s) detectado(s) no arquivo CSV! - - - more messages skipped] - mais mensagens puladas] - Error Erro + + Empty fieldname %1 + Nome de campo vazio %1 + + + column %1 + coluna %1 + + + Error(s) detected in CSV file! + Erro(s) detectado(s) no arquivo CSV! + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - Importar CSV: escritor tem erros: - - - - - CsvImportWizard - - Error - Erro - - - Unable to calculate master key - Não foi possível calcular a chave mestre +%1 + Importação de CSV: o gravador tem erros: +%1 CsvParserModel - - %n byte(s), - %n bytes(s),%n bytes(s), - - - %n row(s), - %n linha(s), %n row(s), - %n column(s) - coluna (s) %n%n coluna(s) + %n coluna(s)%n coluna(s) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes + + + %n row(s) + %n linha%n linhas + + + + Database + + Root + Root group name + Raíz + + + File %1 does not exist. + Arquivo %1 não existe. + + + Unable to open file %1. + Não é possível abrir o arquivo %1. + + + Error while reading the database: %1 + Erro ao ler o banco de dados: %1 + + + Could not save, database has no file name. + Não foi possível salvar, o banco de dados não possui nome de arquivo. + + + File cannot be written as it is opened in read-only mode. + O arquivo não pode ser gravado, pois é aberto no modo somente leitura. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Desbloquear Banco de Dados - KeePassXC @@ -728,14 +907,6 @@ Por favor, considere gerar um novo arquivo de chave. Challenge Response: Resposta do Desafio: - - Unable to open the database. - Não foi possível abrir o banco de dados. - - - Can't open key file - Não foi possível abrir o arquivo-chave - Legacy key file format Formato de chave antigo @@ -747,7 +918,7 @@ unsupported in the future. Please consider generating a new key file. Você está usando um formato de arquivo de chave legado que pode tornar-se sem suporte no futuro. -Por favor, considere gerar um novo arquivo de chave. +Por favor, considere-se gerar um novo arquivo de chave. Don't show this warning again @@ -755,7 +926,7 @@ Por favor, considere gerar um novo arquivo de chave. All files - Todos os arquivos + Todos arquivos Key files @@ -765,53 +936,252 @@ Por favor, considere gerar um novo arquivo de chave. Select key file Escolha o arquivo-chave - - - DatabaseRepairWidget - Repair database - Reparar banco de dados + TouchID for quick unlock + TouchID para desbloqueio rápido - Error - Erro + Unable to open the database: +%1 + Não é possível abrir o banco de dados: +%1 - Can't open key file - Não foi possível abrir arquivo-chave - - - Unable to open the database. - Não foi possível abrir o banco de dados. - - - Database opened fine. Nothing to do. - Banco de dados aberto com sucesso. Nada para fazer. - - - Success - Sucesso - - - The database has been successfully repaired -You can now save it. - O banco de dados foi reparado com sucesso -Você pode salvá-lo agora. - - - Unable to repair the database. - Não foi possível reparar o banco de dados. + Can't open key file: +%1 + Não é possível abrir o arquivo de chaves: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Senhas + + + + DatabaseSettingsDialog + + Advanced Settings + Definições avançadas + General Geral - Encryption - Encriptação + Security + Segurança + + + Master Key + Chave-mestre + + + Encryption Settings + Definições de cifra + + + Browser Integration + Integração com o Navegador + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Configurações do KeePassXC-Browser + + + &Disconnect all browsers + &Desconectar todos os navegadores + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + Chaves guardadas + + + Remove + Remover + + + Delete the selected key? + Apagar chave selecionada? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Você realmente deseja excluir a chave selecionada? +Isso pode impedir a conexão com o plugin do navegador. + + + Key + Chave + + + Value + Valor + + + Enable Browser Integration to access these settings. + Ative a integração do navegador para acessar essas configurações. + + + Disconnect all browsers + Desconectar todos os navegadores + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Você realmente deseja desconectar todos os navegadores? +Isso pode impedir a conexão com o plugin do navegador. + + + KeePassXC: No keys found + KeePassXC: Nenhuma chave localizada + + + No shared encryption keys found in KeePassXC settings. + Nenhuma chave de criptografia compartilhada encontrada nas configurações do KeePassXC. + + + KeePassXC: Removed keys from database + KeePassXC: Chaves removidas do banco de dados + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + Esqueça todas as configurações específicas do site nas entradas + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Removendo permissões armazenadas... + + + Abort + Cancelar + + + KeePassXC: Removed permissions + KeePassXC: Permissões removidas + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: Nenhuma entrada com permissões localizada! + + + The active database does not contain an entry with permissions. + A base de dados ativa não contém uma entrada com permissões. + + + Move KeePassHTTP attributes to custom data + Mover atributos KeePassHTTP para dados personalizados + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algoritmo de Encriptação: + + + AES: 256 Bit (default) + AES: 256 Bit (padrão) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Função de Derivação de Chave: + + + Transform rounds: + Rodadas de transformação: + + + Benchmark 1-second delay + Testar atraso de 1 segundo + + + Memory Usage: + Uso de Memória: + + + Parallelism: + Paralelismo: + + + Decryption Time: + Hora da descriptografia: + + + ?? s + ?? s + + + Change + Alterar + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + Formato de banco de dados: + + + This is only important if you need to use your database with other programs. + Isso só é importante se você precisar usar seu banco de dados com outros programas. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recomendado) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + inalterado Number of rounds too high @@ -863,42 +1233,17 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!< thread(s) Threads for parallel execution (KDF settings) - thread(s) thread(s) + - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algoritmo de Encriptação: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 Bit (padrão) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Função de Derivação de Chave: - - - Transform rounds: - Rodadas de transformação: - - - Benchmark 1-second delay - Testar atraso de 1 segundo - - - Memory Usage: - Uso de Memória: - - - Parallelism: - Paralelismo: + + %1 s + seconds + %1 s%1 s @@ -933,7 +1278,7 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!< MiB - MiB + MB Use recycle bin @@ -945,52 +1290,105 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!< Enable &compression (recommended) - Ativar &compressão (recomendado) + Ativar &compressão + + + + DatabaseSettingsWidgetKeeShare + + Sharing + Compartilhando + + + Breadcrumb + + + + Type + Tipo + + + Path + Caminho + + + Last Signer + + + + Certificates + Certificados + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Adicionar proteção adicional... + + + No encryption key added + Chave de cifra não adicionada + + + You must add at least one encryption key to secure your database! + Você deve adicionar pelo menos uma chave de criptografia para proteger seu banco de dados! + + + No password set + Nenhuma senha definida + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + AVISO! Você não definiu uma senha. Usar um banco de dados sem uma senha é altamente desencorajado! + +Tem certeza de que deseja continuar sem uma senha? + + + Unknown error + Erro desconhecido + + + Failed to change master key + Não foi possível alterar a chave mestra + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nome do banco de dados: + + + Description: + Descrição: DatabaseTabWidget - - Root - Root group - Raíz - KeePass 2 Database - Banco de Dados KeePass 2 + Banco de dados Keepass 2 All files - Todos os arquivos + Todos arquivos Open database Abrir banco de dados - - File not found! - Arquivo não localizado! - - - Unable to open the database. - Não foi possível abrir o banco de dados. - - - File opened in read only mode. - Arquivo aberto no modo somente leitura. - - - Open CSV file - Abrir arquivo CSV - CSV file Arquivo CSV - - All files (*) - Todos os arquivos (*) - Merge database Juntar banco de dados @@ -1003,38 +1401,6 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!< KeePass 1 database Banco de dados KeePass 1 - - Close? - Fechar? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" está em modo de edição. -Descartar alterações e fechar mesmo assim? - - - Save changes? - Salvar alterações? - - - "%1" was modified. -Save changes? - "%1" foi modificado. -Salvar alterações? - - - Writing the database failed. - Escrever no banco de dados falhou. - - - Passwords - Senhas - - - Save database as - Salvar banco de dados como - Export database to CSV file Exportar banco de dados para arquivo CSV @@ -1044,40 +1410,41 @@ Salvar alterações? Falha ao gravar arquivo CSV. - New database - Novo banco de dados + Database creation error + Erro ao criar o banco de dados - locked - trancado + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + O banco de dados criado não possui chave ou KDF, recusando-se a salvá-lo. +Este é definitivamente um bug, por favor denuncie para os desenvolvedores. - Lock database - Trancar Banco de Dados + The database file does not exist or is not accessible. + O arquivo de banco de dados não existe ou não está acessível. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Não é possível trancar o banco de dados uma vez que você o está editando. -Por favor, aperte cancelar para finalizar suas alterações ou descartá-las. + Select CSV file + Selecionar arquivo CSV - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Esse banco de dados foi modificado. -Você deseja salvar o banco de dados antes de travá-lo? -Do contrário, suas alterações serão perdidas. + New Database + Novo Banco de Dados - Disable safe saves? - Desativar armazenamento seguro? + %1 [New Database] + Database tab name modifier + %1 [Novo banco de dados] - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC não pôde salvar o banco de dados após várias tentativas. Isto é causado provavelmente pelo serviço de sincronização de arquivo que mantém um bloqueio ao salvar o arquivo. -Deseja desabilitar salvamento seguro e tentar de novo? + %1 [Locked] + Database tab name modifier + %1 [Bloqueada] + + + %1 [Read-only] + Database tab name modifier + %1 [Apenas leitura] @@ -1086,41 +1453,17 @@ Deseja desabilitar salvamento seguro e tentar de novo? Searching... Pesquisando... - - Change master key - Alterar chave mestra - - - Delete entry? - Apagar entrada? - Do you really want to delete the entry "%1" for good? Você realmente quer apagar a entrada "%1" para sempre? - - Delete entries? - Apagar entradas? - - - Do you really want to delete %1 entries for good? - Você realmente quer apagar %1 entradas para sempre? - - - Move entry to recycle bin? - Mover entrada para a lixeira? - Do you really want to move entry "%1" to the recycle bin? Pretende realmente mover a entrada "%1" para a lixeira? - - Move entries to recycle bin? - Mover entradas para lixeira? - Do you really want to move %n entry(s) to the recycle bin? - Você realmente deseja mover %n entrada para a lixeira?Você realmente deseja mover %n entradas para a lixeira? + Você quer realmente mudar %n entradas para a lixeira?Você deseja realmente mover %n entrada(s) para a lixeira? Execute command? @@ -1134,18 +1477,10 @@ Deseja desabilitar salvamento seguro e tentar de novo? Remember my choice Lembrar minha escolha - - Delete group? - Apagar grupo? - Do you really want to delete the group "%1" for good? Você realmente quer apagar o grupo "%1" para sempre? - - Unable to calculate master key - Não foi possível calcular chave mestra - No current database. Nenhuma base de dados atual. @@ -1180,10 +1515,6 @@ Do you want to merge your changes? O arquivo de banco de dados foi alterado e você tem alterações não salvas. Você deseja combinar suas alterações? - - Could not open the new database file while attempting to autoreload this database. - Não foi possível abrir a nova base de dados ao tentar recarregar automaticamente essa base de dados. - Empty recycle bin? Esvaziar lixeira? @@ -1192,88 +1523,109 @@ Você deseja combinar suas alterações? Are you sure you want to permanently delete everything from your recycle bin? Você tem certeza que deseja apagar permanentemente tudo que está na lixeira? - - - DetailsWidget - - Generate TOTP Token - Gerar Token TOTP + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + Apagar entrada?Apagar entradas? + + + Move entry(s) to recycle bin? + Mover entrada para a lixeira?Mover entradas para a lixeira? - Close - Fechar + File opened in read only mode. + Arquivo aberto no modo somente leitura. - General - Geral + Lock Database? + Travar banco de dados? - Password - Senha + You are editing an entry. Discard changes and lock anyway? + Você está editando uma entrada. Descartar as mudanças e travar de qualquer maneira? - URL - URL + "%1" was modified. +Save changes? + "%1" foi modificado. +Salvar alterações? - Expiration - Expiração + Database was modified. +Save changes? + Banco de dados foi modificado. +Salvar alterações? - Username - Nome de usuário + Save changes? + Salvar alterações? - Autotype - Auto-Digitação + Could not open the new database file while attempting to autoreload. +Error: %1 + - Searching - Busca + Disable safe saves? + Desativar armazenamento seguro? - Attributes - Atributos + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC não pôde salvar o banco de dados após várias tentativas. Isto é causado provavelmente pelo serviço de sincronização de arquivo que mantém um bloqueio ao salvar o arquivo. +Deseja desabilitar salvamento seguro e tentar novamente? - Attachments - Anexos + Writing the database failed. +%1 + - Notes - Notas + Passwords + Senhas - Window - Janela + Save database as + Salvar banco de dados como - Sequence - Sequência + KeePass 2 Database + Banco de dados Keepass 2 - Search - Pesquisar + Replace references to entry? + Substituir referências para entrada? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Clear - Limpar + Delete group + Excluir grupo - Never - Nunca + Move group to recycle bin? + Mover o grupo para a lixeira? - [PROTECTED] - [PROTEGIDO] + Do you really want to move the group "%1" to the recycle bin? + Você realmente quer mover o grupo "%1" para a Lixeira? - Disabled - Desabilitado + Successfully merged the database files. + Fundiu com sucesso os arquivos do banco de dados. - Enabled - Habilitado + Database was not modified by merge operation. + Banco de dados não foi modificado pela operação de mesclagem. + + + Shared group... + @@ -1346,22 +1698,10 @@ Você deseja combinar suas alterações? New attribute Novo atributo - - Confirm Remove - Confirmar Exclusão - Are you sure you want to remove this attribute? Você tem certeza que deseja remover este atributo? - - [PROTECTED] - [PROTEGIDO] - - - Press reveal to view or edit - Aperte revelar para ver ou editar - Tomorrow Amanhã @@ -1372,11 +1712,7 @@ Você deseja combinar suas alterações? %n month(s) - %n mês%n mese(s) - - - 1 year - 1 ano + %n mese(s)%n mese(s) Apply generated password? @@ -1390,6 +1726,26 @@ Você deseja combinar suas alterações? Entry updated successfully. Item atualizado com sucesso. + + Entry has unsaved changes + A entrada tem alterações não salvas + + + New attribute %1 + Novo atributo %1 + + + [PROTECTED] Press reveal to view or edit + [PROTEGIDO] Pressione revelar para visualizar ou editar + + + %n year(s) + %n ano%n anos + + + Confirm Removal + Confirme a Remoção + EditEntryWidgetAdvanced @@ -1634,11 +1990,102 @@ Você deseja combinar suas alterações? Herdar do grupo pai (%1) + + EditGroupWidgetKeeShare + + Form + Formulário + + + Type: + Tipo: + + + Path: + Caminho: + + + ... + ... + + + Password: + Senha: + + + Inactive + Inativo + + + Import from path + Importar do caminho + + + Export to path + Exportar para o caminho + + + Synchronize with path + Sincronize com o caminho + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Sua versão do KeePassXC não suporta o compartilhamento do tipo de contêiner. Por favor, use %1. + + + Database sharing is disabled + O compartilhamento de banco de dados está desativado + + + Database export is disabled + A exportação de banco de dados está desativada + + + Database import is disabled + A importação do banco de dados está desativada + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + Selecione a fonte de importação + + + Select export target + Selecione o destino de exportação + + + Select import/export file + Selecione o arquivo de importação/exportação + + + Clear + Limpar + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain Name - Nom + Nome Notes @@ -1650,7 +2097,7 @@ Você deseja combinar suas alterações? Search - Buscar + Pesquisar Auto-Type @@ -1662,7 +2109,7 @@ Você deseja combinar suas alterações? Set default Auto-Type se&quence - Definir se&quência padrão de Auto-Digitar + Definir sequência padrão de Auto-Digitar @@ -1691,25 +2138,13 @@ Você deseja combinar suas alterações? Unable to fetch favicon. Não foi possível obter favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Dica: Você pode ativar o Google como um recurso em Ferramentas>Configurações>Segurança - Images Imagens All files - Todos os arquivos - - - Select Image - Selecionar imagem - - - Can't read icon - Não foi possível ler ícone + Todos arquivos Custom icon already exists @@ -1720,8 +2155,36 @@ Você deseja combinar suas alterações? Confirmar Exclusão - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Este ícone é usado por %1 entradas, e será substituido pelo ícone padrão. Você tem certeza que deseja apaga-lo? + Custom icon successfully downloaded + Ícone personalizado baixado com sucesso + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + Selecionar Imagem(ns) + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + Nenhum ícone foi carregado + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1772,9 +2235,8 @@ Isto pode causar mal funcionamento dos plugins afetados. Entry - - Clone - Suffix added to cloned entries - - Clone + %1 - Clone + %1 - Clone @@ -1818,10 +2280,6 @@ Isto pode causar mal funcionamento dos plugins afetados. Are you sure you want to remove %n attachment(s)? Tem certeza que deseja remover anexos de %n?Tem certeza que deseja remover os %n anexo(s)? - - Confirm Remove - Confirmar Exclusão - Save attachments Salvar anexos @@ -1849,7 +2307,7 @@ Isto pode causar mal funcionamento dos plugins afetados. Unable to open attachment: %1 - Não foi possível abrir anexos: + Não foi possível abrir anexo: %1 @@ -1859,10 +2317,13 @@ Isto pode causar mal funcionamento dos plugins afetados. %1 - Unable to open files: + Confirm remove + Confirmar remoção + + + Unable to open file(s): %1 - Impossibilitado de abrir arquivos: -%1 + @@ -1946,6 +2407,106 @@ Isto pode causar mal funcionamento dos plugins afetados. Attachments Anexos + + Yes + Sim + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Gerar Token TOTP + + + Close + Fechar + + + General + Geral + + + Username + Nome de usuário + + + Password + Senha + + + Expiration + Expiração + + + URL + URL + + + Attributes + Atributos + + + Attachments + Anexos + + + Notes + Notas + + + Autotype + Auto-Digitação + + + Window + Janela + + + Sequence + Sequência + + + Searching + Busca + + + Search + Pesquisar + + + Clear + Limpar + + + Never + Nunca + + + [PROTECTED] + [PROTEGIDO] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Habilitado + + + Disabled + Desabilitado + + + Share + Compartilhar + EntryView @@ -1959,7 +2520,7 @@ Isto pode causar mal funcionamento dos plugins afetados. Hide Passwords - Ocultar Senhas + Ocultar senhas Fit to window @@ -1984,6 +2545,11 @@ Isto pode causar mal funcionamento dos plugins afetados. Recycle Bin Lixeira + + [empty] + group has no children + [vazio] + HostInstaller @@ -1996,61 +2562,6 @@ Isto pode causar mal funcionamento dos plugins afetados. Não pode salvar o arquivo de script de envio de mensagens nativo. - - HttpPasswordGeneratorWidget - - Length: - Comprimento: - - - Character Types - Tipo de Caracteres - - - Upper Case Letters - Letras Maiúsculas - - - A-Z - A-Z - - - Lower Case Letters - Letras Minúsculas - - - a-z - a-z - - - Numbers - Números - - - 0-9 - 0-9 - - - Special Characters - Caracteres Especiais - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Excluir caracteres semelhantes - - - Ensure that the password contains characters from every group - Verificar se a senha contém caracteres de todos os grupos - - - Extended ASCII - ASCII extendido - - KMessageWidget @@ -2076,6 +2587,26 @@ Isto pode causar mal funcionamento dos plugins afetados. Wrong key or database file is corrupt. Chave errada ou base de dados corrompida. + + missing database headers + cabeçalhos de banco de dados ausente + + + Header doesn't match hash + + + + Invalid header id size + Tamanho do id do cabeçalho inválido + + + Invalid header field length + Comprimento do campo de cabeçalho inválido + + + Invalid header data length + Comprimento de dados cabeçalho inválido + Kdbx3Writer @@ -2108,7 +2639,7 @@ Isto pode causar mal funcionamento dos plugins afetados. Wrong key or database file is corrupt. (HMAC mismatch) - Arquivo errado chave ou banco de dados está corrompido. (Incompatibilidade de HMAC) + Chave inválida ou arquivo banco de dados está corrompido. (Incompatibilidade de HMAC) Unknown cipher @@ -2116,7 +2647,7 @@ Isto pode causar mal funcionamento dos plugins afetados. Invalid header id size - Tamanho de header id inválido + Tamanho do id do cabeçalho inválido Invalid header field length @@ -2140,7 +2671,7 @@ Isto pode causar mal funcionamento dos plugins afetados. Invalid inner header id size - Cabeçalho interno inválido tamanho do id + Tamanho do id do cabeçalho interno inválido Invalid inner header field length @@ -2158,57 +2689,57 @@ Isto pode causar mal funcionamento dos plugins afetados. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - Mapa variante inválido item comprimento do nome + Comprimento inválido do nome da entrada da variante do mapa Invalid variant map entry name data Translation: variant map = data structure for storing meta data - Mapa de variante inválido dados de nome da entrada + Dados inválidos do nome da entrada da variante do mapa Invalid variant map entry value length Translation: variant map = data structure for storing meta data - Comprimento de valor de entrada inválida de mapa variante + Comprimento inválido do valor de entrada do mapa Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - Mapa de variante inválido dados de valor da entrada + Dados inválidos do valor da entrada da variante do mapa Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - Mapa de variante inválida valor do comprimento do item Bool + Comprimento inválido do valor booleano da entrada da variante do mapa Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - Mapa de variante inválida valor do comprimento do item Int32 + Comprimento inválido do valor da entrada Int32 da variante do mapa Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Mapa de variante inválida valor do comprimento do item UInt32 + Comprimento inválido do valor da entrada UInt32 da variante do mapa Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Mapa de variante inválido Int64 comprimento de valor de entrada + Comprimento inválido do valor da entrada Int64 da variante do mapa Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Mapa de variante inválida valor do comprimento do item UInt64 + Comprimento inválido do valor da entrada UInt64 da variante do mapa Invalid variant map entry type Translation: variant map = data structure for storing meta data - Tipo de entrada mapa variante inválido + Tipo inválido da entrada da variante do mapa Invalid variant map field type size Translation: variant map = data structure for storing meta data - Tamanho do campo de tipo de mapa de variante inválido + Tamanho inválido do tipo de campo da variante do mapa @@ -2229,15 +2760,11 @@ Isto pode causar mal funcionamento dos plugins afetados. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - Falha ao serializar mapa variante do KDF parâmetros + Falha ao serializar mapa variante do parâmetros KDF KdbxReader - - Invalid cipher uuid length - Comprimento de uuid cifra inválido - Unsupported cipher Cifra não suportada @@ -2268,7 +2795,7 @@ Isto pode causar mal funcionamento dos plugins afetados. Invalid random stream id size - Tamanho de id de stream aleatório inválido + Tamanho de ID de fluxo aleatório inválido Invalid inner random stream cipher @@ -2292,6 +2819,18 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Unsupported KeePass 2 database version. Versão do banco de dados KeePass 2 não suportada. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + Falha ao ler o arquivo de banco de dados. + KdbxXmlReader @@ -2313,7 +2852,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Multiple group elements - Elementos de grupo múltiplo + Vários elementos do grupo Null group uuid @@ -2333,7 +2872,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da No group uuid found - Nenhum uuid de grupo encontrado + Nenhum grupo uuid encontrado Null DeleteObject uuid @@ -2349,7 +2888,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Invalid entry icon number - Entrada de número de ícone inválida + Item inválido número de ícone History element in history entry @@ -2363,10 +2902,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da History element with different uuid Elemento de história com diferente uuid - - Unable to decrypt entry string - Não é possível descriptografar a sequência de caracteres de entrada - Duplicate custom attribute found Atributo customizado duplicado encontrado @@ -2416,6 +2951,14 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Translator meant is a binary data inside an entry Não é possível descompactar binário + + XML error: +%1 +Line %2, column %3 + Erro XML: +%1 +Linha %2, coluna %3 + KeePass1OpenWidget @@ -2444,7 +2987,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Unsupported KeePass database version. - Versão do banco de dados KeePass não suportada. + Versão não suportada do banco de dados KeePass. Unable to read encryption IV @@ -2453,7 +2996,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Invalid number of groups - Número de grupos inválido + Número inválido de grupos Invalid number of entries @@ -2465,7 +3008,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Invalid transform seed size - Tamanho de semente de transformação inválido + Tamanho de sementes de transformação inválido Invalid number of transform rounds @@ -2481,7 +3024,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Unable to calculate master key - Não foi possível calcular a chave mestra + Não foi possível calcular a chave mestre Wrong key or database file is corrupt. @@ -2509,11 +3052,11 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Incorrect group creation time field size - Group incorreto tamanho do campo de hora de criação + Grupo incorreto tamanho do campo de hora de criação Incorrect group modification time field size - Grupo incorreto tamanho do campo de hora de criação + Grupo incorreto tamanho do campo de hora de modificação Incorrect group access time field size @@ -2537,7 +3080,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Missing group id or level - Id do grupo ou nível ausente + Grupo ausente id ou nível Missing entry field type number @@ -2553,11 +3096,11 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Invalid entry uuid field size - Entrada inválida tamanho do campo uuid + Item inválido tamanho do campo uuid Invalid entry group id field size - Item inválido tamanho do campo de id de groupo + Item inválido tamanho do campo de id de grupo Invalid entry icon field size @@ -2579,55 +3122,142 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Invalid entry field type Tipo de campo de entrada inválido - - - KeePass2 - AES: 256-bit - AES: 256 bits - - - Twofish: 256-bit - Twofish: 256 bits - - - ChaCha20: 256-bit - ChaCha20: 256 bits - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – recomendado) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - O arquivo cadeado de instância única existente é inválido. Iniciando nova instância. + Disabled share + Compartilhamento desativado - The lock file could not be created. Single-instance mode disabled. - O arquivo cadeado não pode ser criado. Modo de instância única desabilitado. + Import from + Importar de - Another instance of KeePassXC is already running. - Outra instância do KeePassXC já está rodando. + Export to + Exportar para - Fatal error while testing the cryptographic functions. - Erro fatal enquanto testava as funções criptográficas. + Synchronize with + Sincronizar com - KeePassXC - Error - KeePassXC - Erro + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Componente chave + + + Key Component Description + Descrição do Componente Chave + + + Cancel + Cancelar + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + Adicionar %1 + + + Change %1 + Change a key component + Mudar %1 + + + Remove %1 + Remove a key component + Remover %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 definido, clique para mudar ou remover + + + + KeyFileEditWidget + + Browse + Navegar + + + Generate + Gerar + + + Key File + Arquivo Chave + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + Formato de chave antigo + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Arquivos-chave + + + All files + Todos arquivos + + + Create Key File... + Criar Arquivo-Chave... + + + Error creating key file + Erro ao criar o arquivo de chave + + + Unable to create key file: %1 + + + + Select a key file + Escolha um arquivo-chave @@ -2640,10 +3270,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da &Recent databases &Bancos de dados recentes - - Import - Importar - &Help &Ajuda @@ -2652,14 +3278,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da E&ntries E&ntradas - - Copy att&ribute to clipboard - Copiar at&ributo para área de transferência - - - Time-based one-time password - Senha única baseada em tempo - &Groups &Grupos @@ -2678,7 +3296,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da &Open database... - &Abrir base de dados... + &Abrir banco de dados... &Save database @@ -2688,30 +3306,10 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da &Close database &Fechar base de dados - - &New database - &Nova base de dados - - - Merge from KeePassX database - Juntar base de dados a partir de KeePassX - - - &Add new entry - &Adicionar nova entrada - - - &View/Edit entry - &Ver/Editar entrada - &Delete entry &Apagar entrada - - &Add new group - &Adicionar novo grupo - &Edit group &Editar grupo @@ -2722,15 +3320,7 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Sa&ve database as... - Sal&var base de dados como... - - - Change &master key... - Alterar chave &mestra... - - - &Database settings - &Definições da base de dados + Sal&var banco de dados como... Database settings @@ -2740,10 +3330,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da &Clone entry &Clonar entrada - - &Find - &Encontrar - Copy &username Copiar nome de &usuário @@ -2752,10 +3338,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Copy username to clipboard Copiar nome de usuário para área de transferência - - Cop&y password - Cop&iar senha - Copy password to clipboard Copiar senha para área de transferência @@ -2768,14 +3350,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Password Generator Gerador de Senha - - &Perform Auto-Type - &Executar escrita automática - - - &Open URL - &Abrir URL - &Lock databases &Trancar base de dados @@ -2808,22 +3382,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da &Export to CSV file... &Exportar para arquivo CSV... - - Import KeePass 1 database... - Importar banco de dados KeePass1... - - - Import CSV file... - Importar arquivo CSV... - - - Re&pair database... - Re&parar banco de dados... - - - Show TOTP - Mostrar TOTP - Set up TOTP... Configurar TOTP... @@ -2844,14 +3402,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Access error for config file %1 Erro de acesso para o arquivo de configuração %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Parece que você está usando KeePassHTTP para integração do navegador. Esse recurso é obsoleto e será removido no futuro. <br>Por favor mudar para KeePassXC-Browser! Para obter ajuda com a migração, visite o nosso <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration"> guia de migração</a> (aviso %1 de 3).</p> - - - read-only - somente leitura - Settings Configurações @@ -2864,26 +3414,6 @@ Isto é uma migração de caminho único. Você não poderá abrir o banco de da Quit KeePassXC Fechar KeePassXC - - KeePass 2 Database - Banco de dados Keepass 2 - - - All files - Todos arquivos - - - Open database - Abrir banco de dados - - - Save repaired database - Salvar banco de dados reparado - - - Writing the database failed. - Escrita do banco de dados falhou. - Please touch the button on your YubiKey! Por favor pressione o botão em seu YubiKey! @@ -2896,6 +3426,269 @@ This version is not meant for production use. Existe um alto risco de corrupção, mantenha um backup de seus bancos de dados. Esta versão não se destina ao uso em produção. + + &Donate + &Doar + + + Report a &bug + Relatar um &bug + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + AVISO: Sua versão do Qt pode fazer com que o KeePassXC trave com um teclado na tela! +Recomendamos que você use o AppImage disponível em nossa página de downloads. + + + &Import + &Importar + + + Copy att&ribute... + Copiar at&ributo... + + + TOTP... + TOTP... + + + &New database... + &Novo banco de dados... + + + Create a new database + Criar um banco de dados + + + &Merge from database... + &Mesclar do banco de dados... + + + Merge from another KDBX database + Mesclar de outro banco de dados KDBX + + + &New entry + &Nova entrada + + + Add a new entry + Adicionar uma nova entrada + + + &Edit entry + &Editar entrada + + + View or edit entry + Exibir ou editar entrada + + + &New group + &Novo Grupo + + + Add a new group + Adicionar a um novo grupo + + + Change master &key... + Mudar &chave mestra + + + &Database settings... + &Configurações do banco de dados... + + + Copy &password + Copiar &senha + + + Perform &Auto-Type + Executar &Auto Digitação + + + Open &URL + Abrir &URL + + + KeePass 1 database... + Banco de dados do KeePass 1... + + + Import a KeePass 1 database + Importar banco de dados do KeePass 1 + + + CSV file... + Arquivo CSV... + + + Import a CSV file + Importar arquivo CSV + + + Show TOTP... + Mostrar TOTP... + + + Show TOTP QR Code... + Exibir Código QR do TOTP... + + + Check for Updates... + Checar por Atualizações... + + + Share entry + Compartilhar entrada + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + NOTA: Você está usando uma versão de pré-lançamento do KeePassXC! +Espere alguns bugs e problemas menores, esta versão não é para uso em produção. + + + Check for updates on startup? + Verificar se há atualizações na inicialização? + + + Would you like KeePassXC to check for updates on startup? + Gostaria que o KeePassXC procure atualizações na inicialização? + + + You can always check for updates manually from the application menu. + Você sempre pode verificar atualizações manualmente no menu do aplicativo. + + + + Merger + + Creating missing %1 [%2] + Criando %1 [%2] + + + Relocating %1 [%2] + Realocando %1 [%2] + + + Overwriting %1 [%2] + Substituindo %1 [%2] + + + older entry merged from database "%1" + entrada mais antiga mesclada do banco de dados "%1" + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + Sincronizando a partir da fonte antiga %1 [%2] + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Criar um novo banco de dados KeePassXC... + + + Root + Root group + Raíz + + + + NewDatabaseWizardPage + + WizardPage + Assistente + + + En&cryption Settings + Definições de &cifra + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados. + + + Advanced Settings + Definições avançadas + + + Simple Settings + Definições básicas + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Definições de cifra + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Chave mestra do banco de dados + + + A master key known only to you protects your database. + Uma chave mestra conhecida apenas por você protege seu banco de dados. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Informações Gerais Sobre o Banco de Dados + + + Please fill in the display name and an optional description for your new database: + Por favor preencha o nome de exibição e uma descrição opcional para o seu novo banco de dados: + OpenSSHKey @@ -2925,7 +3718,7 @@ Esta versão não se destina ao uso em produção. Failed to read public key. - Falha ao ler chave pública. + Falha ao ler chave pública Corrupted key file, reading private key failed @@ -2953,27 +3746,27 @@ Esta versão não se destina ao uso em produção. Unexpected EOF while reading public key - EOF inesperado enquanto lendo a chave pública + EOF inesperado enquanto lendo a chave pública. Unexpected EOF while reading private key - EOF inesperado enquanto lendo a chave privada + EOF inesperado enquanto lendo a chave privada. Can't write public key as it is empty - Não é possível escrever a chave pública enquanto estiver vazio + Não é possível escrever a chave pública enquanto estiver vazio. Unexpected EOF when writing public key - EOF inesperado enquanto escrevendo a chave pública + EOF inesperado enquanto escrevendo a chave pública. Can't write private key as it is empty - Não é possível escrever a chave privada enquanto estiver vazio + EOF inesperado enquanto escrevendo a chave privada. Unexpected EOF when writing private key - EOF inesperado enquanto escrevendp a chave privada + EOF inesperado enquanto escrevendp a chave privada. Unsupported key type: %1 @@ -2997,125 +3790,30 @@ Esta versão não se destina ao uso em produção. - OptionDialog + PasswordEditWidget - Dialog - Diálogo + Enter password: + Insira senha: - This is required for accessing your databases from ChromeIPass or PassIFox - Isso é necessário para acessar seus bancos de dados com o ChomeIPass ou PassIFox + Confirm password: + Confirmar senha: - Enable KeePassHTTP server - Habilitar servidor KeePassHTTP + Password + Senha - General - Geral + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - M&ostrar uma notificação quando as credenciais forem solicitadas + Passwords do not match. + Senha não corresponde. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Retorna apenas os melhores encontrados para um URL específico em vez de todas entradas para o domínio todo. - - - &Return only best matching entries - &Retorna apenas as melhores entradas encontradas - - - Re&quest to unlock the database if it is locked - Pe&dir para desbloquear a base de dados se estiver bloqueada - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Apenas entradas com o mesmo esquema (http://, https://, ftp://, ...) são retornadas. - - - &Match URL schemes - &Combinar esquemas de URL - - - Sort matching entries by &username - Ordenar entradas coincidentes por nome de &usuário - - - Sort &matching entries by title - Ordenar &entradas por título - - - R&emove all shared encryption keys from active database - R&emover todas as chaves criptografadas compartilhadas da base de dados ativa - - - Re&move all stored permissions from entries in active database - R&emover todas as permissões armazenadas de entradas na base de dados ativa - - - Password Generator - Gerador de Senha - - - Advanced - Avançado - - - Always allow &access to entries - Permitir sempre &acesso as entradas - - - Always allow &updating entries - Permitir sempre &atualizar as entradas - - - Only the selected database has to be connected with a client. - Somente o banco de dados selecionado deve estar conectado com um cliente. - - - Searc&h in all opened databases for matching entries - Procurar em todas as base de dados abertas por entradas semel&hantes - - - Automatically creating or updating string fields is not supported. - Criação automática ou atualizações não são suportadas para os valores dos campos. - - - &Return advanced string fields which start with "KPH: " - &Mostrar também campos avançados que começam com "KPH: " - - - HTTP Port: - Porta HTTP: - - - Default port: 19455 - Porta padrão: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC irá escutar esta porta em 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>AVISO:</b> As seguintes opções podem ser perigosas! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP é obsoleto e será removido no futuro. <br>Por favor mudar para KeePassXC-navegador! Para obter ajuda com a migração, visite o nosso <a href="https://keepassxc.org/docs/keepassxc-browser-migration"> guia de migração</a>.</p> - - - Cannot bind to privileged ports - Não é possível ligar a portas privilegiadas - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Não é possível ligar a portas privilegiadas abaixo de 1024! -Usando porta padrão 19455. + Generate master password + Gerar senha mestra @@ -3143,7 +3841,7 @@ Usando porta padrão 19455. Character Types - Tipos de Caracteres + Tipo de Caracteres Upper Case Letters @@ -3167,7 +3865,7 @@ Usando porta padrão 19455. Exclude look-alike characters - Excluir caracteres similares + Excluir caracteres semelhantes Pick characters from every group @@ -3185,18 +3883,10 @@ Usando porta padrão 19455. Wordlist: Lista de palavras: - - Word Count: - Número de Palavras: - Word Separator: Separador de Palavras: - - Generate - Gerar - Copy Copiar @@ -3209,10 +3899,6 @@ Usando porta padrão 19455. Close Fechar - - Apply - Aplicar - Entropy: %1 bit Entropia: %1 bit @@ -3241,6 +3927,171 @@ Usando porta padrão 19455. Password quality Excelente + + ExtendedASCII + + + + Switch to advanced mode + Mudar para o modo avançado + + + Advanced + Avançado + + + Upper Case Letters A to F + Letras Maiúsculas A a F + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + {[( + + + Punctuation + Pontuação + + + .,:; + .,:; + + + Quotes + Aspas + + + " ' + " ' + + + Math + Matemática + + + <*+!?= + <*+!?= + + + Dashes + + + + \_|-/ + \_|-/ + + + Logograms + Logo-gramas + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Mudar para o modo simples + + + Simple + Básico + + + Character set to exclude from generated password + Conjunto de caracteres para excluir da senha gerada + + + Do not include: + Não incluir: + + + Add non-hex letters to "do not include" list + + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + &Número de palavras: + + + Regenerate + Regenerar + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Selecionar + + + + QMessageBox + + Overwrite + Sobrescrever + + + Delete + Excluir + + + Move + Mover + + + Empty + Vazio + + + Remove + Remover + + + Skip + Ignorar + + + Disable + Desabilitar + + + Merge + Fundir + QObject @@ -3260,34 +4111,18 @@ Usando porta padrão 19455. Cannot decrypt message Não é possível descriptografar a mensagem - - Timeout or cannot connect to KeePassXC - Tempo limite ou não pode conectar ao KeePassXC - Action cancelled or denied Ação cancelada ou negada - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Não foi possível criptografar a mensagem ou chave pública não encontrada. O envio de mensagem nativo está habilitado no KeePassXC? - KeePassXC association failed, try again KeePassXC associação falhou, tente novamente - - Key change was not successful - Mudança da chave não foi bem sucedida - Encryption key is not recognized Chave criptográfica não é reconhecida - - No saved databases found - Nenhum banco de dados salvo encontrado - Incorrect action Ação incorreta @@ -3314,7 +4149,7 @@ Usando porta padrão 19455. Path of the database. - Caminho do banco de dados. + Caminho do banco de dados Key file of the database. @@ -3411,11 +4246,7 @@ Usando porta padrão 19455. Insert password to unlock %1: - Inserir a senha para desbloquear %1: - - - Failed to load key file %1 : %2 - Falha ao carregar o arquivo de chave %1: %2 + Inserir a senha para desbloquear 1%: WARNING: You are using a legacy key file format which may become @@ -3494,25 +4325,19 @@ Comandos disponíveis: NULL device - Dispositivo nulo + Dispositivo NULL error reading from device erro ao ler dispositivo - - file empty ! - - Arquivo vazio! - - malformed string sequência de caracteres malformada missing closing quote - cotação de fechamento ausente + apóstrofo de fechamento ausente Group @@ -3542,10 +4367,6 @@ Comandos disponíveis: Created Criado - - Legacy Browser Integration - Integração do legado de navegador - Browser Integration Integração com o Navegador @@ -3574,43 +4395,453 @@ Comandos disponíveis: Word count for the diceware passphrase. Contagem de palavra para a frase-chave diceware. - - count - contagem - Wordlist for the diceware generator. [Default: EFF English] Lista de palavras para o gerador diceware. -[Padrão: EFF inglês] +[Padrão: EFF Inglês] Generate a new random password. Gerar nova senha aleatória. - Length of the generated password. - Tamanho da senha gerada. + Invalid value for password length %1. + - Use lowercase characters in the generated password. - Use caracteres minúsculos na senha gerada. + Could not create entry with path %1. + - Use uppercase characters in the generated password. - Use letras maiúsculas para a senha gerada. + Enter password for new entry: + Digite a senha para a nova entrada: - Use numbers in the generated password. - Use números na senha gerada. + Writing the database failed %1. + - Use special characters in the generated password. - Use caracteres especiais na senha gerada. + Successfully added entry %1. + - Use extended ASCII in the generated password. - Uso estendido ASCII na senha gerada. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + Valor de tempo limite inválido %1. + + + Entry %1 not found. + Entrada%1 não encontrada. + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + Área de transferência apagada! + + + Silence password prompt and other secondary outputs. + Pergunta por senha em silêncio e outras saídas secundárias. + + + count + CLI parameter + contagem + + + Invalid value for password length: %1 + Valor inválido para o tamanho da senha: %1 + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + Digite uma nova senha para entrada: + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + Entrada editada com sucesso %1. + + + Length %1 + Tamanho %1 + + + Entropy %1 + Entropia %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + Entropia %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + Arquivo %1 não existe. + + + Unable to open file %1. + Não é possível abrir o arquivo %1. + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + Usar caracteres minúsculos + + + Use uppercase characters + Usar caracteres maiúsculos + + + Use numbers. + Usar números. + + + Use special characters + Usar caracteres especiais + + + Use extended ASCII + Use estendido ASCII + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + Listar recursivamente os elementos do grupo. + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + arquivo vazio + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256 bits + + + Twofish: 256-bit + Twofish: 256 bits + + + ChaCha20: 256-bit + ChaCha20: 256 bits + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recomendado) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Configurações Inválidas + + + Invalid Key + TOTP + Chave Inválida + + + Message encryption failed. + + + + No groups found + Nenhum grupo encontrado + + + Create a new database. + Criar um novo banco de dados. + + + File %1 already exists. + + + + Loading the key file failed + O carregamento do arquivo de chave falhou + + + No key is set. Aborting database creation. + Nenhuma chave definida. Abortando a criação de banco de dados. + + + Failed to save the database: %1. + Falha ao salvar o banco de dados: %1. + + + Successfully created new database. + Novo banco de dados criado com sucesso. + + + Insert password to encrypt database (Press enter to leave blank): + Inserir senha para criptografar banco de dados (Aperte enter para deixar em branco): + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Remover entrada do banco de dados. + + + Path of the entry to remove. + Caminho para remover entrada. + + + Existing single-instance lock file is invalid. Launching new instance. + O arquivo cadeado de instância única existente é inválido. Iniciando nova instância. + + + The lock file could not be created. Single-instance mode disabled. + O arquivo cadeado não pode ser criado. Modo de instância única desabilitado. + + + KeePassXC - cross-platform password manager + KeePassXC - gerenciador de senhas multiplataforma + + + filenames of the password databases to open (*.kdbx) + nome de arquivo do banco de dados de senhas a ser aberto (*.kdbx) + + + path to a custom config file + caminho para um arquivo de configuração personalizado + + + key file of the database + arquivo-chave do banco de dados + + + read password of the database from stdin + ler a senha do banco de dados da entrada padrão + + + Parent window handle + Identificador de janela pai + + + Another instance of KeePassXC is already running. + Outra instância do KeePassXC já está rodando. + + + Fatal error while testing the cryptographic functions. + Erro fatal enquanto testava as funções criptográficas. + + + KeePassXC - Error + KeePassXC - Erro + + + Database password: + Senha do banco de dados: + + + Cannot create new group + @@ -3648,11 +4879,97 @@ Comandos disponíveis: - SearchWidget + SSHAgent - Search... - Buscar... + Agent connection failed. + Falha na conexão do agente. + + Agent protocol error. + Erro de protocolo do agente + + + No agent running, cannot add identity. + Nenhum agente em execução, não é possível adicionar identidade. + + + No agent running, cannot remove identity. + Nenhum agente em execução, não é possível remover a identidade. + + + Agent refused this identity. Possible reasons include: + Agente recusou essa identidade. Possíveis razões incluem: + + + The key has already been added. + O atalho já foi adicionado. + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + Ajuda com a Busca + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + Modificadores + + + exclude term from results + excluir termo dos resultados + + + match term exactly + encontrar termo exato + + + use regex in term + usar regex no termo + + + Fields + Campos + + + Term Wildcards + Termos Coringas + + + match anything + coincidir com qualquer coisa + + + match one + coincidir com um + + + logical OR + lógico OU + + + Examples + Exemplos + + + + SearchWidget Search Pesquisar @@ -3661,315 +4978,332 @@ Comandos disponíveis: Clear Limpar - - Case Sensitive - Diferenciar maiúsculas e minúsculas - Limit search to selected group Limitar busca ao grupo selecionado + + Search Help + Ajuda com a Busca + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Buscar (%1)... + + + Case sensitive + Diferenciar maiúsculas e minúsculas + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Nova associação de chaves requisitada + Active + Ativo - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Recebeu uma solicitação de associação para a chave acima. -Se quiser permitir o acesso a sua base de dados KeePassXC -dar-lhe um nome único para identificá-lo e aceitá-lo. + Allow export + Permitir exportação - KeePassXC: Overwrite existing key? - KeePassXC: Substituir chave existente? + Allow import + Permitir importação - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Já existe uma chave de criptografia compartilhada com o nome "%1". -Deseja substituí-la? + Own certificate + Certificado próprio - KeePassXC: Update Entry - KeePassXC: Atualizar entrada + Fingerprint: + - Do you want to update the information in %1 - %2? - Deseja atualizar as informações em %1 - %2? + Certificate: + Certificado: - KeePassXC: Database locked! - KeePassXC: Banco de dados bloqueado! + Signer + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - A base de dados ativa está bloqueada! -Desbloqueie base de dados selecionada ou escolha outra que esteja desbloqueada. + Key: + Chave: - KeePassXC: Removed keys from database - KeePassXC: Chaves removidas do banco de dados + Generate + Gerar + + + Import + Importar + + + Export + Exportar + + + Imported certificates + Certificados importados + + + Trust + Confiar + + + Ask + Perguntar + + + Untrust + Não Confiar + + + Remove + Remover + + + Path + Caminho + + + Status + Status + + + Fingerprint + Fingerprint + + + Certificate + Certificado + + + Trusted + Confiável + + + Untrusted + Não Confiável + + + Unknown + Desconhecido + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Todos arquivos + + + Select path + Selecione o caminho + + + Exporting changed certificate + Exportando certificado alterado + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + O certificado exportado não é o mesmo que está em uso. Você quer exportar o certificado atual? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Importar do contêiner sem assinatura + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Não podemos verificar a origem do contêiner compartilhado porque ele não está assinado. Você realmente quer importar de %1? + + + Import from container with certificate + Importar do contêiner com certificado + + + Not this time + Não dessa vez + + + Never + Nunca + + + Always + Sempre + + + Just this time + Só desta vez + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + Importado de %1 + + + Signed share container are not supported - import prevented + + + + File is not readable + Arquivo não é legível + + + Invalid sharing container + Contêiner de compartilhamento inválido + + + Untrusted import prevented + Importação não confiável impedida + + + Successful signed import + Importação assinada bem-sucedida + + + Unexpected error + Erro inesperado + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + Arquivo não existe + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + A substituição de contêiner de compartilhamento não assinado não é suportada - exportação impedida + + + Could not write export container + Não foi possível escrever o contêiner de exportação + + + Unexpected export error occurred + Ocorreu um erro de exportação inesperado + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + Exportar para %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Senha Temporária + + + 000000 + 000000 + + + Copy + Copiar - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Removido com êxito %n chave(s) de criptografia das configurações do KeePassX/Http.Removido com êxito %n chave(s) de criptografia das configurações do KeePassX/Http. - - - KeePassXC: No keys found - KeePassXC: Nenhuma chave localizada - - - No shared encryption-keys found in KeePassHttp Settings. - Nenhuma chave de criptografia compartilhada encontrada nas Configurações do KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: Configurações não disponíveis! - - - The active database does not contain an entry of KeePassHttp Settings. - A base de dados ativa não contém uma entrada de Configurações KeePassHttp. - - - Removing stored permissions... - Removendo permissões armazenadas... - - - Abort - Cancelar - - - KeePassXC: Removed permissions - KeePassXC: Permissões removidas - - - Successfully removed permissions from %n entries. - Removido com êxito as permissões de %n entradas.Removido com êxito as permissões de %n entradas. - - - KeePassXC: No entry with permissions found! - KeePassXC: Nenhuma entrada com permissões localizada! - - - The active database does not contain an entry with permissions. - A base de dados ativa não contém uma entrada com permissões. + Expires in <b>%n</b> second(s) + Expira em <b>%n</b> segundo(s)Expira em <b>%n</b> segundo(s) - SettingsWidget + TotpExportSettingsDialog - Application Settings - Configurações do Aplicativo + Copy + Copiar - General - Geral + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + NOTA: Essas configurações de TOTP são personalizadas e podem não funcionar com outros autenticadores. - Security - Segurança + There was an error creating the QR code. + Ocorreu um erro ao criar o código QR. - Access error for config file %1 - Erro de acesso para o arquivo de configuração %1 + Closing in %1 seconds. + Fechando em %1 segundos. - SettingsWidgetGeneral - - Basic Settings - Configurações Básicas - - - Start only a single instance of KeePassXC - Iniciar apenas uma única instância do KeePassXC - - - Remember last databases - Lembrar dos últimos bancos de dados - - - Remember last key files and security dongles - Lembre-se de arquivos de chave passados e dongles de segurança - - - Load previous databases on startup - Carregar bancos de dados anteriores na inicialização - - - Automatically save on exit - Salvar automaticamente ao sair - - - Automatically save after every change - Salvar automaticamente depois de cada alteração - - - Automatically reload the database when modified externally - Automaticamente recarregar o banco de dados quando houver modificações externas - - - Minimize when copying to clipboard - Minimizar ao copiar para área de transferência - - - Minimize window at application startup - Iniciar programa com janela minimizada - - - Use group icon on entry creation - Usar ícone de grupo na criação da entrada - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Não marcar o banco de dados como modificado para alterações sem dados (por exemplo, expansão de grupos) - - - Hide the Details view - Ocultar a visualização de detalhes - - - Show a system tray icon - Mostrar um ícone da bandeja do sistema - - - Hide window to system tray when minimized - Ocultar janela na bandeja de sistema quando minimizada - - - Hide window to system tray instead of app exit - Ocultar janela na bandeja de sistema em vez de sair do programa - - - Dark system tray icon - Ícone de bandeja do sistema escuro - - - Language - Idioma - - - Auto-Type - Auto-Digitação - - - Use entry title to match windows for global Auto-Type - Usar o título de entrada para coincidir com a janela para Auto-Digitar global - - - Use entry URL to match windows for global Auto-Type - Use o URL de entrada para coincidir com a janela para Auto-Digitar global - - - Always ask before performing Auto-Type - Sempre perguntar antes de executar o Auto-Digitar - - - Global Auto-Type shortcut - Atalho para Auto-Digitação Global - - - Auto-Type delay - Atraso de autotipo - - - ms - Milliseconds - ms - - - Startup - Inicialização - - - File Management - Gerenciamento de Arquivo - - - Safely save database files (may be incompatible with Dropbox, etc) - Salvar seguramente os arquivos de banco de dados (pode ser incompatível com o Dropbox, etc) - - - Backup database file before saving - Fazer cópia de segurança do banco de dados antes de salvar - - - Entry Management - Gerenciamento de entrada - - - General - Geral - - - - SettingsWidgetSecurity - - Timeouts - Tempos limite - - - Clear clipboard after - Limpar área de transferência após - - - sec - Seconds - seg - - - Lock databases after inactivity of - Travar bancos de dados após inatividade de - - - Convenience - Conveniência - - - Lock databases when session is locked or lid is closed - Bloqueio de bancos de dados quando a sessão estiver bloqueada ou a tampa está fechada - - - Lock databases after minimizing the window - Bloquear bancos de dados após minimizar a janela - - - Don't require password repeat when it is visible - Quando a senha for visível não pedir para repeti-la - - - Show passwords in cleartext by default - Mostrar senhas em texto claro por padrão - - - Hide passwords in the preview panel - Ocultar senhas no painel de visualização - - - Hide entry notes by default - Esconder notas de entrada por padrão - - - Privacy - Privacidade - - - Use Google as fallback for downloading website icons - Usar o Google como fallback para baixar ícones do site - - - Re-lock previously locked database after performing Auto-Type - Bloquear novamente o banco de dados anteriormente bloqueado depois de executar o Auto-Digitar - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Configurar TOTP @@ -3991,59 +5325,84 @@ Desbloqueie base de dados selecionada ou escolha outra que esteja desbloqueada.< Usar configurações personalizadas - Note: Change these settings only if you know what you are doing. - Nota: Altere estas configurações apenas se souber o que está fazendo. + Custom Settings + Configurações Personalizadas Time step: Período de tempo: - 8 digits - 8 dígitos - - - 6 digits - 6 dígitos + sec + Seconds + seg Code size: Tamanho do código: - sec - Seconds - seg + 6 digits + 6 dígitos + + + 7 digits + 7 dígitos + + + 8 digits + 8 dígitos - TotpDialog + UpdateCheckDialog - Timed Password - Senha Temporária + Checking for updates + Verificando atualizações - 000000 - 000000 + Checking for updates... + Verificando atualizações... - Copy - Copiar + Close + Fechar - Expires in - Expira em + Update Error! + Erro de atualização! - seconds - segundos + An error occurred in retrieving update information. + Ocorreu um erro ao recuperar informações de atualização. - - - UnlockDatabaseWidget - Unlock database - Destrancar banco de dados + Please try again later. + Por favor, tente novamente mais tarde. + + + Software Update + Atualização de software + + + A new version of KeePassXC is available! + Uma nova versão do KeePassXC está disponível! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 está agora disponível - você tem %2. + + + Download it at keepassxc.org + Faça o download em keepassxc.org + + + You're up-to-date! + Você está atualizado! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 é atualmente a versão mais recente disponível @@ -4078,42 +5437,26 @@ Desbloqueie base de dados selecionada ou escolha outra que esteja desbloqueada.< - main + YubiKeyEditWidget - Remove an entry from the database. - Remover entrada do banco de dados. + Refresh + Atualizar - Path of the database. - Caminho do banco de dados. + YubiKey Challenge-Response + - Path of the entry to remove. - Caminho do item à ser removido. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC - gerenciador de senhas multiplataforma + No YubiKey detected, please ensure it's plugged in. + Nenhuma YubiKey detectada, verifique se está conectada. - filenames of the password databases to open (*.kdbx) - nome de arquivo do banco de dados de senhas a ser aberto (*.kdbx) - - - path to a custom config file - caminho para um arquivo de configuração personalizado - - - key file of the database - arquivo-chave do banco de dados - - - read password of the database from stdin - ler a senha do banco de dados da entrada padrão - - - Parent window handle - Identificador de janela pai + No YubiKey inserted. + Nenhuma YubiKey inserida. \ No newline at end of file diff --git a/share/translations/keepassx_pt_PT.ts b/share/translations/keepassx_pt_PT.ts index 5ef30eecc..5e2014fc8 100644 --- a/share/translations/keepassx_pt_PT.ts +++ b/share/translations/keepassx_pt_PT.ts @@ -3,7 +3,7 @@ AboutDialog About KeePassXC - Acerca do KeePassXC + Acerca de KeePassXC About @@ -37,74 +37,13 @@ Copy to clipboard Copiar para a área de transferência - - Version %1 - - Versão %1 - - - - Revision: %1 - Revisão: %1 - - - Distribution: %1 - Distribuição: %1 - - - Libraries: - Bibliotecas: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operativo: %1 -Arquitetura do CPU: %2 -Kernel: %3 %4 - - - Enabled extensions: - Extensões ativas: - Project Maintainers: Manutenção do projeto: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Um agradecimento especial da equipa do KeePassXC a debfx por ter criado a aplicação KeePassX. - - - Build Type: %1 - - Tipo de compilação: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP - Confirmar acesso - - - Remember this decision - Memorizar esta escolha - - - Allow - Permitir - - - Deny - Recusar - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 solicitou o acesso a palavras-passe para o(s) seguinte(s) iten(s). -Selecione se deseja permitir o acesso. + Um agradecimento especial da equipa KeePassXC a debfx por ter criado a aplicação KeePassX. @@ -113,16 +52,287 @@ Selecione se deseja permitir o acesso. Enable SSH Agent (requires restart) Ativar agente SSH (tem que reiniciar) + + Use OpenSSH for Windows instead of Pageant + Utilizar OpeSSH for Windows em vez de Pageant + + + + ApplicationSettingsWidget + + Application Settings + Definições da aplicação + + + General + Geral + + + Security + Segurança + + + Access error for config file %1 + Erro de acesso ao ficheiro %1 + + + Icon only + Apenas ícones + + + Text only + Apenas texto + + + Text beside icon + Texto ao lado dos ícones + + + Text under icon + Texto por baixo dos ícones + + + Follow style + Seguir estilo + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Definições básicas + + + Startup + Arranque + + + Start only a single instance of KeePassXC + Abrir apenas uma instância do KeepassXC + + + Remember last databases + Memorizar últimas bases de dados + + + Remember last key files and security dongles + Memorizar últimos ficheiros-chave e dispositivos de segurança + + + Load previous databases on startup + Ao iniciar, carregar as últimas base de dados utilizadas + + + Minimize window at application startup + Minimizar janela ao iniciar a aplicação + + + File Management + Gestão de ficheiros + + + Safely save database files (may be incompatible with Dropbox, etc) + Guardar bases de dados em segurança (pode ser incompatível com DropBox e outros serviços) + + + Backup database file before saving + Criar backup da base de dados antes de guardar + + + Automatically save after every change + Guardar automaticamente a cada alteração + + + Automatically save on exit + Guardar automaticamente ao fechar + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Não marcar base de dados como alterada para modificações não efetuadas em dados (ex.: expansão de grupos) + + + Automatically reload the database when modified externally + Recarregar base de dados se esta for modificada externamente + + + Entry Management + Gestão de entradas + + + Use group icon on entry creation + Utilizar ícone do grupo ao criar a entrada + + + Minimize when copying to clipboard + Minimizar ao copiar para a área de transferência + + + Hide the entry preview panel + Ocultar painel de pré-visualização de entradas + + + General + Geral + + + Hide toolbar (icons) + Ocultar barra de ferramentas (ícones) + + + Minimize instead of app exit + Minimizar aplicação em vez de fechar + + + Show a system tray icon + Mostrar ícone na bandeja do sistema + + + Dark system tray icon + Ícone escuro na bandeja + + + Hide window to system tray when minimized + Ao minimizar, ocultar a janela na bandeja do sistema + + + Language + Idioma + + + Auto-Type + Escrita automática + + + Use entry title to match windows for global Auto-Type + Utilizar título da entrada para fazer coincidir com a escrita automática + + + Use entry URL to match windows for global Auto-Type + Utilizar URL da entrada para fazer coincidir com a escrita automática + + + Always ask before performing Auto-Type + Perguntar antes de executar a escrita automática + + + Global Auto-Type shortcut + Atalho global para escrita automática + + + Auto-Type typing delay + Atraso para escrita automática + + + ms + Milliseconds + ms + + + Auto-Type start delay + Atraso para iniciar a escrita automática + + + Check for updates at application startup + Ao iniciar, verificar se existem atualizações + + + Include pre-releases when checking for updates + Incluir pré-lançamentos ao verificar se existem atualizações + + + Movable toolbar + Barra de ferramentas amovível + + + Button style + Estilo do botão + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Tempo limite + + + Clear clipboard after + Limpar área de transferência após + + + sec + Seconds + seg + + + Lock databases after inactivity of + Bloquear base de dados se inativa durante + + + min + min + + + Forget TouchID after inactivity of + Esquecer TouchID após inatividade de + + + Convenience + Conveniência + + + Lock databases when session is locked or lid is closed + Bloquear base de dados ao bloquear a sessão ou ao fechar a tampa do portátil + + + Forget TouchID when session is locked or lid is closed + Esquecer TouchID ao bloquear a sessão ou ao fechar a tampa do portátil + + + Lock databases after minimizing the window + Bloquear base de dados ao minimizar a janela + + + Re-lock previously locked database after performing Auto-Type + Bloquear novamente a base de dados depois de usar a escrita automática + + + Don't require password repeat when it is visible + Não pedir repetição da palavra-passe se esta estiver visível + + + Don't hide passwords when editing them + Não ocultar palavras-passe durante a edição + + + Don't use placeholder for empty password fields + Não utilizar marcadores de posição para campos vazios + + + Hide passwords in the entry preview panel + Ocultar palavras-passe no painel de pré-visualização de entradas + + + Hide entry notes by default + Por definição, ocultar notas da entrada + + + Privacy + Privacidade + + + Use DuckDuckGo as fallback for downloading website icons + Utilizar DuckDuckGo como recurso para descarregar os ícones dos sites + AutoType Couldn't find an entry that matches the window title: - Não foi possível encontrar uma entrada coincidente com o título da janela: + Não foi encontrada uma entrada coincidente com o título da janela: Auto-Type - KeePassXC - Escrita automática - KeePassXC + KeePassXC - Escrita automática Auto-Type @@ -138,7 +348,7 @@ Selecione se deseja permitir o acesso. This Auto-Type command contains very slow key presses. Do you really want to proceed? - O comando de escrita automática tem uma pressão de teclas muito lento. Deseja mesmo continuar? + O comando de escrita automática tem uma pressão de teclas muito lenta. Deseja mesmo continuar? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? @@ -183,7 +393,7 @@ Selecione se deseja permitir o acesso. AutoTypeSelectDialog Auto-Type - KeePassXC - Escrita automática - KeePassXC + KeePassXC - Escrita automática Select entry to Auto-Type: @@ -194,7 +404,7 @@ Selecione se deseja permitir o acesso. BrowserAccessControlDialog KeePassXC-Browser Confirm Access - KeePassXC Navegador - Confirmar acesso + KeePassXC-Browser - Confirmar acesso Remember this decision @@ -211,10 +421,31 @@ Selecione se deseja permitir o acesso. %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. - %1 solicitou o acesso a palavras-passe para o(s) seguinte(s) iten(s). + %1 solicitou o acesso a palavras-passe para o(s) seguinte(s) itens. Selecione se deseja permitir o acesso. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser - Guardar entrada + + + Ok + Aceitar + + + Cancel + Cancelar + + + You have multiple databases open. +Please select the correct database for saving credentials. + Existem várias bases de dados abertas. +Selecione a base de dados correta para guardar as credenciais. + + BrowserOptionDialog @@ -223,7 +454,7 @@ Selecione se deseja permitir o acesso. This is required for accessing your databases with KeePassXC-Browser - Isto é necessário para aceder às suas bases de dados com KeePassXC-Browser + Necessário para aceder às suas bases de dados com KeePassXC-Browser Enable KeepassXC browser integration @@ -281,21 +512,13 @@ Selecione se deseja permitir o acesso. Sort &matching credentials by title Credentials mean login data requested via browser extension - Ordenar &entradas por título + Ordenar credenciais coi&ncidentes por título Sort matching credentials by &username Credentials mean login data requested via browser extension Ordenar credenciais coincidentes por nome de &utilizador - - &Disconnect all browsers - &Desconectar de todos os navegadores - - - Forget all remembered &permissions - Esquecer todas as &permissões memorizadas - Advanced Avançado @@ -329,11 +552,11 @@ Selecione se deseja permitir o acesso. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Atualiza automaticamente o caminho do KeePassXC ou do caminho do binário keepassxc-proxy para os 'sripts' nativos de mensagens ao iniciar. + Ao iniciar, atualizar automaticamente o caminho do KeePassXC ou do binário keepassxc-proxy para os 'sripts' nativos de mensagens. Update &native messaging manifest files at startup - Atualizar ficheiros de mensagens &nativas ao iniciar + Ao iniciar, atualizar ficheiros de mensagens &nativas Support a proxy application between KeePassXC and browser extension. @@ -355,34 +578,55 @@ Selecione se deseja permitir o acesso. Browse... Button for opening file dialog - Procurar... + Explorar... <b>Warning:</b> The following options can be dangerous! - <b>AVISO</b>: as opções seguintes podem ser perigosas! - - - Executable Files (*.exe);;All Files (*.*) - Ficheiros executáveis (*.exe);;Todos os ficheiros (*.*) - - - Executable Files (*) - Ficheiros executáveis (*) + <b>Aviso</b>: as opções seguintes podem ser perigosas! Select custom proxy location Selecionar localização do proxy personalizado - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Lamentamos mas, no momento, o KeePassXC-Browser não tem suporte a versões Snap. + &Tor Browser + Navegador &Tor + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Atenção</b>, a aplicação keepassxc-proxy não foi encontrada!<br />Verifique o diretório de instalação do KeePassXC ou confirme o caminho nas definições avançadas.<br />A integração com o navegador não irá funcionar sem esta aplicação.<br />Caminho esperado: + + + Executable Files + Ficheiros executáveis + + + All Files + Todos os ficheiros + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Não pedir permissão para autorização &básica HTTP + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + BrowserService KeePassXC: New key association request - KeePassXC: Pedido de associação de nova chave + KeePassXC: Pedido de associação da nova chave You have received an association request for the above key. @@ -392,7 +636,7 @@ give it a unique name to identify and accept it. Recebeu um pedido de associação para a chave acima indicada. Se quiser permitir o acesso à sua base de dados do KeePassXC, -digite um nome identificável e aceite o pedido. +introduza um nome identificável e aceite o pedido. Save and allow access @@ -416,154 +660,55 @@ Deseja substituir a chave existente? Do you want to update the information in %1 - %2? Deseja atualizar as informações em %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Base de dados bloqueada! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - A base de dados ativa está bloqueada! -Desbloqueie a base de dados selecionada ou escolha outra que esteja desbloqueada. - - - KeePassXC: Settings not available! - KeePassXC: Definições indisponíveis! - - - The active database does not contain a settings entry. - A base de dados ativa não contém uma entrada de definições. - - - KeePassXC: No keys found - KeePassXC: Nenhuma chave encontrada - - - No shared encryption keys found in KeePassXC Settings. - Não foram encontradas chaves de cifra partilhadas nas definições do KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: Chaves removidas da base de dados - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Removidas com sucesso %n chave de cifra das definições do KeePassXC.Removidas com sucesso %n chaves de cifra das definições do KeePassXC. - - - Removing stored permissions… - A remover permissões guardadas... - Abort Abortar - KeePassXC: Removed permissions - KeePassXC: Permissões removidas + Converting attributes to custom data… + A converter atributos para dados personalizados... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Atributos KeePassHTTP convertidos + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Os atributos para %1 entrada(s) foram convertidos. +%2 chaves movidas para dados personalizados. - Successfully removed permissions from %n entry(s). - Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas. + Successfully moved %n keys to custom data. + %n chave movida para dados personalizados.%n chaves movidas para dados personalizados. - KeePassXC: No entry with permissions found! - KeePassXC: Não existem entradas com permissões! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Não existem entradas com atributos KeePassHTTP! - The active database does not contain an entry with permissions. - A base de dados ativa não contém uma entrada com permissões. - - - - ChangeMasterKeyWidget - - Password - Palavra-passe + The active database does not contain an entry with KeePassHTTP attributes. + A base de dados ativa não tem entradas com atributos KePassHTTP. - Enter password: - Digite a palavra-passe: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Detetadas definições de integração legada com o navegador - Repeat password: - Repita a palavra-passe: + KeePassXC: Create a new group + - &Key file - Ficheiro-&chave + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Procurar - - - Create - Criar - - - Cha&llenge Response - Pergunta de &segurança - - - Refresh - Recarregar - - - Key files - Ficheiros-chave - - - All files - Todos os ficheiros - - - Create Key File... - Criar ficheiro-chave... - - - Unable to create Key File : - Incapaz de criar o ficheiro-chave: - - - Select a key file - Selecione o ficheiro-chave - - - Empty password - Palavra-passe vazia - - - Do you really want to use an empty string as password? - Deseja mesmo utilizar uma cadeia vazia como palavra-passe? - - - Different passwords supplied. - As palavras-passe não são iguais. - - - Failed to set %1 as the Key file: -%2 - Falha ao definir %1 como ficheiro-chave: -%2 - - - Legacy key file format - Formato legado de ficheiro-chave - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Está a utilizar um formato legado que pode, no futuro, deixar -de ser suportado. - -Deve considerar a geração de uma novo ficheiro-chave. - - - Changing master key failed: no YubiKey inserted. - Falha ao alterar a palavra-passe mestre: Yubikey não inserida. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -637,78 +782,111 @@ Deve considerar a geração de uma novo ficheiro-chave. Column layout - Disposição das colunas + Disposição de colunas Not present in CSV file Não existente no ficheiro CSV - - Empty fieldname - Nome de campo vazio - - - column - coluna - Imported from CSV file Importar de ficheiro CSV Original data: - Dados originais: - - - Error(s) detected in CSV file ! - Detetado(s) erro(s) no ficheiro CSV! - - - more messages skipped] - mais mensagens ignoradas] + Dados originais: Error Erro + + Empty fieldname %1 + Nome de campo vazio %1 + + + column %1 + coluna %1 + + + Error(s) detected in CSV file! + Detetado(s) erro(s) no ficheiro CSV! + + + [%n more message(s) skipped] + [%n mensagem ignorada][%n mensagens ignoradas] + CSV import: writer has errors: - - Importação CSV: com erros: - - - - - CsvImportWizard - - Error - Erro - - - Unable to calculate master key - Impossível de calcular a chave-mestre +%1 + Importação CSV com erros: +%1 CsvParserModel - - %n byte(s), - %n bytes, %n bytes, - - - %n row(s), - %n linha,%n linhas, - %n column(s) - %n coluna,%n colunas, + %n coluna,%n coluna(s), + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes + + + %n row(s) + %n linha%n linhas + + + + Database + + Root + Root group name + Raiz + + + File %1 does not exist. + %1 não existe. + + + Unable to open file %1. + Não foi possível abrir o ficheiro %1. + + + Error while reading the database: %1 + Erro ao ler a base de dados: %1 + + + Could not save, database has no file name. + Não é possível guardar porque a base de dados não tem nome. + + + File cannot be written as it is opened in read-only mode. + Não é possível escrever no ficheiro porque este foi aberto no modo de leitura. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + KeePassXC - Desbloquear base de dados DatabaseOpenWidget Enter master key - Digite a chave-mestre + Introduza a chave-mestre Key File: @@ -720,7 +898,7 @@ Deve considerar a geração de uma novo ficheiro-chave. Browse - Procurar + Explorar Refresh @@ -730,17 +908,9 @@ Deve considerar a geração de uma novo ficheiro-chave. Challenge Response: Pergunta de segurança: - - Unable to open the database. - Incapaz de abrir a base de dados. - - - Can't open key file - Incapaz de abrir o ficheiro-chave - Legacy key file format - Formato legado de ficheiro-chave + Ficheiro-chave no formato legado You are using a legacy key file format which may become @@ -750,7 +920,7 @@ Please consider generating a new key file. Está a utilizar um formato legado que pode, no futuro, deixar de ser suportado. -Deve considerar a geração de uma novo ficheiro-chave. +Deve considerar a geração de um novo ficheiro-chave. Don't show this warning again @@ -768,53 +938,254 @@ Deve considerar a geração de uma novo ficheiro-chave. Select key file Selecione o ficheiro-chave - - - DatabaseRepairWidget - Repair database - Reparar base de dados + TouchID for quick unlock + TouchID para desbloqueio rápido - Error - Erro + Unable to open the database: +%1 + Não foi possível abrir a base de dados: +%1 - Can't open key file - Incapaz de abrir o ficheiro-chave - - - Unable to open the database. - Incapaz de abrir a base de dados. - - - Database opened fine. Nothing to do. - Base de dados aberta. Nada para fazer. - - - Success - Sucesso - - - The database has been successfully repaired -You can now save it. - A base de dados foi reparada com sucesso -Agora já a pode guardar. - - - Unable to repair the database. - Incapaz de reparar a base de dados. + Can't open key file: +%1 + Não foi possível abrir o ficheiro-chave: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Palavras-passe + + + + DatabaseSettingsDialog + + Advanced Settings + Definições avançadas + General Geral - Encryption - Cifra + Security + Segurança + + + Master Key + Chave-mestre + + + Encryption Settings + Definições de cifra + + + Browser Integration + Integração com navegador + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Definições KeePassXC-Browser + + + &Disconnect all browsers + &Desconectar de todos os navegadores + + + Forg&et all site-specific settings on entries + &Esquecer definições específicas dos sites (nas entradas) + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Mover atributos KeePassHTTP para dados personalizados KeePassX&C-Browser + + + Stored keys + Chaves guardadas + + + Remove + Remover + + + Delete the selected key? + Apagar chave selecionada? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Tem a certeza de que deseja apagar a chave selecionada? +Esta ação pode impedir a ligação ao suplemento. + + + Key + Chave + + + Value + Valor + + + Enable Browser Integration to access these settings. + Ative a integração com o navegador para aceder a estas definições. + + + Disconnect all browsers + Desconectar de todos os navegadores + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Tem a certeza de que deseja desconectar todos os navegadores? +Esta ação pode interferir com a ligação ao suplemento. + + + KeePassXC: No keys found + KeePassXC: Nenhuma chave encontrada + + + No shared encryption keys found in KeePassXC settings. + Não foram encontradas chaves de cifra nas definições do KeePassXC. + + + KeePassXC: Removed keys from database + KeePassXC: Chaves removidas da base de dados + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Removida com sucesso %n chave de cifra das definições do KeePassXC.Removidas com sucesso %n chaves de cifra das definições do KeePassXC. + + + Forget all site-specific settings on entries + Esquecer definições específicas dos sites (nas entradas) + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Tem a certeza de que deseja esquecer as definições específicas de todas as entradas? +Serão removidas todas as permissões para aceder às entradas. + + + Removing stored permissions… + A remover permissões guardadas... + + + Abort + Abortar + + + KeePassXC: Removed permissions + KeePassXC: Permissões removidas + + + Successfully removed permissions from %n entry(s). + Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas. + + + KeePassXC: No entry with permissions found! + KeePassXC: Não existem entradas com permissões! + + + The active database does not contain an entry with permissions. + A base de dados ativa não contém uma entrada com permissões. + + + Move KeePassHTTP attributes to custom data + Mover atributos KeePassHTTP para dados personalizados + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Tem a certeza de que deseja atualizar todos os dados legados para a versão mais recente? +Esta atualização é necessária para manter a compatibilidade com o suplemento. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algoritmo de cifra: + + + AES: 256 Bit (default) + AES: 256 bits (padrão) + + + Twofish: 256 Bit + Twofish: 256 bits + + + Key Derivation Function: + Função derivação de chave: + + + Transform rounds: + Ciclos de transformação: + + + Benchmark 1-second delay + Testar atraso de 1 segundo + + + Memory Usage: + Utilização de memória: + + + Parallelism: + Paralelismo: + + + Decryption Time: + Tempo para decifrar: + + + ?? s + ?? s + + + Change + Alterar + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Os valores mais altos oferecem mais proteção mas também pode demorar mais tempo para abrir a base de dados. + + + Database format: + Formato da base de dados: + + + This is only important if you need to use your database with other programs. + Apenas relevante se necessitar de utilizar a base de dados com outros programas. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recomendado) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + inalterado Number of rounds too high @@ -856,7 +1227,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm Failed to transform key with new KDF parameters; KDF unchanged. - Falha ao transformar a chave com os novos parâmetros KDF; KDF inalterado. + Erro ao transformar a chave com os novos parâmetros KDF; KDF inalterado. MiB @@ -866,42 +1237,17 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm thread(s) Threads for parallel execution (KDF settings) - processoprocessos + processo processos - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algoritmo de cifra: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 bits (padrão) - - - Twofish: 256 Bit - Twofish: 256 bits - - - Key Derivation Function: - Função derivação de chave: - - - Transform rounds: - Ciclos de transformação: - - - Benchmark 1-second delay - - - - Memory Usage: - Utilização de memória: - - - Parallelism: - Paralelismo: + + %1 s + seconds + %1 s%1 s @@ -944,7 +1290,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm Additional Database Settings - Definições extra da base de dados + Definições extra para a base de dados Enable &compression (recommended) @@ -952,12 +1298,85 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Raiz + Sharing + Partilha + + Breadcrumb + Breadcrumb + + + Type + Tipo + + + Path + Caminho + + + Last Signer + Último signatário + + + Certificates + Certificados + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Adicionar proteção extra... + + + No encryption key added + Chave de cifra não adicionada + + + You must add at least one encryption key to secure your database! + Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados! + + + No password set + Palavra-passe não definida + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida! + +Tem a certeza de que deseja continuar? + + + Unknown error + Erro desconhecido + + + Failed to change master key + Erro ao alterar a chave-mestre + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Nome da base de dados: + + + Description: + Descrição: + + + + DatabaseTabWidget KeePass 2 Database Base de dados do KeePass 2 @@ -970,30 +1389,10 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm Open database Abrir base de dados - - File not found! - Ficheiro não encontrado! - - - Unable to open the database. - Incapaz de abrir a base de dados. - - - File opened in read only mode. - Ficheiro aberto no modo de leitura. - - - Open CSV file - Abrir ficheiro CSV - CSV file Ficheiro CSV - - All files (*) - Todos os ficheiros (*) - Merge database Combinar base de dados @@ -1006,81 +1405,50 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm KeePass 1 database Base de dados do KeePass 1 - - Close? - Fechar? - - - "%1" is in edit mode. -Discard changes and close anyway? - %1 está em modo de edição. -Deseja fechar e perder as alterações? - - - Save changes? - Guardar alterações? - - - "%1" was modified. -Save changes? - "%1" foi modificada. -Guardar alterações? - - - Writing the database failed. - Falha ao escrever na base de dados. - - - Passwords - Palavras-passe - - - Save database as - Guardar base de dados como - Export database to CSV file Exportar base de dados para ficheiro CSV Writing the CSV file failed. - Falha ao escrever no ficheiro CSV. + Erro ao escrever no ficheiro CSV. - New database + Database creation error + Erro ao criar a base de dados + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + A base de dados criada não tem chave ou KDF e não pode ser guardada. +Existe aqui um erro que deve ser reportado aos programadores. + + + The database file does not exist or is not accessible. + O ficheiro da base de dados não existe ou não pode ser acedido. + + + Select CSV file + Selecionar ficheiro CSV + + + New Database Nova base de dados - locked - bloqueada + %1 [New Database] + Database tab name modifier + %1 [Nova base de dados] - Lock database - Bloquear base de dados + %1 [Locked] + Database tab name modifier + %1 [Bloqueada] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Não é possível bloquear a base de dados, porque esta está a ser editada. -Prima Cancelar para finalizar as alterações ou descarte-as. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Esta base de dados foi modificada. -Deseja guardar a base de dados antes de a bloquear ? -Se não o fizer, perderá as suas alterações. - - - Disable safe saves? - Desativar salvaguardas? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - O KeePassXC não conseguiu guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não permitira a gravação. -Desativar salvaguardas e tentar novamente? + %1 [Read-only] + Database tab name modifier + %1 [Apenas leitura] @@ -1089,41 +1457,17 @@ Desativar salvaguardas e tentar novamente? Searching... Pesquisar... - - Change master key - Alterar chave-mestre - - - Delete entry? - Apagar entrada? - Do you really want to delete the entry "%1" for good? - Deseja mesmo apagar permanentemente a entrada "%1"? - - - Delete entries? - Apagar entradas? - - - Do you really want to delete %1 entries for good? - Deseja mesmo apagar permanentemente %1 entradas? - - - Move entry to recycle bin? - Mover entrada para a reciclagem? + Tem a certeza de que deseja apagar permanentemente a entrada "%1"? Do you really want to move entry "%1" to the recycle bin? - Deseja mesmo mover a entrada "%1" para a reciclagem? - - - Move entries to recycle bin? - Mover entradas para a reciclagem? + Tem a certeza de que deseja mover a entrada "%1" para a reciclagem? Do you really want to move %n entry(s) to the recycle bin? - Pretende realmente mover a entrada(s) %n para a reciclagem ?Deseja mesmo mover %n entrada(s) para a reciclagem? + Tem a certeza de que deseja mover %n entrada para a reciclagem?Tem a certeza de que deseja mover %n entradas para a reciclagem? Execute command? @@ -1131,23 +1475,15 @@ Desativar salvaguardas e tentar novamente? Do you really want to execute the following command?<br><br>%1<br> - Deseja mesmo executar o seguinte comando?<br><br>%1<br> + Tem a certeza de que deseja executar este comando?<br><br>%1<br> Remember my choice Memorizar escolha - - Delete group? - Apagar grupo? - Do you really want to delete the group "%1" for good? - Deseja mesmo apagar permanentemente o grupo "%1"? - - - Unable to calculate master key - Impossível de calcular a chave-mestre + Tem a certeza de que deseja apagar permanentemente o grupo "%1"? No current database. @@ -1175,17 +1511,13 @@ Desativar salvaguardas e tentar novamente? Merge Request - Pedido de união + Pedido de combinação The database file has changed and you have unsaved changes. Do you want to merge your changes? - A base de dados foi alterada e tem alterações não gravadas. -Deseja juntar as suas alterações? - - - Could not open the new database file while attempting to autoreload this database. - Não foi possível abrir a nova base de dados ao tentar recarregar automaticamente essa base de dados. + A base de dados foi alterada e tem alterações não guardadas. +Deseja combinar as suas alterações? Empty recycle bin? @@ -1195,88 +1527,111 @@ Deseja juntar as suas alterações? Are you sure you want to permanently delete everything from your recycle bin? Tem a certeza de que deseja apagar permanentemente os itens da reciclagem? - - - DetailsWidget - - Generate TOTP Token - A gerar token TOTP + + Do you really want to delete %n entry(s) for good? + Tem a certeza de que deseja apagar %n entrada?Tem a certeza de que deseja apagar %n entradas? + + + Delete entry(s)? + Apagar entrada?Apagar entradas? + + + Move entry(s) to recycle bin? + Mover entrada para a reciclagem?Mover entradas para a reciclagem? - Close - Fechar + File opened in read only mode. + Ficheiro aberto no modo de leitura. - General - Geral + Lock Database? + Bloquear base de dados? - Password - Palavra-passe + You are editing an entry. Discard changes and lock anyway? + Está a editar uma entrada. Rejeitar alterações e bloquear? - URL - URL + "%1" was modified. +Save changes? + "%1" foi modificada. +Guardar alterações? - Expiration - Expira + Database was modified. +Save changes? + A base de dados foi modificada. +Guardar alterações? - Username - Nome de utilizador + Save changes? + Guardar alterações? - Autotype - Escrita automática + Could not open the new database file while attempting to autoreload. +Error: %1 + Não foi possível abrir a nova base de dados durante o carregamento +Erro: %1 - Searching - Pesquisa + Disable safe saves? + Desativar salvaguardas? - Attributes - Atributos + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + O KeePassXC não conseguiu guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram. +Desativar salvaguardas e tentar novamente? - Attachments - Anexos + Writing the database failed. +%1 + Erro ao escrever na base de dados: +%1 - Notes - Notas + Passwords + Palavras-passe - Window - Janela + Save database as + Guardar base de dados como - Sequence - Sequência + KeePass 2 Database + Base de dados do KeePass 2 - Search - Pesquisa + Replace references to entry? + Substituir referências na entrada? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + A entrada "%1" tem %2 referência. Deseja substituir as referências com valores, ignorar a entrada ou apagar?A entrada "%1" tem %2 referências. Deseja substituir as referências com valores, ignorar a entrada ou apagar? - Clear - Limpar + Delete group + Apagar grupo - Never - Nunca + Move group to recycle bin? + Mover grupo para a reciclagem? - [PROTECTED] - [PROTEGIDA] + Do you really want to move the group "%1" to the recycle bin? + Tem a certeza de que deseja mover o grupo "%1" para a reciclagem? - Disabled - Desativada + Successfully merged the database files. + Bases de dados combinadas com sucesso. - Enabled - Ativada + Database was not modified by merge operation. + A base de dados não foi modificada pela combinação. + + + Shared group... + @@ -1327,7 +1682,7 @@ Deseja juntar as suas alterações? Failed to open private key - Falha ao abrir a chave privada + Erro ao abrir a chave privada Entry history @@ -1349,37 +1704,21 @@ Deseja juntar as suas alterações? New attribute Novo atributo - - Confirm Remove - Confirmação de remoção - Are you sure you want to remove this attribute? Tem a certeza de que deseja remover este atributo? - - [PROTECTED] - [PROTEGIDA] - - - Press reveal to view or edit - Prima Mostrar para ver ou editar - Tomorrow Amanhã %n week(s) - %n semana(s)%n semana(s) + %n semana%n semanas %n month(s) - %n mês%n mês(es) - - - 1 year - 1 ano + %n mês%n meses Apply generated password? @@ -1393,6 +1732,26 @@ Deseja juntar as suas alterações? Entry updated successfully. Entrada atualizada com sucesso. + + Entry has unsaved changes + A entrada tem alterações por guardar + + + New attribute %1 + Novo atributo %1 + + + [PROTECTED] Press reveal to view or edit + [PROTEGIDA] Por favor revele para ver ou editar + + + %n year(s) + %n ano%n anos + + + Confirm Removal + Confirmação de remoção + EditEntryWidgetAdvanced @@ -1418,7 +1777,7 @@ Deseja juntar as suas alterações? Reveal - Revelar + Mostrar Attachments @@ -1441,11 +1800,11 @@ Deseja juntar as suas alterações? Inherit default Auto-Type sequence from the &group - Herdar sequência de escrita automática deste &grupo + Utilizar sequência de escrita automática deste &grupo &Use custom Auto-Type sequence: - &Usar sequência personalizada de escrita automática: + &Utilizar sequência personalizada de escrita automática: Window Associations @@ -1538,7 +1897,7 @@ Deseja juntar as suas alterações? seconds - segundos + segundos Fingerprint @@ -1634,7 +1993,99 @@ Deseja juntar as suas alterações? Inherit from parent group (%1) - Herdar a partir do grupo (%1) + Herdar do grupo (%1) + + + + EditGroupWidgetKeeShare + + Form + Formulário + + + Type: + Tipo: + + + Path: + Caminho: + + + ... + ... + + + Password: + Palavra-passe: + + + Inactive + Inativo + + + Import from path + Importar do caminho + + + Export to path + Exportar para o caminho + + + Synchronize with path + Sincronizar com o caminho + + + Your KeePassXC version does not support sharing your container type. Please use %1. + A sua versão do KeePassXC não tem suporte a partilha do tipo de contentor. +Por favor utilize %1. + + + Database sharing is disabled + A partilha da base de dados está desativada + + + Database export is disabled + A exportação da base de dados está desativada + + + Database import is disabled + A importação da base de dados está desativada + + + KeeShare unsigned container + Contentor KeeShare não assinado + + + KeeShare signed container + Contentor KeeShare assinado + + + Select import source + Selecione a origem da importação + + + Select export target + Selecione o destino da exportação + + + Select import/export file + Selecione o ficheiro de importação/exportação + + + Clear + Limpar + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + @@ -1661,7 +2112,7 @@ Deseja juntar as suas alterações? &Use default Auto-Type sequence of parent group - Herdar sequência de escrita a&utomática do grupo relacionado + &Utilizar sequência de escrita automática do grupo relacionado Set default Auto-Type se&quence @@ -1692,11 +2143,7 @@ Deseja juntar as suas alterações? Unable to fetch favicon. - Incapaz de obter o 'favicon'. - - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Dica: pode ativar o Google como recurso em Ferramentas -> Definições -> Segurança + Não foi possível obter o 'favicon'. Images @@ -1706,14 +2153,6 @@ Deseja juntar as suas alterações? All files Todos os ficheiros - - Select Image - Selecionar imagem - - - Can't read icon - Incapaz de ler o ícone - Custom icon already exists Já existe um ícone personalizado @@ -1723,8 +2162,36 @@ Deseja juntar as suas alterações? Confirmação de eliminação - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Este ícone está a ser utilizado por %1 entradas e será substituído pelo ícone padrão. Tem a certeza de que deseja apagar o ícone? + Custom icon successfully downloaded + Ícone personalizado descarregado com sucesso + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Dica: pode ativar o serviço DuckDuckGo como recurso em Ferramentas -> Definições -> Segurança + + + Select Image(s) + Selecionar imagens + + + Successfully loaded %1 of %n icon(s) + %1 de %n ícones carregado com sucesso.%1 de %n ícones carregados com sucesso. + + + No icons were loaded + Não foram carregados ícones + + + %n icon(s) already exist in the database + %n ícone já existe na sua base de dados.%n ícones já existem na sua base de dados. + + + The following icon(s) failed: + O ícone seguinte falhou:Os ícones seguintes falharam: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Este ícone é utilizado por % entrada e será substituído pelo ícone padrão. Tem a certeza de que deseja apagar o ícone?Este ícone é utilizado por % entradas e será substituído pelo ícone padrão. Tem a certeza de que deseja apagar o ícone? @@ -1743,11 +2210,11 @@ Deseja juntar as suas alterações? Uuid: - Uuid: + UUID: Plugin Data - Dados do plugin + Dados do suplemento Remove @@ -1755,12 +2222,12 @@ Deseja juntar as suas alterações? Delete plugin data? - Apagar dados do plugin? + Apagar dados do suplemento? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Tem a certeza de que deseja apagar os dados do plugin? + Tem a certeza de que deseja apagar os dados do suplemento? Esta ação pode implicar um funcionamento errático. @@ -1775,9 +2242,8 @@ Esta ação pode implicar um funcionamento errático. Entry - - Clone - Suffix added to cloned entries - - Cópia + %1 - Clone + %1 - Clone @@ -1821,10 +2287,6 @@ Esta ação pode implicar um funcionamento errático. Are you sure you want to remove %n attachment(s)? Tem a certeza de que deseja remover %n anexo?Tem a certeza de que deseja remover %n anexos? - - Confirm Remove - Confirmação de remoção - Save attachments Guardar anexos @@ -1862,10 +2324,15 @@ Esta ação pode implicar um funcionamento errático. %1 - Unable to open files: + Confirm remove + Confirmação de remoção + + + Unable to open file(s): %1 - Não foi possível abrir os ficheiros: -%1 + Não foi possível abrir o ficheiro: +%1Não foi possível abrir os ficheiros: +%1 @@ -1949,6 +2416,106 @@ Esta ação pode implicar um funcionamento errático. Attachments Anexos + + Yes + Sim + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + A gerar token TOTP + + + Close + Fechar + + + General + Geral + + + Username + Nome de utilizador + + + Password + Palavra-passe + + + Expiration + Expira + + + URL + URL + + + Attributes + Atributos + + + Attachments + Anexos + + + Notes + Notas + + + Autotype + Escrita automática + + + Window + Janela + + + Sequence + Sequência + + + Searching + Pesquisa + + + Search + Pesquisa + + + Clear + Limpar + + + Never + Nunca + + + [PROTECTED] + [PROTEGIDA] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Ativada + + + Disabled + Desativada + + + Share + Partilhar + EntryView @@ -1987,6 +2554,11 @@ Esta ação pode implicar um funcionamento errático. Recycle Bin Reciclagem + + [empty] + group has no children + [vazia] + HostInstaller @@ -1999,61 +2571,6 @@ Esta ação pode implicar um funcionamento errático. Não foi possível guardar o ficheiro de mensagens nativas. - - HttpPasswordGeneratorWidget - - Length: - Comprimento: - - - Character Types - Tipos de caracteres - - - Upper Case Letters - Letras maiúsculas - - - A-Z - A-Z - - - Lower Case Letters - Letras minúsculas - - - a-z - a-z - - - Numbers - Números - - - 0-9 - 0-9 - - - Special Characters - Caracteres especiais - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Excluir caracteres semelhantes - - - Ensure that the password contains characters from every group - Certificar de que a palavra-passe contém caracteres de todos os grupos - - - Extended ASCII - ASCII expandido - - KMessageWidget @@ -2079,6 +2596,26 @@ Esta ação pode implicar um funcionamento errático. Wrong key or database file is corrupt. Chave errada ou base de dados danificada. + + missing database headers + cabeçalhos em falta da base de dados + + + Header doesn't match hash + Disparidade de 'hash' no cabeçalho + + + Invalid header id size + Tamanho do id do cabeçalho inválido + + + Invalid header field length + Comprimento do campo de cabeçalho inválido + + + Invalid header data length + Comprimento dos dados de cabeçalho inválido + Kdbx3Writer @@ -2095,7 +2632,7 @@ Esta ação pode implicar um funcionamento errático. Kdbx4Reader missing database headers - cabeçalhos em falta + cabeçalhos em falta da base de dados Unable to calculate master key @@ -2119,19 +2656,19 @@ Esta ação pode implicar um funcionamento errático. Invalid header id size - + Tamanho do id do cabeçalho inválido Invalid header field length - + Comprimento do campo de cabeçalho inválido Invalid header data length - + Comprimento dos dados de cabeçalho inválido Failed to open buffer for KDF parameters in header - Falha ao processar os parâmetros KDF no cabeçalho + Erro ao processar os parâmetros KDF no cabeçalho Unsupported key derivation function (KDF) or invalid parameters @@ -2143,75 +2680,75 @@ Esta ação pode implicar um funcionamento errático. Invalid inner header id size - + Tamanho do id do cabeçalho interno inválido Invalid inner header field length - + Comprimento do campo de cabeçalho interno inválido Invalid inner header binary size - + Tamanho binário do cabeçalho interno inválido Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - + Versão não suportada do mapa variante KeePass. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - + Comprimento inválido no nome da entrada da variante do mapa Invalid variant map entry name data Translation: variant map = data structure for storing meta data - + Dados inválidos no nome da entrada da variante do mapa Invalid variant map entry value length Translation: variant map = data structure for storing meta data - + Comprimento inválido no valor de entrada do mapa Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - + Dados inválidos no valor da entrada da variante do mapa Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - + Comprimento inválido do valor booleano da entrada da variante do mapa Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - + Comprimento inválido do valor da entrada Int32 da variante do mapa Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - + Comprimento inválido do valor da entrada UInt32 da variante do mapa Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - + Comprimento inválido do valor da entrada Int64 da variante do mapa Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - + Comprimento inválido do valor da entrada UInt64 da variante do mapa Invalid variant map entry type Translation: variant map = data structure for storing meta data - + Tipo inválido da entrada da variante do mapa Invalid variant map field type size Translation: variant map = data structure for storing meta data - + Tamanho inválido do tipo de campo da variante do mapa @@ -2223,7 +2760,7 @@ Esta ação pode implicar um funcionamento errático. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Algoritmo inválido de cifra simétrica IV. + Tamanho inválido da cifra simétrica IV. Unable to calculate master key @@ -2232,22 +2769,18 @@ Esta ação pode implicar um funcionamento errático. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - + Erro ao serializar os parâmetros KDF da variante do mapa KdbxReader - - Invalid cipher uuid length - - Unsupported cipher Cifra não suportada Invalid compression flags length - + Comprimento inválido da compressão de flags Unsupported compression algorithm @@ -2255,27 +2788,27 @@ Esta ação pode implicar um funcionamento errático. Invalid master seed size - + Tamanho inválido da semente mestre Invalid transform seed size - + Tamanho inválido da semente de transformação Invalid transform rounds size - Tamanho inválido para os ciclos de transformação + Tamanho inválido para os ciclos de transformação Invalid start bytes size - + Tamanho inválido dos bytes iniciais Invalid random stream id size - + Tamanho inválido do ID do fluxo aleatório Invalid inner random stream cipher - + Cifra inválida de fluxo aleatório interno Not a KeePass database. @@ -2295,12 +2828,24 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Unsupported KeePass 2 database version. Versão da base de dados KeePass2 não suportada. + + Invalid cipher uuid length: %1 (length=%2) + Tamanho inválido para o UUID da cifra: %1 (tamanho=%2) + + + Unable to parse UUID: %1 + Não foi possível processar UUID: %1 + + + Failed to read database file. + Não foi possível ler o ficheiro da base de dados. + KdbxXmlReader XML parsing failure: %1 - Falha no processamento XML: %1 + Erro ao processar o XML: %1 No root group @@ -2308,7 +2853,7 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Missing icon uuid or data - Dados ou uuid do ícone em falta + Dados ou UUID do ícone em falta Missing custom data key or value @@ -2320,11 +2865,11 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Null group uuid - + UUID de grupo nulo Invalid group icon number - + Número inválido de ícone de grupo Invalid EnableAutoType value @@ -2340,19 +2885,19 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Null DeleteObject uuid - + UUID nulo em DeleteObject Missing DeletedObject uuid or time - + Tempo ou UUID em falta para DeletedObject Null entry uuid - + Entrada de UUID nula Invalid entry icon number - + Número inválido na entrada de ícone History element in history entry @@ -2360,15 +2905,11 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados No entry uuid found - + Não foi encontrado o UUID da entrada History element with different uuid - Elemento do histórico com uuid diferente - - - Unable to decrypt entry string - Não foi possível decifrar a cadeia vazia + Elemento do histórico com UUID diferente Duplicate custom attribute found @@ -2412,13 +2953,21 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Invalid uuid value - Valor uuid inválido + Valor UUID inválido Unable to decompress binary Translator meant is a binary data inside an entry Não foi possível descomprimir o binário + + XML error: +%1 +Line %2, column %3 + Erro no XML: +%1 +Linha %2, coluna %3 + KeePass1OpenWidget @@ -2428,14 +2977,14 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Unable to open the database. - Incapaz de abrir a base de dados. + Não foi possível abrir a base de dados. KeePass1Reader Unable to read keyfile. - Incapaz de ler o ficheiro-chave. + Não foi possível ler o ficheiro-chave. Not a KeePass database. @@ -2468,7 +3017,7 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Invalid transform seed size - + Tamanho inválido da semente de transformação Invalid number of transform rounds @@ -2484,7 +3033,7 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Unable to calculate master key - Incapaz de calcular a chave-mestre + Não foi possível calcular a chave-mestre Wrong key or database file is corrupt. @@ -2492,47 +3041,47 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Key transformation failed - Falha ao transformar a chave + Erro ao transformar a chave Invalid group field type number - + Número inválido do tipo de grupo de campo Invalid group field size - + Tamanho inválido do grupo de campo Read group field data doesn't match size - + Leitura de grupo de dados do campo não coincidem no tamanho Incorrect group id field size - + Tamanho incorreto de campo de ID de grupo Incorrect group creation time field size - + Tamanho incorreto do campo do grupo de tempo de criação Incorrect group modification time field size - + Tamanho de campo de hora de alteração de grupo incorreto Incorrect group access time field size - + Tamanho de campo de tempo de acesso de grupo incorreto Incorrect group expiry time field size - + Tamanho de campo de tempo de expiração de grupo incorreto Incorrect group icon field size - + Tamanho do campo do ícone de grupo incorreto Incorrect group level field size - + Tamanho de campo do nível de grupo incorreto Invalid group field type @@ -2544,7 +3093,7 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Missing entry field type number - + Falta a entrada de tipo número no campo Invalid entry field size @@ -2552,85 +3101,176 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Read entry field data doesn't match size - + Dados de campo de entrada não coincidem no tamanho Invalid entry uuid field size - + Tamanho da entrada para o campo UUID inválido Invalid entry group id field size - + Tamanho da entrada para o campo identificador de grupo inválido Invalid entry icon field size - + Tamanho da entrada para o campo ícone inválido Invalid entry creation time field size - + Tamanho da entrada para o campo tempo de criação inválido Invalid entry modification time field size - + Tamanho da entrada para o campo tempo de alteração inválido Invalid entry expiry time field size - + Tamanho da entrada para o campo tempo de expiração inválido Invalid entry field type Tipo inválido para o campo da entrada - - - KeePass2 - AES: 256-bit - AES: 256-bit - - - Twofish: 256-bit - Twofish: 256-bit - - - ChaCha20: 256-bit - ChaCha20: 256-bit - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – recomendado) + unable to seek to content position + Não foi possível pesquisar no conteúdo - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - O ficheiro de bloqueio da instância única é inválido. A iniciar nova instância. + Disabled share + Partilha desativada - The lock file could not be created. Single-instance mode disabled. - Não foi possível criar o ficheiro de bloqueio. Modo de única instância desativado. + Import from + Importar de - Another instance of KeePassXC is already running. - Já está em execução uma instância do KeePassXC. + Export to + Exportar para - Fatal error while testing the cryptographic functions. - Erro fatal ao testar as funções de criptografia. + Synchronize with + Sincronizar com - KeePassXC - Error - KeePassXC - Erro + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Componente chave + + + Key Component Description + Descrição do componente chave + + + Cancel + Cancelar + + + Key Component set, click to change or remove + Componente chave definido, clique para alterar ou remover + + + Add %1 + Add a key component + Adicionar %1 + + + Change %1 + Change a key component + Alterar %1 + + + Remove %1 + Remove a key component + Remover %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 definida, clique para alterar ou remover + + + + KeyFileEditWidget + + Browse + Explorar + + + Generate + Gerar + + + Key File + Ficheiro-chave + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Para mais segurança, pode adicionar um ficheiro-chave que contenha dados aleatórios.</p><p>Tem de o manter secreto e não o pode perder pois se tal acontecer, nunca mais conseguirá abrir a base de dados.</p> + + + Legacy key file format + Formato legado de ficheiro-chave + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Está a utilizar um formato legado que pode, no futuro, deixar +de ser suportado. + +Aceda às definições da chave-mestre para gerar um novo ficheiro-chave. + + + Error loading the key file '%1' +Message: %2 + Erro ao carregar o ficheiro-chave %1 +Mensagem: %2 + + + Key files + Ficheiros-chave + + + All files + Todos os ficheiros + + + Create Key File... + Criar ficheiro-chave... + + + Error creating key file + Erro ao criar o ficheiro-chave + + + Unable to create key file: %1 + Não foi possível criar o ficheiro-chave: %1 + + + Select a key file + Selecione o ficheiro-chave @@ -2643,10 +3283,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados &Recent databases Bases de dados &recentes - - Import - Importar - &Help Aj&uda @@ -2655,14 +3291,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados E&ntries E&ntradas - - Copy att&ribute to clipboard - Copiar at&ributo para a área de transferência - - - Time-based one-time password - Palavra-passe única baseada em tempo - &Groups &Grupos @@ -2691,30 +3319,10 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados &Close database Fe&char base de dados - - &New database - &Nova base de dados - - - Merge from KeePassX database - Juntar a partir de base de dados do KeePassX - - - &Add new entry - &Adicionar nova entrada - - - &View/Edit entry - &Ver/editar entrada - &Delete entry Apagar entra&da - - &Add new group - &Adicionar novo grupo - &Edit group &Editar grupo @@ -2727,14 +3335,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Sa&ve database as... G&uardar base de dados como... - - Change &master key... - Alterar chave-&mestre... - - - &Database settings - &Definições da base de dados - Database settings Definições da base de dados @@ -2743,10 +3343,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados &Clone entry &Clonar entrada - - &Find - Locali&zar - Copy &username Copiar nome de &utilizador @@ -2755,10 +3351,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Copy username to clipboard Copiar nome de utilizador para a área de transferência - - Cop&y password - Cop&iar palavra-passe - Copy password to clipboard Copiar palavra-passe para a área de transferência @@ -2771,17 +3363,9 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Password Generator Gerador de palavras-passe - - &Perform Auto-Type - E&xecutar escrita automática - - - &Open URL - Abrir &URL - &Lock databases - B&loquear base de dados + B&loquear bases de dados &Title @@ -2811,22 +3395,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados &Export to CSV file... &Exportar para ficheiro CSV... - - Import KeePass 1 database... - Importar base de dados do KeePass 1... - - - Import CSV file... - Importar ficheiro CSV... - - - Re&pair database... - Re&parar base de dados... - - - Show TOTP - Mostrar TOTP - Set up TOTP... Configurar TOTP... @@ -2847,14 +3415,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Access error for config file %1 Erro de acesso ao ficheiro %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Parece que está a utilizar KeepassHTTP para integração com o navegador. Esta funcionalidade foi descontinuada e será removida brevemente.<br>Considere a utilização de KeePassXC-Browser! Para obter ajuda na migração, aceda ao nosso <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">guia de migração</a> (aviso %1 de 3).</p> - - - read-only - apenas leitura - Settings Definições @@ -2867,26 +3427,6 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Quit KeePassXC Sair do KeePassXC - - KeePass 2 Database - Base de dados do KeePass 2 - - - All files - Todos os ficheiros - - - Open database - Abrir base de dados - - - Save repaired database - Guardar base de dados reparada - - - Writing the database failed. - Falha ao escrever na base de dados. - Please touch the button on your YubiKey! Toque no botão da sua YubiKey! @@ -2895,9 +3435,272 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados WARNING: You are using an unstable build of KeePassXC! There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. - AVISO: está a utilizar uma versão instável do KeepassXC! -Existe um risco bastante grande e deve efetuar um backup da base de dados. -Esta versão não deve ser utilizada para uma utilização regular. + AVISO: está a utilizar uma versão instável do KeePassXC! +Existe um risco elevado de corrupção de ficheiros. Deve criar um backup da base de dados. +Esta versão não deve ser utilizada em ambientes de produção. + + + &Donate + &Donativos + + + Report a &bug + Reportar um &erro + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + AVISO: a versão Qt do seu sistema pode causar o encerramento do KeePassXC se estiver a utilizar o teclado no ecrã (On-Screen Keyboard)! +Recomendamos que utilize a versão AppImage disponível no nosso site. + + + &Import + &Importar + + + Copy att&ribute... + Copiar at&ributo... + + + TOTP... + TOTP... + + + &New database... + &Nova base de dados... + + + Create a new database + Criar uma nova base de dados + + + &Merge from database... + Co&mbinar da base de dados... + + + Merge from another KDBX database + Combinar com outra base de dados KDBX + + + &New entry + &Nova entrada + + + Add a new entry + Adicionar uma nova entrada + + + &Edit entry + &Editar entrada + + + View or edit entry + Ver ou editar entrada + + + &New group + &Novo grupo + + + Add a new group + Adicionar um novo grupo + + + Change master &key... + Alterar chave-&mestre... + + + &Database settings... + &Definições da base de dados... + + + Copy &password + Copiar &palavra-passe + + + Perform &Auto-Type + Execut&ar escrita automática + + + Open &URL + Abrir &URL + + + KeePass 1 database... + Base de dados do KeePass 1... + + + Import a KeePass 1 database + Importar base de dados do KeePass 1 + + + CSV file... + Ficheiro CSV... + + + Import a CSV file + Importar ficheiro CSV + + + Show TOTP... + Mostrar TOTP... + + + Show TOTP QR Code... + Mostrar código QR TOTP... + + + Check for Updates... + Procurar atualizações... + + + Share entry + Partilhar entrada + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + NOTA: está a utilizar uma versão de teste do KeePassXC! +Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes de produção. + + + Check for updates on startup? + Verificar se existem atualizações ao iniciar? + + + Would you like KeePassXC to check for updates on startup? + Deseja que o KeePassXC procure atualizações ao iniciar? + + + You can always check for updates manually from the application menu. + Também pode verificar se existem atualizações através do menu da aplicação. + + + + Merger + + Creating missing %1 [%2] + A criar %1 [%2] + + + Relocating %1 [%2] + A alocar %1 [%2] + + + Overwriting %1 [%2] + A substituir %1 [%2] + + + older entry merged from database "%1" + entrada antiga combinada da base de dados %1 + + + Adding backup for older target %1 [%2] + A adicionar backup para o destino antigo %1 [%2] + + + Adding backup for older source %1 [%2] + A adicionar backup para a origem antiga %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + A reaplicar a entrada de destino antiga na origem recente %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + A reaplicar a entrada de origem antiga no destinio recente %1 [%2] + + + Synchronizing from newer source %1 [%2] + A sincronizar da origem recente %1 [%2] + + + Synchronizing from older source %1 [%2] + A sincronizar da origem antiga %1 [%2] + + + Deleting child %1 [%2] + A apagar dependente %1 [%2] + + + Deleting orphan %1 [%2] + A apagar órfão %1 [%2] + + + Changed deleted objects + Objetos apagados alterados + + + Adding missing icon %1 + Adicionar ícone em falta %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + A criar uma nova base de dados do KeePassXC... + + + Root + Root group + Raiz + + + + NewDatabaseWizardPage + + WizardPage + Assistente + + + En&cryption Settings + Definições de &cifra + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições. + + + Advanced Settings + Definições avançadas + + + Simple Settings + Definições básicas + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Definições de cifra + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Chave-mestre da base de dados + + + A master key known only to you protects your database. + Uma chave-mestre apenas sua e que protege a base de dados. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Informação geral sobre a base de dados + + + Please fill in the display name and an optional description for your new database: + Preencha o nome de exibição e uma descrição extra para a sua nova base de dados: @@ -2912,11 +3715,11 @@ Esta versão não deve ser utilizada para uma utilização regular. Base64 decoding failed - Falha na descodificação Base64 + Erro de descodificação Base64 Key file way too small. - Ficheiro-chave muito pequeno + Ficheiro-chave muito pequeno. Key file magic header id invalid @@ -2928,7 +3731,7 @@ Esta versão não deve ser utilizada para uma utilização regular. Failed to read public key. - Falha ao ler a chave pública. + Erro ao ler a chave pública. Corrupted key file, reading private key failed @@ -2936,7 +3739,7 @@ Esta versão não deve ser utilizada para uma utilização regular. No private key payload to decrypt - Não existe chave privada para decifrar + Não existe uma chave privada para decifrar Trying to run KDF without cipher @@ -2944,15 +3747,15 @@ Esta versão não deve ser utilizada para uma utilização regular. Passphrase is required to decrypt this key - Requer frase-chave para decifrar esta chave + Necessita de uma frase-chave para decifrar esta chave Key derivation failed, key file corrupted? - Falha na derivação da chave, ficheiro chave danificado? + Erro na derivação da chave, ficheiro-chave danificado? Decryption failed, wrong passphrase? - Falha ao decifrar, frase-chave errada? + Erro ao decifrar, frase-chave errada? Unexpected EOF while reading public key @@ -3000,125 +3803,30 @@ Esta versão não deve ser utilizada para uma utilização regular. - OptionDialog + PasswordEditWidget - Dialog - Diálogo + Enter password: + Introduza a palavra-passe: - This is required for accessing your databases from ChromeIPass or PassIFox - Necessária para aceder às bases de dados através do ChromeIPass ou do PassIFox + Confirm password: + Confirmação de palavra-passe: - Enable KeePassHTTP server - Ativar servidor KeePassHTTP + Password + Palavra-passe - General - Geral + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>A palavra-passe é o método primário para proteger a sua base de dados.</p><p>As boas palavras-passe são extensão e únicas. O KeePassXC pode gerar uma palavra-passe por si.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - M&ostrar notificação se as credenciais forem solicitadas + Passwords do not match. + Disparidade nas palavras-passe. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Apenas devolve as melhores entradas para o URL específico em vez das entradas para o domínio. - - - &Return only best matching entries - Devolve&r apenas as entradas coincidentes - - - Re&quest to unlock the database if it is locked - Pe&dir para desbloquear a base de dados se esta estiver bloqueada - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Apenas serão devolvidas as entradas com o mesmo esquema (http://, https://, ftp://, ...). - - - &Match URL schemes - Corresponder com os esque&mas do URL - - - Sort matching entries by &username - Ordenar entradas coincidentes por nome de &utilizador - - - Sort &matching entries by title - Ordenar &entradas por título - - - R&emove all shared encryption keys from active database - R&emover todas as chaves cifradas partilhadas da base de dados ativa - - - Re&move all stored permissions from entries in active database - Re&mover todas as permissões guardadas para as entradas da base de dados ativa - - - Password Generator - Gerador de palavra-passe - - - Advanced - Avançado - - - Always allow &access to entries - Permitir sempre &acesso às entradas - - - Always allow &updating entries - Permitir sempre at&ualizar as entradas - - - Only the selected database has to be connected with a client. - Apenas a base de dados selecionada tem que estar conectada a um cliente. - - - Searc&h in all opened databases for matching entries - Pesquisar por entradas semel&hantes em todas as base de dados abertas - - - Automatically creating or updating string fields is not supported. - A criação ou atualização dos campos de cadeias não é suportada. - - - &Return advanced string fields which start with "KPH: " - Most&rar campos avançados que começam com "KPH: " - - - HTTP Port: - Porta HTTP: - - - Default port: 19455 - Porta padrão: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - O KeePassXC vai escutar nesta porta em 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>AVISO</b>: as opções seguintes podem ser perigosas! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>A funcionalidade KeePassHTTP foi descontinuada e será removida brevemente.<br>Considere a utilização de KeePassXC-Browser! Para obter ajuda na migração, aceda ao nosso <a href="https://keepassxc.org/docs/keepassxc-browser-migration">guia de migração</a>.</p> - - - Cannot bind to privileged ports - Incapaz de associar às portas privilegiadas - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Não é possível associar a portas privilegiadas inferiores à 1024! -Será utilizada a porta 19455 (padrão). + Generate master password + Gerar palavra-passe principal @@ -3162,7 +3870,7 @@ Será utilizada a porta 19455 (padrão). Special Characters - Caracteres especiais + Caracteres especiais Extended ASCII @@ -3188,18 +3896,10 @@ Será utilizada a porta 19455 (padrão). Wordlist: Lista de palavras: - - Word Count: - Número de palavras: - Word Separator: Separador de palavras: - - Generate - Gerar - Copy Copiar @@ -3212,10 +3912,6 @@ Será utilizada a porta 19455 (padrão). Close Fechar - - Apply - Aplicar - Entropy: %1 bit Entropia: %1 bit @@ -3244,6 +3940,171 @@ Será utilizada a porta 19455 (padrão). Password quality Excelente + + ExtendedASCII + ASCII expandido + + + Switch to advanced mode + Ativar modo avançado + + + Advanced + Avançado + + + Upper Case Letters A to F + Letras maiúsculas de A até F + + + A-Z + A-Z + + + Lower Case Letters A to F + Letras minúsculas de A até F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Parênteses + + + {[( + {[( + + + Punctuation + Pontuação + + + .,:; + .,:; + + + Quotes + Aspas + + + " ' + " ' + + + Math + Matemática + + + <*+!?= + <*+!?= + + + Dashes + Traços + + + \_|-/ + \_|-/ + + + Logograms + Logo-gramas + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Trocar para o modo básico + + + Simple + Básico + + + Character set to exclude from generated password + Conjunto de caracteres a excluir da palavra-passe gerada + + + Do not include: + Não incluir: + + + Add non-hex letters to "do not include" list + Adicionar letras 'non-hex' à lista de exclusão + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caracteres excluídos: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + &Número de palavras: + + + Regenerate + Recriar + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Selecionar + + + + QMessageBox + + Overwrite + Substituir + + + Delete + Apagar + + + Move + Mover + + + Empty + Vazio + + + Remove + Remover + + + Skip + Ignorar + + + Disable + Desativar + + + Merge + Combinar + QObject @@ -3263,34 +4124,18 @@ Será utilizada a porta 19455 (padrão). Cannot decrypt message Não foi possível decifrar a mensagem - - Timeout or cannot connect to KeePassXC - Tempo limite atingido ou não foi possível comunicar com o KeePassXC - Action cancelled or denied Ação cancelada ou recusada - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Mensagem não decifrada ou chave pública não encontrada, Ativou as mensagens nativas no KeePassXC? - KeePassXC association failed, try again - Falha ao associar o KeePassXC. Tente novamente. - - - Key change was not successful - Alteração de chave não efetuada + Erro ao associar o KeePassXC. Tente novamente. Encryption key is not recognized Chave de cifra não reconhecida - - No saved databases found - Não existem bases de dados guardadas - Incorrect action Ação incorreta @@ -3414,11 +4259,7 @@ Será utilizada a porta 19455 (padrão). Insert password to unlock %1: - Digite a palavra-passe para desbloquear %1. - - - Failed to load key file %1 : %2 - Falha ao carregar o ficheiro-chave %1: %2 + Introduza a palavra-passe para desbloquear %1: WARNING: You are using a legacy key file format which may become @@ -3458,7 +4299,7 @@ Comandos disponíveis: Search term. - Termo de pesquisa + Termo de pesquisa. Merge two databases. @@ -3474,7 +4315,7 @@ Comandos disponíveis: Use the same credentials for both database files. - Utilizar as mesmas credenciais para ambos os ficheiros. + Utilizar as mesmas credenciais para ambos os ficheiros de bases de dados. Key file of the database to merge from. @@ -3504,12 +4345,6 @@ Comandos disponíveis: error reading from device erro ao ler do dispositivo - - file empty ! - - ficheiro vazio! - - malformed string cadeira mal fomada @@ -3546,10 +4381,6 @@ Comandos disponíveis: Created Criada - - Legacy Browser Integration - Integração com navegador (legada) - Browser Integration Integração com navegador @@ -3578,10 +4409,6 @@ Comandos disponíveis: Word count for the diceware passphrase. Número de palavras para a palavra-passe. - - count - número - Wordlist for the diceware generator. [Default: EFF English] @@ -3593,51 +4420,468 @@ Comandos disponíveis: Gerar nova palavra-passe aleatória. - Length of the generated password. - Tamanho da palavra-passe gerada. + Invalid value for password length %1. + Valor inválido para o tamanho da palavra-passe %1 - Use lowercase characters in the generated password. - Utilizar letras minúsculas para a palavra-passe gerada. + Could not create entry with path %1. + Não foi possível criar a entrada com o caminho %1 - Use uppercase characters in the generated password. - Utilizar letras maiúsculas para a palavra-passe gerada. + Enter password for new entry: + Introduza a palavra-passe para a nova entrada: - Use numbers in the generated password. - Utilizar números para a palavra-passe gerada. + Writing the database failed %1. + Erro ao escrever na base de dados %1. - Use special characters in the generated password. - Utilizar caracteres especiais para a palavra-passe gerada. + Successfully added entry %1. + Entrada %1 adicionada com sucesso - Use extended ASCII in the generated password. - Utilizar ASCII estendido para a palavra-passe gerada. + Copy the current TOTP to the clipboard. + Copiar TOTP atual para a área de transferência + + + Invalid timeout value %1. + Valor limite inválido %1 + + + Entry %1 not found. + Entrada %1 não encontrada + + + Entry with path %1 has no TOTP set up. + A entrada com o caminho %1 não tem uma TOTP configurada. + + + Entry's current TOTP copied to the clipboard! + TOTP da entrada atual copiada para a área de transferência! + + + Entry's password copied to the clipboard! + Palavra-passe da entrada atual copiada para a área de transferência! + + + Clearing the clipboard in %1 second(s)... + A área de transferência será limpa dentro de %1 segundo...A área de transferência será limpa dentro de %1 segundos... + + + Clipboard cleared! + Área de transferência limpa! + + + Silence password prompt and other secondary outputs. + Silenciar pedidos de palavra-passe e outros resultados secundários. + + + count + CLI parameter + número + + + Invalid value for password length: %1 + Valor inválido para o tamanho da palavra-passe: %1 + + + Could not find entry with path %1. + Não foi possível encontrar a entrada com o caminho %1. + + + Not changing any field for entry %1. + Não foi alterado qualquer campo para a entrada %1. + + + Enter new password for entry: + Introduza a nova palavra-passe da entrada: + + + Writing the database failed: %1 + Erro ao escrever na base de dados: %1 + + + Successfully edited entry %1. + Entrada %1 editada com sucesso. + + + Length %1 + Tamanho %1 + + + Entropy %1 + Entropia %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Bits extra multi-palavra %1 + + + Type: Bruteforce + Tipo: Bruteforce + + + Type: Dictionary + Tipo: Dictionary + + + Type: Dict+Leet + Tipo: Dict+Leet + + + Type: User Words + Tipo: User Words + + + Type: User+Leet + Tipo: User+Leet + + + Type: Repeated + Tipo: Repeated + + + Type: Sequence + Tipo: Sequence + + + Type: Spatial + Tipo: Spatial + + + Type: Date + Tipo: Date + + + Type: Bruteforce(Rep) + Tipo: Bruteforce(Rep) + + + Type: Dictionary(Rep) + Tipo: Dictionary(Rep) + + + Type: Dict+Leet(Rep) + Tipo: Dict+Leet(Rep) + + + Type: User Words(Rep) + Tipo: User Words(Rep) + + + Type: User+Leet(Rep) + Tipo: User+Leet(Rep) + + + Type: Repeated(Rep) + Tipo: Repeated(Rep) + + + Type: Sequence(Rep) + Tipo: Sequence(Rep) + + + Type: Spatial(Rep) + Tipo: Spatial(Rep) + + + Type: Date(Rep) + Tipo: Date(Rep) + + + Type: Unknown%1 + Tipo: Desconhecido%1 + + + Entropy %1 (%2) + Entropia %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Tamanho da palavra-passe (%1) != soma do tamanho das partes (%2) *** + + + Failed to load key file %1: %2 + Erro ao carregar o ficheiro-chave %1: %2 + + + File %1 does not exist. + %1 não existe. + + + Unable to open file %1. + Não foi possível abrir o ficheiro %1. + + + Error while reading the database: +%1 + Erro ao ler a base de dados: +%1 + + + Error while parsing the database: +%1 + Erro ao analisar a base de dados: +%1 + + + Length of the generated password + Tamanho da palavra-passe gerada + + + Use lowercase characters + Utilizar letras minúsculas + + + Use uppercase characters + Utilizar letras maiúsculas + + + Use numbers. + Utilizar números + + + Use special characters + Utilizar caracteres especiais + + + Use extended ASCII + Utilizar ASCII expandido + + + Exclude character set + Conjunto de caracteres a excluir + + + chars + caracteres + + + Exclude similar looking characters + Excluir caracteres semelhantes + + + Include characters from every selected group + Incluir caracteres de todos os grupos selecionados + + + Recursively list the elements of the group. + Listar recursivamente todos os elementos do grupo + + + Cannot find group %1. + Não foi possível encontrar o grupo %1. + + + Error reading merge file: +%1 + Erro ao ler o ficheiro de combinação: +%1 + + + Unable to save database to file : %1 + Não foi possível guardar a base de dados no ficheiro: %1 + + + Unable to save database to file: %1 + Não foi possível guardar a base de dados no ficheiro: %1 + + + Successfully recycled entry %1. + A entrada %1 foi movida para a reciclagem. + + + Successfully deleted entry %1. + A entrada %1 foi eliminada. + + + Show the entry's current TOTP. + Mostrar TOTP atual da entrada. + + + ERROR: unknown attribute %1. + Erro: atributo desconhecido %1 + + + No program defined for clipboard manipulation + Não definiu um programa para manipulação da área de transferência + + + Unable to start program %1 + Não foi possível iniciar %1 + + + file empty + ficheiro vazio + + + %1: (row, col) %2,%3 + %1: (linha, coluna) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recomendado) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Definições inválidas + + + Invalid Key + TOTP + Chave inválida + + + Message encryption failed. + Erro ao cifrar a mensagem. + + + No groups found + Não foram encontrados grupos + + + Create a new database. + Criar uma nova base de dados. + + + File %1 already exists. + O ficheiro %1 já existe. + + + Loading the key file failed + Não foi possível carregar o ficheiro-chave. + + + No key is set. Aborting database creation. + Chave não definida. A abortar criação da base de dados. + + + Failed to save the database: %1. + Não foi possível criar a base de dados: %1. + + + Successfully created new database. + A base de dados foi criada com sucesso. + + + Insert password to encrypt database (Press enter to leave blank): + Introduza a palavra-passe para cifrar a base de dados (prima Enter para não cifrar): + + + Creating KeyFile %1 failed: %2 + Não foi possível criar o ficheiro-chave %1: %2 + + + Loading KeyFile %1 failed: %2 + Não foi possível carregar o ficheiro-chave %1: %2 + + + Remove an entry from the database. + Remover uma entrada da base de dados. + + + Path of the entry to remove. + Caminho da entrada a remover. + + + Existing single-instance lock file is invalid. Launching new instance. + O ficheiro de bloqueio da instância única é inválido. A iniciar nova instância. + + + The lock file could not be created. Single-instance mode disabled. + Não foi possível criar o ficheiro de bloqueio. Modo de única instância desativado. + + + KeePassXC - cross-platform password manager + KeePassXC - Gestor de palavras-passe multi-plataforma + + + filenames of the password databases to open (*.kdbx) + nome de ficheiro das bases de dados a abrir (*.kdbx) + + + path to a custom config file + caminho para um ficheiro de configuração personalizado + + + key file of the database + ficheiro-chave da base de dados + + + read password of the database from stdin + ler palavra-passe da base de dados a partir de stdin + + + Parent window handle + Gestão da janela parental + + + Another instance of KeePassXC is already running. + Já está em execução uma instância do KeePassXC. + + + Fatal error while testing the cryptographic functions. + Erro fatal ao testar as funções de criptografia. + + + KeePassXC - Error + KeePassXC - Erro + + + Database password: + Palavra-passe da base de dados: + + + Cannot create new group + QtIOCompressor Internal zlib error when compressing: - Erro interno zlib durante a compressão: + Erro interno zlib durante a compressão: Error writing to underlying device: - Erro de escrita no dispositivo subjacente: + Erro de escrita no dispositivo subjacente: Error opening underlying device: - Erro ao abrir o dispositivo subjacente: + Erro ao abrir o dispositivo subjacente: Error reading data from underlying device: - Erro de leitura no dispositivo subjacente: + Erro de leitura no dispositivo subjacente: Internal zlib error when decompressing: - Erro interno zlib durante a descompressão: + Erro interno zlib durante a descompressão: @@ -3648,15 +4892,101 @@ Comandos disponíveis: Internal zlib error: - Erro interno zlib: + Erro interno zlib: + + + + SSHAgent + + Agent connection failed. + Erro ao conectar com o agente. + + + Agent protocol error. + Erro de protocolo do agente. + + + No agent running, cannot add identity. + O agente não está em execução e não é possível adicionar a identidade. + + + No agent running, cannot remove identity. + O agente não está em execução e não é possível remover a identidade. + + + Agent refused this identity. Possible reasons include: + O agente recusou esta identidade. Causas possíveis: + + + The key has already been added. + A chave já foi adicionada. + + + Restricted lifetime is not supported by the agent (check options). + O tempo de vida restrito não é suportado pelo agente (verificar opções). + + + A confirmation request is not supported by the agent (check options). + O agente não tem suporte a pedidos de confirmação (consulte as opções). + + + + SearchHelpWidget + + Search Help + Pesquisar na ajuda + + + Search terms are as follows: [modifiers][field:]["]term["] + Introduza os termos de pesquisa da seguinte forma: [modificadores][campo:]["]termo["] + + + Every search term must match (ie, logical AND) + Todos os termos de pesquisa coincidentes (AND lógico) + + + Modifiers + Modificadores + + + exclude term from results + excluir termo dos resultados + + + match term exactly + coincidência exata + + + use regex in term + utilizar regex no termo + + + Fields + Campos + + + Term Wildcards + Caracteres universais do termo + + + match anything + coincidência relativa + + + match one + uma coincidência + + + logical OR + OU lógico + + + Examples + Exemplos SearchWidget - - Search... - Pesquisa... - Search Pesquisa @@ -3665,315 +4995,332 @@ Comandos disponíveis: Clear Limpar - - Case Sensitive - Maiúsculas/minúsculas - Limit search to selected group Limitar pesquisa ao grupo selecionado + + Search Help + Pesquisar na ajuda + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Pesquisa (%1)... + + + Case sensitive + Sensível ao tipo + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Pedido de associação de nova chave + Active + Ativo - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Recebeu uma pedido de associação para a chave acima. -Se quiser permitir o acesso à sua base de dados do -KeePassXC, atribua um nome único para a identificar e aceitar. + Allow export + Permitir exportação - KeePassXC: Overwrite existing key? - KeePassXC: Substituir chave existente? + Allow import + Permitir importação - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Já existe uma chave de cifra partilhada com o nome "%1". -Deseja substituir a chave de cifra? + Own certificate + Certificado próprio - KeePassXC: Update Entry - KeePassXC: Atualizar entrada + Fingerprint: + Impressão digital: - Do you want to update the information in %1 - %2? - Deseja atualizar as informações em %1 - %2? + Certificate: + Certificado: - KeePassXC: Database locked! - KeePassXC: Base de dados bloqueada! + Signer + Signatário: - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - A base de dados ativa está bloqueada! -Desbloqueie a base de dados selecionada ou escolha outra que esteja desbloqueada. + Key: + Chave: - KeePassXC: Removed keys from database - KeePassXC: Remover chaves da base de dados + Generate + Gerar + + + Import + Importar + + + Export + Exportar + + + Imported certificates + Certificados importados + + + Trust + Confiar + + + Ask + Perguntar + + + Untrust + Deixar de confiar + + + Remove + Remover + + + Path + Caminho + + + Status + Estado + + + Fingerprint + Impressão digital + + + Certificate + Certificado + + + Trusted + Confiável + + + Untrusted + Não confiável + + + Unknown + Desconhecido + + + key.share + Filetype for KeeShare key + partilha da chave + + + KeeShare key file + Ficheiro-chave KeeShare + + + All files + Todos os ficheiros + + + Select path + Selecionar caminho + + + Exporting changed certificate + A exportar certificado alterado + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + O certificado exportado não é o que está a ser utilizado. Deseja exportar o certificado atual? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Importar de um contentor sem assinatura + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Não foi possível verificar a fonte do contentor partilhado, porque não está assinado. Tem a certeza de que o quer importar de %1? + + + Import from container with certificate + Importar de um contentor com certificado + + + Not this time + Agora não + + + Never + Nunca + + + Always + Sempre + + + Just this time + Apenas agora + + + Import from %1 failed (%2) + Não foi possível importar %1 (%2) + + + Import from %1 successful (%2) + %1 foi importada com sucesso (%2) + + + Imported from %1 + Importada de %1 + + + Signed share container are not supported - import prevented + O contentor de partilha assinado não é suportado - importação evitada + + + File is not readable + O ficheiro não é legível + + + Invalid sharing container + Contentor de partilha inválido + + + Untrusted import prevented + Importação não fiável impedida + + + Successful signed import + Importação assinada bem sucedida + + + Unexpected error + Erro inesperado + + + Unsigned share container are not supported - import prevented + O contentor de partilha não assinado não é suportado - importação evitada + + + Successful unsigned import + Importação não assinada bem sucedida + + + File does not exist + O ficheiro não existe + + + Unknown share container type + Tipo de contentor de partilha desconhecido + + + Overwriting signed share container is not supported - export prevented + A substituição de contentor de partilha não assinado não é suportada - exportação evitada + + + Could not write export container (%1) + Não foi possível escrever contentor de exportação (%1) + + + Overwriting unsigned share container is not supported - export prevented + A substituição de contentor de partilha assinado não é suportada - exportação evitada + + + Could not write export container + Não foi possível escrever contentor de exportação + + + Unexpected export error occurred + Ocorreu um erro inesperado ao exportar + + + Export to %1 failed (%2) + Não foi possível exportar %1 (%2) + + + Export to %1 successful (%2) + %1 foi exportada com sucesso (%2) + + + Export to %1 + Exportar para %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Deseja confiar em %1 com a impressão digital de %2 em %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Palavra-passe limitada + + + 000000 + 000000 + + + Copy + Copiar - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Removida com sucesso %n chave de cifra das definições KeePassX/Http.Removidas com sucesso % chaves de cifra das definições KeePassX/Http. - - - KeePassXC: No keys found - KeePassXC: Nenhuma chave encontrada - - - No shared encryption-keys found in KeePassHttp Settings. - Nenhuma chaves de cifra partilhadas encontrada nas definições do KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: Definições indisponíveis! - - - The active database does not contain an entry of KeePassHttp Settings. - A base de dados ativa não contém uma entrada de definições KeePassHttp. - - - Removing stored permissions... - A remover permissões guardadas... - - - Abort - Abortar - - - KeePassXC: Removed permissions - KeePassXC: Permissões removidas - - - Successfully removed permissions from %n entries. - Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas. - - - KeePassXC: No entry with permissions found! - KeePassXC: Não existem entradas com permissões! - - - The active database does not contain an entry with permissions. - A base de dados ativa não contém uma entrada com permissões. + Expires in <b>%n</b> second(s) + Expira em <b>%n</b> segundoExpira em <b>%n</b> segundos - SettingsWidget + TotpExportSettingsDialog - Application Settings - Definições da aplicação + Copy + Copiar - General - Geral + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + Nota: estas definições TOTP são personalizadas e podem não funcionar com outros autenticadores. - Security - Segurança + There was an error creating the QR code. + Ocorreu um erro ao criar o código QR. - Access error for config file %1 - Erro de acesso ao ficheiro %1 + Closing in %1 seconds. + A fechar dentro de %1 segundos. - SettingsWidgetGeneral - - Basic Settings - Definições básicas - - - Start only a single instance of KeePassXC - Abrir apenas uma instância do KeepassXC - - - Remember last databases - Memorizar últimas bases de dados - - - Remember last key files and security dongles - Memorizar últimos ficheiros-chave e dispositivos de segurança - - - Load previous databases on startup - Ao iniciar, carregar a última base de dados utilizada - - - Automatically save on exit - Guardar automaticamente ao fechar - - - Automatically save after every change - Guardar automaticamente a cada alteração - - - Automatically reload the database when modified externally - Recarregar base de dados se esta for modificada externamente - - - Minimize when copying to clipboard - Minimizar ao copiar para a área de transferência - - - Minimize window at application startup - Minimizar janela ao iniciar a aplicação - - - Use group icon on entry creation - Utilizar ícone do grupo ao criar a entrada - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Não marcar base de dados como alterada para modificações não efetuadas em dados (ex.: expansão de grupos) - - - Hide the Details view - Ocultar vista de detalhes - - - Show a system tray icon - Mostrar ícone na bandeja do sistema - - - Hide window to system tray when minimized - Ao minimizar, ocultar a janela na bandeja do sistema - - - Hide window to system tray instead of app exit - Ao fechar, ocultar a janela na bandeja do sistema - - - Dark system tray icon - Ícone escuro na bandeja - - - Language - Idioma - - - Auto-Type - Escrita automática - - - Use entry title to match windows for global Auto-Type - Utilizar título da entrada para fazer coincidir com a escrita automática - - - Use entry URL to match windows for global Auto-Type - Utilizar URL da entrada para fazer coincidir com a escrita automática - - - Always ask before performing Auto-Type - Perguntar antes de executar a escrita automática - - - Global Auto-Type shortcut - Atalho global de escrita automática - - - Auto-Type delay - Atraso de escrita automática - - - ms - Milliseconds - ms - - - Startup - Arranque - - - File Management - Gestão de ficheiros - - - Safely save database files (may be incompatible with Dropbox, etc) - Guardar bases de dados em segurança (pode ser incompatível com DropBox e outros serviços) - - - Backup database file before saving - Criar backup da base de dados antes de guardar - - - Entry Management - Gestão de entradas - - - General - Geral - - - - SettingsWidgetSecurity - - Timeouts - Tempo limite - - - Clear clipboard after - Limpar área de transferência após - - - sec - Seconds - seg. - - - Lock databases after inactivity of - Bloquear base de dados se inativa durante - - - Convenience - Conveniência - - - Lock databases when session is locked or lid is closed - Bloquear base de dados ao bloquear a sessão ou ao fechar a tampa do portátil - - - Lock databases after minimizing the window - Bloquear base de dados ao minimizar a janela - - - Don't require password repeat when it is visible - Não pedir repetição da palavra-passe se esta estiver visível - - - Show passwords in cleartext by default - Mostrar palavras-passe em texto simples - - - Hide passwords in the preview panel - Ocultar palavras-passe no painel de pré-visualização - - - Hide entry notes by default - Por definição, ocultar notas da entrada - - - Privacy - Privacidade - - - Use Google as fallback for downloading website icons - Utilizar o Google como recurso para descarregar os ícones dos sites - - - Re-lock previously locked database after performing Auto-Type - Bloquear novamente a base de dados depois de usar a escrita automática - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Configurar TOTP @@ -3992,62 +5339,87 @@ Desbloqueie a base de dados selecionada ou escolha outra que esteja desbloqueada Use custom settings - Usar definições personalizadas + Utilizar definições personalizadas - Note: Change these settings only if you know what you are doing. - Nota: apenas deve alterar estas definições se souber o que está a fazer. + Custom Settings + Definições personalizadas Time step: Avanço de tempo: - 8 digits - 8 dígitos - - - 6 digits - 6 dígitos + sec + Seconds + seg Code size: Tamanho do código: - sec - Seconds - seg. + 6 digits + 6 dígitos + + + 7 digits + 7 dígitos + + + 8 digits + 8 dígitos - TotpDialog + UpdateCheckDialog - Timed Password - Palavra-passe limitada + Checking for updates + A verificar se existem atualizações - 000000 - 000000 + Checking for updates... + A verificar se existem atualizações... - Copy - Copiar + Close + Fechar - Expires in - Expira em + Update Error! + Erro ao atualizar! - seconds - segundos + An error occurred in retrieving update information. + Ocorreu um erro ao obter a informação de atualização. - - - UnlockDatabaseWidget - Unlock database - Desbloquear base de dados + Please try again later. + Por favor tente mais tarde + + + Software Update + Atualização do programa + + + A new version of KeePassXC is available! + Está disponível uma nova versão do KeePassXC! + + + KeePassXC %1 is now available — you have %2. + O KeePassXC %1 já está disponível — você tem a versão %2. + + + Download it at keepassxc.org + Descarregue em keepassxc.org + + + You're up-to-date! + Está atualizado! + + + KeePassXC %1 is currently the newest version available + Atualmente, KeePassXC %1 é a versão mais recente. @@ -4082,42 +5454,26 @@ Desbloqueie a base de dados selecionada ou escolha outra que esteja desbloqueada - main + YubiKeyEditWidget - Remove an entry from the database. - Remover uma entrada da base de dados. + Refresh + Recarregar - Path of the database. - Caminho da base de dados. + YubiKey Challenge-Response + Pergunta de segurança YubiKey - Path of the entry to remove. - Caminho da entrada a remover. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Se tiver uma <a href="https://www.yubico.com/">YubiKey</a>, pode utilizá-la para obter mais segurança.</p><p>A YubiKey requer que uma das suas ranhuras seja programada como uma <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - Gestor de palavras-passe multi-plataforma + No YubiKey detected, please ensure it's plugged in. + Yubikey não detetada. verifique se está inserida corretamente. - filenames of the password databases to open (*.kdbx) - nome de ficheiro das bases de dados a abrir (*.kdbx) - - - path to a custom config file - caminho para um ficheiro de configuração personalizado - - - key file of the database - ficheiro-chave da base de dados - - - read password of the database from stdin - ler palavra-passe da base de dados a partir de stdin - - - Parent window handle - Gestão da janela parental + No YubiKey inserted. + Youbikey não inserida. \ No newline at end of file diff --git a/share/translations/keepassx_ro.ts b/share/translations/keepassx_ro.ts index 5a6c5ae5c..c6dfda993 100644 --- a/share/translations/keepassx_ro.ts +++ b/share/translations/keepassx_ro.ts @@ -23,7 +23,7 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vezi contribuțiile pe GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Vezi contibuțiile pe GitHub</a> Debug Info @@ -37,12 +37,6 @@ Copy to clipboard Copiază în clipboard - - Version %1 - - Versiune %1 - - Revision: %1 Revizie: %1 @@ -76,32 +70,47 @@ Nucleu (Kernel): %3 %4 - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access + Version %1 - Remember this decision - Ține minte această decizie + Build Type: %1 + - Allow - Permite + Auto-Type + - Deny - Interzice + Browser Integration + Integrare cu browserul - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + SSH Agent + Agent SSH + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) @@ -111,12 +120,283 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) Activează Agentul SSH (necesită repornire) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Setări aplicație + + + General + General + + + Security + Securitate + + + Access error for config file %1 + + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Setări de bază + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + Memorează ultimele baze de date + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + + + + Automatically save on exit + Salvare automată la ieșire + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + + + + Hide the entry preview panel + + + + General + General + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + Limbă + + + Auto-Type + + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + ms + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + Golește clipboard după + + + sec + Seconds + sec + + + Lock databases after inactivity of + + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + Comoditate + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + Confidențialitate + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType Couldn't find an entry that matches the window title: - Nu a putut fi gasită nicio intrare care să coincidă cu titlul ferestrei: + Nu a putut fi gasită o intrare care să coincidă cu titlul ferestrei: Auto-Type - KeePassXC @@ -212,6 +492,26 @@ Please select whether you want to allow access. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + Anulare + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -285,14 +585,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension - - &Disconnect all browsers - - - - Forget all remembered &permissions - - Advanced Avansat @@ -358,14 +650,6 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! - - Executable Files (*.exe);;All Files (*.*) - Fișiere Executabile (*.exe);;Toate Fișierele (*.*) - - - Executable Files (*) - Fișiere Executabile (*) - Select custom proxy location @@ -374,6 +658,31 @@ Please select whether you want to allow access. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + BrowserService @@ -409,148 +718,43 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? - - KeePassXC: Database locked! - - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - KeePassXC: Settings not available! - - - - The active database does not contain a settings entry. - - - - KeePassXC: No keys found - - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - - Abort Anulează - KeePassXC: Removed permissions + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! + KeePassXC: No entry with KeePassHTTP attributes found! - The active database does not contain an entry with permissions. - - - - - ChangeMasterKeyWidget - - Password - Parola - - - Enter password: - Introdu parola: - - - Repeat password: - Repetă parola: - - - &Key file + The active database does not contain an entry with KeePassHTTP attributes. - Browse - Răsfoiește - - - Create - Creează - - - Cha&llenge Response + KeePassXC: Legacy browser integration settings detected - Refresh - Actualizează - - - Key files - Fișiere cheie - - - All files - Toate fișierele - - - Create Key File... - Creare fișier cheie... - - - Unable to create Key File : - - - - Select a key file - Selectați un fișier cheie - - - Empty password - Parolă vidă - - - Do you really want to use an empty string as password? - - - - Different passwords supplied. - Au fost introduse parole diferite. - - - Failed to set %1 as the Key file: -%2 - - - - Legacy key file format - - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - - - - Changing master key failed: no YubiKey inserted. + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. @@ -631,14 +835,6 @@ Please consider generating a new key file. Not present in CSV file - - Empty fieldname - Denumire câmp vidă - - - column - coloană - Imported from CSV file Importat din fișier CSV @@ -647,48 +843,85 @@ Please consider generating a new key file. Original data: Datele originale: - - Error(s) detected in CSV file ! - - - - more messages skipped] - - Error Eroare + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - +%1 - - CsvImportWizard - - Error - Eroare - - - Unable to calculate master key - Nu a putut fi calculată cheia principală - - CsvParserModel - %n byte(s), + %n column(s) + + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) - %n row(s), - %n rând, %n rânduri, %n rânduri, + %n row(s) + - - %n column(s) - %n coloană%n coloane%n coloane + + + Database + + Root + Root group name + Rădăcină + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + @@ -717,14 +950,6 @@ Please consider generating a new key file. Challenge Response: - - Unable to open the database. - Nu pot deschide baza de date. - - - Can't open key file - Fișierul cheie nu a putut fi deschis - Legacy key file format @@ -752,52 +977,248 @@ Please consider generating a new key file. Select key file Selectați fișier cheie - - - DatabaseRepairWidget - Repair database - Repară baza de date - - - Error - Eroare - - - Can't open key file - Fișierul cheie nu a putut fi deschis - - - Unable to open the database. - Baza de date nu poate fi deschisă. - - - Database opened fine. Nothing to do. + TouchID for quick unlock - Success - Succes - - - The database has been successfully repaired -You can now save it. + Unable to open the database: +%1 - Unable to repair the database. - Baza de date nu poate fi reparată. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Parole + + + + DatabaseSettingsDialog + + Advanced Settings + + General General - Encryption - Criptare + Security + Securitate + + + Master Key + + + + Encryption Settings + + + + Browser Integration + Integrare cu browserul + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + Înlătură + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + Anulează + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algoritm Criptare: + + + AES: 256 Bit (default) + AES: 256 Bit (implicit) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Funcție Derivare Cheie: + + + Transform rounds: + Runde de transformare: + + + Benchmark 1-second delay + + + + Memory Usage: + Utilizare Memorie: + + + Parallelism: + Paralelism: + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -847,40 +1268,15 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algoritm Criptare: + + %1 ms + milliseconds + - - AES: 256 Bit (default) - AES: 256 Bit (implicit) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Funcție Derivare Cheie: - - - Transform rounds: - Runde de transformare: - - - Benchmark 1-second delay - - - - Memory Usage: - Utilizare Memorie: - - - Parallelism: - Paralelism: + + %1 s + seconds + @@ -931,12 +1327,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Rădăcină + Sharing + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database Bază de date KeePass 2 @@ -949,33 +1416,13 @@ If you keep this number, your database may be too easy to crack! Open database Deschide baza de date - - File not found! - Fișierul nu a fost găsit - - - Unable to open the database. - Baza de date nu poate fi deschisă. - - - File opened in read only mode. - Fișier deschis doar pentru citire. - - - Open CSV file - Deschide fișier CSV - CSV file Fișier CSV - - All files (*) - Toate fișierele (*) - Merge database - Îmbina baza de date + Îmbină baza de date Open KeePass 1 database @@ -985,37 +1432,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database Bază de date KeePass 1 - - Close? - Închidere? - - - "%1" is in edit mode. -Discard changes and close anyway? - - - - Save changes? - Salvare modificări? - - - "%1" was modified. -Save changes? - "%1" a fost modificat. -Salvați modificările? - - - Writing the database failed. - Scrierea în baza de date a eșuat. - - - Passwords - Parole - - - Save database as - Salvează bază de date ca - Export database to CSV file Exportă baza de date în fișier CSV @@ -1025,35 +1441,39 @@ Salvați modificările? Scrierea în fișierul CSV a eșuat. - New database - Bază de date nouă - - - locked - blocat - - - Lock database - Blocare bază de date - - - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + Database creation error - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Disable safe saves? + The database file does not exist or is not accessible. - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier @@ -1063,38 +1483,14 @@ Disable safe saves and try again? Searching... Căutare... - - Change master key - Modifică cheia principală - - - Delete entry? - Stergeți intrarea? - Do you really want to delete the entry "%1" for good? - - Delete entries? - Ștergeți intrările? - - - Do you really want to delete %1 entries for good? - - - - Move entry to recycle bin? - Mutați intrarea în coșul de gunoi? - Do you really want to move entry "%1" to the recycle bin? - - Move entries to recycle bin? - Mutați intrările în coșul de gunoi? - Do you really want to move %n entry(s) to the recycle bin? @@ -1111,21 +1507,13 @@ Disable safe saves and try again? Remember my choice Ține minte alegerea mea - - Delete group? - Ștergeți grupul? - Do you really want to delete the group "%1" for good? - - Unable to calculate master key - Nu a putut fi calculată cheia principală - No current database. - Nu există o bază de date curentă. + Nu există o baza de date curentă. No source database, nothing to do. @@ -1156,10 +1544,6 @@ Disable safe saves and try again? Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - - Empty recycle bin? Goliți coșul de gunoi? @@ -1168,88 +1552,103 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? - - - DetailsWidget - - Generate TOTP Token - Generează token TOTP + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - Închide + File opened in read only mode. + Fișier deschis doar pentru citire. - General - General - - - Password - Parola - - - URL - URL - - - Expiration - Expirare - - - Username - Nume utilizator - - - Autotype + Lock Database? - Searching - Căutare + You are editing an entry. Discard changes and lock anyway? + - Attributes - Atribute + "%1" was modified. +Save changes? + "%1" a fost modificat. +Salvați modificările? - Attachments - Atașamente + Database was modified. +Save changes? + - Notes - Notițe + Save changes? + Salvare modificări? - Window - Fereastră + Could not open the new database file while attempting to autoreload. +Error: %1 + - Sequence - Secvență + Disable safe saves? + - Search - Caută + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + - Clear - Golește + Writing the database failed. +%1 + - Never - Niciodată + Passwords + Parole - [PROTECTED] - [PROTEJAT] + Save database as + Salvează bază de date ca - Disabled - Dezactivat + KeePass 2 Database + Bază de date KeePass 2 - Enabled - Activat + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + @@ -1322,21 +1721,9 @@ Do you want to merge your changes? New attribute Atribut nou - - Confirm Remove - Confirmați înlăturarea - Are you sure you want to remove this attribute? - Sigur doriți să eliminați acest atribut? - - - [PROTECTED] - [PROTEJAT] - - - Press reveal to view or edit - + Sunteți sigur că doriți să eliminați acest atribut? Tomorrow @@ -1344,15 +1731,11 @@ Do you want to merge your changes? %n week(s) - %n săptămână%n săptămâni%n săptămâni + %n month(s) - %n lună%n luni%n luni - - - 1 year - 1 an + Apply generated password? @@ -1366,6 +1749,26 @@ Do you want to merge your changes? Entry updated successfully. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1610,6 +2013,81 @@ Do you want to merge your changes? + + EditGroupWidgetKeeShare + + Form + Formular + + + Type: + + + + Path: + + + + ... + + + + Password: + Parola: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + EditGroupWidgetMain @@ -1667,10 +2145,6 @@ Do you want to merge your changes? Unable to fetch favicon. Nu pot descărca favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - - Images Imagini @@ -1679,14 +2153,6 @@ Do you want to merge your changes? All files Toate fișierele - - Select Image - Selectați imagine - - - Can't read icon - Nu pot citi icon - Custom icon already exists Icon personalizat deja există @@ -1696,9 +2162,37 @@ Do you want to merge your changes? Confirmați ștergerea - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + EditWidgetProperties @@ -1747,8 +2241,7 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries + %1 - Clone @@ -1767,7 +2260,7 @@ This may cause the affected plugins to malfunction. EntryAttachmentsWidget Form - Formular + De la Add @@ -1793,10 +2286,6 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - Confirm Remove - Confirmați înlăturarea - Save attachments Salvați atașamentele @@ -1830,10 +2319,14 @@ This may cause the affected plugins to malfunction. - Unable to open files: -%1 + Confirm remove + + Unable to open file(s): +%1 + + EntryAttributesModel @@ -1890,7 +2383,7 @@ This may cause the affected plugins to malfunction. Password - Parola + Parolă Notes @@ -1916,6 +2409,106 @@ This may cause the affected plugins to malfunction. Attachments Atașamente + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + Generează token TOTP + + + Close + Închide + + + General + General + + + Username + Nume utilizator + + + Password + Parola + + + Expiration + Expirare + + + URL + URL + + + Attributes + Atribute + + + Attachments + Atașamente + + + Notes + Notițe + + + Autotype + + + + Window + Fereastră + + + Sequence + Secvență + + + Searching + Căutare + + + Search + Caută + + + Clear + Golește + + + Never + Niciodată + + + [PROTECTED] + [PROTEJAT] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + Activat + + + Disabled + Dezactivat + + + Share + + EntryView @@ -1954,6 +2547,19 @@ This may cause the affected plugins to malfunction. Recycle Bin Coș de gunoi + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + HostInstaller @@ -1966,61 +2572,6 @@ This may cause the affected plugins to malfunction. - - HttpPasswordGeneratorWidget - - Length: - Lungime: - - - Character Types - Tipuri de caractere - - - Upper Case Letters - Litere mari - - - A-Z - A-Z - - - Lower Case Letters - Litere mici - - - a-z - a-z - - - Numbers - Numere - - - 0-9 - 0-9 - - - Special Characters - Caractere speciale - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Exclude caractere asemănătoare - - - Ensure that the password contains characters from every group - - - - Extended ASCII - - - KMessageWidget @@ -2046,6 +2597,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Cheie greșită sau fișier bază de date corupt. + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + Kdbx3Writer @@ -2204,10 +2775,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher @@ -2259,6 +2826,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2330,10 +2909,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid - - Unable to decrypt entry string - - Duplicate custom attribute found @@ -2383,6 +2958,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2546,55 +3127,126 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type - - - KeePass2 - AES: 256-bit - - - - Twofish: 256-bit - - - - ChaCha20: 256-bit - - - - AES-KDF (KDBX 4) - - - - AES-KDF (KDBX 3.1) - - - - Argon2 (KDBX 4 – recommended) + unable to seek to content position - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. + Disabled share - The lock file could not be created. Single-instance mode disabled. + Import from - Another instance of KeePassXC is already running. + Export to - Fatal error while testing the cryptographic functions. + Synchronize with + + + + + KeyComponentWidget + + Key Component - KeePassXC - Error - KeePassXC - Eroare + Key Component Description + + + + Cancel + Anulare + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Răsfoiește + + + Generate + Generează + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Fișiere cheie + + + All files + Toate fișierele + + + Create Key File... + Creare fișier cheie... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Selectați un fișier cheie @@ -2607,10 +3259,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases - - Import - - &Help @@ -2619,14 +3267,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries - - Copy att&ribute to clipboard - - - - Time-based one-time password - - &Groups @@ -2655,30 +3295,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database - - &New database - - - - Merge from KeePassX database - Îmbină dintr-o bază de date KeePass - - - &Add new entry - - - - &View/Edit entry - - &Delete entry - - &Add new group - - &Edit group @@ -2691,14 +3311,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... - - Change &master key... - - - - &Database settings - - Database settings Setări bază de date @@ -2707,10 +3319,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry - - &Find - - Copy &username @@ -2719,10 +3327,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard - - Cop&y password - - Copy password to clipboard @@ -2735,14 +3339,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator Generator de parole - - &Perform Auto-Type - - - - &Open URL - - &Lock databases @@ -2775,22 +3371,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... - - Import KeePass 1 database... - Importă bază de date KeePass 1... - - - Import CSV file... - Importă fișier CSV... - - - Re&pair database... - - - - Show TOTP - - Set up TOTP... @@ -2811,14 +3391,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - - Settings Setări @@ -2831,26 +3403,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC - - KeePass 2 Database - Bază de date KeePass 2 - - - All files - Toate fișierele - - - Open database - Deschide baza de date - - - Save repaired database - Salvează bază de date reparată - - - Writing the database failed. - Scrierea în baza de date a eșuat. - Please touch the button on your YubiKey! @@ -2861,6 +3413,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Rădăcină + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2962,123 +3775,33 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Dialog + Enter password: + Introdu parola: - This is required for accessing your databases from ChromeIPass or PassIFox + Confirm password: - Enable KeePassHTTP server - Actvați serverul KeePassHTTP + Password + Parola - General - General - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Password cannot be empty. - &Return only best matching entries + Passwords do not match. - Re&quest to unlock the database if it is locked - - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - - &Match URL schemes - - - - Sort matching entries by &username - - - - Sort &matching entries by title - - - - R&emove all shared encryption keys from active database - - - - Re&move all stored permissions from entries in active database - - - - Password Generator - Generator de parole - - - Advanced - Avansat - - - Always allow &access to entries - - - - Always allow &updating entries - - - - Only the selected database has to be connected with a client. - - - - Searc&h in all opened databases for matching entries - - - - Automatically creating or updating string fields is not supported. - - - - &Return advanced string fields which start with "KPH: " - - - - HTTP Port: - Port HTTP: - - - Default port: 19455 - Port implicit: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - - - - <b>Warning:</b> The following options can be dangerous! - - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password @@ -3149,18 +3872,10 @@ Using default port 19455. Wordlist: - - Word Count: - Număr cuvinte: - Word Separator: Separator cuvinte: - - Generate - Generează - Copy Copiază @@ -3173,10 +3888,6 @@ Using default port 19455. Close Închide - - Apply - Aplică - Entropy: %1 bit Entropie: %1 bit @@ -3205,6 +3916,171 @@ Using default port 19455. Password quality Excelent + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Avansat + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Șterge + + + Move + + + + Empty + + + + Remove + Înlătură + + + Skip + + + + Disable + Dezactivează + + + Merge + + QObject @@ -3224,34 +4100,18 @@ Using default port 19455. Cannot decrypt message - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - - Encryption key is not recognized - - No saved databases found - - Incorrect action @@ -3278,7 +4138,7 @@ Using default port 19455. Path of the database. - Calea către baza de date. + Calea către baza de date Key file of the database. @@ -3377,10 +4237,6 @@ Using default port 19455. Insert password to unlock %1: - - Failed to load key file %1 : %2 - - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3462,12 +4318,6 @@ Comenzi disponibile: error reading from device - - file empty ! - - fișier vid! - - malformed string @@ -3504,10 +4354,6 @@ Comenzi disponibile: Created - - Legacy Browser Integration - - Browser Integration Integrare cu browserul @@ -3536,10 +4382,6 @@ Comenzi disponibile: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3550,27 +4392,437 @@ Comenzi disponibile: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Eliminați o intrare din baza de date. + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + KeePassXC - Eroare + + + Database password: @@ -3609,11 +4861,97 @@ Comenzi disponibile: - SearchWidget + SSHAgent - Search... - Caută... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Caută @@ -3622,311 +4960,317 @@ Comenzi disponibile: Clear Golește - - Case Sensitive - - Limit search to selected group Limitați căutarea la grupul selectat + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request + Active - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Allow export - KeePassXC: Overwrite existing key? - KeePassXC: Suprascriere cheie existentă? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Allow import - KeePassXC: Update Entry + Own certificate - Do you want to update the information in %1 - %2? + Fingerprint: - KeePassXC: Database locked! + Certificate: - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Signer - KeePassXC: Removed keys from database + Key: + Cheie: + + + Generate + Generează + + + Import + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Înlătură + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Toate fișierele + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + Niciodată + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + Parolă temporizată + + + 000000 + 000000 + + + Copy + Copiază + - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) + + + TotpExportSettingsDialog - KeePassXC: No keys found + Copy + Copiază + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - No shared encryption-keys found in KeePassHttp Settings. + There was an error creating the QR code. - KeePassXC: Settings not available! - - - - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - - - - Abort - Anulează - - - KeePassXC: Removed permissions - - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - - - - The active database does not contain an entry with permissions. + Closing in %1 seconds. - SettingsWidget - - Application Settings - Setări aplicație - - - General - General - - - Security - Securitate - - - Access error for config file %1 - - - - - SettingsWidgetGeneral - - Basic Settings - Setări de bază - - - Start only a single instance of KeePassXC - - - - Remember last databases - Memorează ultimele baze de date - - - Remember last key files and security dongles - - - - Load previous databases on startup - - - - Automatically save on exit - Salvare automată la ieșire - - - Automatically save after every change - - - - Automatically reload the database when modified externally - - - - Minimize when copying to clipboard - - - - Minimize window at application startup - - - - Use group icon on entry creation - - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Hide the Details view - - - - Show a system tray icon - - - - Hide window to system tray when minimized - - - - Hide window to system tray instead of app exit - - - - Dark system tray icon - - - - Language - Limbă - - - Auto-Type - - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Global Auto-Type shortcut - - - - Auto-Type delay - - - - ms - Milliseconds - ms - - - Startup - - - - File Management - - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - - - - Entry Management - - - - General - General - - - - SettingsWidgetSecurity - - Timeouts - - - - Clear clipboard after - Golește clipboard după - - - sec - Seconds - sec - - - Lock databases after inactivity of - - - - Convenience - Comoditate - - - Lock databases when session is locked or lid is closed - - - - Lock databases after minimizing the window - - - - Don't require password repeat when it is visible - - - - Show passwords in cleartext by default - - - - Hide passwords in the preview panel - - - - Hide entry notes by default - - - - Privacy - Confidențialitate - - - Use Google as fallback for downloading website icons - Folosește Google ca variantă de rezervă pentru descărcare favicon site - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Configurați TOTP @@ -3948,7 +5292,7 @@ Please unlock the selected database or choose another one which is unlocked.Utilizați setările personalizate - Note: Change these settings only if you know what you are doing. + Custom Settings @@ -3956,51 +5300,76 @@ Please unlock the selected database or choose another one which is unlocked. - 8 digits - 8 cifre - - - 6 digits - 6 cifre + sec + Seconds + sec Code size: Dimensiune cod: - sec - Seconds - sec + 6 digits + 6 cifre + + + 7 digits + + + + 8 digits + 8 cifre - TotpDialog + UpdateCheckDialog - Timed Password - Parolă temporizată + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - Copiază + Close + Închide - Expires in - Expiră în + Update Error! + - seconds - secunde + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - Deblocare bază de date + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4035,41 +5404,25 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - Eliminați o intrare din baza de date. + Refresh + Actualizează - Path of the database. - Calea către baza de date - - - Path of the entry to remove. + YubiKey Challenge-Response - KeePassXC - cross-platform password manager + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - filenames of the password databases to open (*.kdbx) + No YubiKey detected, please ensure it's plugged in. - path to a custom config file - - - - key file of the database - - - - read password of the database from stdin - - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_ru.ts b/share/translations/keepassx_ru.ts index 14f0590d4..10b78f00d 100644 --- a/share/translations/keepassx_ru.ts +++ b/share/translations/keepassx_ru.ts @@ -15,7 +15,7 @@ KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - KeePassXC распространяется на условиях Стандартной общественной лицензии GNU (GPL) версии 2 или (на ваше усмотрение) версии 3. + KeePassXC распространяется на условиях универсальной общественной лицензии GNU (GPL) версии 2 или 3 (на ваше усмотрение). Contributors @@ -31,42 +31,12 @@ Include the following information whenever you report a bug: - Включите следующую информацию, когда сообщаете об ошибке: + Добавьте в сообщение об ошибке следующую информацию: Copy to clipboard Скопировать в буфер обмена - - Version %1 - - Версия %1 - - - - Revision: %1 - Ревизия: %1 - - - Distribution: %1 - Дистрибутив: %1 - - - Libraries: - Библиотеки: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Операционная система: %1 -Архитектура CPU: %2 -Ядро: %3 %4 - - - Enabled extensions: - Включенные расширения: - Project Maintainers: Проект сопровождают: @@ -75,43 +45,283 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Команда KeePassXC выражает особую благодарность debfx за создание оригинального KeePassX. - - Build Type: %1 - - Тип сборки: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - Подтверждение доступа к KeePassXC HTTP - - - Remember this decision - Запомнить это решение - - - Allow - Разрешить - - - Deny - Запретить - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 запросил доступ к паролям для следующего элемента(ов). -Разрешить доступ? - AgentSettingsWidget Enable SSH Agent (requires restart) - Включить SSH агент (необходим перезапуск) + Включить SSH-агент (необходим перезапуск) + + + Use OpenSSH for Windows instead of Pageant + Использовать OpenSSH для Windows вместо Pageant + + + + ApplicationSettingsWidget + + Application Settings + Параметры приложения + + + General + Общие + + + Security + Безопасность + + + Access error for config file %1 + Ошибка доступа к файлу конфигурации %1 + + + Icon only + Только значок + + + Text only + Только текст + + + Text beside icon + Текст рядом со значком + + + Text under icon + Текст под значком + + + Follow style + Следовать стилю + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Основные параметры + + + Startup + Запуск + + + Start only a single instance of KeePassXC + Запускать только один экземпляр KeePassXC + + + Remember last databases + Запоминать последнюю базу данных + + + Remember last key files and security dongles + Запоминать последние использованные ключевые файлы и устройства + + + Load previous databases on startup + Загружать предыдущие базы данных при запуске + + + Minimize window at application startup + Сворачивать окно при запуске приложения + + + File Management + Управление файлами + + + Safely save database files (may be incompatible with Dropbox, etc) + Безопасное сохранение файлов базы данных (возможна несовместимость с Dropbox и др.) + + + Backup database file before saving + Создавать резервную копию базы данных перед сохранением + + + Automatically save after every change + Автоматически сохранять после каждого изменения + + + Automatically save on exit + Автоматически сохранять при выходе + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Не помечать базу данных изменённой при действиях, не связанных с изменением данных (например при распахивании групп) + + + Automatically reload the database when modified externally + Автоматически перезагружать базу данных при её изменении извне + + + Entry Management + Управление записями + + + Use group icon on entry creation + Использовать значок группы для новых записей + + + Minimize when copying to clipboard + Сворачивать при копировании в буфер обмена + + + Hide the entry preview panel + Скрыть панель предварительного просмотра записи + + + General + Общие + + + Hide toolbar (icons) + Скрыть панель инструментов (иконки) + + + Minimize instead of app exit + Сворачивать вместо закрытия программы + + + Show a system tray icon + Значок в области уведомлений + + + Dark system tray icon + Тёмный значок в области уведомлений + + + Hide window to system tray when minimized + При сворачивании скрывать окно в область уведомлений + + + Language + Язык + + + Auto-Type + Автоввод + + + Use entry title to match windows for global Auto-Type + Использовать название записи для глобального автоввода + + + Use entry URL to match windows for global Auto-Type + Использовать URL-адрес для глобального автоввода + + + Always ask before performing Auto-Type + Всегда спрашивать перед автовводом + + + Global Auto-Type shortcut + Комбинация клавиш для глобального автоввода + + + Auto-Type typing delay + Задержка автоввода + + + ms + Milliseconds + мс + + + Auto-Type start delay + Задержка начала автоввода + + + Check for updates at application startup + Проверять обновления при запуске приложения + + + Include pre-releases when checking for updates + Включать предварительные версии при проверке обновлений + + + Movable toolbar + Передвижная панель инструментов + + + Button style + Стиль кнопок + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Таймауты + + + Clear clipboard after + Очищать буфер обмена через + + + sec + Seconds + сек + + + Lock databases after inactivity of + Блокировать базу данных при отсутствии активности в течение + + + min + мин + + + Forget TouchID after inactivity of + Забыть TouchID после неактивности + + + Convenience + Удобство + + + Lock databases when session is locked or lid is closed + Блокировать базу данных при блокировке сеанса или закрытии крышки ноутбука + + + Forget TouchID when session is locked or lid is closed + Забыть TouchID, когда сеанс заблокирован или крышка закрыта + + + Lock databases after minimizing the window + Блокировать базу данных при сворачивании окна + + + Re-lock previously locked database after performing Auto-Type + Заблокировать базу данных после автоввода + + + Don't require password repeat when it is visible + Не требовать повторный ввод пароля, когда он показывается + + + Don't hide passwords when editing them + Не скрывать пароли при их изменении + + + Don't use placeholder for empty password fields + Не использовать заполнитель для полей с пустым паролем + + + Hide passwords in the entry preview panel + Скрывать пароли в панели предварительного просмотра записи + + + Hide entry notes by default + Скрыть примечания записи по умолчанию + + + Privacy + Конфиденциальность + + + Use DuckDuckGo as fallback for downloading website icons + Использовать DuckDuckGo как резервный источник для скачивания значков сайта @@ -134,15 +344,15 @@ Please select whether you want to allow access. This Auto-Type command contains a very long delay. Do you really want to proceed? - Слишком большая задержка в инструкции автоввода. Действительно продолжить? + Слишком большая задержка в команде автоввода. Действительно продолжить? This Auto-Type command contains very slow key presses. Do you really want to proceed? - Инструкция автоввода содержит очень медленные нажатия клавиш. Вы действительно хотите продолжить? + Команда автоввода содержит очень медленные нажатия клавиш. Действительно продолжить? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - Эта команда автоввода содержит часто повторяющиеся аргументы. Вы действительно хотите продолжить? + Команда автоввода содержит часто повторяющиеся аргументы. Действительно продолжить? @@ -211,10 +421,31 @@ Please select whether you want to allow access. %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. - %1 запросил доступ к паролям для следующего элемента(-ов). + %1 запросил доступ к паролям для следующих элементов. Разрешить доступ? + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser сохранить запись + + + Ok + Ok + + + Cancel + Отмена + + + You have multiple databases open. +Please select the correct database for saving credentials. + У вас открыто несколько баз данных. +Пожалуйста, выберите нужную базу данных для сохранения учетных данных. + + BrowserOptionDialog @@ -281,21 +512,13 @@ Please select whether you want to allow access. Sort &matching credentials by title Credentials mean login data requested via browser extension - Сортировать &подходящие учетные данные по названию + Сортировать &подходящие учётные данные по названию Sort matching credentials by &username Credentials mean login data requested via browser extension Сортировать по &имени пользователя - - &Disconnect all browsers - &Отключить все браузеры - - - Forget all remembered &permissions - Забыть все &разрешения - Advanced Дополнительные @@ -308,7 +531,7 @@ Please select whether you want to allow access. Never ask before &updating credentials Credentials mean login data requested via browser extension - Никогда не спрашивать перед &обновлением учетных данных + Не спрашивать перед &обновлением учётных данных Only the selected database has to be connected with a client. @@ -317,7 +540,7 @@ Please select whether you want to allow access. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - &Поиск во всех открытых базах данных для сопоставления учетных данных + &Поиск во всех открытых базах для сопоставления учётных данных Automatically creating or updating string fields is not supported. @@ -337,15 +560,15 @@ Please select whether you want to allow access. Support a proxy application between KeePassXC and browser extension. - Поддержка прокси приложения между KeePassXC и расширением браузера. + Поддержка прокси-приложения между KeePassXC и расширением браузера. Use a &proxy application between KeePassXC and browser extension - Использование &прокси приложения между KeePassXC и расширением браузера + Использование &прокси-приложения между KeePassXC и расширением браузера Use a custom proxy location if you installed a proxy manually. - Использовать пользовательский путь к прокси, если вы установили прокси вручную. + Использовать пользовательский путь к прокси при установке прокси вручную. Use a &custom proxy location @@ -359,23 +582,44 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! - <b>Предупреждение:</b> Следующие параметры могут быть опасны! - - - Executable Files (*.exe);;All Files (*.*) - Исполняемые файлы (*.exe);;Все файлы (*.*) - - - Executable Files (*) - Исполняемые файлы (*) + <b>ВНИМАНИЕ:</b> Следующие параметры могут быть опасны! Select custom proxy location Выбрать другое расположение прокси - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Извините, но KeePassXC-Browser не поддерживается для Snap выпусков на данный момент. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Предупреждение</b>, приложение keepassxc-proxy не найдено! <br /> Проверьте каталог установки KeePassXC или установите пользовательский путь в расширенные настройках. <br />Интеграция браузера не будет работы без прокси приложения. <br />Ожидаемый путь: + + + Executable Files + Исполняемые файлы + + + All Files + Все файлы + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Не спрашивать разрешения для HTTP и Basic авторизации + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -405,8 +649,8 @@ give it a unique name to identify and accept it. A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - Разделяемый секретный ключ с именем "%1" уже существует. -Вы действительно хотите перезаписать его? + Общий секретный ключ с именем "%1" уже существует. +Вы действительно хотите его перезаписать? KeePassXC: Update Entry @@ -416,153 +660,55 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? Обновить информацию в %1 — %2? - - KeePassXC: Database locked! - KeePassXC: База данных заблокирована! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Активная база данных заблокирована! -Разблокируйте выбранную базу данных или выберите другую, незаблокированную. - - - KeePassXC: Settings not available! - KeePassXC: Параметры недоступны! - - - The active database does not contain a settings entry. - В базе данных отсутствует запись с настройками. - - - KeePassXC: No keys found - KeePassXC: Ключи не найдены - - - No shared encryption keys found in KeePassXC Settings. - Разделяемые секретные ключи не найдены в настройках KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: Ключи удалены из базы данных - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Успешно удален %n ключ шифрования из параметров KeePassXC.Успешно удалено %n ключей шифрования из параметров KeePassXC.Успешно удалено %n ключей шифрования из параметров KeePassXC.Успешно удалено %n ключей шифрования из параметров KeePassXC. - - - Removing stored permissions… - Удаление сохраненных разрешений... - Abort Прервать - KeePassXC: Removed permissions - KeePassXC: Права доступа удалены + Converting attributes to custom data… + Преобразование атрибутов в пользовательских данных... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Атрибуты KeePassHTTP преобразованы + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Успешно преобразованы атрибуты из %1 записи(ей). +%2 ключей перемещены в пользовательские данные. - Successfully removed permissions from %n entry(s). - Успешно удалены доступы для %n записи.Успешно удалены доступы для %n записей.Успешно удалены доступы для %n записей.Успешно удалены доступы для %n записей. + Successfully moved %n keys to custom data. + Успешно переехал %n ключи пользовательских данных.Успешно переехал %n ключи пользовательских данных.Успешно переехал %n ключи пользовательских данных.Успешно перемещено %n ключей в пользовательские данные. - KeePassXC: No entry with permissions found! - KeePassXC: Не найдена запись с правами доступа! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Не найдено записи с атрибутами KeePassHTTP! - The active database does not contain an entry with permissions. - Активная база данных не содержит записей с назначенными правами доступа. - - - - ChangeMasterKeyWidget - - Password - Пароль + The active database does not contain an entry with KeePassHTTP attributes. + Активная база данных не содержит запись с атрибутами KeePassHTTP. - Enter password: - Введите пароль: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Устаревшая интеграция с браузером обнаружена - Repeat password: - Повторите пароль: + KeePassXC: Create a new group + - &Key file - &Ключ-файл + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Обзор - - - Create - Создать - - - Cha&llenge Response - Запрос ответа - - - Refresh - Обновить - - - Key files - Файлы-ключи - - - All files - Все файлы - - - Create Key File... - Создать ключ-файл... - - - Unable to create Key File : - Невозможно создать ключ-файл: - - - Select a key file - Выбрать ключ-файл - - - Empty password - Пустой пароль - - - Do you really want to use an empty string as password? - Вы действительно хотите использовать в качестве пароля пустую строку? - - - Different passwords supplied. - Пароли не совпадают. - - - Failed to set %1 as the Key file: -%2 - Не удалось установить %1 как файл-ключ: -%2 - - - Legacy key file format - Устаревший формат ключевого файла - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Вы используете устаревший формат ключевого файла, поддержка которого может быть прекращена в будущем. - -Рассмотрите возможность создания нового ключевого файла. - - - Changing master key failed: no YubiKey inserted. - Не удалось сменить мастер-ключ: ни один YubiKey не вставлен. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -592,11 +738,11 @@ Please consider generating a new key file. filename - Имя файла + имя файла size, rows, columns - размер, строк, столбцов + размер, строк, столбцов Encoding @@ -604,7 +750,7 @@ Please consider generating a new key file. Codec - Кодек + Кодировка Text is qualified by @@ -612,95 +758,127 @@ Please consider generating a new key file. Fields are separated by - Параметры разделены + Разделитель полей Comments start with - Комментарии начинаются с + Символ начала комментария First record has field names - Первая запись полей + Первая запись содержит имена полей Number of headers line to discard - Количество строк заголовков для удаления + Пропустить строк в начале Consider '\' an escape character - Рассматривать маскирующим символом «\» + Символ «\» является экранирующим Preview - Предпросмотр + Предварительный просмотр Column layout - Расположение столбцов + Назначение столбцов Not present in CSV file - Отсутствует в CSV файле - - - Empty fieldname - Пустое поле - - - column - Столбец + Отсутствует в CSV-файле Imported from CSV file - Импортировано из CSV файла + Импортировано из CSV-файла Original data: Исходные данные: - - Error(s) detected in CSV file ! - Обнаружена ошибка в файле CSV! - - - more messages skipped] - пропущено больше сообщений] - Error Ошибка + + Empty fieldname %1 + Пустое имя поле %1 + + + column %1 + колонке %1 + + + Error(s) detected in CSV file! + В CSV-файле обнаруженны ошибки! + + + [%n more message(s) skipped] + [%n больше сообщений пропущен][%n больше сообщений пропущен][%n больше сообщений пропущен][%n сообщений пропущено] + CSV import: writer has errors: - - Импорт CSV: у записи есть ошибки: - - - - - CsvImportWizard - - Error - Ошибка - - - Unable to calculate master key - Невозможно вычислить мастер-пароль +%1 + Импорт CSV: запись была с ошибками: %1 CsvParserModel - - %n byte(s), - %n байт, %n байт(а), %n байт(а), %n байт(а), - - - %n row(s), - %n строка, %n строк, %n строк, %n строк, - %n column(s) - %n столбец%n столбцов%n столбцов%n столбцов + %n столбцов%n столбцов%n столбцов%n столбцов + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n байт(ов)%n байт(ов)%n байт(ов)%n байт(ов) + + + %n row(s) + %n строка%n строк%n строк%n строк + + + + Database + + Root + Root group name + Корень + + + File %1 does not exist. + Файл %1 не существует. + + + Unable to open file %1. + Не удается открыть файл %1. + + + Error while reading the database: %1 + Ошибка при чтении базы данных: %1 + + + Could not save, database has no file name. + Не удалось сохранить, отсутствует имя у файла базы данных. + + + File cannot be written as it is opened in read-only mode. + Файл не может быть перезаписан, т.к. он открыт в режиме "только для чтения". + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Разблокировать базу данных - KeePassXC @@ -711,7 +889,7 @@ Please consider generating a new key file. Key File: - Ключ-файл: + Ключевой файл: Password: @@ -727,15 +905,7 @@ Please consider generating a new key file. Challenge Response: - Запрос ответа: - - - Unable to open the database. - Невозможно открыть базу данных. - - - Can't open key file - Не удается открыть ключ-файл + Вызов-ответ: Legacy key file format @@ -746,9 +916,9 @@ Please consider generating a new key file. unsupported in the future. Please consider generating a new key file. - Вы используете устаревший формат ключевого файла, поддержка которого может быть прекращена в будущем. + Вы используете ключевой файл устаревшего формата, поддержка которого может быть прекращена в будущем. -Рассмотрите возможность создания нового ключевого файла. +По возможности создайте новый ключевой файл. Don't show this warning again @@ -760,111 +930,180 @@ Please consider generating a new key file. Key files - Ключ-файлы + Ключевые файлы Select key file - Выберите файл-ключ + Выберите ключевой файл + + + TouchID for quick unlock + TouchID для быстрой разблокировки + + + Unable to open the database: +%1 + Не удается открыть базу данных: +%1 + + + Can't open key file: +%1 + Не удается открыть ключевой файл: +%1 - DatabaseRepairWidget + DatabaseSettingWidgetMetaData - Repair database - Восстановить базу данных - - - Error - Ошибка - - - Can't open key file - Не могу открыть файл-ключ - - - Unable to open the database. - Невозможно открыть базу данных. - - - Database opened fine. Nothing to do. - База данных открылось прекрасно. Больше нечего делать. - - - Success - Успешно - - - The database has been successfully repaired -You can now save it. - База данных была восстановлена. -Теперь можете сохранить её. - - - Unable to repair the database. - Невозможно восстановить базу данных. + Passwords + Пароли - DatabaseSettingsWidget + DatabaseSettingsDialog + + Advanced Settings + Дополнительные параметры + General Общие - Encryption - Шифрование + Security + Безопасность - Number of rounds too high - Key transformation rounds - Слишком много раундов + Master Key + Мастер ключ - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! - Используется слишком большое количество раундов преобразования ключа Argon2. - -При сохранении этого значение открытие базы данных может занять часы или дни (или даже больше)! + Encryption Settings + Параметры шифрования - Understood, keep number - Понятно, сохранить значение + Browser Integration + Интеграция с браузером + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Настройки KeePassXC-Browser - Cancel - Отмена + &Disconnect all browsers + &Отключить все браузеры - Number of rounds too low - Key transformation rounds - Слишком мало раундов + Forg&et all site-specific settings on entries + Забыть все сайтоспецифические настройки записей - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! - Вы используете слишком мало раундов преобразования ключа AES-KDF. - -При сохранении этого значения, база данных может быть взломана слишком легко! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Переместить аттрибуты KeePassHTTP в пользовательские данные KeePassXC-Browser - KDF unchanged - ФФК не изменена + Stored keys + Сохраненные ключи - Failed to transform key with new KDF parameters; KDF unchanged. - Ошибка преобразования ФФК с новыми параметрами; ФФК не изменена. + Remove + Удалить + + + Delete the selected key? + Удалить выбранный ключ? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Вы действительно хотите удалить выбранный ключ? +Это может воспрепятствовать соединению с плагином браузера. + + + Key + Ключ + + + Value + Значение + + + Enable Browser Integration to access these settings. + Для доступа к этим параметрам требуется включить интеграцию с браузером. + + + Disconnect all browsers + Отключить все браузеры + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Вы действительно хотите отсоединить все браузеры? +Это может воспрепятствовать соединению с плагином браузера. + + + KeePassXC: No keys found + KeePassXC: Ключи не найдены + + + No shared encryption keys found in KeePassXC settings. + Не найдены разделяемые секретные ключи в настройках KeePassXC. + + + KeePassXC: Removed keys from database + KeePassXC: Ключи удалены из базы данных - MiB - Abbreviation for Mebibytes (KDF settings) - МиБМиБМиБМиБ + Successfully removed %n encryption key(s) from KeePassXC settings. + Успешно удалён %n ключ шифрования из настроек KeePassXC.Успешно удалёны %n ключа шифрования из настроек KeePassXC.Успешно удалёны %n ключей шифрования из настроек KeePassXC.Успешно удалён(ы) %n ключ(ей) шифрования из настроек KeePassXC. + + + Forget all site-specific settings on entries + Забыть все сайтоспецифические настройки записей + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Вы действительно хотите забыть все настройки сайта для каждой записи? +Разрешения на доступ к записи будет отменено. + + + Removing stored permissions… + Удаление сохранённых разрешений... + + + Abort + Прервать + + + KeePassXC: Removed permissions + KeePassXC: Разрешения удалены - thread(s) - Threads for parallel execution (KDF settings) - потокпотоковпотоковпоток(ов) + Successfully removed permissions from %n entry(s). + Успешно удалено разрешение от %n записи.Успешно удалены разрешения от %n записей.Успешно удалены разрешения от %n записей.Успешно удалены разрешения от %n записей. + + + KeePassXC: No entry with permissions found! + KeePassXC: Не найдена запись с разрешениями! + + + The active database does not contain an entry with permissions. + Активная база данных не содержит записей с разрешениями. + + + Move KeePassHTTP attributes to custom data + Переместить аттрибуты KeePassHTTP в пользовательские данные + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Вы действительно хотите привести все устаревшие данные интеграции браузера к новейшему стандарту? +Это необходимо для поддержания совместимости с плагином браузера. @@ -887,7 +1126,7 @@ If you keep this number, your database may be too easy to crack! Transform rounds: - Раундов преобразований: + Раундов преобразования: Benchmark 1-second delay @@ -901,6 +1140,113 @@ If you keep this number, your database may be too easy to crack! Parallelism: Параллелизм: + + Decryption Time: + Время расшифровки: + + + ?? s + ?? с + + + Change + Изменить + + + 100 ms + 100 мс + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Более высокие значения дают более высокий уровень защиты, но открытие базы данных займет больше времени. + + + Database format: + Формат базы данных: + + + This is only important if you need to use your database with other programs. + Это важно только если Вам нужно использовать вашу базу данных с другими программами. + + + KDBX 4.0 (recommended) + KDBX 4.0 (рекомендуется) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + без изменений + + + Number of rounds too high + Key transformation rounds + Слишком много раундов + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + Слишком большое число раундов преобразования ключа Argon2. + +Если оставить это значение, открытие базы данных может занять часы, дни или даже больше! + + + Understood, keep number + Понятно, сохранить значение + + + Cancel + Отмена + + + Number of rounds too low + Key transformation rounds + Слишком мало раундов + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + Слишком мало раундов преобразования ключа AES-KDF. + +Если оставить это значение, базу данных можно будет слишком легко взломать! + + + KDF unchanged + ФФК не изменена + + + Failed to transform key with new KDF parameters; KDF unchanged. + Ошибка преобразования ФФК с новыми параметрами; ФФК не изменена. + + + MiB + Abbreviation for Mebibytes (KDF settings) + МиБ МиБ МиБ МиБ + + + thread(s) + Threads for parallel execution (KDF settings) + потоков потоков потоков потоков + + + %1 ms + milliseconds + %1 мс%1 мс%1 мс%1 мс + + + %1 s + seconds + %1 s%1 s%1 s%1 c + DatabaseSettingsWidgetGeneral @@ -926,7 +1272,7 @@ If you keep this number, your database may be too easy to crack! Max. history items: - Макс. количество записей истории: + Максимум записей в истории: Max. history size: @@ -934,7 +1280,7 @@ If you keep this number, your database may be too easy to crack! MiB - МиБ + МиБ Use recycle bin @@ -950,12 +1296,85 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Корень + Sharing + Совместное использование + + Breadcrumb + Цепочка + + + Type + Тип + + + Path + Путь + + + Last Signer + Последний подписавшийся + + + Certificates + Сертификаты + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Добавить дополнительную защиту... + + + No encryption key added + Ключ шифрования не добавлен + + + You must add at least one encryption key to secure your database! + Вы должны добавить по крайней мере один ключ шифрования, чтобы обезопасить вашу базу данных! + + + No password set + Пароль не установлен + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + ВНИМАНИЕ! Вы не установили пароль. Мы настоятельно отговариваем Вас от использования базы данных без пароля! + +Вы уверены, что хотите продолжить без пароля? + + + Unknown error + Неизвестная ошибка + + + Failed to change master key + Не удалось сменить мастер ключ + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Имя базы данных: + + + Description: + Описание: + + + + DatabaseTabWidget KeePass 2 Database База данных KeePass 2 @@ -968,30 +1387,10 @@ If you keep this number, your database may be too easy to crack! Open database Открыть базу данных - - File not found! - Файл не найден! - - - Unable to open the database. - Не удаётся открыть базу данных. - - - File opened in read only mode. - Файл открыт в режиме только для чтения. - - - Open CSV file - Открыть файл CSV - CSV file Файл CSV - - All files (*) - Все файлы (*) - Merge database Объединить базу данных @@ -1004,81 +1403,50 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database База данных KeePass 1 - - Close? - Закрыть? - - - "%1" is in edit mode. -Discard changes and close anyway? - «%1» в режиме правки. -Отменить изменения и всё равно закрыть? - - - Save changes? - Сохранить изменения? - - - "%1" was modified. -Save changes? - «%1» изменён. -Сохранить изменения? - - - Writing the database failed. - Не удалось записать базу данных. - - - Passwords - Пароли - - - Save database as - Сохранить базу данных как - Export database to CSV file Экспортировать базу данных в файл CSV Writing the CSV file failed. - Не удалось записать CSV файл. + Не удалось записать CSV-файл. - New database + Database creation error + Ошибка создания базы данных + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + Созданная база данных не имеет ключа или ФФК, отказываюсь сохранять её. +Это определённо баг, пожалуйста, сообщите о нём разработчикам. + + + The database file does not exist or is not accessible. + Файл базы данных не существует или недоступен. + + + Select CSV file + Выберать CSV-файл + + + New Database Новая база данных - locked - заблокировано + %1 [New Database] + Database tab name modifier + %1 [Новая база данных] - Lock database - Заблокировать базу данных + %1 [Locked] + Database tab name modifier + %1 [Заблокировано] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Невозможно заблокировать базу данных, так как вы в настоящее время редактируете её. -Нажмите Отмена, чтобы завершить изменения или отклонить их. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - База данных была изменена. -Сохранить её перед тем, как заблокировать? -В противном случае все изменения будут потеряны. - - - Disable safe saves? - Отключить безопасное сохранение? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC не удалось сохранить базу данных несколько раз. Это могло быть вызвано службами синхронизации файлов, выполняющими блокировку сохранения файла. -Отключить безопасное сохранение и повторить попытку? + %1 [Read-only] + Database tab name modifier + %1 [Только для чтения] @@ -1087,41 +1455,17 @@ Disable safe saves and try again? Searching... Поиск... - - Change master key - Изменить мастер-пароль - - - Delete entry? - Удалить запись? - Do you really want to delete the entry "%1" for good? Удалить навсегда запись «%1»? - - Delete entries? - Удалить записи? - - - Do you really want to delete %1 entries for good? - Удалить навсегда %1 записей? - - - Move entry to recycle bin? - Переместить запись в корзину? - Do you really want to move entry "%1" to the recycle bin? Переместить запись «%1» в корзину? - - Move entries to recycle bin? - Поместить записи в корзину? - Do you really want to move %n entry(s) to the recycle bin? - Вы действительно хотите поместить %n запись в корзину?Вы действительно хотите поместить %n записи в корзину?Вы действительно хотите поместить %n записей в корзину?Вы действительно хотите поместить %n записей в корзину? + Вы действительно хотите переместить %n entry(s) в корзину?Вы действительно хотите переместить %n entry(s) в корзину?Вы действительно хотите переместить %n entry(s) в корзину?Вы действительно хотите переместить записи (%n) в корзину? Execute command? @@ -1135,18 +1479,10 @@ Disable safe saves and try again? Remember my choice Запомнить мой выбор - - Delete group? - Удалить группу? - Do you really want to delete the group "%1" for good? Удалить навсегда группу «%1»? - - Unable to calculate master key - Невозможно вычислить мастер-пароль - No current database. Нет текущей базы данных. @@ -1165,11 +1501,11 @@ Disable safe saves and try again? File has changed - Файл был изменен + Файл изменён The database file has changed. Do you want to load the changes? - Файл базу данных изменился. Загрузить изменения? + Файл базы данных был изменён. Загрузить изменения? Merge Request @@ -1178,12 +1514,8 @@ Disable safe saves and try again? The database file has changed and you have unsaved changes. Do you want to merge your changes? - База данных была изменена, а также присутствуют несохраненные изменения. -Вы хотите объединить изменения? - - - Could not open the new database file while attempting to autoreload this database. - Не удалось открыть новый файл базы данных при попытке автоматической перезагрузки этой базы данных. + База данных была изменена, есть несохранённые изменения. +Объединить изменения? Empty recycle bin? @@ -1191,90 +1523,113 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? - Удалить все из корзины? + Удалить всё из корзины? - - - DetailsWidget - - Generate TOTP Token - Генерировать TOTP токен + + Do you really want to delete %n entry(s) for good? + Вы действительно хотите удалить %n запись насовсем?Вы действительно хотите удалить %n записи насовсем?Вы действительно хотите удалить %n записей насовсем?Вы действительно хотите удалить %n запись(ей) насовсем? + + + Delete entry(s)? + Удалить запись?Удалить записи?Удалить записи?Удалить запись(и)? + + + Move entry(s) to recycle bin? + Переместить запись в корзину?Переместить записи в корзину?Переместить записи в корзину?Переместить запись(и) в корзину? - Close - Закрыть + File opened in read only mode. + Файл открыт в режиме только для чтения. - General - Общие + Lock Database? + Заблокировать базу данных? - Password - Пароль + You are editing an entry. Discard changes and lock anyway? + Вы редактируете запись. Сбросить изменения и заблокировать в любом случае? - URL - URL-адрес + "%1" was modified. +Save changes? + «%1» изменён. +Сохранить изменения? - Expiration - Срок действия + Database was modified. +Save changes? + База данных была изменена. +Сохранить изменения? - Username - Имя пользователя + Save changes? + Сохранить изменения? - Autotype - Автоввод + Could not open the new database file while attempting to autoreload. +Error: %1 + Не удалось открыть новый файл базы данных во время попытки автоматической перезагрузки. +Ошибка: %1 - Searching - Поиск + Disable safe saves? + Отключить безопасное сохранение? - Attributes - Атрибуты + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC несколько раз не удалось сохранить базу данных. Это могло быть вызвано службами синхронизации файлов, блокирующими файл при сохранении. +Отключить безопасное сохранение и повторить попытку? - Attachments - Вложения + Writing the database failed. +%1 + Не удалось записать базу данных. +%1 - Notes - Примечания + Passwords + Пароли - Window - Окно + Save database as + Сохранить базу данных как - Sequence - Последовательность + KeePass 2 Database + База данных KeePass 2 - Search - Поиск + Replace references to entry? + Заменить ссылки на запись? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Запись "%1" имеет %2 ссылку. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?Запись "%1" имеет %2 ссылки. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?Запись "%1" имеет %2 ссылок. Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае?Запись "%1" имеет %2 ссылку(ки, ок). Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае? - Clear - Очистить + Delete group + Удалить группу - Never - Никогда + Move group to recycle bin? + Переместить группу в корзину? - [PROTECTED] - [ЗАЩИЩЕННЫЙ] + Do you really want to move the group "%1" to the recycle bin? + Вы действительно хотите переместить группу "%1" в корзину? - Disabled - Отключено + Successfully merged the database files. + Слияние файлов баз данных прошло успешно. - Enabled - Включено + Database was not modified by merge operation. + База данных не была изменена операцией слияния. + + + Shared group... + @@ -1285,7 +1640,7 @@ Do you want to merge your changes? Advanced - Расширенные + Дополнительные Icon @@ -1305,7 +1660,7 @@ Do you want to merge your changes? SSH Agent - SSH Агент + SSH-агент n/a @@ -1317,15 +1672,15 @@ Do you want to merge your changes? Select private key - Выберите закрытый ключ + Выберите частный ключ File too large to be a private key - Слишком большой файл закрытого ключа + Слишком большой файл для частного ключа Failed to open private key - Не удалось открыть закрытый ключ + Не удалось открыть частный ключ Entry history @@ -1337,7 +1692,7 @@ Do you want to merge your changes? Edit entry - Править запись + Редактировать запись Different passwords supplied. @@ -1347,37 +1702,21 @@ Do you want to merge your changes? New attribute Новый атрибут - - Confirm Remove - Подтверждение удаления - Are you sure you want to remove this attribute? Удалить этот атрибут? - - [PROTECTED] - [ЗАЩИЩЕННЫЙ] - - - Press reveal to view or edit - Нажмите Показать для просмотра или редактирования - Tomorrow Завтра %n week(s) - %n неделя%n недели%n недель%n недель + %n нед%n нед%n нед%n нед. %n month(s) - %n месяц%n месяца%n месяцев%n месяцев - - - 1 year - 1 год + %n месяц(-а)(-ев)%n месяц(-а)(-ев)%n месяц(-а)(-ев)%n мес. Apply generated password? @@ -1391,6 +1730,26 @@ Do you want to merge your changes? Entry updated successfully. Запись успешно обновлена. + + Entry has unsaved changes + Запись имеет не сохранённые изменения + + + New attribute %1 + Новый атрибут %1 + + + [PROTECTED] Press reveal to view or edit + [Защищён] Нажмите для открытия просмотра или правки + + + %n year(s) + %n год%n лет%n лет%n лет + + + Confirm Removal + Подтвердите удаление + EditEntryWidgetAdvanced @@ -1424,7 +1783,7 @@ Do you want to merge your changes? Foreground Color: - Цвет переднего плана: + Основной цвет: Background Color: @@ -1443,7 +1802,7 @@ Do you want to merge your changes? &Use custom Auto-Type sequence: - Использовать сво&ю последовательность автоввода: + &Использовать свою последовательность автоввода: Window Associations @@ -1489,7 +1848,7 @@ Do you want to merge your changes? EditEntryWidgetMain URL: - Адрес: + URL-адрес: Password: @@ -1513,7 +1872,7 @@ Do you want to merge your changes? Toggle the checkbox to reveal the notes section. - Установите для отображения раздела примечаний. + Включите для отображения раздела примечаний. Username: @@ -1536,7 +1895,7 @@ Do you want to merge your changes? seconds - секунд + сек Fingerprint @@ -1544,15 +1903,15 @@ Do you want to merge your changes? Remove key from agent when database is closed/locked - Убрать ключ из агента при закрытии/блокировании базы данных + Убрать ключ из агента при закрытии/блокировке базы данных Public key - Открытый ключ + Публичный ключ Add key to agent when database is opened/unlocked - Добавить ключ в агент, после открытия/разблокировки базы данных + Добавить ключ в агент при открытии/разблокировке базы данных Comment @@ -1572,7 +1931,7 @@ Do you want to merge your changes? Private key - Закрытый ключ + Частный ключ External file @@ -1581,7 +1940,7 @@ Do you want to merge your changes? Browse... Button for opening file dialog - Обзор... + Просмотр... Attachment @@ -1597,7 +1956,7 @@ Do you want to merge your changes? Require user confirmation when this key is used - Требовать подтверждения пользователя, когда этот ключ используется + Требовать подтверждения при использовании этого ключа @@ -1632,7 +1991,98 @@ Do you want to merge your changes? Inherit from parent group (%1) - Наследовать у родительской группы (%1) + Наследовать от родительской группы (%1) + + + + EditGroupWidgetKeeShare + + Form + Форма + + + Type: + Тип: + + + Path: + Путь: + + + ... + ... + + + Password: + Пароль: + + + Inactive + Неактивные + + + Import from path + Импортировать из пути + + + Export to path + Экспортировать в путь + + + Synchronize with path + Синхронизировать с путём + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Ваша версия KeePassXC не поддерживает разделение вашего типа контейнера. Пожалуйста, используйте %1. + + + Database sharing is disabled + Разделение базы данных отключено + + + Database export is disabled + Экспорт базы данных отключён + + + Database import is disabled + Импорт базы данных отключён + + + KeeShare unsigned container + Неподписанный контейнер KeeShare + + + KeeShare signed container + Подписанный контейнер KeeShare + + + Select import source + Выбрать источник для импорта + + + Select export target + Выбрать цель для экспорта + + + Select import/export file + Выберите файл для импорта/экспорта + + + Clear + Очистить + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + @@ -1663,7 +2113,7 @@ Do you want to merge your changes? Set default Auto-Type se&quence - Установить по умолчанию последовательность автоввода + Установить последовательность автоввода по умолчанию @@ -1692,10 +2142,6 @@ Do you want to merge your changes? Unable to fetch favicon. Не удалось получить значок. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Подсказка: в качестве резервного варианта для получения значков сайтов возможно использовать Google. Включите этот параметр в меню «Инструменты» -> «Настройки» -> «Безопасность» - Images Изображения @@ -1704,14 +2150,6 @@ Do you want to merge your changes? All files Все файлы - - Select Image - Выбор изображения - - - Can't read icon - Не могу прочитать значок - Custom icon already exists Пользовательский значок уже существует @@ -1721,8 +2159,36 @@ Do you want to merge your changes? Подтверждение удаления - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Этот значок использует %1 записей и будет заменен значком по умолчанию. Хотите удалить его? + Custom icon successfully downloaded + Пользовательская иконка успешно загружена + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Совет: Вы можете включить DuckDuckGo в качестве резерва в "Инструменты>Настройки>Безопасность" + + + Select Image(s) + Выбор изображения + + + Successfully loaded %1 of %n icon(s) + Успешно загружено %1 из %n иконкиУспешно загружено %1 из %n иконокУспешно загружено %1 из %n иконокУспешно загружено %1 из %n иконки(ок) + + + No icons were loaded + Значки не были загружены + + + %n icon(s) already exist in the database + %n иконка уже существует в базе данных%n иконки уже существуют в базе данных%n иконок уже существуют в базе данных%n иконка(ок) уже существует(ют) в базе данных + + + The following icon(s) failed: + Следующие иконки не удалось:Следующие иконки не удалось:Следующие иконки не удалось:Следующие иконки не удалось: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Эта иконка используется %n записью и будет замещена иконкой по умолчанию. Вы уверены, что хотите удалить её?Эта иконка используется %n записями и будет замещена иконкой по умолчанию. Вы уверены, что хотите удалить её?Эта иконка используется %n записями и будет замещена иконкой по умолчанию. Вы уверены, что хотите удалить её?Эта иконка используется %n записью(ями) и будет замещена иконкой по умолчанию. Вы уверены, что хотите удалить её? @@ -1745,7 +2211,7 @@ Do you want to merge your changes? Plugin Data - Данные плагина + Данные плагинов Remove @@ -1753,7 +2219,7 @@ Do you want to merge your changes? Delete plugin data? - Удалить данные плагина? + Удалить данные плагинов? Do you really want to delete the selected plugin data? @@ -1773,9 +2239,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Копия + %1 - Clone + %1 - Клон @@ -1817,11 +2282,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - Вы уверены, что вы хотите удалить %n вложение?Вы уверены, что вы хотите удалить %n вложений?Вы уверены, что вы хотите удалить %n вложений?Вы уверены, что вы хотите удалить %n вложений? - - - Confirm Remove - Подтверждение удаления + Вы уверены, что вы хотите удалить %n вложения?Вы уверены, что вы хотите удалить %n вложения?Вы уверены, что вы хотите удалить %n вложения?Действительно хотите удалить вложения (%n)? Save attachments @@ -1830,11 +2291,11 @@ This may cause the affected plugins to malfunction. Unable to create directory: %1 - Не удается создать каталог: %1 + Не удаётся создать папку: %1 Are you sure you want to overwrite the existing file "%1" with the attachment? - Вы уверены, что вы хотите, перезаписать существующий файл "%1" с вложением? + Действительно хотите перезаписать имеющийся файл "%1" с вложением? Confirm overwrite @@ -1843,26 +2304,33 @@ This may cause the affected plugins to malfunction. Unable to save attachments: %1 - Не удается сохранить вложение: + Невозможно сохранить вложение: %1 Unable to open attachment: %1 - Не удается открыть вложение: + Невозможно открыть вложение: %1 Unable to open attachments: %1 - Не удается открыть вложение: + Невозможно открыть вложения: %1 - Unable to open files: + Confirm remove + Подтвердить удаление + + + Unable to open file(s): %1 - Не удается открыть файлы: -%1 + Не удалось открыть файл: +%1Не удалось открыть файлы: +%1Не удалось открыть файлы: +%1Не удалось открыть файл(ы): +%1 @@ -1888,7 +2356,7 @@ This may cause the affected plugins to malfunction. URL - Адрес + URL-адрес @@ -1912,7 +2380,7 @@ This may cause the affected plugins to malfunction. URL - Адрес + URL-адрес Never @@ -1946,6 +2414,106 @@ This may cause the affected plugins to malfunction. Attachments Вложения + + Yes + Да + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + Генерировать токен TOTP + + + Close + Закрыть + + + General + Общие + + + Username + Имя пользователя + + + Password + Пароль + + + Expiration + Срок действия + + + URL + URL-адрес + + + Attributes + Атрибуты + + + Attachments + Вложения + + + Notes + Примечания + + + Autotype + Автоввод + + + Window + Окно + + + Sequence + Последовательность + + + Searching + Поиск + + + Search + Поиск + + + Clear + Очистить + + + Never + Никогда + + + [PROTECTED] + [ЗАЩИЩЁННЫЙ] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Включено + + + Disabled + Отключено + + + Share + Предоставить общий доступ + EntryView @@ -1975,7 +2543,7 @@ This may cause the affected plugins to malfunction. Attachments (icon) - Вложения (иконки) + Вложения (значки) @@ -1984,71 +2552,21 @@ This may cause the affected plugins to malfunction. Recycle Bin Корзина + + [empty] + group has no children + [пустой] + HostInstaller KeePassXC: Cannot save file! - KeePassXC: Не удается сохранить файл! + KeePassXC: Невозможно сохранить файл! Cannot save the native messaging script file. - Не удается сохранить файл сценария для механизма native messaging. - - - - HttpPasswordGeneratorWidget - - Length: - Длина: - - - Character Types - Виды символов - - - Upper Case Letters - Заглавные буквы - - - A-Z - A-Z - - - Lower Case Letters - Строчные буквы - - - a-z - a-z - - - Numbers - Цифры - - - 0-9 - 0-9 - - - Special Characters - Специальные символы - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Исключить визуально схожие символы - - - Ensure that the password contains characters from every group - Убедиться, что пароль содержит символы из каждой группы - - - Extended ASCII - Расширенный ASCII + Невозможно сохранить файл сценария для механизма native messaging. @@ -2074,7 +2592,27 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. - Неверный ключ или файл базы данных повреждён. + Неверный ключ, либо повреждён файл базы данных. + + + missing database headers + отсутствуют заголовки базы данных + + + Header doesn't match hash + Заголовок не соответствует хэшу + + + Invalid header id size + Недопустимый размер идентификатора заголовка + + + Invalid header field length + Недопустимая длина поля заголовка + + + Invalid header data length + Недопустимая длина данных заголовка @@ -2108,11 +2646,11 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. (HMAC mismatch) - Неправильный ключ или файл базы данных поврежден. (несоответствие HMAC) + Неверный ключ, либо повреждён файл базы данных (несоответствие HMAC). Unknown cipher - Неизвестные шифр + Неизвестный шифр Invalid header id size @@ -2128,15 +2666,15 @@ This may cause the affected plugins to malfunction. Failed to open buffer for KDF parameters in header - Не удалось открыть буфер для ФФК параметров в заголовке + Не удалось открыть буфер для параметров ФФК в заголовке Unsupported key derivation function (KDF) or invalid parameters - Функция формирования ключа (ФФК) не поддерживается или неверные параметры + Функция формирования ключа (ФФК) не поддерживается, либо неверные параметры Legacy header fields found in KDBX4 file. - Устаревшие поля заголовков найденные в файле KDBX4. + В файле KDBX4 обнаружены устаревшие поля заголовков. Invalid inner header id size @@ -2234,13 +2772,9 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - Недопустимая длина uuid шифра - Unsupported cipher - Неподдерживаемые шифр + Неподдерживаемый шифр Invalid compression flags length @@ -2283,15 +2817,27 @@ This may cause the affected plugins to malfunction. You can import it by clicking on Database > 'Import KeePass 1 database...'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. - Выбранный файл от старой KeePass 1 базы данных (.kdb). + Выбран файл старой базы данных KeePass 1 (.kdb). -Вы можете импортировать его, нажав на База Данных > «Импорт KeePass 1 базы данных...». -Это одностороннее перемещение. Вы не сможете открыть импортированную базу данных на старой версии KeePassX 0,4. +Вы можете импортировать его, нажав «База данных -> Импорт базы данных KeePass 1...». +Это необратимая процедура: импортированную базу нельзя будет открыть в старой версии KeePassX 0.4. Unsupported KeePass 2 database version. Неподдерживаемая версия базы данных KeePass 2. + + Invalid cipher uuid length: %1 (length=%2) + Неверная длина UUID шифра: %1 (длина=%2) + + + Unable to parse UUID: %1 + Не удается выполнить разбор UUID: %1 + + + Failed to read database file. + Не удалось прочитать файл базы данных. + KdbxXmlReader @@ -2301,7 +2847,7 @@ This is a one-way migration. You won't be able to open the imported databas No root group - Нет root группы + Нет корневой группы Missing icon uuid or data @@ -2321,7 +2867,7 @@ This is a one-way migration. You won't be able to open the imported databas Invalid group icon number - Недопустимый номер значка группы. + Недопустимый номер значка группы Invalid EnableAutoType value @@ -2363,13 +2909,9 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid Элемент истории с отличающимся uuid - - Unable to decrypt entry string - Не удается расшифровать строку записи - Duplicate custom attribute found - Найден повторяющиеся пользовательский атрибут + Обнаружен повторяющиеся пользовательский атрибут Entry string key or value missing @@ -2377,7 +2919,7 @@ This is a one-way migration. You won't be able to open the imported databas Duplicate attachment found - Найден дубликат во вложениях + Обнаружен дубликат во вложениях Entry binary key or value missing @@ -2414,7 +2956,15 @@ This is a one-way migration. You won't be able to open the imported databas Unable to decompress binary Translator meant is a binary data inside an entry - Не удается распаковать двоичные данные + Невозможно распаковать двоичные данные + + + XML error: +%1 +Line %2, column %3 + Ошибка XML: +%1 +Строка %2, столбец %3 @@ -2432,7 +2982,7 @@ This is a one-way migration. You won't be able to open the imported databas KeePass1Reader Unable to read keyfile. - Невозможно прочесть файл-ключ. + Невозможно прочитать ключевой файл. Not a KeePass database. @@ -2461,7 +3011,7 @@ This is a one-way migration. You won't be able to open the imported databas Invalid content hash size - Недопустимый размер хэша содержимого + Недопустимый размер хеша содержимого Invalid transform seed size @@ -2485,7 +3035,7 @@ This is a one-way migration. You won't be able to open the imported databas Wrong key or database file is corrupt. - Неверный ключ или файл базы данных повреждён. + Неверный ключ, либо повреждён файл базы данных. Key transformation failed @@ -2579,55 +3129,145 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type Недопустимый тип поля записи - - - KeePass2 - AES: 256-bit - AES: 256-бит - - - Twofish: 256-bit - Twofish: 256-бит - - - ChaCha20: 256-bit - ChaCha20: 256-бит - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – рекомендуемый) + unable to seek to content position + не удалось переместиться к позиции содержимого - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Запускается новый экземпляр программы, т.к. файл блокировки запуска повреждён. + Disabled share + Отключить общий доступ - The lock file could not be created. Single-instance mode disabled. - Файл блокировки не может быть создан. Режим недублирующего хранения отключен. + Import from + Импорт из - Another instance of KeePassXC is already running. - Другой экземпляр KeePassXC уже запущен. + Export to + Экспортировать в - Fatal error while testing the cryptographic functions. - Неисправимая ошибка в процессе тестирования криптографических функций. + Synchronize with + Синхронизировать с - KeePassXC - Error - Ошибка - KeePassXC + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Ключевой компонент + + + Key Component Description + Описание ключевого компонента + + + Cancel + Отмена + + + Key Component set, click to change or remove + Ключевой компонент установлен, щёлкните, чтобы изменить или удалить + + + Add %1 + Add a key component + Добавить %1 + + + Change %1 + Change a key component + Изменить %1 + + + Remove %1 + Remove a key component + Удалить %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 установлен, нажмите, чтобы изменить или удалить + + + + KeyFileEditWidget + + Browse + Обзор + + + Generate + Генерировать + + + Key File + Ключевой файл + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Вы можете добавить ключевой файл, содержащий случайные байты, для дополнительной безопасности.</p><p>Вы должны хранить его в секрете и никогда не терять, или Вы будете заблокированы!</p> + + + Legacy key file format + Устаревший формат ключевого файла + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Вы используете устаревший формат файла-ключа, который может стать не поддерживаемым в будущем. + +Пожалуйста, сходите в настройки мастер ключа и сгенерируйте новый файл-ключ. + + + Error loading the key file '%1' +Message: %2 + Ошибка загрузки ключевого файла '%1' +Сообщение: %2 + + + Key files + Ключевые файлы + + + All files + Все файлы + + + Create Key File... + Создать ключевой файл... + + + Error creating key file + Ошибка создания ключевого файла + + + Unable to create key file: %1 + Невозможно создать ключевой файл: %1 + + + Select a key file + Выберите ключевой файл @@ -2638,28 +3278,16 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases - &Недавние базы данных - - - Import - Импорт + Н&едавние базы данных &Help - Помощь + Справка E&ntries &Записи - - Copy att&ribute to clipboard - Скопировать &атрибут в буфер обмена - - - Time-based one-time password - Временной одноразовый пароль - &Groups &Группы @@ -2670,7 +3298,7 @@ This is a one-way migration. You won't be able to open the imported databas &Quit - В&ыход + &Выход &About @@ -2688,33 +3316,13 @@ This is a one-way migration. You won't be able to open the imported databas &Close database &Закрыть базу данных - - &New database - &Новая база данных - - - Merge from KeePassX database - Объединить с базой данных KeePassX - - - &Add new entry - &Создать запись - - - &View/Edit entry - &Открыть/править запись - &Delete entry &Удалить запись - - &Add new group - &Создать группу - &Edit group - &Править группу + &Изменить группу &Delete group @@ -2722,15 +3330,7 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... - &Сохранить базу данных как... - - - Change &master key... - Изменение &мастер-пароля... - - - &Database settings - Настройки базы данных + Со&хранить базу данных как... Database settings @@ -2740,10 +3340,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry &Клонировать запись - - &Find - &Найти - Copy &username Скопировать &имя пользователя @@ -2752,37 +3348,25 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard Скопировать имя пользователя в буфер обмена - - Cop&y password - &Скопировать пароль - Copy password to clipboard Скопировать пароль в буфер обмена &Settings - &Настройки + &Параметры Password Generator Генератор паролей - - &Perform Auto-Type - &Произвести автоввод - - - &Open URL - &Открыть адрес - &Lock databases &Заблокировать базу данных &Title - &Имя записи + Назван&ие Copy title to clipboard @@ -2790,7 +3374,7 @@ This is a one-way migration. You won't be able to open the imported databas &URL - &Адрес + &URL-адрес Copy URL to clipboard @@ -2808,33 +3392,17 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... &Экспорт в CSV-файл... - - Import KeePass 1 database... - Импортировать базу данных KeePass 1... - - - Import CSV file... - Импорт CSV-файла... - - - Re&pair database... - Во&сстановить базу данных... - - - Show TOTP - Показать ВРП - Set up TOTP... - Установить ВРП... + Установить TOTP... Copy &TOTP - Копировать &ВРП + Скопировать &TOTP E&mpty recycle bin - &Пустая корзина + О&чистить корзину Clear history @@ -2844,17 +3412,9 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 Ошибка доступа к файлу конфигурации %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Похоже вы используете KeePassHTTP для интеграции с браузером. Эта функция является устаревшей и будет удалена в будущем.<br>Пожалуйста, перейдите на KeePassXC-Browser! Чтобы получить помощь прочтите наше <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">руководство по миграции</a> (предупреждение %1 of 3).</p> - - - read-only - только для чтения - Settings - Настройки + Параметры Toggle window @@ -2864,26 +3424,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC Закрыть KeePassXC - - KeePass 2 Database - База данных KeePass 2 - - - All files - Все файлы - - - Open database - Открыть базу данных - - - Save repaired database - Сохранить восстановленную базу данных - - - Writing the database failed. - Не удалось записать базу данных. - Please touch the button on your YubiKey! Нажмите кнопку на YubiKey! @@ -2892,16 +3432,279 @@ This is a one-way migration. You won't be able to open the imported databas WARNING: You are using an unstable build of KeePassXC! There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. - Предупреждение: Вы используете нестабильную сборку KeePassXC! -Существует высокий риск повреждения базы данных, сделайте резервную копию базы данных. -Эта версия не предназначен для повседневного использования. + ВНИМАНИЕ: Используется нестабильная сборка KeePassXC! +Весьма вероятно повреждение базы данных, сделайте её резервную копию. +Эта версия не предназначена для повседневного использования. + + + &Donate + &Пожертвовать + + + Report a &bug + Сообщить об &ошибке + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + Предупреждение: Ваша версия Qt может привести к сбоям KeePassXC при работе с экранной клавиатурой! +Мы рекомендуем вам использовать AppImage доступны на нашей странице загрузки. + + + &Import + &Импорт + + + Copy att&ribute... + Скопировать ат&рибут... + + + TOTP... + &TOTP... + + + &New database... + &Новая база данных... + + + Create a new database + Создать новую базу данных + + + &Merge from database... + Сое&динить с другой базой данных... + + + Merge from another KDBX database + Соединить с другой базой данных KDBX + + + &New entry + &Новая запись + + + Add a new entry + Добавить новую запись + + + &Edit entry + &Править запись + + + View or edit entry + Просмотреть или отредактировать запись + + + &New group + &Новая группа + + + Add a new group + Добавить новую группу + + + Change master &key... + Измнить мастер &ключ... + + + &Database settings... + &Параметры базы данных... + + + Copy &password + Скопировать п&ароль + + + Perform &Auto-Type + Осуществить а&втоввод + + + Open &URL + Открыть &URL + + + KeePass 1 database... + База данных KeePass 1... + + + Import a KeePass 1 database + Импортировать базу данных KeePass 1 + + + CSV file... + Файл CSV... + + + Import a CSV file + Импортировать файл CSV + + + Show TOTP... + Показать TOTP... + + + Show TOTP QR Code... + Показать QR-код TOTP... + + + Check for Updates... + Проверить обновления... + + + Share entry + Поделиться записью + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + ЗАМЕТЬТЕ: Вы используете предварительную версию KeePassXC! +Ожидайте некоторые баги и мелкие проблемы, эта версия не подразумевается для производственного использования. + + + Check for updates on startup? + Проверять обновления при запуске? + + + Would you like KeePassXC to check for updates on startup? + Вы бы хотели, чтобы KeePassXC проверял обновления при запуске? + + + You can always check for updates manually from the application menu. + Вы всегда можете проверять обновления вручную из меню приложения. + + + + Merger + + Creating missing %1 [%2] + Создание отсутствующей %1 [%2] + + + Relocating %1 [%2] + Перемещение %1 [%2] + + + Overwriting %1 [%2] + Перезапись %1 [%2] + + + older entry merged from database "%1" + более старая запись присоединена из базы данных "%1" + + + Adding backup for older target %1 [%2] + Добавление резервной копии для более старой мишени %1 [%2] + + + Adding backup for older source %1 [%2] + Добавление резервной копии для более старого источника %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Повторное применение более старой целевой записи поверх более нового источника %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Повторное применение более старой исходной записи поверх более новой мишени %1 [%2] + + + Synchronizing from newer source %1 [%2] + Синхронизация с более новым источником %1 [%2] + + + Synchronizing from older source %1 [%2] + Синхронизация с более старым источником %1 [%2] + + + Deleting child %1 [%2] + Удаление дочерней %1 [%2] + + + Deleting orphan %1 [%2] + Удаление заброшенной %1 [%2] + + + Changed deleted objects + Изменены удалённые объекты + + + Adding missing icon %1 + Добавление отсутствующей иконки %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Создать новую базу данных KeePassXC + + + Root + Root group + Корень + + + + NewDatabaseWizardPage + + WizardPage + СтраницаМастера + + + En&cryption Settings + Настройки шифрования + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Здесь Вы можете отрегулировать настройки шифрования базы данных. Не беспокойтесь, вы сможете изменить их позже в настройках базы данных. + + + Advanced Settings + Дополнительные параметры + + + Simple Settings + Простые настройки + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Параметры шифрования + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Здесь Вы можете отрегулировать настройки шифрования базы данных. Не беспокойтесь, вы сможете изменить их позже в настройках базы данных. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Мастер-ключ базы данных + + + A master key known only to you protects your database. + Мастер-ключ, известный только Вам, защищает Вашу базу данных. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Общая информация о базе данных + + + Please fill in the display name and an optional description for your new database: + Пожалуйста, заполните отображаемое имя и опциональное описание Вашей новой базы данных: OpenSSHKey Invalid key file, expecting an OpenSSH key - Недопустимый файл ключа, ожидается OpenSSH ключ + Недопустимый ключевой файл, ожидается ключ OpenSSH PEM boundary mismatch @@ -2917,23 +3720,23 @@ This version is not meant for production use. Key file magic header id invalid - Недопустимый идентификатор заголовка файла ключа + Недопустимый идентификатор заголовка ключевого файла Found zero keys - Найдены пустые ключи + Обнаружены пустые ключи Failed to read public key. - Не удалось прочесть открытый ключ. + Не удалось прочитать публичный ключ. Corrupted key file, reading private key failed - Поврежденный файл ключа, чтение закрытого ключа не удалось + Поврежденный ключевой файл, ошибка чтения частного ключа No private key payload to decrypt - В закрытом ключе нет сведений для дешифрования + Нет сведений для дешифрования в частном ключе Trying to run KDF without cipher @@ -2941,47 +3744,47 @@ This version is not meant for production use. Passphrase is required to decrypt this key - Пароль требуется для расшифровки этого ключа + Для расшифровки этого ключа требуется пароль Key derivation failed, key file corrupted? - Формирования ключа не удалось, ключевой файл поврежден? + Ошибка формирования ключа, повреждён ключевой файл? Decryption failed, wrong passphrase? - Расшифровка не удалась, неправильный пароль? + Ошибка расшифровки, неверный пароль? Unexpected EOF while reading public key - Неожиданное EOF при чтении открытого ключа + Неожиданный конец файла при чтении публичного ключа Unexpected EOF while reading private key - Неожиданный EOF при чтении закрытого ключа + Неожиданный конец файла при чтении частного ключа Can't write public key as it is empty - Не удается записать открытый ключ, так как он пуст + Невозможно записать публичный ключ, так как он пуст Unexpected EOF when writing public key - Неожиданный EOF при записе открытого ключа + Неожиданный конец файла при записи публичного ключа Can't write private key as it is empty - Нельзя записать закрытый ключ, поскольку он пустой + Невозможно записать частный ключ, так как он пуст Unexpected EOF when writing private key - Неожиданный EOF при записи закрытого ключа + Неожиданный конец файла при записи частного ключа Unsupported key type: %1 - Неизвестный тип ключа: %1 + Неподдерживаемый тип ключа: %1 Unknown cipher: %1 - Неизвестный шифр: %1 + Неподдерживаемый шифр: %1 Cipher IV is too short for MD5 kdf @@ -2997,125 +3800,30 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Диалог + Enter password: + Введите пароль: - This is required for accessing your databases from ChromeIPass or PassIFox - Это необходимо для доступа к вашим базам данных из ChromeIPass или PassIFox + Confirm password: + Подтвердите пароль: - Enable KeePassHTTP server - Включить сервер KeePassHTTP + Password + Пароль - General - Общие + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Пароль - первичный метод защиты Вашей базы данных.</p><p>Хорошие пароли длинные и уникальные. KeePassXC может сгенерировать его для Вас.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Показывать уведомление при запросе учётных данных + Passwords do not match. + Пароли не совпадают. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Возвращает только лучшие совпадения для определенного URL вместо всех записей для всего домена. - - - &Return only best matching entries - &Показывать только лучшие совпадения - - - Re&quest to unlock the database if it is locked - Запрашивать разблокировку базы данных, если она заблокирована - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Будут отобраны только записи с совпадающим протоколом (http://, https://, ftp://, ...). - - - &Match URL schemes - &Проверять протокол - - - Sort matching entries by &username - Сортировать совпавшие записи по &имени пользователя - - - Sort &matching entries by title - Сортировать совпадающие записи по названию - - - R&emove all shared encryption keys from active database - &Удалить все общие ключи шифрования из активной базы данных - - - Re&move all stored permissions from entries in active database - Удалить все сохранённые права доступа из записей активной базы данных - - - Password Generator - Генератор паролей - - - Advanced - Продвинутые - - - Always allow &access to entries - Всегда разрешать доступ к записям - - - Always allow &updating entries - Всегда разрешать обновление записей - - - Only the selected database has to be connected with a client. - К клиенту должна быть подключена только выбранная база данных. - - - Searc&h in all opened databases for matching entries - Искать подходящие записи во всех открытых базах данных - - - Automatically creating or updating string fields is not supported. - Автоматическое создание или обновление полей, содержащих строки, не поддерживается. - - - &Return advanced string fields which start with "KPH: " - Возвращать продвинутые стро&ковые поля, начинающиеся с «KPH: » - - - HTTP Port: - Порт HTTP: - - - Default port: 19455 - Порт по умолчанию: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC будет слушать этот порт на 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Предупреждение:</b> Следующие параметры могут быть опасны! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP устарел и будет удален в будущем.<br>Пожалуйста, перейдите на KeePassXC-Browser! Чтобы получить помощь прочтите наше <a href="https://keepassxc.org/docs/keepassxc-browser-migration">руководство по миграции</a>.</p> - - - Cannot bind to privileged ports - Не удаётся выполнить привязку к привилегированным портам - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Не удаётся привязать к привилегированным портам с номерами меньше 1024! -Используется порт по умолчанию: 19455. + Generate master password + Сгенерировать мастер-пароль @@ -3159,7 +3867,7 @@ Using default port 19455. Special Characters - Особые символы + Специальные символы Extended ASCII @@ -3167,7 +3875,7 @@ Using default port 19455. Exclude look-alike characters - Исключить похожие символы + Не использовать визуально схожие символы Pick characters from every group @@ -3185,18 +3893,10 @@ Using default port 19455. Wordlist: Список слов: - - Word Count: - Количество слов: - Word Separator: Разделитель слов: - - Generate - Генерировать - Copy Копировать @@ -3209,10 +3909,6 @@ Using default port 19455. Close Закрыть - - Apply - Применить - Entropy: %1 bit Энтропия: %1 бит @@ -3224,22 +3920,187 @@ Using default port 19455. Poor Password quality - Плохое + Плохой Weak Password quality - Слабое + Слабый Good Password quality - Хорошее + Хороший Excellent Password quality - Отличное + Отличный + + + ExtendedASCII + Расширенная ASCII + + + Switch to advanced mode + Переключиться в расширенный режим + + + Advanced + Дополнительные + + + Upper Case Letters A to F + Заглавные буквы от A до F + + + A-Z + A-Z + + + Lower Case Letters A to F + Строчные буквы от A до F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Скобки + + + {[( + {[( + + + Punctuation + Знаки припенания + + + .,:; + .,:; + + + Quotes + Кавычки + + + " ' + " ' + + + Math + Математические + + + <*+!?= + <*+!?= + + + Dashes + Тире + + + \_|-/ + \_|-/ + + + Logograms + Логограммы + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Переключиться в простой режим + + + Simple + Простой + + + Character set to exclude from generated password + Набор символов для исключения из сгенерированного пароля + + + Do not include: + Не включать: + + + Add non-hex letters to "do not include" list + Добавить не шестнадцатеричные буквы к списку "не включать" + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Исключить символы: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Количество слов: + + + Regenerate + Перегенерировать + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Выберите + + + + QMessageBox + + Overwrite + Перезапись + + + Delete + Удалить + + + Move + Перемещение + + + Empty + Пустая + + + Remove + Удалить + + + Skip + Пропустить + + + Disable + Выключено + + + Merge + Слияние @@ -3250,43 +4111,27 @@ Using default port 19455. Database hash not available - Отсутствует хэш базы данных + Отсутствует хеш базы данных Client public key not received - Не получен открытый ключ клиента + Не получен публичный ключ клиента Cannot decrypt message - Не удается расшифровать сообщение - - - Timeout or cannot connect to KeePassXC - Истекло время ожидания или невозможно подключиться к KeePassXC + Невозможно расшифровать сообщение Action cancelled or denied Действие отменено или запрещено - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Не удается зашифровать сообщение или открытый ключ не найден. Механизм Native Messaging включен в KeePassXC? - KeePassXC association failed, try again - KeePassXC объединение не удалось, попробуйте еще раз - - - Key change was not successful - Изменение ключа не было успешным + Ассоциирование KeePassXC не выполнено, попробуйте ещё раз Encryption key is not recognized - Ключ шифрования не распознан - - - No saved databases found - Сохраненная база данных не найдена + Не распознан ключ шифрования Incorrect action @@ -3318,7 +4163,7 @@ Using default port 19455. Key file of the database. - Ключ-файл базы данных. + Ключевой файл базы данных. path @@ -3338,7 +4183,7 @@ Using default port 19455. URL - Адрес + URL-адрес Prompt for the entry's password. @@ -3358,7 +4203,7 @@ Using default port 19455. Path of the entry to add. - Путь к записе для добавления. + Путь к записи для добавления. Copy an entry's password to the clipboard. @@ -3367,7 +4212,7 @@ Using default port 19455. Path of the entry to clip. clip = copy to clipboard - Скопировать путь до записи. + Скопировать путь к записи. Timeout in seconds before clearing the clipboard. @@ -3379,7 +4224,7 @@ Using default port 19455. Title for the entry. - Название для записи. + Название записи. title @@ -3387,7 +4232,7 @@ Using default port 19455. Path of the entry to edit. - Путь к записе для редактирования. + Путь к записи для редактирования. Estimate the entropy of a password. @@ -3413,19 +4258,15 @@ Using default port 19455. Insert password to unlock %1: Введите пароль для разблокировки %1: - - Failed to load key file %1 : %2 - Не удалось загрузить ключ-файл %1: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. Please consider generating a new key file. - ПРЕДУПРЕЖДЕНИЕ: Вы используете устаревший формат файл ключа, поддержка которого + ВНИМАНИЕ: Вы используете ключевой файл устаревшего формата, поддержка которого может быть прекращена в будущем. -Рассмотрите возможность создания нового файла ключа. +По возможности создайте новый ключевой файл. @@ -3451,7 +4292,7 @@ Available commands: Find entries quickly. - Найти записи быстро. + Быстрый поиск записей. Search term. @@ -3463,11 +4304,11 @@ Available commands: Path of the database to merge into. - Путь к базе данных для объединения в. + Путь к базе-приёмнику для объединения. Path of the database to merge from. - Путь к базе данных для слияния. + Путь к базе-источнику для объединения. Use the same credentials for both database files. @@ -3475,7 +4316,7 @@ Available commands: Key file of the database to merge from. - Файл ключа базы данных для слияния. + Ключевой файл базы данных для объединения. Show an entry's information. @@ -3483,7 +4324,7 @@ Available commands: Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - Имена атрибутов для отображения. Эта опция может быть указана более одного раза, причем каждый атрибут будет показан по одному в строке в заданном порядке. Если атрибуты не указаны, дается сводка атрибутов по умолчанию. + Имена атрибутов для отображения. Эта опция может быть указана более одного раза - каждый атрибут будет показан по одному в строке в заданном порядке. Если атрибуты не указаны, даётся сводка атрибутов по умолчанию. attribute @@ -3501,19 +4342,13 @@ Available commands: error reading from device Ошибка чтения из устройства - - file empty ! - - Файл пуст ! - - malformed string Неправильная строка missing closing quote - Отсутствует закрывающая цитата + Отсутствует закрывающая кавычка Group @@ -3521,7 +4356,7 @@ Available commands: Title - Имя записи + Название Username @@ -3537,23 +4372,19 @@ Available commands: Last Modified - Последнее изменение + Изменён Created Создан - - Legacy Browser Integration - Устаревшая интеграция с браузером - Browser Integration Интеграция с браузером YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] Запрос ответа - слот %2 - %3 + YubiKey[%1] Вызов-ответ - слот %2 - %3 Press @@ -3565,7 +4396,7 @@ Available commands: SSH Agent - SSH Агент + SSH-агент Generate a new random diceware passphrase. @@ -3575,10 +4406,6 @@ Available commands: Word count for the diceware passphrase. Количество слов для парольной фразы. - - count - количество - Wordlist for the diceware generator. [Default: EFF English] @@ -3590,28 +4417,445 @@ Available commands: Сгенерировать новый случайный пароль. - Length of the generated password. - Длина сгенерированного пароля. + Invalid value for password length %1. + Неверная величина для длины пароля %1 - Use lowercase characters in the generated password. - Использовать символы в нижнем регистре в генерируемом пароле. + Could not create entry with path %1. + Не удалось создать запись с путём %1. - Use uppercase characters in the generated password. - Использовать заглавные буквы в генерируемом пароле. + Enter password for new entry: + Введите пароль для новой записи: - Use numbers in the generated password. - Использовать цифры в генерируемом пароле. + Writing the database failed %1. + Запись базы данных не удалась %1. - Use special characters in the generated password. - Использовать специальные символы в генерируемом пароле. + Successfully added entry %1. + Успешно добавлена запись %1. - Use extended ASCII in the generated password. - Использовать расширенный ASCII в генерируемом пароле. + Copy the current TOTP to the clipboard. + Скопировать текущий TOTP в буфер обмена. + + + Invalid timeout value %1. + Неверное значение времени ожидания %1. + + + Entry %1 not found. + Запись %1 не найдена. + + + Entry with path %1 has no TOTP set up. + У записи с путём %1 не настроен TOTP. + + + Entry's current TOTP copied to the clipboard! + Текущий TOTP записи скопирован в буфер обмена! + + + Entry's password copied to the clipboard! + Пароль записи скопирован в буфер обмена! + + + Clearing the clipboard in %1 second(s)... + Очищение буфера обмена через %1 секунду...Очищение буфера обмена через %1 секунды..Очищение буфера обмена через %1 секунд...Очищение буфера обмена через %1 секунд(у, ы)... + + + Clipboard cleared! + Буфер обмена очищен! + + + Silence password prompt and other secondary outputs. + Заглушить запрос пароля и другие второстепенные выводы. + + + count + CLI parameter + количество + + + Invalid value for password length: %1 + Неверное значение для длины пароля: %1 + + + Could not find entry with path %1. + Не удалось найти запись с путём %1. + + + Not changing any field for entry %1. + Не меняются какие-либо поля для записи %1. + + + Enter new password for entry: + Введите новый пароль для записи: + + + Writing the database failed: %1 + Запись базы данных не удалась: %1 + + + Successfully edited entry %1. + Правка записи прошла успешно %1. + + + Length %1 + Длина %1 + + + Entropy %1 + Энтропия %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Дополнительные биты мультислова %1 + + + Type: Bruteforce + Тип: Перебор + + + Type: Dictionary + Тип: Словарь + + + Type: Dict+Leet + Тип: Словать+Leet + + + Type: User Words + Тип: Пользователь слова + + + Type: User+Leet + Тип: Пользователь+Leet + + + Type: Repeated + Тип: Повторения + + + Type: Sequence + Тип: Последовательность + + + Type: Spatial + Тип: Пространственный + + + Type: Date + Тип: Дата + + + Type: Bruteforce(Rep) + Тип: Перебор(Повт.) + + + Type: Dictionary(Rep) + Тип: Словарь(Повт.) + + + Type: Dict+Leet(Rep) + Тип: Словарь+Leet(Повт.) + + + Type: User Words(Rep) + Тип: Пользовательские слова(Повт.) + + + Type: User+Leet(Rep) + Тип: Пользователь+Leet(Повт.) + + + Type: Repeated(Rep) + Тип: Повторения(Повт.) + + + Type: Sequence(Rep) + Тип: Последовательность(Повт.) + + + Type: Spatial(Rep) + Тип: Пространственный(Повт.) + + + Type: Date(Rep) + Тип: Дата(Повт.) + + + Type: Unknown%1 + Тип: Неизвестный%1 + + + Entropy %1 (%2) + Энтропия %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Длина пароля (%1) != сумма длин частей (%2) *** + + + Failed to load key file %1: %2 + Не удалось загрузить файл-ключ %1: %2 + + + File %1 does not exist. + Файл %1 не существует. + + + Unable to open file %1. + Не удается открыть файл %1. + + + Error while reading the database: +%1 + Ошибка при чтении базы данных: +%1 + + + Error while parsing the database: +%1 + Ошибка при разборе базы данных: +%1 + + + Length of the generated password + Длина сгенерированного пароля + + + Use lowercase characters + Использовать символы в нижнем регистре + + + Use uppercase characters + Использовать заглавные буквы + + + Use numbers. + Использовать цифры. + + + Use special characters + Использовать специальные символы + + + Use extended ASCII + Использовать расширенный набор ASCII + + + Exclude character set + Исключить набор символов + + + chars + симв. + + + Exclude similar looking characters + Исключать схоже выглядящие символы + + + Include characters from every selected group + Включать символы из каждой выбранной группы + + + Recursively list the elements of the group. + Рекурсивно перечислять элементы группы. + + + Cannot find group %1. + Не удалось найти группу %1. + + + Error reading merge file: +%1 + Ошибка при чтении файла слияния: +%1 + + + Unable to save database to file : %1 + Не удалось сохранить базу данных в файл : %1 + + + Unable to save database to file: %1 + Не удалось сохранить базу данных в файл: %1 + + + Successfully recycled entry %1. + Успешно перемещена в корзину запись %1. + + + Successfully deleted entry %1. + Успешно удалена запись %1. + + + Show the entry's current TOTP. + Показать текущий TOTP записи. + + + ERROR: unknown attribute %1. + ОШИБКА: неизвестный атрибут %1. + + + No program defined for clipboard manipulation + Не задана программа для манипуляции буфером обмена + + + Unable to start program %1 + Не удалось запустить программу %1 + + + file empty + пустой файл + + + %1: (row, col) %2,%3 + %1: (строка, столбец) %2,%3 + + + AES: 256-bit + AES: 256-бит + + + Twofish: 256-bit + Twofish: 256-бит + + + ChaCha20: 256-bit + ChaCha20: 256-бит + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – рекомендуется) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Недопустимые параметры + + + Invalid Key + TOTP + Недопустимый ключ + + + Message encryption failed. + Шифрование сообщений не удалось. + + + No groups found + Группы не найдены + + + Create a new database. + Создать новую базу данных. + + + File %1 already exists. + Файл %1 уже существует. + + + Loading the key file failed + Загрузка файла-ключа не удалась + + + No key is set. Aborting database creation. + Ключ не установлен. Прерываю создание базы данных. + + + Failed to save the database: %1. + Не удалось сохранить базу данных: %1. + + + Successfully created new database. + Успешно создана новая база данных. + + + Insert password to encrypt database (Press enter to leave blank): + Вставьте пароль, чтобы зашифровать базу данных (нажмите "ввод", чтобы оставить его пустым): + + + Creating KeyFile %1 failed: %2 + Создание ключевого файла %1 не удалось: %2 + + + Loading KeyFile %1 failed: %2 + Загрузка ключевого файла %1 не удалась: %2 + + + Remove an entry from the database. + Удалить запись из базы данных. + + + Path of the entry to remove. + Путь к записи для удаления. + + + Existing single-instance lock file is invalid. Launching new instance. + Повреждён файл блокировки запуска, запуск нового экземпляра программы. + + + The lock file could not be created. Single-instance mode disabled. + Невозможно создать файл блокировки. Режим недублирующего хранения отключён. + + + KeePassXC - cross-platform password manager + KeePassXC - кроссплатформенный менеджер паролей + + + filenames of the password databases to open (*.kdbx) + имена файлов открываемой базы данных паролей (*.kdbx) + + + path to a custom config file + путь к своему файлу настроек + + + key file of the database + ключевой файл базы данных + + + read password of the database from stdin + читать пароли базы данных с stdin + + + Parent window handle + Дескриптор родительского окна + + + Another instance of KeePassXC is already running. + Другой экземпляр KeePassXC уже запущен. + + + Fatal error while testing the cryptographic functions. + Неустранимая ошибка при тестировании криптографических функций. + + + KeePassXC - Error + Ошибка - KeePassXC + + + Database password: + Пароль базы данных: + + + Cannot create new group + @@ -3649,11 +4893,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - Поиск... + Agent connection failed. + Сбой подключения агента. + + Agent protocol error. + Ошибка протокола агента. + + + No agent running, cannot add identity. + Агент не запущен, не удается добавить идентификатор. + + + No agent running, cannot remove identity. + Агент не запущен, не удается удалить личность + + + Agent refused this identity. Possible reasons include: + Агент отклонил учетную запись. Возможные причины: + + + The key has already been added. + Ключ уже добавлен. + + + Restricted lifetime is not supported by the agent (check options). + Ограничение по времени не поддерживается этим агентом (проверьте настройки). + + + A confirmation request is not supported by the agent (check options). + Запрос подтверждения не поддерживается этим агентом (проверьте настройки). + + + + SearchHelpWidget + + Search Help + Искать в справке + + + Search terms are as follows: [modifiers][field:]["]term["] + Поисковые выражения выглядят следующим образом: [модификаторы][поле:]["]выражение["] + + + Every search term must match (ie, logical AND) + Каждое поисковое выражение должно иметь соответствие (т.е. логическое И) + + + Modifiers + Модификаторы + + + exclude term from results + исключить выражение из результатов + + + match term exactly + соответствовать выражению в точности + + + use regex in term + использовать регулярные выражения в поисковых + + + Fields + Поля + + + Term Wildcards + Шаблоны для выражений + + + match anything + соответствие всему + + + match one + соответствие одному + + + logical OR + логическое ИЛИ + + + Examples + Примеры + + + + SearchWidget Search Поиск @@ -3663,358 +4993,288 @@ Available commands: Очистить - Case Sensitive + Limit search to selected group + Поиск только в выбранной группе + + + Search Help + Искать в справке + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Поиск (%1)... + + + Case sensitive Чувствительно к регистру - - Limit search to selected group - Ограничить поиск выбранной группой - - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Запрос на ассоциацию нового ключа + Active + Активный - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Получен запрос на ассоциацию вышеуказанного ключа. -Если хотите разрешить доступ к базе данных KeePassXC, -дайте ему уникальное имя, чтобы распознать и принять ключ. + Allow export + Разрешить экспорт - KeePassXC: Overwrite existing key? - KeePassXC: Перезаписать существующий ключ? + Allow import + Разрешить импорт - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Общий ключ шифрования с именем «%1» уже существует. -Перезаписать его? + Own certificate + Собственный сертификат - KeePassXC: Update Entry - KeePassXC: Обновить запись + Fingerprint: + Отпечаток: - Do you want to update the information in %1 - %2? - Обновить информацию в %1 - %2? + Certificate: + Сертификат: - KeePassXC: Database locked! - KeePassXC: База данных заблокирована! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Активная база данных заблокирована! -Разблокируйте выбранную базу данных или выберите другую, незаблокированную. - - - KeePassXC: Removed keys from database - KeePassXC: Ключи удалены из базы данных - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Успешно удалена %n шифрования-ключи от параметров KeePassX/Http.Успешно удалена %n шифрования-ключи от параметров KeePassX/Http.Успешно удалена %n шифрования-ключи от параметров KeePassX/Http.Успешно удалено %n ключей шифрования из параметров KeePassX/Http. - - - KeePassXC: No keys found - KeePassXC: Ключи не найдены - - - No shared encryption-keys found in KeePassHttp Settings. - Не найдено общих ключей шифрования в настройках KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: Настройки недоступны! - - - The active database does not contain an entry of KeePassHttp Settings. - Активная база данных не содержит записей настроек KeePassHttp. - - - Removing stored permissions... - Удаляю сохранённые права доступа... - - - Abort - Прервать - - - KeePassXC: Removed permissions - KeePassXC: Права доступа удалены - - - Successfully removed permissions from %n entries. - Успешно удалены доступы для %n записи.Успешно удалены доступы для %n записей.Успешно удалены доступы для %n записей.Успешно удалены доступы для %n записей. - - - KeePassXC: No entry with permissions found! - KeePassXC: Не найдена запись с правами доступа! - - - The active database does not contain an entry with permissions. - Активная база данных не содержит записей с назначенными правами доступа. - - - - SettingsWidget - - Application Settings - Параметры приложения - - - General - Общие - - - Security - Безопасность - - - Access error for config file %1 - Ошибка доступа к файлу конфигурации %1 - - - - SettingsWidgetGeneral - - Basic Settings - Основные параметры - - - Start only a single instance of KeePassXC - Запускать только один экземпляр KeePassXC - - - Remember last databases - Запоминать последнюю базу данных - - - Remember last key files and security dongles - Запоминать последние использованные файлы ключей и устройства - - - Load previous databases on startup - Загружать предыдущие базы данных при запуске - - - Automatically save on exit - Автоматически сохранять при выходе - - - Automatically save after every change - Автоматически сохранять после каждого изменения - - - Automatically reload the database when modified externally - Автоматически перезагружать базу данных при её изменении извне - - - Minimize when copying to clipboard - Сворачивать при копировании в буфер обмена - - - Minimize window at application startup - Сворачивать окно при запуске приложения - - - Use group icon on entry creation - Использовать значок группы для новых записей - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Не помечать базу данных изменённой при действиях, не связанных с изменением данных (например, при распахивании групп) - - - Hide the Details view - Скрыть подробную информацию - - - Show a system tray icon - Показывать значок в системном лотке - - - Hide window to system tray when minimized - При сворачивании скрывать окно в системный лоток - - - Hide window to system tray instead of app exit - Скрывать окно в системный лоток вместо выхода - - - Dark system tray icon - Темная иконка в системном трее - - - Language - Язык - - - Auto-Type - Автоввод - - - Use entry title to match windows for global Auto-Type - Использовать название записи, для глобального автоввода - - - Use entry URL to match windows for global Auto-Type - Использовать URL-адрес для глобального автоввода - - - Always ask before performing Auto-Type - Всегда спрашивать перед выполнением автоввода - - - Global Auto-Type shortcut - Глобальная комбинация клавиш для автоввода - - - Auto-Type delay - Задержка автоввода - - - ms - Milliseconds - мс - - - Startup - Запуск - - - File Management - Управление файлами - - - Safely save database files (may be incompatible with Dropbox, etc) - Безопасное сохранение файлов базы данных (может быть несовместимо с Dropbox и другими) - - - Backup database file before saving - Создавать резервную копию базы данных перед сохранением - - - Entry Management - Управление записями - - - General - Общие - - - - SettingsWidgetSecurity - - Timeouts - Таймауты - - - Clear clipboard after - Очищать буфер обмена через - - - sec - Seconds - сек - - - Lock databases after inactivity of - Блокировать базу данных при отсутствии активности длительностью - - - Convenience - Удобство - - - Lock databases when session is locked or lid is closed - Блокировать базу данных при закрытии сеанса или закрытии крышки - - - Lock databases after minimizing the window - Блокировать базу данных при сворачивания окна - - - Don't require password repeat when it is visible - Не требовать повторный ввод пароля, когда он показывается - - - Show passwords in cleartext by default - По умолчанию показывать пароль в открытую - - - Hide passwords in the preview panel - Скрыть пароли в панели предварительного просмотра - - - Hide entry notes by default - Скрыть примечания записи по умолчанию - - - Privacy - Конфиденциальность - - - Use Google as fallback for downloading website icons - Использовать Google в качестве резервного варианта для получения значков веб-сайтов - - - Re-lock previously locked database after performing Auto-Type - Заблокировать базу данных после автоввода - - - - SetupTotpDialog - - Setup TOTP - Настроить ВРП + Signer + Подписчик Key: Ключ: - Default RFC 6238 token settings - Стандартные параметры токена RFC 6238 + Generate + Генерировать - Steam token settings - Параметры токена Steam + Import + Импортировать - Use custom settings - Использовать пользовательские настройки + Export + Экспортировать - Note: Change these settings only if you know what you are doing. - Примечание. Изменяйте эти параметры, только если знаете, что делаете. + Imported certificates + Импортированные сертификаты - Time step: - Шаг по времени: + Trust + Доверять - 8 digits - 8 цифр + Ask + Запросить - 6 digits - 6 цифр + Untrust + Не доверять - Code size: - Размер кода: + Remove + Удалить - sec - Seconds - сек + Path + Путь + + + Status + Статус + + + Fingerprint + Отпечаток + + + Certificate + Сертификат + + + Trusted + Надёжный + + + Untrusted + Ненадёжный + + + Unknown + Неизвестен + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + Ключевой файл KeeShare + + + All files + Все файлы + + + Select path + Выберите путь + + + Exporting changed certificate + Экспортирование изменённого сертификата + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Экспортированный сертификат не такой же, как сертификат, который используется. Вы хотите экспортировать текущий сертификат? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Импортировать из контейнера без подписи + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Мы не можем проверить источник коллективного контейнера, потому что он не подписан. Вы действительно хотите импортировать из %1? + + + Import from container with certificate + Импортировать из контейнера с сертификатом + + + Not this time + Не в этот раз + + + Never + Никогда + + + Always + Всегда + + + Just this time + Только в этот раз + + + Import from %1 failed (%2) + Импорт из %1 не удался (%2) + + + Import from %1 successful (%2) + Импорт из %1 успешен (%2) + + + Imported from %1 + Импортировано из %1 + + + Signed share container are not supported - import prevented + Контейнер с подписанным ресурсом не поддерживается - импорт запрещен + + + File is not readable + Файл не читабелен + + + Invalid sharing container + Неверный контейнер для обмена + + + Untrusted import prevented + Ненадежный импорт предотвращен + + + Successful signed import + Успешный подписанный импорт + + + Unexpected error + Неожиданная ошибка + + + Unsigned share container are not supported - import prevented + Контейнер без подписи не поддерживается - импорт запрещен + + + Successful unsigned import + Успешный импорт без подписи + + + File does not exist + Файл не существует + + + Unknown share container type + Неизвестный тип контейнера + + + Overwriting signed share container is not supported - export prevented + Перезапись подписанного контейнера общего ресурса не поддерживается - экспорт запрещен + + + Could not write export container (%1) + Не удалось записать Экспорт контейнера (%1) + + + Overwriting unsigned share container is not supported - export prevented + Перезапись неподписанного общего ресурса не поддерживается - экспорт запрещен + + + Could not write export container + Не удалось записать экспорта контейнера + + + Unexpected export error occurred + Произошла непредвиденная ошибка экспорта + + + Export to %1 failed (%2) + Ошибка экспорта в %1 (%2) + + + Export to %1 successful (%2) + Экспорт в %1 завершен (%2) + + + Export to %1 + Экспорт в %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + Вы хотите довериться %1 с отпечатком %2 из %3? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + @@ -4031,20 +5291,132 @@ Please unlock the selected database or choose another one which is unlocked.Copy Копировать - - Expires in - Истекает в - - - seconds - секунд + + Expires in <b>%n</b> second(s) + Истекает через <b>%n</b> секундуИстекает через <b>%n</b> секундыИстекает через <b>%n</b> секундИстекает через <b>%n</b> секунд(у) - UnlockDatabaseWidget + TotpExportSettingsDialog - Unlock database - Разблокировать базу данных + Copy + Копировать + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + Примечание: Эти параметры TOTP пользовательские и могут не работать с другими средства проверки подлинности. + + + There was an error creating the QR code. + Произошла ошибка при создании QR кода. + + + Closing in %1 seconds. + Закрытие через %1 секунд. + + + + TotpSetupDialog + + Setup TOTP + Настроить TOTP + + + Key: + Ключ: + + + Default RFC 6238 token settings + Стандартные параметры токена RFC 6238 + + + Steam token settings + Параметры токена Steam + + + Use custom settings + Использовать пользовательские параметры + + + Custom Settings + Пользовательские настройки + + + Time step: + Временной шаг: + + + sec + Seconds + сек + + + Code size: + Размер кода: + + + 6 digits + 6 цифр + + + 7 digits + 7 цифр + + + 8 digits + 8 цифр + + + + UpdateCheckDialog + + Checking for updates + Проверка обновлений + + + Checking for updates... + Проверка обновлений... + + + Close + Закрыть + + + Update Error! + Ошибка обновления! + + + An error occurred in retrieving update information. + Возникла ошибка при извлечении информации об обновлении. + + + Please try again later. + Пожалуйста, попытайтесь снова позже. + + + Software Update + Обновление программного обеспечения + + + A new version of KeePassXC is available! + Доступна новая версия KeePassXC! + + + KeePassXC %1 is now available — you have %2. + Сейчас доступна KeePassXC %1 — у Вас %2. + + + Download it at keepassxc.org + Загрузите её с keepassxc.org + + + You're up-to-date! + У Вас всё самое свежее! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 на текущий момент является самой новой доступной версией @@ -4059,7 +5431,7 @@ Please unlock the selected database or choose another one which is unlocked. Open existing database - Открыть существующую базу данных + Открыть имеющуюся базу данных Import from KeePass 1 @@ -4075,46 +5447,30 @@ Please unlock the selected database or choose another one which is unlocked. Welcome to KeePassXC %1 - Добро пожаловать в KeePassXC %1 + Вас приветствует KeePassXC %1 - main + YubiKeyEditWidget - Remove an entry from the database. - Удалить запись из базы данных. + Refresh + Обновить - Path of the database. - Путь к базе данных. + YubiKey Challenge-Response + YubiKey вызов-ответ - Path of the entry to remove. - Путь к записи, для удаления. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Если Вы владееете <a href="https://www.yubico.com/">YubiKey</a>, Вы можете использовать его для дополнительной безопасности.</p><p>YubiKey требует, чтобы один из его слотов был запрограммирован как <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/"> вызов-ответ HMAC-SHA1</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - кроссплатформенный менеджер паролей + No YubiKey detected, please ensure it's plugged in. + YubiKey не обнаружен, пожалуйста убедитесь, что он подключен. - filenames of the password databases to open (*.kdbx) - имена файлов открываемой базы данных паролей (*.kdbx) - - - path to a custom config file - путь к своему файлу настроек - - - key file of the database - файл-ключ базы данных - - - read password of the database from stdin - читать пароли базы данных из стандартного ввода «stdin» - - - Parent window handle - Дескриптор родительского окна + No YubiKey inserted. + YubiKey не подключен. \ No newline at end of file diff --git a/share/translations/keepassx_sk.ts b/share/translations/keepassx_sk.ts index 0e73dd894..450f50f42 100644 --- a/share/translations/keepassx_sk.ts +++ b/share/translations/keepassx_sk.ts @@ -19,7 +19,7 @@ Contributors - Prispievatelia + K vývoju prispeli <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> @@ -37,36 +37,6 @@ Copy to clipboard Kopírovať do schránky - - Version %1 - - Verzia %1 - - - - Revision: %1 - Revízia %1 - - - Distribution: %1 - Distribúcia %1 - - - Libraries: - Knižnice: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operačný systém: %1 -Architektúra CPU: %2 -Jadro: %3 %4 - - - Enabled extensions: - Zapnuté rozšírenia: - Project Maintainers: Správcovia projektu: @@ -75,37 +45,6 @@ Jadro: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Špeciálne poďakovanie od tímu KeePassXC patrí debfx za vytvorenie pôvodného KeePassX. - - Build Type: %1 - - Typ zostavenia: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Potvrdenie prístupu - - - Remember this decision - Zapamätať si túto voľbu - - - Allow - Povoliť - - - Deny - Zakázať - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 požiadal prístup k heslám nasledujúcej položky(iek). -Prosím, zvoľte, či chcete povoliť prístup. - AgentSettingsWidget @@ -113,6 +52,277 @@ Prosím, zvoľte, či chcete povoliť prístup. Enable SSH Agent (requires restart) Zapnúť Agenta SSH (vyžaduje reštart) + + Use OpenSSH for Windows instead of Pageant + Použiť OpenSSH pre Windows namiesto Pageant + + + + ApplicationSettingsWidget + + Application Settings + Nastavenia aplikácie + + + General + Všeobecné + + + Security + Bezpečnosť + + + Access error for config file %1 + Chyba prístupu ku konfiguračnému súboru %1 + + + Icon only + Len ikona + + + Text only + Len text + + + Text beside icon + Text vedľa ikony + + + Text under icon + Text pod ikonou + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Základné nastavenia + + + Startup + Štart + + + Start only a single instance of KeePassXC + Spustiť len jednu inštanciu KeePassXC + + + Remember last databases + Zapamätať posledné databázy + + + Remember last key files and security dongles + Zapamätať si posledné súbory kľúčov a bezpečnostných kľúčeniek + + + Load previous databases on startup + Načítať predošlé databázy pri štarte + + + Minimize window at application startup + Minimalizovať okno pri spustení aplikácie + + + File Management + Správa súborov + + + Safely save database files (may be incompatible with Dropbox, etc) + Bezpečne uložiť súbory databáz (môže byť nekompatibilné Dropbox, apod) + + + Backup database file before saving + Zálohovať databázu pri každom uložení + + + Automatically save after every change + Automaticky uložiť po každej zmene + + + Automatically save on exit + Automaticky uložiť pri ukončení + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Neoznačovať databázu za zmenenú pri nedátových zmenách (napr. rozbalenie skupiny) + + + Automatically reload the database when modified externally + Automaticky načítať databázu, ak je upravená externe + + + Entry Management + Správa položky + + + Use group icon on entry creation + Použiť ikonu skupiny pri vytváraní položky + + + Minimize when copying to clipboard + Minimalizovať pri skopírovaní do schránky + + + Hide the entry preview panel + + + + General + Všeobecné + + + Hide toolbar (icons) + Skryť panel nástrojov (ikony) + + + Minimize instead of app exit + Minimalizovať namiesto ukončenia + + + Show a system tray icon + Zobraziť ikonu v oznamovacej oblasti + + + Dark system tray icon + Tmavá ikona oznamovacej oblasti + + + Hide window to system tray when minimized + Skryť okno do oznamovacej oblasti pri minimalizácii + + + Language + Jazyk + + + Auto-Type + Automatické vypĺňanie + + + Use entry title to match windows for global Auto-Type + Použiť názov položky na zhodu okna pre globálne Automatické vypĺňanie + + + Use entry URL to match windows for global Auto-Type + Použiť URL položky na zhodu okna pre globálne Automatické vypĺňanie + + + Always ask before performing Auto-Type + Vždy sa spýtať pred vykonaním Automatického vypĺňania + + + Global Auto-Type shortcut + Globálna klávesová skratka Automatického vypĺňania + + + Auto-Type typing delay + Oneskorenie písania Auto-Type + + + ms + Milliseconds + ms + + + Auto-Type start delay + Oneskorenia spustenia Auto-Type + + + Check for updates at application startup + Pri štarte skontrolovať aktualizácie + + + Include pre-releases when checking for updates + Pri kontrole aktualizácii zahrnúť pred-vydania + + + Movable toolbar + Presúvateľný panel nástrojov + + + Button style + Štýl tlačidla + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Časové limity + + + Clear clipboard after + Vymazať schránku po + + + sec + Seconds + s + + + Lock databases after inactivity of + Zamknúť databázu po neaktivite + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + Pohodlie + + + Lock databases when session is locked or lid is closed + Zamknúť databázu pri zamknutí relácie alebo zatvorení krytu + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + Zamknúť databázu pri minimalizovaní okna + + + Re-lock previously locked database after performing Auto-Type + Znova zamknúť predtým zamknutú databázu po vykonaní Automatického vypĺňania + + + Don't require password repeat when it is visible + Nevyžadovať opakovanie hesla, ak je viditeľné + + + Don't hide passwords when editing them + Neskrývať heslo pri jeho úprave + + + Don't use placeholder for empty password fields + Nepoužiť zástupné pole na prázdne polia hesiel + + + Hide passwords in the entry preview panel + Skryť heslá v paneli ukážky položky + + + Hide entry notes by default + Predvolene skryť poznámky položky + + + Privacy + Súkromie + + + Use DuckDuckGo as fallback for downloading website icons + Na sťahovanie ikon použiť ako záložné riešenie DuckDuckGo + AutoType @@ -130,7 +340,7 @@ Prosím, zvoľte, či chcete povoliť prístup. The Syntax of your Auto-Type statement is incorrect! - Syntax Vášho Automatického vypĺňania nie je správna! + Syntax Vášho Automatického vypĺňania nieje správna! This Auto-Type command contains a very long delay. Do you really want to proceed? @@ -138,7 +348,7 @@ Prosím, zvoľte, či chcete povoliť prístup. This Auto-Type command contains very slow key presses. Do you really want to proceed? - Tento príkaz Automatického vypĺňania obsahuje príliš pomalé stlačenia kláves. Naozaj ho chcete vykonať? + Tento príkaz Automatického vypĺňania obsahuje príliš pomalé stlačenia kláves. Do you really want to proceed? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? @@ -215,6 +425,27 @@ Please select whether you want to allow access. Prosím, zvoľte, či chcete povoliť prístup. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + Ok + + + Cancel + Zrušiť + + + You have multiple databases open. +Please select the correct database for saving credentials. + Máte otvorených viac databáz. +Prosím, vyberte správnu databázu na uloženie prihlasovacích údajov. + + BrowserOptionDialog @@ -288,14 +519,6 @@ Prosím, zvoľte, či chcete povoliť prístup. Credentials mean login data requested via browser extension Zoradiť vyhovujúce údaje podľa p&už. mena - - &Disconnect all browsers - O&pojiť všetky prehliadače - - - Forget all remembered &permissions - Zabudnúť všetky zapamätané &povolenia - Advanced Pokročilé @@ -329,7 +552,7 @@ Prosím, zvoľte, či chcete povoliť prístup. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Pri štarte automaticky aktualizovať cestu spustiteľného súboru s KeePassXC alebo keepassxc-proxy na skripty posielania správ medzi prehliadačom a KeePassXC (native messaging). + Pri spúšťaní automaticky aktualizovať cestu spustiteľného súboru s KeePassXC alebo keepassxc-proxy na skripty posielania správ medzi prehliadačom a KeePassXC (native messaging). Update &native messaging manifest files at startup @@ -361,21 +584,42 @@ Prosím, zvoľte, či chcete povoliť prístup. <b>Warning:</b> The following options can be dangerous! <b>Upozornenie:</b> nasledujúce voľby môžu byť nebezpečné! - - Executable Files (*.exe);;All Files (*.*) - Spustiteľné súbory (*.exe);;Všetky súbory(*.*) - - - Executable Files (*) - Spustiteľné súbory (*) - Select custom proxy location Zvoliť vlastné umiestnenie proxy - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Prepáčte, ale KeePassXC-Prehliadač nie je v súčasnosti podporovaný pre vydania Snap. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Upozornenie</b>, nebola nájdená aplikácia keepassxc-proxy!<br />Prosím, skontrolujte inštalačný adresár KeePassXC alebo potvrďte vlastnú cestu v pokročilých nastaveniach.<br />Integrácia prehliadača NEBUDE FUNGOVAŤ bez tejto proxy.<br />Očakávaná cesta: + + + Executable Files + Spustiteľné súbory + + + All Files + Všetky súbory + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Nepýtať povolenie na HTTP &Basic Auth + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,154 +660,54 @@ Chcete ho prepísať? Do you want to update the information in %1 - %2? Chcete upraviť informácie v %1 – %2? - - KeePassXC: Database locked! - KeePassXC: Databáza zamknutá! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Aktívna databáza je zamknutá! -Prosím, odomknite zvolenú databázu alebo zvoľte inú, ktorá nie je zamknutá. - - - KeePassXC: Settings not available! - KeePassXC: Nastavenia nie sú dostupné! - - - The active database does not contain a settings entry. - Aktívna databáza neobsahuje položku nastavenia. - - - KeePassXC: No keys found - KeePassXC: Nenájdené žiadne kľúče - - - No shared encryption keys found in KeePassXC Settings. - V nastavenia KeePassXC neboli nájdené žiadne šifrovacie kľúče. - - - KeePassXC: Removed keys from database - KeePassXC: Klúče odstránené z databázy - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Úspešne odstránený %n šifrovací kľúč z nastavení KeePassXC.Úspešne odstránené %n šifrovacie kľúče z nastavení KeePassXC.Úspešne odstránených %n šifrovacích kľúčov z nastavení KeePassXC.Úspešne odstránených %n šifrovacích kľúčov z nastavení KeePassXC. - - - Removing stored permissions… - Odstraňovanie uložených povolení… - Abort Zrušiť - KeePassXC: Removed permissions - KeePassXC: Povolenia odstránené + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). - Úspešne odstránené povolenia z %n položky.Úspešne odstránené povolenia z %n položiek.Úspešne odstránené povolenia z %n položiek.Úspešne odstránené povolenia z %n položiek. + Successfully moved %n keys to custom data. + - KeePassXC: No entry with permissions found! - KeePassXC: Nenájdená žiadna položka s povoleniami! + KeePassXC: No entry with KeePassHTTP attributes found! + - The active database does not contain an entry with permissions. - Aktívna databáza neobsahuje položku s povoleniami. - - - - ChangeMasterKeyWidget - - Password - Heslo + The active database does not contain an entry with KeePassHTTP attributes. + - Enter password: - Zadajte heslo: + KeePassXC: Legacy browser integration settings detected + - Repeat password: - Zopakujte heslo: + KeePassXC: Create a new group + - &Key file - Súbor &kľúča + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Prechádzať - - - Create - Vytvoriť - - - Cha&llenge Response - Vý&zva – Odpoveď - - - Refresh - Obnoviť - - - Key files - Súbory kľúčov - - - All files - Všetky súbory - - - Create Key File... - Vytvoriť súbor kľúča... - - - Unable to create Key File : - Nemožno vytvoriť súbor kľúča: - - - Select a key file - Zvoľte súbor kľúča - - - Empty password - Prázdne heslo - - - Do you really want to use an empty string as password? - Naozaj chcete použiť prázdny reťazec ako heslo? - - - Different passwords supplied. - Zadané heslá s líšia. - - - Failed to set %1 as the Key file: -%2 - Zlyhalo nastavenie %1 ako súboru kľúča: -%2 - - - Legacy key file format - Starý formát kľúča - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Používate starý formát súboru kľúča, ktorý už nemusí byť -v budúcnosti podporovaný . - -Prosím, zvážte vygenerovanie nového súboru kľúča. - - - Changing master key failed: no YubiKey inserted. - Zmena hlavného kľúča zlyhala: nie je vložený YubiKey. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -617,7 +761,7 @@ Prosím, zvážte vygenerovanie nového súboru kľúča. Comments start with - Komentáre začínajú znakom + Komentáre začínajú First record has field names @@ -643,14 +787,6 @@ Prosím, zvážte vygenerovanie nového súboru kľúča. Not present in CSV file Neexistuje v súbore CSV - - Empty fieldname - Prázdny názov poľa - - - column - stĺpec - Imported from CSV file Importované zo súboru CSV @@ -659,50 +795,90 @@ Prosím, zvážte vygenerovanie nového súboru kľúča. Original data: Pôvodné dáta: - - Error(s) detected in CSV file ! - V súbore CSV zistená chyba(y)! - - - more messages skipped] - ďalšie správy preskočené] - Error Chyba + + Empty fieldname %1 + Prázdne meno poľa %1 + + + column %1 + stĺpec %1 + + + Error(s) detected in CSV file! + V súbore CSV zistená chyba(y)! + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - Import CSV: zapisovač má chyby: - - - - - CsvImportWizard - - Error - Chyba - - - Unable to calculate master key - Nemožno vypočítať hlavný kľúč +%1 + CsvParserModel - - %n byte(s), - %n bajt%n bajty%n bajtov%n bajtov - - - %n row(s), - %n riadok%n riadky%n riadkov%n riadkov - %n column(s) %n stĺpec%n stĺpce%n stĺpcov%n stĺpcov + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bajt%n bajty%n bajtov%n bajt(y) + + + %n row(s) + + + + + Database + + Root + Root group name + Koreň + + + File %1 does not exist. + Súbor %1 neexistuje. + + + Unable to open file %1. + Nemožno otvoriť súbor %1. + + + Error while reading the database: %1 + Chyba čítania databázy: %1 + + + Could not save, database has no file name. + Nemožno uložiť, databáza nemá meno súboru. + + + File cannot be written as it is opened in read-only mode. + + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + DatabaseOpenWidget @@ -730,14 +906,6 @@ Prosím, zvážte vygenerovanie nového súboru kľúča. Challenge Response: Výzva – odpoveď: - - Unable to open the database. - Nemožno otvoriť databázu. - - - Can't open key file - Nemožno otvoriť súbor kľúča - Legacy key file format Starý formát kľúča @@ -768,53 +936,250 @@ Prosím, zvážte vygenerovanie nového súboru kľúča. Select key file Zvoľte súbor kľúča - - - DatabaseRepairWidget - Repair database - Opraviť databázu + TouchID for quick unlock + - Error - Chyba + Unable to open the database: +%1 + - Can't open key file - Nemožno otvoriť súbor kľúča - - - Unable to open the database. - Nemožno otvoriť databázu. - - - Database opened fine. Nothing to do. - Databáza úspešne otvorená. Nič netreba vykonať. - - - Success - Úspešné - - - The database has been successfully repaired -You can now save it. - Databáza bola úspešne opravená -Môžete ju teraz uložiť. - - - Unable to repair the database. - Nemožno opraviť databázu. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Heslá + + + + DatabaseSettingsDialog + + Advanced Settings + + General Všeobecné - Encryption - Šifrovanie + Security + Bezpečnosť + + + Master Key + Hlavný kľúč + + + Encryption Settings + Nastavenia šifrovania + + + Browser Integration + Integrácia prehliadača + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + O&pojiť všetky prehliadače + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + Uložené kľúče + + + Remove + Odstrániť + + + Delete the selected key? + Odstrániť zvolený kľúč? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Naozaj chcete odstrániť zvolený kľúč? +Môže to brániť pripojeniu zásuvného modulu prehliadača. + + + Key + Kľúč + + + Value + Hodnota + + + Enable Browser Integration to access these settings. + Zapnúť Integráciu prehliadača na prístup k týmto nastaveniam. + + + Disconnect all browsers + Odpojiť všetky prehliadače + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Naozaj chcete odpojiť všetky prehliadače? +Môže to brániť pripojeniu zásuvného modulu prehliadača. + + + KeePassXC: No keys found + KeePassXC: Nenájdené žiadne kľúče + + + No shared encryption keys found in KeePassXC settings. + V nastavení KeePassXC neboli nájdené zdieľané šifrovacie kľúče. + + + KeePassXC: Removed keys from database + KeePassXC: Klúče odstránené z databázy + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + Zabudnúť všetky nastavenia položiek špecifické pre stránky + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Odstraňovanie uložených povolení… + + + Abort + Zrušiť + + + KeePassXC: Removed permissions + KeePassXC: Povolenia odstránené + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: Nenájdená žiadna položka s povoleniami! + + + The active database does not contain an entry with permissions. + Aktívna databáza neobsahuje položku s povoleniami. + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Šifrovací algoritmus: + + + AES: 256 Bit (default) + AES: 256 bit (predvolené) + + + Twofish: 256 Bit + Twofish: 256 bitov + + + Key Derivation Function: + Funkcia odvodenia kľúča (KDF): + + + Transform rounds: + Počet transformácií: + + + Benchmark 1-second delay + 1-sekundové oneskorenie testu výkonu + + + Memory Usage: + Využitie pamäte: + + + Parallelism: + Paralelizmus: + + + Decryption Time: + Čas dešifrovania: + + + ?? s + + + + Change + Zmeniť + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Vyššie hodnoty poskytujú viac ochrany, ale otvorenie databázy bude trvať dlhšie. + + + Database format: + Formát databázy: + + + This is only important if you need to use your database with other programs. + Toto je dôležité len ak potrebujete používať svoju databázu z iných programov. + + + KDBX 4.0 (recommended) + KDBX 4.0 (odporúčané) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + bez zmeny Number of rounds too high @@ -861,47 +1226,22 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je MiB Abbreviation for Mebibytes (KDF settings) - MiBMiBMiBMiB + MiB MiB MiB MiB thread(s) Threads for parallel execution (KDF settings) - vláknovláknavlákienvlákien + - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Šifrovací algoritmus: + + %1 ms + milliseconds + %1 ms%1 ms%1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 bitov (predvolené) - - - Twofish: 256 Bit - Twofish: 256 bitov - - - Key Derivation Function: - Funkcia odvodenia kľúča (KDF): - - - Transform rounds: - Počet transformácií: - - - Benchmark 1-second delay - 1-sekundové oneskorenie testu výkonu - - - Memory Usage: - Využitie pamäte: - - - Parallelism: - Paralelizmus: + + %1 s + seconds + %1 s%1 s%1 s%1 s @@ -952,12 +1292,83 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Koreň + Sharing + Zdieľanie + + Breadcrumb + + + + Type + Typ + + + Path + Cesta + + + Last Signer + + + + Certificates + Certifikáty + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + Neznáma chyba + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Meno databázy: + + + Description: + Popis: + + + + DatabaseTabWidget KeePass 2 Database Databáza KeePass 2 @@ -970,30 +1381,10 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je Open database Otvoriť databázu - - File not found! - Súbor nenájdený! - - - Unable to open the database. - Nemožno otvoriť databázu. - - - File opened in read only mode. - Súbor otvorený v režime len na čítanie. - - - Open CSV file - Otvoriť súbor CSV - CSV file Súbor CSV - - All files (*) - Všetky súbory (*) - Merge database Zlúčiť databázu @@ -1006,38 +1397,6 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je KeePass 1 database Databáza KeePass 1 - - Close? - Zatvoriť? - - - "%1" is in edit mode. -Discard changes and close anyway? - „%1” je v režime úprav. -Zahodiť zmeny a zatvoriť? - - - Save changes? - Uložiť zmeny? - - - "%1" was modified. -Save changes? - „%1” bol zmenený. -Uložiť zmeny? - - - Writing the database failed. - Zápis databázy zlyhal. - - - Passwords - Heslá - - - Save database as - Uložiť databázu ako - Export database to CSV file Exportovať databázu do súboru CSV @@ -1047,40 +1406,40 @@ Uložiť zmeny? Zápis do súboru CSV zlyhal. - New database + Database creation error + Chyba vytvorenia databázy + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + Zvoľte súbor CSV + + + New Database Nová databáza - locked - zamknuté + %1 [New Database] + Database tab name modifier + %1 [Nová databáza] - Lock database - Zamknúť databázu + %1 [Locked] + Database tab name modifier + %1 [Zamknutá] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Databázu nemožno zamknúť, práve ju upravujete. -Prosím, zvoľte Zrušiť na dokončenie svojich úprav alebo ich zahoďte. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Táto databáza bola zmenená. -Chcete uložiť zmeny pred jej uzamknutím? -Inak budú zmeny stratené. - - - Disable safe saves? - Vypnúť bezpečné ukladanie? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC pri ukladaní databázy viac krát zlyhal. Pravdepodobne to je spôsobené službou synchronizácie súborov, ktorá drží zámok na ukladanom súbore. -Vypnúť bezpečné ukladanie a skúsiť znova? + %1 [Read-only] + Database tab name modifier + %1 [Len na čítanie] @@ -1089,38 +1448,14 @@ Vypnúť bezpečné ukladanie a skúsiť znova? Searching... Hľadanie… - - Change master key - Zmeniť hlavný kľúč - - - Delete entry? - Odstrániť položku? - Do you really want to delete the entry "%1" for good? Naozaj chcete nadobro odstrániť položku „%1”? - - Delete entries? - Odstrániť položky? - - - Do you really want to delete %1 entries for good? - Naozaj chcete nadobro odstrániť %1 položky? - - - Move entry to recycle bin? - Presunúť položku do koša? - Do you really want to move entry "%1" to the recycle bin? Naozaj chcete presunúť položku „%1” do koša? - - Move entries to recycle bin? - Presunúť položky do koša? - Do you really want to move %n entry(s) to the recycle bin? Naozaj chcete presunúť %1 položku do koša?Naozaj chcete presunúť %1 položky do koša?Naozaj chcete presunúť %1 položiek do koša?Naozaj chcete presunúť %1 položiek do koša? @@ -1137,18 +1472,10 @@ Vypnúť bezpečné ukladanie a skúsiť znova? Remember my choice Zapamätať si moju voľbu - - Delete group? - Odstrániť skupinu? - Do you really want to delete the group "%1" for good? Naozaj chcete nadobro odstrániť skupinu „%1”? - - Unable to calculate master key - Nemožno vypočítať hlavný kľúč - No current database. Žiadna otvorená databáza. @@ -1183,10 +1510,6 @@ Do you want to merge your changes? Súbor databázy bol zmenený a Vy máte neuložené zmeny. Chcete zlúčiť svoje zmeny? - - Could not open the new database file while attempting to autoreload this database. - Pri pokuse o automatické načítanie tejto databázy nemožno otvoriť nový súbor databázy. - Empty recycle bin? Vyprázdniť kôš? @@ -1195,88 +1518,108 @@ Chcete zlúčiť svoje zmeny? Are you sure you want to permanently delete everything from your recycle bin? Naozaj chcete na trvalo odstrániť všetko zo svojho koša? - - - DetailsWidget - - Generate TOTP Token - Generovať token TOPT + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - Zatvoriť + File opened in read only mode. + Súbor otvorený v režime len na čítanie. - General - Všeobecné + Lock Database? + Zamknúť databázu? - Password - Heslo + You are editing an entry. Discard changes and lock anyway? + - URL - URL + "%1" was modified. +Save changes? + „%1” bol zmenený. +Uložiť zmeny? - Expiration - Platí do + Database was modified. +Save changes? + - Username - Používateľské meno + Save changes? + Uložiť zmeny? - Autotype - Automatické vypĺňanie + Could not open the new database file while attempting to autoreload. +Error: %1 + - Searching - Hľadanie + Disable safe saves? + Vypnúť bezpečné ukladanie? - Attributes - Atribúty + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC pri ukladaní databázy viac krát zlyhal. Pravdepodobne to je spôsobené službou synchronizácie súborov, ktorá drží zámok na ukladanom súbore. +Vypnúť bezpečné ukladanie a skúsiť znova? - Attachments - Prílohy + Writing the database failed. +%1 + - Notes - Poznámky + Passwords + Heslá - Window - Okno + Save database as + Uložiť databázu ako - Sequence - Postupnosť + KeePass 2 Database + Databáza KeePass 2 - Search - Hľadať + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Clear - Vymazať + Delete group + - Never - Nikdy + Move group to recycle bin? + - [PROTECTED] - [CHRÁNENÉ] + Do you really want to move the group "%1" to the recycle bin? + - Disabled - Vypnuté + Successfully merged the database files. + - Enabled - Zapnuté + Database was not modified by merge operation. + + + + Shared group... + @@ -1349,22 +1692,10 @@ Chcete zlúčiť svoje zmeny? New attribute Nový atribút - - Confirm Remove - Potvrďte odstránenie - Are you sure you want to remove this attribute? Naozaj chcete odstrániť tento atribút? - - [PROTECTED] - [CHRÁNENÉ] - - - Press reveal to view or edit - Použite Odkryť, na zobrazenie alebo úpravu - Tomorrow Zajtra @@ -1375,11 +1706,7 @@ Chcete zlúčiť svoje zmeny? %n month(s) - %n mesiac%n mesiace%n mesiacov%n mesiacov - - - 1 year - 1 rok + %n mesiacoch%n mesiacoch%n mesiacoch%n mesiacoch Apply generated password? @@ -1393,6 +1720,26 @@ Chcete zlúčiť svoje zmeny? Entry updated successfully. Položka úspešne zmenená. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1637,6 +1984,97 @@ Chcete zlúčiť svoje zmeny? Zdediť z nadradenej skupiny (%1) + + EditGroupWidgetKeeShare + + Form + Formulár + + + Type: + + + + Path: + + + + ... + + + + Password: + Heslo: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + Vymazať + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1692,11 +2130,7 @@ Chcete zlúčiť svoje zmeny? Unable to fetch favicon. - Nemožno stiahnuť ikonu stránky. - - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Tip: Môžete zapnúť Google ako poslednú záchranu v Nástroje > Nastavenia > Bezpečnosť + Nemožno stiahnuť ikonu stránky Images @@ -1706,14 +2140,6 @@ Chcete zlúčiť svoje zmeny? All files Všetky súbory - - Select Image - Zvoľte obrázok - - - Can't read icon - Nemožno načítať ikonu - Custom icon already exists Vlastná ikona už existuje @@ -1723,8 +2149,36 @@ Chcete zlúčiť svoje zmeny? Potvrďte odstránenie - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Táto ikona je použitá %1 položkou(ami) a bude nahradená predvolenou ikonou. Naozaj ju chcete odstrániť? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1775,9 +2229,8 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. Entry - - Clone - Suffix added to cloned entries - – Klonovať + %1 - Clone + @@ -1821,10 +2274,6 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.Are you sure you want to remove %n attachment(s)? Naozaj chcete odstrániť %n prílohu?Naozaj chcete odstrániť %n prílohy?Naozaj chcete odstrániť %n príloh?Naozaj chcete odstrániť %n príloh? - - Confirm Remove - Potvrďte odstránenie - Save attachments Uložiť prílohy @@ -1862,10 +2311,13 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - Nemožno otvoriť súbory: -%1 + @@ -1887,7 +2339,7 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. Username - Použ. meno: + Používateľské meno URL @@ -1911,7 +2363,7 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. Username - Použ. meno: + Používateľské meno URL @@ -1949,6 +2401,106 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.Attachments Prílohy + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + Generovať token TOPT + + + Close + Zatvoriť + + + General + Všeobecné + + + Username + Použ. meno: + + + Password + Heslo + + + Expiration + Platí do + + + URL + URL + + + Attributes + Atribúty + + + Attachments + Prílohy + + + Notes + Poznámky + + + Autotype + Automatické vypĺňanie + + + Window + Okno + + + Sequence + Postupnosť + + + Searching + Hľadanie + + + Search + Hľadať + + + Clear + Vymazať + + + Never + Nikdy + + + [PROTECTED] + [CHRÁNENÉ] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + Zapnuté + + + Disabled + Vypnuté + + + Share + + EntryView @@ -1987,6 +2539,11 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.Recycle Bin Kôš + + [empty] + group has no children + + HostInstaller @@ -1999,61 +2556,6 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.Nemožno uložiť súbor skriptu správ medzi prehliadačom a KeePassXC (native messaging). - - HttpPasswordGeneratorWidget - - Length: - Dĺžka: - - - Character Types - Typy znakov - - - Upper Case Letters - Veľké písmená - - - A-Z - A-Ž - - - Lower Case Letters - Malé písmená - - - a-z - a-ž - - - Numbers - Číslice - - - 0-9 - 0-9 - - - Special Characters - Špeciálne znaky - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Vynechať podobne vyzerajúce znaky - - - Ensure that the password contains characters from every group - Zaistiť aby heslo obsahovalo znaky každej skupiny - - - Extended ASCII - Rozšírené ASCII - - KMessageWidget @@ -2079,6 +2581,26 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.Wrong key or database file is corrupt. Zlý kľúč alebo je súbor databázy poškodený. + + missing database headers + chýbajúce hlavičky databázy + + + Header doesn't match hash + + + + Invalid header id size + Neplatná veľkosť ID hlavičky + + + Invalid header field length + Neplatná dĺžka poľa hlavičky + + + Invalid header data length + Neplatná dĺžka dát hlavičky + Kdbx3Writer @@ -2161,22 +2683,23 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - Neplatná dĺžka názvu položky meta-dát + Neplatná dĺžka názvu položky mapy varianty Invalid variant map entry name data Translation: variant map = data structure for storing meta data - Neplatné dáta názvu položky meta-dát + Neplatné dáta názvu položky mapy varianty Invalid variant map entry value length Translation: variant map = data structure for storing meta data - Neplatná dĺžka hodnoty položky meta-dát + Neplatná dĺžka hodnoty položky mapy varianty + Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - Neplatné dáta hodnoty položky meta-dát + Neplatné dáta hodnoty položky mapy varianty Invalid variant map Bool entry value length @@ -2237,17 +2760,13 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. KdbxReader - - Invalid cipher uuid length - Neplatná dĺžka UUID šifry - Unsupported cipher Nepodporovaná šifra Invalid compression flags length - Neplatná dĺžka príznakov komprimácie + Nepodporovaný komprimačný algoritmus Unsupported compression algorithm @@ -2259,7 +2778,7 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. Invalid transform seed size - Neplatná transformácia náhodnosti (seed) + Neplatná transformácia hlavnej náhodnosti (seed) Invalid transform rounds size @@ -2295,6 +2814,18 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Unsupported KeePass 2 database version. Nepodporovaná verzia databázy KeePass 2. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2320,11 +2851,11 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Null group uuid - Žiadne UUID skupiny + Nulový UUID skupiny Invalid group icon number - Neplatné číslo ikony skupiny + Neplatný počet ikon skupiny Invalid EnableAutoType value @@ -2340,7 +2871,7 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Null DeleteObject uuid - Žiadne UUID DeleteObject + Nulový UUID DeleteObject Missing DeletedObject uuid or time @@ -2348,11 +2879,11 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Null entry uuid - Žiadne UUID položky + Nulový UUID položky Invalid entry icon number - Neplatné číslo ikony položky + Neplatný počet ikon položky History element in history entry @@ -2366,17 +2897,13 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť History element with different uuid Prvok histórie s iným UUID - - Unable to decrypt entry string - Nemožno dešifrovať text položky - Duplicate custom attribute found Nájdený duplicitný vlastný atribút Entry string key or value missing - Chýba textový kľúč alebo hodnota položky + Chýba kľúč alebo hodnota reťazca položky Duplicate attachment found @@ -2404,7 +2931,7 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Invalid color rgb part - Neplatná časť RGB farby + neplatná časť RGB farby Invalid number value @@ -2419,6 +2946,12 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Translator meant is a binary data inside an entry Nemožno dekomprimovať binárku + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2582,55 +3115,142 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Invalid entry field type Neplatný typ poľa položky - - - KeePass2 - AES: 256-bit - AES: 256-b - - - Twofish: 256-bit - Twofish: 256-b - - - ChaCha20: 256-bit - ChaCha20: 256-b - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – odporúčané) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Existujúci súbor zámku jednej inštancie nie je platný. Spúšťam novú inštanciu. + Disabled share + - The lock file could not be created. Single-instance mode disabled. - Súbor zámku nemožno vytvoriť. Režim jednej inštancie vypnutý. + Import from + - Another instance of KeePassXC is already running. - Už je spustená iná inštancia KeePassXC. + Export to + - Fatal error while testing the cryptographic functions. - Fatálna chyba pri testovaní kryptografických funkcií. + Synchronize with + - KeePassXC - Error - KeePassXC – Chyba + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + Zrušiť + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Prechádzať + + + Generate + Generovať + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + Starý formát kľúča + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Súbory kľúčov + + + All files + Všetky súbory + + + Create Key File... + Vytvoriť súbor kľúča... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Zvoľte súbor kľúča @@ -2643,10 +3263,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť &Recent databases &Nedávne databázy - - Import - Importovať - &Help &Pomocník @@ -2655,14 +3271,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť E&ntries Polo&žky - - Copy att&ribute to clipboard - Kopírovať at&ribút do schránky - - - Time-based one-time password - Jednorázové heslo založené na čase (TOTP) - &Groups &Skupiny @@ -2691,30 +3299,10 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť &Close database &Zatvoriť databázu - - &New database - &Nová databáza - - - Merge from KeePassX database - Zlúčiť z databázy KeePassX - - - &Add new entry - Pridať &novú položku - - - &View/Edit entry - &Zobraziť/upraviť položku - &Delete entry O&dstrániť položku - - &Add new group - Pridať novú &skupinu - &Edit group &Upraviť skupinu @@ -2727,14 +3315,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Sa&ve database as... Ul&ožiť databázu ako… - - Change &master key... - Zmeniť &hlavný kľúč… - - - &Database settings - Nastavenia &databázy - Database settings Nastavenia databázy @@ -2743,10 +3323,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť &Clone entry &Klonovať položku - - &Find - &Nájsť - Copy &username Kopírovať po&už. meno @@ -2755,10 +3331,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Copy username to clipboard Skopíruje používateľské meno do schránky - - Cop&y password - Kopírovať &heslo - Copy password to clipboard Skopíruje heslo do schránky @@ -2771,14 +3343,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Password Generator Generátor hesla - - &Perform Auto-Type - &Vykonať Automatické vypĺňanie - - - &Open URL - &Otvoriť URL - &Lock databases Za&mknúť databázy @@ -2811,22 +3375,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť &Export to CSV file... &Exportovať do súboru CSV… - - Import KeePass 1 database... - Importovať databázu KeePass 1… - - - Import CSV file... - Importovať súbor CSV… - - - Re&pair database... - O&praviť databázu.. - - - Show TOTP - Zobraziť TOTP - Set up TOTP... Nastaviť TOTP… @@ -2847,14 +3395,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Access error for config file %1 Chyba prístupu ku konfiguračnému súboru %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Zdá sa, že na integráciu prehliadača používate KeePassHTTP. Táto možnosť je zastaraná a bude v budúcnosti odstránená.<br>Prosím, prejdite namiesto toho na na KeePassXC-Prehliadač! na pomoc s migráciou, navštívte našu <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">príručku migrácie</a> (upozornenie %1 z 3).</p> - - - read-only - len na čítanie - Settings Nastavenia @@ -2867,26 +3407,6 @@ Je to jednosmerná migrácia. Importovanú databázu už nebude možné otvoriť Quit KeePassXC Skončiť KeePassXC - - KeePass 2 Database - Databáza KeePass 2 - - - All files - Všetky súbory - - - Open database - Otvoriť databázu - - - Save repaired database - Uložiť opravenú databázu - - - Writing the database failed. - Zápis databázy zlyhal. - Please touch the button on your YubiKey! Prosím, stlačte tlačidlo svojho YubiKey! @@ -2899,6 +3419,268 @@ This version is not meant for production use. Existuje veľké riziko poškodenia, zálohujte svoje dtabázy. Táto verzia nie je určená na produkčné použitie. + + &Donate + &Podporiť + + + Report a &bug + Nahlásiť &chybu + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + UPOZORNENIE: Vaša verzia Qt môže spôsobiť pád KeePassXC s klávesnicou na obrazovke! +Odporúčame použiť AppImage dostupný v našej stránke sťahovaní. + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Koreň + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Nastavenia šifrovania + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -3000,125 +3782,30 @@ Táto verzia nie je určená na produkčné použitie. - OptionDialog + PasswordEditWidget - Dialog - Dialóg + Enter password: + Zadajte heslo: - This is required for accessing your databases from ChromeIPass or PassIFox - Toto je vyžadované na prístup k databázam z ChromeIPass alebo PassIFox + Confirm password: + - Enable KeePassHTTP server - Zapnúť server KeePassHTTP + Password + Heslo - General - Všeobecné + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Z&obraziť upozornenie, keď sú požadované údaje + Passwords do not match. + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Vrátiť len najlepšie zhody danej URL, namiesto všetkých položiek celej domény. - - - &Return only best matching entries - V&rátiť len položky s najlepšou zhodou - - - Re&quest to unlock the database if it is locked - Po&žiadať o odomknutie databázy, ak je zamknutá - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Vrátené budú len položky s rovnakou schémou (http://, https://, ftp://, ...). - - - &Match URL schemes - Zhoda sché&m URL - - - Sort matching entries by &username - Zoradiť vyhovujúce položky podľa p&už. mena - - - Sort &matching entries by title - Zoradiť vyhovujúce položky podľa &názvu - - - R&emove all shared encryption keys from active database - Odstrániť vš&etky zdieľané šifrovacie kľúče z aktívnej databázy - - - Re&move all stored permissions from entries in active database - Odstrániť všetky uložené povolenia z položiek aktívnej databázy - - - Password Generator - Generátor hesla - - - Advanced - Pokročilé - - - Always allow &access to entries - Vždy povoliť &prístup k položkám - - - Always allow &updating entries - Vždy povoliť &úpravu položiek - - - Only the selected database has to be connected with a client. - S klientom má byť pripojená len zvolená databáza. - - - Searc&h in all opened databases for matching entries - &Hľadať vyhovujúce položky vo všetkých otvorených databázach - - - Automatically creating or updating string fields is not supported. - Automatické vytváranie alebo úprava textových polí nie je podporovaná. - - - &Return advanced string fields which start with "KPH: " - V&rátiť reťazce pokročilých polí, ktoré začínajú na „KPH: ” - - - HTTP Port: - Port HTTP: - - - Default port: 19455 - Predvolený port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC bude prijímať na tomto porte na 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Upozornenie:</b> nasledujúce voľby môžu byť nebezpečné! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP je zastarané a bude v budúcnosti odstránené.<br>Prosím, prejdite namiesto toho na na KeePassXC-Prehliadač! na pomoc s migráciou, navštívte našu <a href="https://keepassxc.org/docs/keepassxc-browser-migration">príručku migrácie.</p> - - - Cannot bind to privileged ports - Nemožno použiť privilegované porty - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Nemožno použiť privilegované porty pod 1204! -Použitý predvolený port 19455. + Generate master password + @@ -3188,18 +3875,10 @@ Použitý predvolený port 19455. Wordlist: Zoznam slov: - - Word Count: - Počet slov: - Word Separator: Oddeľovač slov: - - Generate - Generovať - Copy Kopírovať @@ -3212,10 +3891,6 @@ Použitý predvolený port 19455. Close Zatvoriť - - Apply - Použiť - Entropy: %1 bit Náhodnosť: %1 b @@ -3227,7 +3902,7 @@ Použitý predvolený port 19455. Poor Password quality - Biedne + Slabé Weak @@ -3244,6 +3919,171 @@ Použitý predvolený port 19455. Password quality Výbroné + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Pokročilé + + + Upper Case Letters A to F + + + + A-Z + A-Ž + + + Lower Case Letters A to F + + + + a-z + a-ž + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Odstrániť + + + Move + + + + Empty + + + + Remove + Odstrániť + + + Skip + + + + Disable + Vypnúť + + + Merge + + QObject @@ -3263,34 +4103,18 @@ Použitý predvolený port 19455. Cannot decrypt message Nemožno dešifrovať správu - - Timeout or cannot connect to KeePassXC - Uplynul časový limit alebo sa ku KeePassXC nemožno pripojiť - Action cancelled or denied Akcia zrušená alebo odmietnutá - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Nemožno zašifrovať správu alebo nebol nájdený verejný kľúč. Je v KeePassXC zapnuté posielanie správ medzi prehliadačom a KeePassXC (native messaging)? - KeePassXC association failed, try again Spojenie s KeePassXC zlyhalo, skúste znova - - Key change was not successful - Zmena kľúča nebola úspešná - Encryption key is not recognized Šifrovací kľúč nerozpoznaný - - No saved databases found - Neboli nájdené uložené databázy - Incorrect action Nesprávna akcia @@ -3305,7 +4129,7 @@ Použitý predvolený port 19455. No logins found - Neboli nájdené prihlásenia + Nebolo nájdené prihlásenie Unknown error @@ -3361,7 +4185,7 @@ Použitý predvolený port 19455. Path of the entry to add. - Cesta pridávanej položky. + Cesta pridávanej položky Copy an entry's password to the clipboard. @@ -3416,10 +4240,6 @@ Použitý predvolený port 19455. Insert password to unlock %1: Na odomknutie zadajte heslo: %1 - - Failed to load key file %1 : %2 - Zlyhalo načítanie súboru kľúča %1 : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3504,19 +4324,13 @@ Dostupné príkazy: error reading from device chyba čítania zo zariadenia - - file empty ! - - súbor je prázdny! - - malformed string zlý formát reťazca missing closing quote - chýbajúca koncová úvodzovka + chýba koncová úvodzovka Group @@ -3546,10 +4360,6 @@ Dostupné príkazy: Created Vytvorené - - Legacy Browser Integration - Stará integrácia prehliadača - Browser Integration Integrácia prehliadača @@ -3578,10 +4388,6 @@ Dostupné príkazy: Word count for the diceware passphrase. Počet slov pre diceware tajnú vetu. - - count - počet - Wordlist for the diceware generator. [Default: EFF English] @@ -3593,28 +4399,442 @@ Dostupné príkazy: Generovať nové náhodné heslo. - Length of the generated password. - Dĺžka generovaného hesla. + Invalid value for password length %1. + - Use lowercase characters in the generated password. - V generovanom hesle použiť malé písmená. + Could not create entry with path %1. + - Use uppercase characters in the generated password. - V generovanom hesle použiť veľké písmená. + Enter password for new entry: + - Use numbers in the generated password. - V generovanom hesle použiť číslice. + Writing the database failed %1. + - Use special characters in the generated password. - V generovanom hesle použiť špeciálne znaky. + Successfully added entry %1. + - Use extended ASCII in the generated password. - V generovanom hesle použiť rozšírené ASCII. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + počet + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + Súbor %1 neexistuje. + + + Unable to open file %1. + Nemožno otvoriť súbor %1. + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256-b + + + Twofish: 256-bit + Twofish: 256-b + + + ChaCha20: 256-bit + ChaCha20: 256-b + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – odporúčané) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Odstrániť položku z databázy. + + + Path of the entry to remove. + Cesta položky na odstránenie. + + + Existing single-instance lock file is invalid. Launching new instance. + Existujúci súbor zámku jednej inštancie nie je platný. Spúšťam novú inštanciu. + + + The lock file could not be created. Single-instance mode disabled. + Súbor zámku nemožno vytvoriť. Režim jednej inštancie vypnutý. + + + KeePassXC - cross-platform password manager + KeePassXC – multi-platformový správca hesiel + + + filenames of the password databases to open (*.kdbx) + mená súborov databáz hesiel na otvorenie (*.kdbx) + + + path to a custom config file + cesta k vlastnému konfiguračnému súboru + + + key file of the database + súbor kľúča databázy + + + read password of the database from stdin + čítať heslo databázy zo stdin + + + Parent window handle + ID rodičovského okna + + + Another instance of KeePassXC is already running. + Už je spustená iná inštancia KeePassXC. + + + Fatal error while testing the cryptographic functions. + Fatálna chyba pri testovaní kryptografických funkcií. + + + KeePassXC - Error + KeePassXC – Chyba + + + Database password: + Heslo databázy: + + + Cannot create new group + @@ -3652,11 +4872,97 @@ Dostupné príkazy: - SearchWidget + SSHAgent - Search... - Hľadanie… + Agent connection failed. + Spojenie agenta zlyhalo. + + Agent protocol error. + Chyba protokolu agenta. + + + No agent running, cannot add identity. + Nie je spustený žiadny agent, nemožno identifikovať. + + + No agent running, cannot remove identity. + Nie je spustený žiadny agent, nemožno odstrániť identitu. + + + Agent refused this identity. Possible reasons include: + Agent odmietol túto identitu. Možné príčiny: + + + The key has already been added. + Kľúč už bol pridaný. + + + Restricted lifetime is not supported by the agent (check options). + Obmedzená doba platnosti nie je agentom podporovaná (skontrolujte voľby) + + + A confirmation request is not supported by the agent (check options). + Potrvrdzovací požiadavok nie je podporovaný (skontrolujte voľby). + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Hľadať @@ -3665,315 +4971,332 @@ Dostupné príkazy: Clear Vymazať - - Case Sensitive - Rozlišovať veľkosť písmen - Limit search to selected group Obmedziť hľadanie na zvolenú skupinu + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Nová požiadavka priradenia kľúča + Active + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Obdržali ste požiadavku na priradenie vyššie uvedeného kľúča. -Ak mu chcete umožniť prístup do databázy KeePassXC, -zadajte mu jedinečný názov na identifikáciu a potvrďte ho. + Allow export + - KeePassXC: Overwrite existing key? - KeePassXC: Prepísať existujúci kľúč? + Allow import + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Zdieľaný šifrovací kľúč s menom „%1” už existuje. -Chcete ho prepísať? + Own certificate + - KeePassXC: Update Entry - KeePassXC: Upraviť položku + Fingerprint: + - Do you want to update the information in %1 - %2? - Chcete upraviť informácie v %1 – %2? + Certificate: + - KeePassXC: Database locked! - KeePassXC: Databáza zamknutá! + Signer + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Aktívna databáza je zamknutá! -Prosím, odomknite zvolenú databázu alebo zvoľte inú, ktorá nie je zamknutá. + Key: + Kľúč: - KeePassXC: Removed keys from database - KeePassXC: Klúče odstránené z databázy + Generate + Generovať + + + Import + Importovať + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Odstrániť + + + Path + Cesta + + + Status + + + + Fingerprint + Odtlačok + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Všetky súbory + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + Nikdy + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Časové heslo + + + 000000 + 000000 + + + Copy + Kopírovať - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Úspešne odstránený %n šifrovací kľúč z nastavenia KeePassX/Http.Úspešne odstránené %n šifrovacie kľúče z nastavenia KeePassX/Http.Úspešne odstránených %n šifrovacích kľúčov z nastavenia KeePassX/Http.Úspešne odstránených %n šifrovacích kľúčov z nastavenia KeePassX/Http. - - - KeePassXC: No keys found - KeePassXC: Nenájdené žiadne kľúče - - - No shared encryption-keys found in KeePassHttp Settings. - Nenájdené žiadne šifrovacie kľúče v nastavení KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: Nastavenia nie sú dostupné! - - - The active database does not contain an entry of KeePassHttp Settings. - Aktívna databáza neobsahuje položku nastavení KeePassHttp. - - - Removing stored permissions... - Odstraňovanie uložených povolení… - - - Abort - Zrušiť - - - KeePassXC: Removed permissions - KeePassXC: Povolenia odstránené - - - Successfully removed permissions from %n entries. - Úspešne odstránené povolenia z %n položky.Úspešne odstránené povolenia z %n položiek.Úspešne odstránené povolenia z %n položiek.Úspešne odstránené povolenia z %n položiek. - - - KeePassXC: No entry with permissions found! - KeePassXC: Nenájdená žiadna položka s povoleniami! - - - The active database does not contain an entry with permissions. - Aktívna databáza neobsahuje položku s povoleniami. + Expires in <b>%n</b> second(s) + - SettingsWidget + TotpExportSettingsDialog - Application Settings - Nastavenia aplikácie + Copy + Kopírovať - General - Všeobecné + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Security - Bezpečnosť + There was an error creating the QR code. + - Access error for config file %1 - Chyba prístupu ku konfiguračnému súboru %1 + Closing in %1 seconds. + - SettingsWidgetGeneral - - Basic Settings - Základné nastavenia - - - Start only a single instance of KeePassXC - Spustiť len jednu inštanciu KeePassXC - - - Remember last databases - Zapamätať posledné databázy - - - Remember last key files and security dongles - Zapamätať si posledné súbory kľúčov a bezpečnostných kľúčeniek - - - Load previous databases on startup - Načítať predošlé databázy pri štarte - - - Automatically save on exit - Automaticky uložiť pri ukončení - - - Automatically save after every change - Automaticky uložiť po každej zmene - - - Automatically reload the database when modified externally - Automaticky načítať databázu, ak je upravená externe - - - Minimize when copying to clipboard - Minimalizovať pri skopírovaní do schránky - - - Minimize window at application startup - Minimalizovať okno pri spustení aplikácie - - - Use group icon on entry creation - Použiť ikonu skupiny pri vytváraní položky - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Neoznačovať databázu za zmenenú pri nedátových zmenách (napr. rozbalenie skupiny) - - - Hide the Details view - Skryť zobrazenie podrobností - - - Show a system tray icon - Zobraziť ikonu v oznamovacej oblasti - - - Hide window to system tray when minimized - Skryť okno do oznamovacej oblasti pri minimalizácii - - - Hide window to system tray instead of app exit - Skryť okno do oznamovacej oblasti namiesto ukončenia - - - Dark system tray icon - Tmavá ikona oznamovacej oblasti - - - Language - Jazyk - - - Auto-Type - Automatické vypĺňanie - - - Use entry title to match windows for global Auto-Type - Použiť názov položky na zhodu okna pre globálne Automatické vypĺňanie - - - Use entry URL to match windows for global Auto-Type - Použiť URL položky na zhodu okna pre globálne Automatické vypĺňanie - - - Always ask before performing Auto-Type - Vždy sa spýtať pred vykonaním Automatického vypĺňania - - - Global Auto-Type shortcut - Globálna klávesová skratka Automatického vypĺňania - - - Auto-Type delay - Oneskorenie Automatického vypĺňania - - - ms - Milliseconds - ms - - - Startup - Štart - - - File Management - Správa súborov - - - Safely save database files (may be incompatible with Dropbox, etc) - Bezpečne uložiť súbory databáz (môže byť nekompatibilné Dropbox, apod) - - - Backup database file before saving - Zálohovať databázu pri každom uložení - - - Entry Management - Správa položky - - - General - Všeobecné - - - - SettingsWidgetSecurity - - Timeouts - Časové limity - - - Clear clipboard after - Vymazať schránku po - - - sec - Seconds - s - - - Lock databases after inactivity of - Zamknúť databázu po neaktivite - - - Convenience - Pohodlie - - - Lock databases when session is locked or lid is closed - Zamknúť databázu pri zamknutí relácie alebo zatvorení krytu - - - Lock databases after minimizing the window - Zamknúť databázu pri minimalizovaní okna - - - Don't require password repeat when it is visible - Nevyžadovať opakovanie hesla, ak je viditeľné - - - Show passwords in cleartext by default - Predvolene zobraziť heslo prostým textom - - - Hide passwords in the preview panel - Skryť heslá v paneli ukážky - - - Hide entry notes by default - Predvolene skryť poznámky položky - - - Privacy - Súkromie - - - Use Google as fallback for downloading website icons - Použiť Google ako poslednú záchranu pri sťahovaní ikon webovej stránky - - - Re-lock previously locked database after performing Auto-Type - Znova zamknúť predtým zamknutú databázu po vykonaní Automatického vypĺňania - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Nastaviť TOTP @@ -3995,59 +5318,84 @@ Prosím, odomknite zvolenú databázu alebo zvoľte inú, ktorá nie je zamknut Použiť vlastné nastavenia - Note: Change these settings only if you know what you are doing. - Poznámka: Zmeňte tieto nastavenia, len ak viete čo robíte. + Custom Settings + Time step: Časový krok: - 8 digits - 8 číslic - - - 6 digits - 6 číslic + sec + Seconds + s Code size: Veľkosť kódu: - sec - Seconds - s + 6 digits + 6 číslic + + + 7 digits + + + + 8 digits + 8 číslic - TotpDialog + UpdateCheckDialog - Timed Password - Časové heslo + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - Kopírovať + Close + Zatvoriť - Expires in - Vyprší za + Update Error! + - seconds - s + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - Odomknúť databázu + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4082,42 +5430,26 @@ Prosím, odomknite zvolenú databázu alebo zvoľte inú, ktorá nie je zamknut - main + YubiKeyEditWidget - Remove an entry from the database. - Odstrániť položku z databázy. + Refresh + Obnoviť - Path of the database. - Cesta k databáze. + YubiKey Challenge-Response + - Path of the entry to remove. - Cesta položky na odstránenie. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC – multi-platformový správca hesiel + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - mená súborov databáz hesiel na otvorenie (*.kdbx) - - - path to a custom config file - cesta k vlastnému konfiguračnému súboru - - - key file of the database - súbor kľúča databázy - - - read password of the database from stdin - čítať heslo databázy zo stdin - - - Parent window handle - ID rodičovského okna + No YubiKey inserted. + \ No newline at end of file diff --git a/share/translations/keepassx_sl_SI.ts b/share/translations/keepassx_sl_SI.ts index cec9bd6ca..e2ede67f9 100644 --- a/share/translations/keepassx_sl_SI.ts +++ b/share/translations/keepassx_sl_SI.ts @@ -9,25 +9,40 @@ About O programu + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + + Contributors + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + + Debug Info + + Include the following information whenever you report a bug: + + Copy to clipboard - Version %1 - + Revision: %1 - Revision: %1 + Distribution: %1 @@ -44,52 +59,334 @@ Kernel: %3 %4 Enabled extensions: - - Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - - - - KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - - Project Maintainers: - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Include the following information whenever you report a bug: + Version %1 - Distribution: %1 + Build Type: %1 + + + + Auto-Type + Samodejno tipkanje + + + Browser Integration + + + + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) - AccessControlDialog + AgentSettingsWidget - Remember this decision + Enable SSH Agent (requires restart) - Allow + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + Nastavitve aplikacije + + + General + Splošno + + + Security + Varnost + + + Access error for config file %1 - Deny + Icon only - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + Text only - KeePassXC HTTP Confirm Access + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + Zapomni si zadnje podatkovne baze + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + Samodejno shrani po vsaki spremembi + + + Automatically save on exit + Samodejno shrani ob izhodu + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + Za nove vnose uporabi ikono skupine + + + Minimize when copying to clipboard + Minimiziraj pri kopiranju v odložišče + + + Hide the entry preview panel + + + + General + Splošno + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + Pokaži ikono v sistemski vrstici + + + Dark system tray icon + + + + Hide window to system tray when minimized + Minimiziraj v sistemsko vrstico + + + Language + Jezik + + + Auto-Type + Samodejno tipkanje + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + Globalna bližnjica za samodejno tipkanje + + + Auto-Type typing delay + + + + ms + Milliseconds + + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + Pobriši odložišče po + + + sec + Seconds + sekundah + + + Lock databases after inactivity of + Zakleni podatkovne baze po neaktivnosti + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + + + + Use DuckDuckGo as fallback for downloading website icons @@ -103,6 +400,26 @@ Please select whether you want to allow access. Auto-Type - KeePassXC + + Auto-Type + Samodejno tipkanje + + + The Syntax of your Auto-Type statement is incorrect! + + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + AutoTypeAssociationsModel @@ -120,90 +437,322 @@ Please select whether you want to allow access. - AutoTypeSelectDialog + AutoTypeMatchModel - Select entry to Auto-Type: - Izberi vnos za samodejno tipkanje: + Group + Skupina + + Title + Naslov + + + Username + Uporabniško ime + + + Sequence + Sekvenca + + + + AutoTypeSelectDialog Auto-Type - KeePassXC + + Select entry to Auto-Type: + Izberi vnos za samodejno tipkanje: + - ChangeMasterKeyWidget + BrowserAccessControlDialog - Password - Geslo - - - Enter password: - Vnesi geslo: - - - Repeat password: - Ponovi geslo: - - - Browse - Prebrskaj - - - Create - Ustvari novo - - - Key files - Datoteke s ključi - - - All files - Vse datoteke - - - Create Key File... - Ustvari datoteko s ključi... - - - Unable to create Key File : - Ustvarjanje datoteke s ključi ni uspelo: - - - Select a key file - Izberi datoteko s kljući - - - Do you really want to use an empty string as password? - Ali res želite uporabiti prazen niz kot geslo? - - - Different passwords supplied. - Vnešeni gesli sta različni. - - - Failed to set %1 as the Key file: -%2 - Nastavljanje %1 kot datoteko s ključi ni uspelo: -%2 - - - &Key file + KeePassXC-Browser Confirm Access - Cha&llenge Response + Remember this decision - Refresh + Allow - Empty password + Deny - Changing master key failed: no YubiKey inserted. + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + + + BrowserOptionDialog + + Dialog + + + + This is required for accessing your databases with KeePassXC-Browser + + + + Enable KeepassXC browser integration + + + + General + Splošno + + + Enable integration for these browsers: + + + + &Google Chrome + + + + &Firefox + + + + &Chromium + + + + &Vivaldi + + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + + + + Re&quest to unlock the database if it is locked + + + + Only entries with the same scheme (http://, https://, ...) are returned. + + + + &Match URL scheme (e.g., https://...) + + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + + + + &Return only best-matching credentials + + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + + + + Advanced + Napredno + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + + + + Only the selected database has to be connected with a client. + + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + + + + Automatically creating or updating string fields is not supported. + + + + &Return advanced string fields which start with "KPH: " + + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + + + + Update &native messaging manifest files at startup + + + + Support a proxy application between KeePassXC and browser extension. + + + + Use a &proxy application between KeePassXC and browser extension + + + + Use a custom proxy location if you installed a proxy manually. + + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + + + + Browse... + Button for opening file dialog + + + + <b>Warning:</b> The following options can be dangerous! + + + + Select custom proxy location + + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + + BrowserService + + KeePassXC: New key association request + + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + + + + Save and allow access + + + + KeePassXC: Overwrite existing key? + + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + + KeePassXC: Update Entry + + + + Do you want to update the information in %1 - %2? + + + + Abort + + + + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + + + + KeePassXC: No entry with KeePassHTTP attributes found! + + + + The active database does not contain an entry with KeePassHTTP attributes. + + + + KeePassXC: Legacy browser integration settings detected + + + + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. @@ -213,6 +762,10 @@ Please select whether you want to allow access. Clone Options + + Append ' - Clone' to title + + Replace username and password with references @@ -221,10 +774,6 @@ Please select whether you want to allow access. Copy history - - Append ' - Clone' to title - - CsvImportWidget @@ -284,14 +833,6 @@ Please select whether you want to allow access. Not present in CSV file - - Empty fieldname - - - - column - - Imported from CSV file @@ -300,51 +841,84 @@ Please select whether you want to allow access. Original data: - - Error(s) detected in CSV file ! - - - - more messages skipped] - - Error Napaka + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - +%1 - - CsvImportWizard - - Import CSV file - - - - Error - Napaka - - - Unable to calculate master key - Izračun glavnega ključa ni uspel - - CsvParserModel + + %n column(s) + + - byte, + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + Koren + + + File %1 does not exist. - rows, + Unable to open file %1. - columns + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC @@ -367,12 +941,27 @@ Please select whether you want to allow access. Prebrskaj - Unable to open the database. - Odpiranje podatkovne baze ni uspelo. + Refresh + - Can't open key file - Odpiranje datoteke s ključi ni uspelo + Challenge Response: + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + Don't show this warning again + All files @@ -387,86 +976,173 @@ Please select whether you want to allow access. Izberi datoteko s ključi - Refresh + TouchID for quick unlock - Challenge Response: + Unable to open the database: +%1 + + + + Can't open key file: +%1 - DatabaseRepairWidget + DatabaseSettingWidgetMetaData - Repair database - - - - Error - Napaka - - - Can't open key file - Odpiranje datoteke s ključi ni uspelo - - - Database opened fine. Nothing to do. - - - - Unable to open the database. - Odpiranje podatkovne baze ni uspelo. - - - Success - - - - The database has been successfully repaired -You can now save it. - - - - Unable to repair the database. + Passwords - DatabaseSettingsWidget + DatabaseSettingsDialog - Database name: - Ime podatkovne baze: + Advanced Settings + - Database description: - Opis podatkovne baze: + General + Splošno - Transform rounds: - Transform rounds: + Security + Varnost - Default username: - Privzeto uporabniško ime: + Master Key + - MiB - MiB + Encryption Settings + - Benchmark - Primerjalni preizkus (benchmark) + Browser Integration + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + - Max. history items: - Max. vnosov zgodovine: + &Disconnect all browsers + - Max. history size: - Max. velikost zgodovine: + Forg&et all site-specific settings on entries + - Use recycle bin + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + Odstrani + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: @@ -478,16 +1154,254 @@ You can now save it. - Algorithm: + Key Derivation Function: + + + + Transform rounds: + Transform rounds: + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + + + + Number of rounds too high + Key transformation rounds + + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + + Understood, keep number + + + + Cancel + + + + Number of rounds too low + Key transformation rounds + + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + + KDF unchanged + + + + Failed to transform key with new KDF parameters; KDF unchanged. + + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + Ime podatkovne baze: + + + Database description: + Opis podatkovne baze: + + + Default username: + Privzeto uporabniško ime: + + + History Settings + + + + Max. history items: + Max. vnosov zgodovine: + + + Max. history size: + Max. velikost zgodovine: + + + MiB + MiB + + + Use recycle bin + + + + Additional Database Settings + + + + Enable &compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: DatabaseTabWidget - - Root - Koren - KeePass 2 Database KeePass 2 podatkovna baza @@ -501,8 +1415,12 @@ You can now save it. Odpri podatkovno bazo - File not found! - Datoteke ni mogoče najti! + CSV file + CSV datoteka + + + Merge database + Open KeePass 1 database @@ -512,176 +1430,85 @@ You can now save it. KeePass 1 database KeePass 1 podatkovna baza - - All files (*) - Vse datoteke (*) - - - Close? - Zapri? - - - Save changes? - Shrani spremembe? - - - "%1" was modified. -Save changes? - "%1" spremenjeno. -Shrani spremembe? - - - Writing the database failed. - Zapis podatkovne baze ni uspel. - - - Save database as - Shrani podatkovno bazo kot - - - New database - Nova podatkovna baza - - - locked - zaklenjeno - - - Lock database - Zakleni podatkovno bazo - - - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Podatkovna baza je trenutno v urejanju, zato je ni mogoče zakleniti. -Dokončajte spremembe in poskusite znova. - - - This database has never been saved. -You can save the database or stop locking it. - Podatkovna baza še ni bila shranjena. -Lahko jo shranite ali prekinete z zaklepanjem. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Podatkovna baza je bila spremenjena. -Ali jo želite shraniti? -V nasprotnem primeru bodo spremembe izgubljene. - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" je v urejanju. -Zavrži spremembe in zapri? - Export database to CSV file Izvozi podatkovno bazo v CSV datoteko - - CSV file - CSV datoteka - Writing the CSV file failed. Pisanje v CSV datoteko ni uspelo - Unable to open the database. - Odpiranje podatkovne baze ni uspelo. - - - Merge database + Database creation error - The database you are trying to save as is locked by another instance of KeePassXC. -Do you want to save it anyway? + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Passwords + The database file does not exist or is not accessible. - Database already opened + Select CSV file - The database you are trying to open is locked by another instance of KeePassXC. - -Do you want to open it anyway? + New Database - Open read-only + %1 [New Database] + Database tab name modifier - File opened in read only mode. + %1 [Locked] + Database tab name modifier - Open CSV file + %1 [Read-only] + Database tab name modifier DatabaseWidget - Change master key - Spremeni glavni ključ - - - Delete entry? - Izbris vnosa? + Searching... + Do you really want to delete the entry "%1" for good? Ali res želite izbrisati "%1"? - Delete entries? - Izbris vnosov? - - - Do you really want to delete %1 entries for good? - Ali res želite izbrisati %1 vnosov? - - - Move entries to recycle bin? - Premik vnosov v koš? + Do you really want to move entry "%1" to the recycle bin? + Do you really want to move %n entry(s) to the recycle bin? - Ali res želite premakniti %n vnos v koš?Ali res želite premakniti %n vnosa v koš?Ali res želite premakniti %n vnose v koš?Ali res želite premakniti %n - vnosov v koš? + - Delete group? - Izbris skupine? + Execute command? + + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + Do you really want to delete the group "%1" for good? Ali res želite izbrisati skupino "%1"? - - Unable to calculate master key - Izračun glavnega ključa ni uspel - - - Move entry to recycle bin? - - - - Do you really want to move entry "%1" to the recycle bin? - - - - Searching... - - No current database. @@ -699,19 +1526,7 @@ Do you want to open it anyway? - Execute command? - - - - Do you really want to execute the following command?<br><br>%1<br> - - - - Remember my choice - - - - Autoreload Request + File has changed @@ -723,11 +1538,8 @@ Do you want to open it anyway? - The database file has changed and you have unsaved changes.Do you want to merge your changes? - - - - Could not open the new database file while attempting to autoreload this database. + The database file has changed and you have unsaved changes. +Do you want to merge your changes? @@ -738,6 +1550,104 @@ Do you want to open it anyway? Are you sure you want to permanently delete everything from your recycle bin? + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + + + File opened in read only mode. + + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" spremenjeno. +Shrani spremembe? + + + Database was modified. +Save changes? + + + + Save changes? + Shrani spremembe? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords + + + + Save database as + Shrani podatkovno bazo kot + + + KeePass 2 Database + KeePass 2 podatkovna baza + + + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + Izbriši skupino + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + + EditEntryWidget @@ -765,6 +1675,30 @@ Do you want to open it anyway? History Zgodovina + + SSH Agent + + + + n/a + + + + (encrypted) + + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + Entry history Zgodovina vnosov @@ -786,21 +1720,8 @@ Do you want to open it anyway? Nov atribut - Select file - Izberi datoteko - - - Unable to open file - Datoteke ni mogoče odpreti - - - Save attachment - Shrani priponko - - - Unable to save the attachment: - - Priponke ni bilo mogoče shraniti: + Are you sure you want to remove this attribute? + Tomorrow @@ -808,30 +1729,42 @@ Do you want to open it anyway? %n week(s) - %n teden%n tedna%n tedni%n tednov + %n month(s) - %n mesec%n meseca%n meseci%n mesecev + - 1 year - 1 leto - - - Confirm Remove + Apply generated password? - Are you sure you want to remove this attribute? + Do you want to apply the generated password to this entry? + + + + Entry updated successfully. + + + + Entry has unsaved changes + + + + New attribute %1 [PROTECTED] Press reveal to view or edit + + %n year(s) + + - Are you sure you want to remove this attachment? + Confirm Removal @@ -849,18 +1782,6 @@ Do you want to open it anyway? Remove Odstrani - - Attachments - Priponke - - - Save - Shrani - - - Open - Odpri - Edit Name @@ -873,6 +1794,18 @@ Do you want to open it anyway? Reveal + + Attachments + Priponke + + + Foreground Color: + + + + Background Color: + + EditEntryWidgetAutoType @@ -880,6 +1813,18 @@ Do you want to open it anyway? Enable Auto-Type for this entry Omogoči samodejno tipkanje za ta vnos + + Inherit default Auto-Type sequence from the &group + + + + &Use custom Auto-Type sequence: + + + + Window Associations + + + + @@ -893,23 +1838,7 @@ Do you want to open it anyway? Naslov okna: - Inherit default Auto-Type sequence from the &group - - - - &Use custom Auto-Type sequence: - - - - Use default se&quence - - - - Set custo&m sequence: - - - - Window Associations + Use a specific sequence for this association: @@ -935,12 +1864,8 @@ Do you want to open it anyway? EditEntryWidgetMain - Title: - Naslov: - - - Username: - Uporabniško ime: + URL: + URL: Password: @@ -951,20 +1876,104 @@ Do you want to open it anyway? Ponovi geslo: - URL: - URL: + Title: + Naslov: - Expires - Poteče + Notes + Opombe Presets Prednastavljeno - Notes: - Opombe: + Toggle the checkbox to reveal the notes section. + + + + Username: + Uporabniško ime: + + + Expires + Poteče + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + + + + Add key to agent when database is opened/unlocked + + + + Comment + + + + Decrypt + + + + n/a + + + + Copy to clipboard + + + + Private key + + + + External file + + + + Browse... + Button for opening file dialog + + + + Attachment + + + + Add to agent + + + + Remove from agent + + + + Require user confirmation when this key is used + @@ -1002,6 +2011,81 @@ Do you want to open it anyway? Podeduj iz nadrejene skupine (%1) + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + Geslo: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + EditGroupWidgetMain @@ -1035,6 +2119,14 @@ Do you want to open it anyway? EditWidgetIcons + + &Use default icon + + + + Use custo&m icon + + Add custom icon Dodaj poljubno ikono @@ -1043,18 +2135,6 @@ Do you want to open it anyway? Delete custom icon Izbriši ikono - - Images - Slike - - - All files - Vse datoteke - - - Select Image - Izberi sliko - Download favicon @@ -1064,15 +2144,15 @@ Do you want to open it anyway? - Can't read icon - + Images + Slike - &Use default icon - + All files + Vse datoteke - Use custo&m icon + Custom icon already exists @@ -1080,17 +2160,37 @@ Do you want to open it anyway? - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded - Hint: You can enable Google as a fallback under Tools>Settings>Security + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security - Custom icon already exists + Select Image(s) + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + EditWidgetProperties @@ -1110,14 +2210,122 @@ Do you want to open it anyway? Uuid: Uuid: + + Plugin Data + + + + Remove + Odstrani + + + Delete plugin data? + + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + + + + Key + + + + Value + + Entry - - Clone + %1 - Clone + + EntryAttachmentsModel + + Name + Ime + + + Size + + + + + EntryAttachmentsWidget + + Form + + + + Add + Dodaj + + + Remove + Odstrani + + + Open + Odpri + + + Save + Shrani + + + Select files + + + + Are you sure you want to remove %n attachment(s)? + + + + Save attachments + + + + Unable to create directory: +%1 + + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + + + + Unable to save attachments: +%1 + + + + Unable to open attachment: +%1 + + + + Unable to open attachments: +%1 + + + + Confirm remove + + + + Unable to open file(s): +%1 + + + EntryAttributesModel @@ -1146,6 +2354,11 @@ Do you want to open it anyway? EntryModel + + Ref: + Reference abbreviation + + Group Skupina @@ -1163,8 +2376,166 @@ Do you want to open it anyway? URL - Ref: - Reference abbreviation + Never + + + + Password + Geslo + + + Notes + Opombe + + + Expires + Poteče + + + Created + + + + Modified + + + + Accessed + + + + Attachments + Priponke + + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + + + + Close + + + + General + Splošno + + + Username + Uporabniško ime + + + Password + Geslo + + + Expiration + + + + URL + URL + + + Attributes + + + + Attachments + Priponke + + + Notes + Opombe + + + Autotype + + + + Window + Okno + + + Sequence + Sekvenca + + + Searching + + + + Search + Išči + + + Clear + + + + Never + + + + [PROTECTED] + + + + <b>%1</b>: %2 + attributes line + + + + Enabled + + + + Disabled + + + + Share + + + + + EntryView + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) @@ -1174,57 +2545,30 @@ Do you want to open it anyway? Recycle Bin Koš + + [empty] + group has no children + + - HttpPasswordGeneratorWidget + GroupModel - Length: - Dolžina: + %1 + Template for name without annotation + + + + HostInstaller - Character Types - Tipi znakov - - - Upper Case Letters - Velike črke - - - A-Z + KeePassXC: Cannot save file! - Lower Case Letters - Male črke - - - a-z + Cannot save the native messaging script file. - - Numbers - Številke - - - 0-9 - - - - Special Characters - Posebni znaki - - - /*_& ... - - - - Exclude look-alike characters - Izključi podobne znake - - - Ensure that the password contains characters from every group - Geslo naj vsebuje znake iz vsake skupine - KMessageWidget @@ -1237,6 +2581,388 @@ Do you want to open it anyway? + + Kdbx3Reader + + Unable to calculate master key + Izračun glavnega ključa ni uspel + + + Unable to issue challenge-response. + + + + Wrong key or database file is corrupt. + Napačno geslo ali pa je podatkovna baza poškodovana. + + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + + Kdbx3Writer + + Unable to issue challenge-response. + + + + Unable to calculate master key + Izračun glavnega ključa ni uspel + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + Izračun glavnega ključa ni uspel + + + Invalid header checksum size + + + + Header SHA256 mismatch + + + + Wrong key or database file is corrupt. (HMAC mismatch) + + + + Unknown cipher + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + + + Failed to open buffer for KDF parameters in header + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + Izračun glavnega ključa ni uspel + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + Not a KeePass database. + Datoteka ni KeePass podatkovna baza. + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + + + + Unsupported KeePass 2 database version. + + + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + + + + KdbxXmlReader + + XML parsing failure: %1 + + + + No root group + + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + Invalid EnableAutoType value + + + + Invalid EnableSearching value + + + + No group uuid found + + + + Null DeleteObject uuid + + + + Missing DeletedObject uuid or time + + + + Null entry uuid + + + + Invalid entry icon number + + + + History element in history entry + + + + No entry uuid found + + + + History element with different uuid + + + + Duplicate custom attribute found + + + + Entry string key or value missing + + + + Duplicate attachment found + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + XML error: +%1 +Line %2, column %3 + + + KeePass1OpenWidget @@ -1266,6 +2992,35 @@ Do you want to open it anyway? Unsupported KeePass database version. Različica KeePass podatkovne baze ni podprta. + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + + + + Invalid number of groups + + + + Invalid number of entries + + + + Invalid content hash size + + + + Invalid transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + + Root Koren @@ -1278,139 +3033,244 @@ Do you want to open it anyway? Wrong key or database file is corrupt. Napačno geslo ali pa je podatkovna baza poškodovana. - - - KeePass2Reader - Not a KeePass database. - Datoteka ni KeePass podatkovna baza. - - - Unsupported KeePass database version. - Različica KeePass podatkovne baze ni podprta. - - - Wrong key or database file is corrupt. - Napačno geslo ali pa je podatkovna baza poškodovana. - - - Unable to calculate master key - Izračun glavnega ključa ni uspel - - - Unable to issue challenge-response. + Key transformation failed - The selected file is an old KeePass 1 database (.kdb). + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + unable to seek to content position + + + + + KeeShare + + Disabled share + + + + Import from + + + + Export to + + + + Synchronize with + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Prebrskaj + + + Generate + + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. -You can import it by clicking on Database > 'Import KeePass 1 database...'. -This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. - - - - - KeePass2Writer - - Unable to issue challenge-response. +Please go to the master key settings and generate a new key file. - Unable to calculate master key - Izračun glavnega ključa ni uspel - - - - Main - - Fatal error while testing the cryptographic functions. - Napaka pri testiranju kriptografskih funkcij. - - - KeePassXC - Error + Error loading the key file '%1' +Message: %2 - The lock file could not be created. Single-instance mode disabled. - - - - Another instance of KeePassXC is already running. - - - - Existing single-instance lock file is invalid. Launching new instance. - - - - - MainWindow - - Open database - Odpri podatkovno bazo - - - Database settings - Nastavitve podatkovne baze - - - Copy username to clipboard - Kopiraj uporabniško ime v odložišče - - - Copy password to clipboard - Kopiraj geslo v odložišče - - - Settings - Nastavitve - - - Show toolbar - Prikaži orodno vrstico - - - read-only - samo za branje - - - Toggle window - Preklopi okno - - - KeePass 2 Database - KeePass 2 podatkovna baza + Key files + Datoteke s ključi All files Vse datoteke - Save repaired database + Create Key File... + Ustvari datoteko s ključi... + + + Error creating key file - Writing the database failed. - Zapis podatkovne baze ni uspel. + Unable to create key file: %1 + + + + Select a key file + Izberi datoteko s kljući + + + + MainWindow + + &Database + &Recent databases + + &Help + + E&ntries - - Copy att&ribute to clipboard - - &Groups - &View + &Tools @@ -1421,6 +3281,10 @@ This is a one-way migration. You won't be able to open the imported databas &About + + &Open database... + + &Save database @@ -1429,30 +3293,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database - - &New database - - - - Merge from KeePassX database - - - - &Add new entry - - - - &View/Edit entry - - &Delete entry - - &Add new group - - &Edit group @@ -1462,47 +3306,35 @@ This is a one-way migration. You won't be able to open the imported databas - &Database settings + Sa&ve database as... + + Database settings + Nastavitve podatkovne baze + &Clone entry - - Timed one-time password - - - - Copy &TOTP - - - - Show TOTP - - - - &Find - - Copy &username - Cop&y password - + Copy username to clipboard + Kopiraj uporabniško ime v odložišče + + + Copy password to clipboard + Kopiraj geslo v odložišče &Settings - &Perform Auto-Type - - - - &Open URL + Password Generator @@ -1513,42 +3345,58 @@ This is a one-way migration. You won't be able to open the imported databas &Title + + Copy title to clipboard + + &URL + + Copy URL to clipboard + + &Notes - Password Generator + Copy notes to clipboard + + + + &Export to CSV file... + + + + Set up TOTP... + + + + Copy &TOTP + + + + E&mpty recycle bin Clear history - - &Database - - - - Import - - - - &Tools - - - - Empty recycle bin - - Access error for config file %1 + + Settings + Nastavitve + + + Toggle window + Preklopi okno + Quit KeePassXC @@ -1558,165 +3406,426 @@ This is a one-way migration. You won't be able to open the imported databas - &Help + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. - &Open database... + &Donate - Sa&ve database as... + Report a &bug - Change &master key... + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. - &Export to CSV file... + &Import - Import KeePass 1 database... + Copy att&ribute... - Import CSV file... + TOTP... - Re&pair database... + &New database... - Set up TOTP... + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. - OptionDialog + Merger - Dialog + Creating missing %1 [%2] - General - Splošno - - - Sh&ow a notification when credentials are requested + Relocating %1 [%2] - Sort matching entries by &username + Overwriting %1 [%2] - Re&move all stored permissions from entries in active database + older entry merged from database "%1" - Advanced - Napredno - - - Always allow &access to entries + Adding backup for older target %1 [%2] - Always allow &updating entries + Adding backup for older source %1 [%2] - Searc&h in all opened databases for matching entries + Reapplying older target entry on top of newer source %1 [%2] - HTTP Port: + Reapplying older source entry on top of newer target %1 [%2] - Default port: 19455 + Synchronizing from newer source %1 [%2] - Re&quest to unlock the database if it is locked + Synchronizing from older source %1 [%2] - Sort &matching entries by title + Deleting child %1 [%2] - KeePassXC will listen to this port on 127.0.0.1 + Deleting orphan %1 [%2] - Cannot bind to privileged ports + Changed deleted objects - Cannot bind to privileged ports below 1024! -Using default port 19455. + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... - R&emove all shared encryption keys from active database + Root + Root group + Koren + + + + NewDatabaseWizardPage + + WizardPage - &Return advanced string fields which start with "KPH: " + En&cryption Settings - Automatically creating or updating string fields is not supported. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - This is required for accessing your databases from ChromeIPass or PassIFox + Advanced Settings - Enable KeePassHTTP server + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key - &Return only best matching entries + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + Please fill in the display name and an optional description for your new database: + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key - &Match URL schemes + PEM boundary mismatch - Password Generator + Base64 decoding failed - Only the selected database has to be connected with a client. + Key file way too small. - The following options can be dangerous! -Change them only if you know what you are doing. + Key file magic header id invalid + + + + Found zero keys + + + + Failed to read public key. + + + + Corrupted key file, reading private key failed + + + + No private key payload to decrypt + + + + Trying to run KDF without cipher + + + + Passphrase is required to decrypt this key + + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + + + + Unexpected EOF while reading private key + + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + + + + Unsupported key type: %1 + + + + Unknown cipher: %1 + + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + + + + + PasswordEditWidget + + Enter password: + Vnesi geslo: + + + Confirm password: + + + + Password + Geslo + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Password cannot be empty. + + + + Passwords do not match. + + + + Generate master password PasswordGeneratorWidget + + %p% + + Password: Geslo: + + strength + Password strength + + + + entropy + + + + Password + Geslo + Character Types Tipi znakov @@ -1737,24 +3846,16 @@ Change them only if you know what you are doing. Special Characters Posebni znaki + + Extended ASCII + + Exclude look-alike characters Izključi podobne znake - Accept - Sprejmi - - - %p% - - - - strength - - - - entropy + Pick characters from every group @@ -1762,21 +3863,29 @@ Change them only if you know what you are doing. - Pick characters from every group + Passphrase - Generate + Wordlist: + + Word Separator: + + + + Copy + + + + Accept + Sprejmi + Close - - Apply - - Entropy: %1 bit @@ -1787,51 +3896,415 @@ Change them only if you know what you are doing. Poor + Password quality Weak + Password quality Good + Password quality Excellent + Password quality - Password - Geslo - - - Extended ASCII + ExtendedASCII - Passphrase + Switch to advanced mode - Wordlist: + Advanced + Napredno + + + Upper Case Letters A to F - Word Count: + A-Z - Word Separator: + Lower Case Letters A to F - Copy + a-z + + + + 0-9 + + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Izbriši + + + Move + + + + Empty + + + + Remove + Odstrani + + + Skip + + + + Disable + Onemogoči + + + Merge QObject + + Database not opened + + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + + + + Action cancelled or denied + + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + + + + Incorrect action + + + + Empty message received + + + + No URL provided + + + + No logins found + + + + Unknown error + + + + Add a new entry to a database. + + + + Path of the database. + + + + Key file of the database. + + + + path + + + + Username for the entry. + + + + username + + + + URL for the entry. + + + + URL + URL + + + Prompt for the entry's password. + + + + Generate a password for the entry. + + + + Length for the generated password. + + + + length + + + + Path of the entry to add. + + + + Copy an entry's password to the clipboard. + + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + + + + Edit an entry. + + + + Title for the entry. + + + + title + + + + Path of the entry to edit. + + + + Estimate the entropy of a password. + + + + Password for which to estimate the entropy. + + + + Perform advanced analysis on the password. + + + + Extract and print the content of a database. + + + + Path of the database to extract. + + + + Insert password to unlock %1: + + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + + +Available commands: + + + + + Name of the command to execute. + + + + List database entries. + + + + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + + + + Path of the database to merge into. + + + + Path of the database to merge from. + + + + Use the same credentials for both database files. + + + + Key file of the database to merge from. + + + + Show an entry's information. + + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + + + + attribute + + + + Name of the entry to show. + + NULL device @@ -1840,11 +4313,6 @@ Change them only if you know what you are doing. error reading from device - - file empty ! - - - malformed string @@ -1853,10 +4321,6 @@ Change them only if you know what you are doing. missing closing quote - - INTERNAL - unget lower bound exceeded - - Group Skupina @@ -1873,14 +4337,18 @@ Change them only if you know what you are doing. Password Geslo - - URL - URL - Notes Opombe + + Last Modified + + + + Created + + Browser Integration @@ -1897,6 +4365,461 @@ Change them only if you know what you are doing. Passive + + SSH Agent + + + + Generate a new random diceware passphrase. + + + + Word count for the diceware passphrase. + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + + + + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + pot do konfiguracijske datoteke po meri + + + key file of the database + datoteka s ključi podatkovne baze + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + Napaka pri testiranju kriptografskih funkcij. + + + KeePassXC - Error + + + + Database password: + + QtIOCompressor @@ -1933,11 +4856,97 @@ Change them only if you know what you are doing. - SearchWidget + SSHAgent - Case Sensitive + Agent connection failed. + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Išči @@ -1946,263 +4955,52 @@ Change them only if you know what you are doing. Clear - - Search... - - Limit search to selected group - - - Service - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Search Help - Do you want to update the information in %1 - %2? + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - Successfully removed %1 encryption-%2 from KeePassX/Http Settings. - - - - No shared encryption-keys found in KeePassHttp Settings. - - - - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - - - - Abort - - - - Successfully removed permissions from %1 %2. - - - - The active database does not contain an entry with permissions. - - - - KeePassXC: New key association request - - - - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - - - - KeePassXC: Overwrite existing key? - - - - KeePassXC: Update Entry - - - - KeePassXC: Database locked! - - - - KeePassXC: Removed keys from database - - - - KeePassXC: No keys found - - - - KeePassXC: Settings not available! - - - - KeePassXC: Removed permissions - - - - KeePassXC: No entry with permissions found! - + Case sensitive + Razlikuj med velikimi in malimi črkami - SettingsWidget + SettingsWidgetKeeShare - Application Settings - Nastavitve aplikacije - - - General - Splošno - - - Security - Varnost - - - Access error for config file %1 - - - - - SettingsWidgetGeneral - - Remember last databases - Zapomni si zadnje podatkovne baze - - - Automatically save on exit - Samodejno shrani ob izhodu - - - Automatically save after every change - Samodejno shrani po vsaki spremembi - - - Minimize when copying to clipboard - Minimiziraj pri kopiranju v odložišče - - - Use group icon on entry creation - Za nove vnose uporabi ikono skupine - - - Global Auto-Type shortcut - Globalna bližnjica za samodejno tipkanje - - - Language - Jezik - - - Show a system tray icon - Pokaži ikono v sistemski vrstici - - - Hide window to system tray when minimized - Minimiziraj v sistemsko vrstico - - - Load previous databases on startup + Active - Automatically reload the database when modified externally + Allow export - Hide window to system tray instead of app exit + Allow import - Minimize window at application startup + Own certificate - Basic Settings + Fingerprint: - Remember last key files and security dongles + Certificate: - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Auto-Type - Samodejno tipkanje - - - Use entry title and URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Auto-Type delay - - - - ms - - - - Start only a single instance of KeePassXC - - - - - SettingsWidgetSecurity - - Clear clipboard after - Pobriši odložišče po - - - sec - sekundah - - - Lock databases after inactivity of - Zakleni podatkovne baze po neaktivnosti - - - Show passwords in cleartext by default - Gesla privzeto v čistopisu - - - Lock databases after minimizing the window - - - - Don't require password repeat when it is visible - - - - Timeouts - - - - Convenience - - - - Lock databases when session is locked or lid is closed - - - - Privacy - - - - Use Google as fallback for downloading website icons - - - - - SetupTotpDialog - - Setup TOTP + Signer @@ -2210,32 +5008,221 @@ give it a unique name to identify and accept it. - Use custom settings + Generate - Note: Change these settings only if you know what you are doing. + Import - Time step: + Export - 8 digits + Imported certificates - 6 digits + Trust - Code size: + Ask - sec - sekundah + Untrust + + + + Remove + Odstrani + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Vse datoteke + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + @@ -2252,28 +5239,136 @@ give it a unique name to identify and accept it. Copy + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog - Expires in + Copy - seconds + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. - UnlockDatabaseWidget + TotpSetupDialog - Unlock database - Odkleni podatkovno bazo + Setup TOTP + + + + Key: + + + + Default RFC 6238 token settings + + + + Steam token settings + + + + Use custom settings + + + + Custom Settings + + + + Time step: + + + + sec + Seconds + sekundah + + + Code size: + + + + 6 digits + + + + 7 digits + + + + 8 digits + + + + + UpdateCheckDialog + + Checking for updates + + + + Checking for updates... + + + + Close + + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + WelcomeWidget - - Welcome to KeePassXC - - Start storing your passwords securely in a KeePassXC database @@ -2298,91 +5393,31 @@ give it a unique name to identify and accept it. Recent databases Nedavne podatkovne baze + + Welcome to KeePassXC %1 + + - main + YubiKeyEditWidget - path to a custom config file - pot do konfiguracijske datoteke po meri - - - key file of the database - datoteka s ključi podatkovne baze - - - KeePassXC - cross-platform password manager + Refresh - read password of the database from stdin + YubiKey Challenge-Response - filenames of the password databases to open (*.kdbx) + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - Copy a password to the clipboard + No YubiKey detected, please ensure it's plugged in. - Path of the database. - - - - Use a GUI prompt unlocking the database. - - - - Name of the entry to clip. - - - - Extract and print the content of a database. - - - - Path of the database to extract. - - - - Name of the command to execute. - - - - List database entries. - - - - Path of the group to list. Default is / - - - - Print the UUIDs of the entries and groups. - - - - Merge two databases. - - - - Path of the database to merge into. - - - - Path of the database to merge from. - - - - Use the same password for both database files. - - - - Show a password. - - - - Name of the entry to show. + No YubiKey inserted. diff --git a/share/translations/keepassx_sr.ts b/share/translations/keepassx_sr.ts index b86e3c8bc..80787e01e 100644 --- a/share/translations/keepassx_sr.ts +++ b/share/translations/keepassx_sr.ts @@ -3,11 +3,11 @@ AboutDialog About KeePassXC - О KeePassXC + O KeePassXC About - О апликацији + O aplikaciji Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> @@ -37,12 +37,6 @@ Copy to clipboard Копирај - - Version %1 - - Верзија %1 - - Revision: %1 Ревизија %1 @@ -76,34 +70,48 @@ Kernel: %3 %4 - Build Type: %1 - + Version %1 - - - AccessControlDialog - KeePassXC HTTP Confirm Access - KeePassXC HTTP Потврдите Приступ + Build Type: %1 + - Remember this decision - Запамти ову одлуку + Auto-Type + Аутоматско-куцање - Allow - Допусти + Browser Integration + Интеграција са прегледачем - Deny - Одбаци + SSH Agent + SSH Агент - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 тражи приступ лозинкама за следећу ставку (или ставке). -Молим вас одаберите да ли желите да одобрите приступ. + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) + @@ -112,6 +120,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) Омогући SSH агента (захтева поновно покретање апликације) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + + + + General + Опште + + + Security + + + + Access error for config file %1 + Грешка приликом приступа конфигурационој датотеци %1 + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + + + + Automatically save on exit + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + + + + Hide the entry preview panel + + + + General + Опште + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + + + + Auto-Type + Аутоматско-куцање + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + + + + sec + Seconds + + + + Lock databases after inactivity of + + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -152,7 +431,7 @@ Please select whether you want to allow access. Sequence - Редослед + Секвенца Default sequence @@ -210,10 +489,30 @@ Please select whether you want to allow access. %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. - %1 тражи приступ лозинкама за следећу ставку (или ставке). + %1 тражи приступ лозинкама за следеће ставке. Молим вас одаберите да ли желите да одобрите приступ. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -287,14 +586,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension - - &Disconnect all browsers - - - - Forget all remembered &permissions - - Advanced Напредно @@ -360,14 +651,6 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! - - Executable Files (*.exe);;All Files (*.*) - - - - Executable Files (*) - - Select custom proxy location @@ -376,6 +659,31 @@ Please select whether you want to allow access. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + BrowserService @@ -411,150 +719,44 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? - - KeePassXC: Database locked! - - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - KeePassXC: Settings not available! - - - - The active database does not contain a settings entry. - - - - KeePassXC: No keys found - - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - - Abort - KeePassXC: Removed permissions + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! + KeePassXC: No entry with KeePassHTTP attributes found! - The active database does not contain an entry with permissions. - - - - - ChangeMasterKeyWidget - - Password - Лозинка - - - Enter password: - Унесите лозинку: - - - Repeat password: - Поновите лозинку: - - - &Key file - &Кључ-Датотека - - - Browse - Преглед - - - Create - Креирај - - - Cha&llenge Response - Изазов Одговор - - - Refresh - Освежи - - - Key files - Кључ-Датотеке - - - All files - Све датотеке - - - Create Key File... - Креирај Кључ-Датотеку... - - - Unable to create Key File : - Није могуће креирати Кључ-Датотеку: - - - Select a key file - Одаберите кључ-датотеку - - - Empty password - Празна лозинка - - - Do you really want to use an empty string as password? - Да ли сте сигурни да желите да лозинка буде празна? - - - Different passwords supplied. - Унете су две различите лозинке. - - - Failed to set %1 as the Key file: -%2 - Неуспешно постављање %1 као Кључ-Датотеку: -%2 - - - Legacy key file format + The active database does not contain an entry with KeePassHTTP attributes. - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + KeePassXC: Legacy browser integration settings detected - Changing master key failed: no YubiKey inserted. - Неуспешна промена главног кључа: YubiKey није унет. + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + @@ -569,7 +771,7 @@ Please consider generating a new key file. Replace username and password with references - Замени корисничко име и лозинку са референцама + Замените корисничко име и лозинку са референцама Copy history @@ -624,7 +826,7 @@ Please consider generating a new key file. Preview - Преглед + Приказ Column layout @@ -634,14 +836,6 @@ Please consider generating a new key file. Not present in CSV file Није присутан у CSV датотеци - - Empty fieldname - Празно име поља - - - column - колона - Imported from CSV file Увезено из CSV датотеке @@ -650,49 +844,85 @@ Please consider generating a new key file. Original data: Изворни подаци: - - Error(s) detected in CSV file ! - Грешка(грешке) у CSV датотеци ! - - - more messages skipped] - порука прескочено] - Error Грешка + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - CSV увоз: грешке приликом уписа: - - - - - CsvImportWizard - - Error - Грешка - - - Unable to calculate master key - Није могуће израчунати главни кључ +%1 + CsvParserModel - - %n byte(s), - %n бајт(ова),%n бајт(ова),%n бајт(ова), - - - %n row(s), - %n ред(ова),%n ред(ова),%n ред(ова), - %n column(s) - %n колона%n колона%n колона + + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + %n row(s) + + + + + Database + + Root + Root group name + Корен + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + @@ -721,14 +951,6 @@ Please consider generating a new key file. Challenge Response: Изазов Одговор: - - Unable to open the database. - Није могуће отворити базу података. - - - Can't open key file - Није могуће отворити кључ-датотеку - Legacy key file format @@ -756,52 +978,247 @@ Please consider generating a new key file. Select key file Одаберите кључ-датотеку - - - DatabaseRepairWidget - Repair database - Оправи базу података + TouchID for quick unlock + - Error - Грешка + Unable to open the database: +%1 + - Can't open key file - Није могуће отворити кључ-датотеку - - - Unable to open the database. - Није могуће отворити базу података. - - - Database opened fine. Nothing to do. - База података успешно отворена. Нема шта да се уради. - - - Success - Успешно - - - The database has been successfully repaired -You can now save it. - База података је успешно оправљена -Сада је можете сачувати. - - - Unable to repair the database. - Није могуће оправити базу података. + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Лозинке + + + + DatabaseSettingsDialog + + Advanced Settings + + General Опште - Encryption + Security + + + + Master Key + + + + Encryption Settings + + + + Browser Integration + Интеграција са прегледачем + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + Уклони + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + + + + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + + + + AES: 256 Bit (default) + AES: 256 Bit (подразумевано) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + + + + Transform rounds: + + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged @@ -852,40 +1269,15 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - + + %1 ms + milliseconds + - - AES: 256 Bit (default) - AES: 256 Bit (подразумевано) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - - - - Transform rounds: - - - - Benchmark 1-second delay - - - - Memory Usage: - - - - Parallelism: - + + %1 s + seconds + @@ -936,12 +1328,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Корен + Sharing + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 База података @@ -954,74 +1417,22 @@ If you keep this number, your database may be too easy to crack! Open database Отвори базу података - - File not found! - Датотека није пронађена! - - - Unable to open the database. - Није могуће отворити базу података. - - - File opened in read only mode. - Датотека је отворена у моду само за читање. - - - Open CSV file - Отвори CSV датотеку - CSV file CSV датотека - - All files (*) - Све датотеке (*) - Merge database Удружи базу података Open KeePass 1 database - Отвори KeePass 1 базу података + Отвори KeePass 1  базу података KeePass 1 database KeePass 1 база података - - Close? - Затвори? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" у моду за измене. -Одбаци све измене и свеједно затвори? - - - Save changes? - Сними измене? - - - "%1" was modified. -Save changes? - "%1" је измењен. -Сачувај измене? - - - Writing the database failed. - Уписивање у базу података није успело. - - - Passwords - Лозинке - - - Save database as - Сними базу података као - Export database to CSV file Извези базу података у CSV датотеку @@ -1031,38 +1442,39 @@ Save changes? Уписивање у CSV датотеку није успело. - New database - Нова база података - - - locked - закључано - - - Lock database - Закључај базу података - - - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Није могуће закључати базу података јер је тренутно ажурирате. -Молим вас сачувајте измене или их одбаците. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Ова база података је измењена. -Да ли желите да је сачувате пре закључавања? -У супротном све измене ће бити изгубљене. - - - Disable safe saves? + Database creation error - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier @@ -1072,41 +1484,17 @@ Disable safe saves and try again? Searching... Претрага је у току... - - Change master key - Промени главни кључ - - - Delete entry? - Обриши ставку? - Do you really want to delete the entry "%1" for good? Да ли сте сигурни да желите да обришете ставку "%1"? - - Delete entries? - Обриши ставке? - - - Do you really want to delete %1 entries for good? - Да ли сте сигурни да желите да обришете %1 ставке? - - - Move entry to recycle bin? - Премести ставку у корпу за отпатке? - Do you really want to move entry "%1" to the recycle bin? Да ли сте сигурни да желите да преместите ставку "%1" у корпу за отпатке? - - Move entries to recycle bin? - Премести ставке у корпу за отпатке? - Do you really want to move %n entry(s) to the recycle bin? - Да ли сте сигурни да желите да преместите %n ставку у корпу за отпатке?Да ли сте сигурни да желите да преместите %n ставке у корпу за отпатке?Да ли сте сигурни да желите да преместите %n ставку(ставке) у корпу за отпатке? + Execute command? @@ -1120,18 +1508,10 @@ Disable safe saves and try again? Remember my choice Запамти мој избор - - Delete group? - Обриши групу? - Do you really want to delete the group "%1" for good? Да ли сте сигурни да желите да обришете групу "%1"? - - Unable to calculate master key - Није могуће израчунати главни кључ - No current database. Нема тренутне базе података. @@ -1165,10 +1545,6 @@ Disable safe saves and try again? Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - Није могуће отворити нову датотеку базе података током аутоматског учитавања тренутне базе. - Empty recycle bin? Испразни корпу за отпатке @@ -1177,88 +1553,103 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? Да ли сте сигурни да желите да желите да трајно обришете све ставке из корпе за отпатке? - - - DetailsWidget - - Generate TOTP Token - Генериши TOTP токен + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - Затвори + File opened in read only mode. + Датотека је отворена у моду само за читање. - General - Опште + Lock Database? + - Password - Лозинка + You are editing an entry. Discard changes and lock anyway? + - URL - URL + "%1" was modified. +Save changes? + "%1" је измењен. +Сачувај измене? - Expiration - Датум истека + Database was modified. +Save changes? + - Username - Корисничко име + Save changes? + Сними измене? - Autotype - Аутоматско куцање + Could not open the new database file while attempting to autoreload. +Error: %1 + - Searching - Претрага је у току... + Disable safe saves? + - Attributes - Атрибути + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + - Attachments - Прилози + Writing the database failed. +%1 + - Notes - Белешке + Passwords + Лозинке - Window - Прозор + Save database as + Сними базу података као - Sequence - Редослед + KeePass 2 Database + KeePass 2 База података - Search - Претрага + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Clear - Очисти + Delete group + - Never - Никада + Move group to recycle bin? + - [PROTECTED] - [ЗАШТИЋЕНО] + Do you really want to move the group "%1" to the recycle bin? + - Disabled - Онемогућено + Successfully merged the database files. + - Enabled - Омогућено + Database was not modified by merge operation. + @@ -1331,37 +1722,21 @@ Do you want to merge your changes? New attribute Нови атрибут - - Confirm Remove - Потврди уклањање - Are you sure you want to remove this attribute? Да ли сте сигурни да желите да уклоните атрибут? - - [PROTECTED] - [ЗАШТИЋЕНО] - - - Press reveal to view or edit - Молимо вас да откријете да бисте видели или изменили - Tomorrow Сутра %n week(s) - %n недеља%n недеље(а)%n недеље(а) + %n month(s) - %n месец%n месеца(и)%n месеца(и) - - - 1 year - 1 година + Apply generated password? @@ -1375,6 +1750,26 @@ Do you want to merge your changes? Entry updated successfully. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1619,6 +2014,81 @@ Do you want to merge your changes? Наследи од родитељске групе (%1) + + EditGroupWidgetKeeShare + + Form + Форма + + + Type: + + + + Path: + + + + ... + + + + Password: + Лозинка: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + EditGroupWidgetMain @@ -1647,7 +2117,7 @@ Do you want to merge your changes? Set default Auto-Type se&quence - Подеси као подразумевану секвенцу за Аутоматско-Куцање + Унеси подразумевану секвенцу за Аутоматско-Куцање @@ -1662,23 +2132,19 @@ Do you want to merge your changes? Add custom icon - Додај посебну иконицу + Додај посебну икону Delete custom icon - Обриши посебну иконицу + Обриши посебну икону Download favicon - Преузми иконицу са сајта + Преузми икону са сајта Unable to fetch favicon. - Није могуће добавити иконицу са сајта. - - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Савет: Можете омогућити Гугл као резерву под Алатке>Подешавања>Сигурност + Неуспело добављање иконе са сајта. Images @@ -1688,14 +2154,6 @@ Do you want to merge your changes? All files Све датотеке - - Select Image - Одабери слику - - - Can't read icon - Није могуће учитати иконицу - Custom icon already exists Посебна иконица већ постоји @@ -1705,8 +2163,36 @@ Do you want to merge your changes? Потврди брисање - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Ову иконицу користи %1 уноса, и биће замењена подразумеваном иконицом. Да ли сте сигурни да желите да је обришете? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1756,9 +2242,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Дупликат + %1 - Clone + @@ -1802,10 +2287,6 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - Confirm Remove - Потврди уклањање - Save attachments Сними прилоге @@ -1839,10 +2320,13 @@ This may cause the affected plugins to malfunction. - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - Није могуће отворити датотеке: -%1 + @@ -1926,6 +2410,106 @@ This may cause the affected plugins to malfunction. Attachments Прилози + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + Генериши TOTP токен + + + Close + Затвори + + + General + Опште + + + Username + Корисничко име + + + Password + Лозинка + + + Expiration + Датум истека + + + URL + URL + + + Attributes + Атрибути + + + Attachments + Прилози + + + Notes + Белешке + + + Autotype + Аутоматско куцање + + + Window + Прозор + + + Sequence + Редослед + + + Searching + Претрага је у току... + + + Search + Претрага + + + Clear + Очисти + + + Never + Никада + + + [PROTECTED] + [ЗАШТИЋЕНО] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + Омогућено + + + Disabled + Онемогућено + + + Share + + EntryView @@ -1964,6 +2548,19 @@ This may cause the affected plugins to malfunction. Recycle Bin Корпа за отпатке + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + HostInstaller @@ -1976,61 +2573,6 @@ This may cause the affected plugins to malfunction. - - HttpPasswordGeneratorWidget - - Length: - Дужина: - - - Character Types - Типови карактера - - - Upper Case Letters - Велика слова - - - A-Z - A-Z - - - Lower Case Letters - Мала слова - - - a-z - a-z - - - Numbers - Бројеви - - - 0-9 - 0-9 - - - Special Characters - Посебни карактери - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Изостави сличне карактере - - - Ensure that the password contains characters from every group - Обезбеди да лозинка садржи карактере из сваке групе - - - Extended ASCII - Проширени ASCII - - KMessageWidget @@ -2056,6 +2598,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Неисправан кључ или неисправна база података. + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + Kdbx3Writer @@ -2214,10 +2776,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher @@ -2269,6 +2827,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2340,10 +2910,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid - - Unable to decrypt entry string - - Duplicate custom attribute found @@ -2393,6 +2959,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2556,55 +3128,126 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type - - - KeePass2 - AES: 256-bit - - - - Twofish: 256-bit - - - - ChaCha20: 256-bit - - - - AES-KDF (KDBX 4) - - - - AES-KDF (KDBX 3.1) - - - - Argon2 (KDBX 4 – recommended) + unable to seek to content position - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. + Disabled share - The lock file could not be created. Single-instance mode disabled. + Import from - Another instance of KeePassXC is already running. - Друга инстанца KeePassXC апликације је већ активна. - - - Fatal error while testing the cryptographic functions. + Export to - KeePassXC - Error - KeePassXC - Грешка + Synchronize with + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Преглед + + + Generate + Генериши + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Кључ-Датотеке + + + All files + Све датотеке + + + Create Key File... + Креирај Кључ-Датотеку... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Одаберите кључ-датотеку @@ -2617,10 +3260,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases Скорашње базе података - - Import - Увези - &Help Помоћ @@ -2629,14 +3268,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries Уноси - - Copy att&ribute to clipboard - Копирај атрибут - - - Time-based one-time password - - &Groups Групе @@ -2665,30 +3296,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database Затвори базу података - - &New database - Нова база података - - - Merge from KeePassX database - Удружи податке из KeePassX базе података - - - &Add new entry - Додај нови унос - - - &View/Edit entry - Прикажи/Измени унос - &Delete entry Обриши унос - - &Add new group - Додај нову групу - &Edit group Измени групу @@ -2701,14 +3312,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... Сачувај базу података као... - - Change &master key... - Промени главни кључ - - - &Database settings - Подешавања базе података - Database settings Подешавања базе података @@ -2717,10 +3320,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry Направи дупликат уноса - - &Find - Пронађи - Copy &username Копирај корисничко име @@ -2729,10 +3328,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard Копирај корисничко име - - Cop&y password - Копирај лозинку - Copy password to clipboard Копирај лозинку @@ -2745,14 +3340,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator Генератор Лозинки - - &Perform Auto-Type - Изврши Аутоматско-куцање - - - &Open URL - Отвори URL - &Lock databases Закључај базу података @@ -2785,22 +3372,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... Извези у CSV датотеку - - Import KeePass 1 database... - Увези KeePass 1 базу података - - - Import CSV file... - Увези CSV датотеку... - - - Re&pair database... - Оправи базу података... - - - Show TOTP - Прикажи TOTP - Set up TOTP... Подеси TOTP... @@ -2821,14 +3392,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 Грешка приликом приступа конфигурационој датотеци %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - само-читање - Settings Подешавања @@ -2841,26 +3404,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC Напусти KeePassXC - - KeePass 2 Database - KeePass 2 База података - - - All files - Све датотеке - - - Open database - Отвори базу података - - - Save repaired database - Сними исправљену базу података - - - Writing the database failed. - Уписивање у базу података није успело. - Please touch the button on your YubiKey! @@ -2871,6 +3414,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Корен + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2972,123 +3776,33 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Дијалог + Enter password: + Унесите лозинку: - This is required for accessing your databases from ChromeIPass or PassIFox + Confirm password: - Enable KeePassHTTP server - Омогући KeePassHTTP сервер + Password + Лозинка - General - Опште - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Password cannot be empty. - &Return only best matching entries + Passwords do not match. - Re&quest to unlock the database if it is locked - - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - - &Match URL schemes - - - - Sort matching entries by &username - Сортирај пронађене уносе по корисничком имену - - - Sort &matching entries by title - Сортирај пронађене уносе по наслову - - - R&emove all shared encryption keys from active database - - - - Re&move all stored permissions from entries in active database - - - - Password Generator - Генератор Лозинки - - - Advanced - Напредно - - - Always allow &access to entries - Увек дозволи приступ уносима - - - Always allow &updating entries - - - - Only the selected database has to be connected with a client. - - - - Searc&h in all opened databases for matching entries - - - - Automatically creating or updating string fields is not supported. - - - - &Return advanced string fields which start with "KPH: " - - - - HTTP Port: - HTTP Порт: - - - Default port: 19455 - Подразумевани порт: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - - - - <b>Warning:</b> The following options can be dangerous! - - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password @@ -3157,20 +3871,12 @@ Using default port 19455. Wordlist: - Листа фраза: - - - Word Count: - Број Фраза: + Листа речи: Word Separator: Разделник Фраза: - - Generate - Генериши - Copy Кпирај @@ -3183,10 +3889,6 @@ Using default port 19455. Close Затвори - - Apply - Примени - Entropy: %1 bit Ентропија: %1 бит @@ -3198,7 +3900,7 @@ Using default port 19455. Poor Password quality - Бедан + Слаб Weak @@ -3215,6 +3917,171 @@ Using default port 19455. Password quality Одличан + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Напредно + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Обриши + + + Move + + + + Empty + + + + Remove + Уклони + + + Skip + + + + Disable + Онемогући + + + Merge + + QObject @@ -3234,34 +4101,18 @@ Using default port 19455. Cannot decrypt message - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - - Encryption key is not recognized - - No saved databases found - - Incorrect action @@ -3387,10 +4238,6 @@ Using default port 19455. Insert password to unlock %1: - - Failed to load key file %1 : %2 - - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3472,12 +4319,6 @@ Available commands: error reading from device грешка приликом читања са уређаја - - file empty ! - - датотека је празна! - - malformed string неисправна ниска @@ -3514,10 +4355,6 @@ Available commands: Created - - Legacy Browser Integration - - Browser Integration Интеграција са прегледачем @@ -3546,10 +4383,6 @@ Available commands: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3560,27 +4393,437 @@ Available commands: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + Друга инстанца KeePassXC апликације је већ активна. + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + KeePassXC - Грешка + + + Database password: @@ -3619,11 +4862,97 @@ Available commands: - SearchWidget + SSHAgent - Search... + Agent connection failed. + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search Претрага @@ -3632,311 +4961,317 @@ Available commands: Clear Очисти - - Case Sensitive - - Limit search to selected group + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request + Active - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Allow export - KeePassXC: Overwrite existing key? + Allow import - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Own certificate - KeePassXC: Update Entry + Fingerprint: - Do you want to update the information in %1 - %2? + Certificate: - KeePassXC: Database locked! + Signer - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Key: - KeePassXC: Removed keys from database + Generate + Генериши + + + Import + Увези + + + Export + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Уклони + + + Path + + + + Status + + + + Fingerprint + Отисак прста + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Све датотеке + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + Никада + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + + + + 000000 + + + + Copy + Кпирај + - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) + + + TotpExportSettingsDialog - KeePassXC: No keys found + Copy + Кпирај + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - No shared encryption-keys found in KeePassHttp Settings. + There was an error creating the QR code. - KeePassXC: Settings not available! - - - - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - - - - Abort - - - - KeePassXC: Removed permissions - - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - - - - The active database does not contain an entry with permissions. + Closing in %1 seconds. - SettingsWidget - - Application Settings - - - - General - Опште - - - Security - - - - Access error for config file %1 - Грешка приликом приступа конфигурационој датотеци %1 - - - - SettingsWidgetGeneral - - Basic Settings - - - - Start only a single instance of KeePassXC - - - - Remember last databases - - - - Remember last key files and security dongles - - - - Load previous databases on startup - - - - Automatically save on exit - - - - Automatically save after every change - - - - Automatically reload the database when modified externally - - - - Minimize when copying to clipboard - - - - Minimize window at application startup - - - - Use group icon on entry creation - - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Hide the Details view - - - - Show a system tray icon - - - - Hide window to system tray when minimized - - - - Hide window to system tray instead of app exit - - - - Dark system tray icon - - - - Language - - - - Auto-Type - Аутоматско-куцање - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Global Auto-Type shortcut - - - - Auto-Type delay - - - - ms - Milliseconds - - - - Startup - - - - File Management - - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - - - - Entry Management - - - - General - Опште - - - - SettingsWidgetSecurity - - Timeouts - - - - Clear clipboard after - - - - sec - Seconds - - - - Lock databases after inactivity of - - - - Convenience - - - - Lock databases when session is locked or lid is closed - - - - Lock databases after minimizing the window - - - - Don't require password repeat when it is visible - - - - Show passwords in cleartext by default - - - - Hide passwords in the preview panel - - - - Hide entry notes by default - - - - Privacy - - - - Use Google as fallback for downloading website icons - - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP @@ -3958,7 +5293,7 @@ Please unlock the selected database or choose another one which is unlocked. - Note: Change these settings only if you know what you are doing. + Custom Settings @@ -3966,11 +5301,8 @@ Please unlock the selected database or choose another one which is unlocked. - 8 digits - - - - 6 digits + sec + Seconds @@ -3978,38 +5310,66 @@ Please unlock the selected database or choose another one which is unlocked. - sec - Seconds + 6 digits + + + + 7 digits + + + + 8 digits - TotpDialog + UpdateCheckDialog - Timed Password + Checking for updates - 000000 + Checking for updates... - Copy - Кпирај + Close + Затвори - Expires in + Update Error! - seconds + An error occurred in retrieving update information. - - - UnlockDatabaseWidget - Unlock database + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available @@ -4045,41 +5405,25 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. + Refresh + Освежи + + + YubiKey Challenge-Response - Path of the database. - Путања до базе података. - - - Path of the entry to remove. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager + No YubiKey detected, please ensure it's plugged in. - filenames of the password databases to open (*.kdbx) - - - - path to a custom config file - - - - key file of the database - - - - read password of the database from stdin - - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_sv.ts b/share/translations/keepassx_sv.ts index f66e51d36..ffc647903 100644 --- a/share/translations/keepassx_sv.ts +++ b/share/translations/keepassx_sv.ts @@ -19,15 +19,15 @@ Contributors - Medverkande + Bidragsgivare <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se Bidragsgivare på GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Se alla bidrag på GitHub</a> Debug Info - Felsöknings Information + Felsökningsinformation Include the following information whenever you report a bug: @@ -37,36 +37,6 @@ Copy to clipboard Kopiera till urklipp - - Version %1 - - Version %1 - - - - Revision: %1 - Ändring: %1 - - - Distribution: %1 - Utdelning: %1 - - - Libraries: - Arkiv: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operativ system: %1 -CPU-arkitektur: %2 -Kärna: %3 %4 - - - Enabled extensions: - Aktiverade tillägg: - Project Maintainers: Projekt Ansvariga: @@ -75,42 +45,283 @@ Kärna: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Ett särskilt tack från teamet bakom KeePassXC riktas till debfx som skapade den ursprungliga KeePassX. - - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Bekräfta åtkomst - - - Remember this decision - Kom ihåg detta val - - - Allow - Tillåt - - - Deny - Neka - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 har begärt åtkomst till lösenord för följande objekt(en). -Vänligen välj om du vill tillåta åtkomst. - AgentSettingsWidget Enable SSH Agent (requires restart) - Aktivera SSH Agent (kräver omstart) + Aktivera SSH-agenten (kräver omstart) + + + Use OpenSSH for Windows instead of Pageant + Använd OpenSSH för Windows istället för Pageant + + + + ApplicationSettingsWidget + + Application Settings + Applikationsinställningar + + + General + Allmänt + + + Security + Säkerhet + + + Access error for config file %1 + Åtkomstfel för konfigurationsfil %1 + + + Icon only + Endast Ikon + + + Text only + Endast text + + + Text beside icon + Text bredvid ikon + + + Text under icon + Text under ikon + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Grundinställningar + + + Startup + Uppstart + + + Start only a single instance of KeePassXC + Tillåt endast en samtidig instans av KeePassXC + + + Remember last databases + Komihåg senaste databasen + + + Remember last key files and security dongles + + + + Load previous databases on startup + Ladda tidigare databaser vid uppstart + + + Minimize window at application startup + Minimera fönstret vid start av programmet + + + File Management + Filhantering + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + Gör databasbackup innan sparning + + + Automatically save after every change + Spara automatiskt efter varje ändring + + + Automatically save on exit + Spara automatiskt när applikationen anslutas + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Markera inte databasen som ändrad vi icke-data förändringar (t.ex. öppna grupper) + + + Automatically reload the database when modified externally + Ladda om databasen automatiskt när den ändras externt + + + Entry Management + Posthantering + + + Use group icon on entry creation + Använd gruppens ikon för nya poster + + + Minimize when copying to clipboard + Minimera vid kopiering + + + Hide the entry preview panel + + + + General + Allmänt + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + Visa statusfält ikon + + + Dark system tray icon + Mörk ikon för systemfältet + + + Hide window to system tray when minimized + Vid minimering, minimera fönstret till systemfältet + + + Language + Språk + + + Auto-Type + Autoskriv + + + Use entry title to match windows for global Auto-Type + Använd postens titel för att matcha fönster för global auto-skriv + + + Use entry URL to match windows for global Auto-Type + Använd postens URL för att matcha fönster för global auto-skriv + + + Always ask before performing Auto-Type + Fråga alltid innan auto-skriv utförs + + + Global Auto-Type shortcut + Globalt auto-skriv kortkommando + + + Auto-Type typing delay + + + + ms + Milliseconds + ms. + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Tidsgränser + + + Clear clipboard after + Rensa urklipp efter + + + sec + Seconds + sek + + + Lock databases after inactivity of + Lås databaser efter inaktivitet i + + + min + min + + + Forget TouchID after inactivity of + + + + Convenience + Bekvämlighet + + + Lock databases when session is locked or lid is closed + Lås databaserna när sessionen låses eller locket stängs + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + Lås databaserna när fönstret minimeras + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + Behöver inte upprepa lösenord när det är synligt + + + Don't hide passwords when editing them + Dölj inte lösenord vid editering + + + Don't use placeholder for empty password fields + Använd inte platshållare för tomma lösenordsfält + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + Dölj posters anteckningar som standard + + + Privacy + Integritet + + + Use DuckDuckGo as fallback for downloading website icons + @@ -156,7 +367,7 @@ Vänligen välj om du vill tillåta åtkomst. Default sequence - Standard sekvens + Standardsekvens @@ -186,7 +397,7 @@ Vänligen välj om du vill tillåta åtkomst. Select entry to Auto-Type: - Välj post att auto-skriva + Välj post att autoskriva: @@ -214,6 +425,26 @@ Please select whether you want to allow access. Vill du tillåta det? + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + Ok + + + Cancel + Avbryt + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -287,14 +518,6 @@ Vill du tillåta det? Credentials mean login data requested via browser extension Sortera matchande autentiseringsuppgifter per &användarnamn - - &Disconnect all browsers - &Koppla från alla browsers - - - Forget all remembered &permissions - Glöm alla ihågkomna &rättigheter - Advanced Avancerat @@ -302,7 +525,7 @@ Vill du tillåta det? Never &ask before accessing credentials Credentials mean login data requested via browser extension - &Fråga aldrig innan åtkomst till autentiseringsuppgifter + &Fråga aldrig innan åtkomst till autentisieringsuppgifter Never ask before &updating credentials @@ -344,12 +567,12 @@ Vill du tillåta det? Use a custom proxy location if you installed a proxy manually. - + Använd en anpassad proxy-inställning om du har installerat en proxy manuellt. Use a &custom proxy location Meant is the proxy for KeePassXC-Browser - + Använd en anpassad proxy Browse... @@ -360,20 +583,41 @@ Vill du tillåta det? <b>Warning:</b> The following options can be dangerous! <b>Varning:</b> Följande parametrar kan vara farliga! - - Executable Files (*.exe);;All Files (*.*) - Exekverbara filer (*.exe);;Alla filer (*.*) - - - Executable Files (*) - Exekverbara filer (*) - Select custom proxy location Välj en proxy - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + &Tor Browser + &Tor Browser + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + Exekverbara filer + + + All Files + Alla filer + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 @@ -411,149 +655,53 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? Vill du uppdatera informationen i %1 - %2? - - KeePassXC: Database locked! - KeePassXC: Databasen är låst! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - KeePassXC: Settings not available! - KeePassXC: Inställningar är inte tillgängliga! - - - The active database does not contain a settings entry. - - - - KeePassXC: No keys found - KeePassXC: Hittade inga nycklar - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - KeePassXC: Nycklar borttagna från databasen - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - Raderar sparade rättigheter... - Abort Avbryt - KeePassXC: Removed permissions - KeePassXC: Tog bort behörigheter + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konverterade KeePassHTTP attribut + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC: Ingen post med behörigheter hittades! - - - The active database does not contain an entry with permissions. - Den aktiva databasen innehåller inte en post med behörigheter. - - - - ChangeMasterKeyWidget - - Password - Lösenord - - - Enter password: - Ange lösenord: - - - Repeat password: - Repetera lösenord: - - - &Key file - &Nyckel-fil - - - Browse - Bläddra - - - Create - Skapa - - - Cha&llenge Response + KeePassXC: No entry with KeePassHTTP attributes found! - Refresh - Uppdatera - - - Key files - Nyckel-filer - - - All files - Alla filer - - - Create Key File... - Skapa nyckel-fil... - - - Unable to create Key File : - Kunde inte skapa nyckel-fil - - - Select a key file - Välj nyckel-fil - - - Empty password - Tomt lösenord - - - Do you really want to use an empty string as password? - Vill du verkligen vill använda en tom sträng som lösenord? - - - Different passwords supplied. - Olika lösenord angivna - - - Failed to set %1 as the Key file: -%2 - Kunde inte sätta %1 som nyckel-fil: -%2 - - - Legacy key file format + The active database does not contain an entry with KeePassHTTP attributes. - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + KeePassXC: Legacy browser integration settings detected - Changing master key failed: no YubiKey inserted. + KeePassXC: Create a new group + + + + A request for creating a new group "%1" has been received. +Do you want to create this group? + + + + + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? @@ -565,7 +713,7 @@ Please consider generating a new key file. Append ' - Clone' to title - + Lägg till ' - Klon' i titel Replace username and password with references @@ -600,7 +748,7 @@ Please consider generating a new key file. Text is qualified by - + Text är kvalificerad av Fields are separated by @@ -620,7 +768,7 @@ Please consider generating a new key file. Consider '\' an escape character - Överväg '\' som ändelse tecken + Preview @@ -632,15 +780,7 @@ Please consider generating a new key file. Not present in CSV file - Finns inte i CSV fil - - - Empty fieldname - Tomt fältnamn - - - column - kolumn + Finns inte i CSV filen Imported from CSV file @@ -650,49 +790,91 @@ Please consider generating a new key file. Original data: Ursprungsdata: - - Error(s) detected in CSV file ! - Ett eller flera fel upptäckta i CSV fil! - - - more messages skipped] - Fler meddelande hoppades över - Error Fel + + Empty fieldname %1 + Tomt fältnamn %1 + + + column %1 + kolumn %1 + + + Error(s) detected in CSV file! + Fel upptäckta i CSV-fil! + + + [%n more message(s) skipped] + [%n fler meddelande(n) hoppades över][%n fler meddelande(n) hoppades över] + CSV import: writer has errors: - - CSV importering: skrivare har fel: - - - - CsvImportWizard - - Error - Fel - - - Unable to calculate master key - Kunde inte räkna nu master-nyckeln +%1 + CSV importering: skrivare har fel: +%1 CsvParserModel - - %n byte(s), - %n byte(s),%n byte(s), - - - %n row(s), - %n rad(er),%n rad(er), - %n column(s) %n kolumn(er)%n kolumn(er) + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte(s)%n byte(s) + + + %n row(s) + %n rad(er)%n rad(er) + + + + Database + + Root + Root group name + Root + + + File %1 does not exist. + Fil %1 finns inte. + + + Unable to open file %1. + Kunde inte öppna fil %1. + + + Error while reading the database: %1 + Fel vid inläsning av databas: %1 + + + Could not save, database has no file name. + Kunde inte spara, databasen har inget filnamn. + + + File cannot be written as it is opened in read-only mode. + + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + DatabaseOpenWidget @@ -720,14 +902,6 @@ Please consider generating a new key file. Challenge Response: Utmanings respons - - Unable to open the database. - Kunde inte öppna databas. - - - Can't open key file - Kan inte öppna nyckel-fil - Legacy key file format @@ -755,101 +929,170 @@ Please consider generating a new key file. Select key file Välj nyckel-fil - - - DatabaseRepairWidget - Repair database - Laga databasen + TouchID for quick unlock + TouchID för snabbupplåsning - Error - Fel + Unable to open the database: +%1 + Kunde inte öppna databasen: +%1 - Can't open key file - Kan inte öppna nyckelfilen - - - Unable to open the database. - Misslyckades att öppna databasen. - - - Database opened fine. Nothing to do. - Databas öppnades fint. Inget att göra. - - - Success - Succé - - - The database has been successfully repaired -You can now save it. - Databasens reparation har varit lyckad. -Du kan nu spara den. - - - Unable to repair the database. - Misslyckades med att laga databasen. + Can't open key file: +%1 + Kunde inte öppna nyckelfilen: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Lösenord + + + + DatabaseSettingsDialog + + Advanced Settings + Avancerade inställningar + General Allmänt - Encryption - Kryptering + Security + Säkerhet - Number of rounds too high - Key transformation rounds + Master Key - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! + Encryption Settings + Krypteringsinställningar + + + Browser Integration + Webbläsarintegration + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Browser inställningar + + + &Disconnect all browsers + &Koppla från alla browsers + + + Forg&et all site-specific settings on entries - Understood, keep number + Move KeePassHTTP attributes to KeePassXC-Browser &custom data - Cancel + Stored keys + Sparade nycklar + + + Remove + Ta bort + + + Delete the selected key? + Radera den valda nyckeln? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + Nyckel + + + Value + Värde + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: Hittade inga nycklar + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: Nycklar borttagna från databasen + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + Raderar sparade rättigheter... + + + Abort Avbryt - Number of rounds too low - Key transformation rounds - - - - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! - - - - KDF unchanged - KDF oförändrad - - - Failed to transform key with new KDF parameters; KDF unchanged. - + KeePassXC: Removed permissions + KeePassXC: Tog bort behörigheter - MiB - Abbreviation for Mebibytes (KDF settings) - MiBMiB + Successfully removed permissions from %n entry(s). + - - thread(s) - Threads for parallel execution (KDF settings) - tråd(ar)tråd(ar) + + KeePassXC: No entry with permissions found! + KeePassXC: Ingen post med behörigheter hittades! + + + The active database does not contain an entry with permissions. + Den aktiva databasen innehåller inte en post med behörigheter. + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + @@ -884,8 +1127,111 @@ If you keep this number, your database may be too easy to crack! Parallelism: + Parallelism: + + + Decryption Time: + + ?? s + ?? s + + + Change + Ändra + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + Databasformat: + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + KDBX 4.0 (rekommenderad) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + oförändrad + + + Number of rounds too high + Key transformation rounds + För högt antal omgångar + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + + Understood, keep number + Uppfattat, behåll nummer + + + Cancel + Avbryt + + + Number of rounds too low + Key transformation rounds + För lågt antal omgångar + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + + KDF unchanged + KDF oförändrad + + + Failed to transform key with new KDF parameters; KDF unchanged. + + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + tråd(ar)tråd(ar) + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + DatabaseSettingsWidgetGeneral @@ -931,19 +1277,90 @@ If you keep this number, your database may be too easy to crack! Enable &compression (recommended) + Aktivera &komprimering (rekommenderas) + + + + DatabaseSettingsWidgetKeeShare + + Sharing + Delning + + + Breadcrumb + Brödsmulor + + + Type + Typ + + + Path + Sökväg + + + Last Signer + + Certificates + Certifikat + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + Ingen krypteringsnyckel tillagd + + + You must add at least one encryption key to secure your database! + + + + No password set + Inget lösenord satt + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + Okänt fel + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Databasnamn: + + + Description: + Beskrivning: + DatabaseTabWidget - - Root - Root group - Root - KeePass 2 Database - KeePass 2 Databas + KeePass 2 databas All files @@ -953,30 +1370,10 @@ If you keep this number, your database may be too easy to crack! Open database Öppna databas - - File not found! - Filen kunde inte hittas! - - - Unable to open the database. - Kunde inte öppna databas. - - - File opened in read only mode. - Fil öppnad i läs-enbart läge. - - - Open CSV file - Öppna CSV fil - CSV file CSV-fil - - All files (*) - Alla filer (*) - Merge database Slå samman databas @@ -989,38 +1386,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 databas - - Close? - Stäng? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" är i redigeringsläge. -Kasta ändringarna och stäng ändå? - - - Save changes? - Spara ändringar? - - - "%1" was modified. -Save changes? - "%1" har ändrats. -Spara ändringarna? - - - Writing the database failed. - Kunde inte skriva till databasen. - - - Passwords - Lösenord - - - Save database as - Spara databas som - Export database to CSV file Exportera databasen till en CSV-fil @@ -1030,38 +1395,39 @@ Spara ändringarna? Kunde inte skriva till CSV-filen - New database + Database creation error + + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + + The database file does not exist or is not accessible. + + + + Select CSV file + Välj CSV-fil + + + New Database Ny databas - locked - låst + %1 [New Database] + Database tab name modifier + %1 [Ny databas] - Lock database - Lås databasen + %1 [Locked] + Database tab name modifier + %1 [Låst] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Kan inte låsa databasen eftersom du håller på att redigera den. -Tryck avbryt för att ansluta dina ändringar alternativt kasta dem. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Databasen har ändrats. -Vill du spara databasen innen du låser den? -I annat fall försvinner ändringarna. - - - Disable safe saves? - Inaktivera spara säkert? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + %1 [Read-only] + Database tab name modifier @@ -1071,41 +1437,17 @@ Disable safe saves and try again? Searching... Söker... - - Change master key - Ändra huvud lösenord - - - Delete entry? - Ta bort post? - Do you really want to delete the entry "%1" for good? Vill du verkligen ta bort "%1" för gott? - - Delete entries? - Ta bort poster? - - - Do you really want to delete %1 entries for good? - Vill du verkligen ta bort %1 poser för gott? - - - Move entry to recycle bin? - Flytta post till papperskorgen? - Do you really want to move entry "%1" to the recycle bin? Vill du verkligen flytta %n poster till papperskorgen? - - Move entries to recycle bin? - Lägg poster i papperskorgen? - Do you really want to move %n entry(s) to the recycle bin? - Vill du verkligen flytta %n post till papperskorgen?Vill du verkligen flytta %n poster till papperskorgen? + Execute command? @@ -1117,20 +1459,12 @@ Disable safe saves and try again? Remember my choice - Kom ihåg mitt val - - - Delete group? - Ta bort grupp? + Do you really want to delete the group "%1" for good? Vill du verkligen ta bort gruppen "%1" för gott? - - Unable to calculate master key - Kunde inte räkna nu master-nyckeln - No current database. Ingen nuvarande databas. @@ -1164,10 +1498,6 @@ Disable safe saves and try again? Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - - Empty recycle bin? Töm papperskorgen? @@ -1176,88 +1506,107 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? - - - DetailsWidget - - Generate TOTP Token - Generera TOTP Token + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - Stäng + File opened in read only mode. + Fil öppnad i läs-enbart läge. - General - Allmän + Lock Database? + Lås databas? - Password + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" har ändrats. +Spara ändringarna? + + + Database was modified. +Save changes? + + + + Save changes? + Spara ändringar? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + Inaktivera spara säkert? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords Lösenord - URL - URL + Save database as + Spara databas som - Expiration - Utgår + KeePass 2 Database + KeePass 2 databas - Username - Användarnamn + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Autotype - Autotyp + Delete group + Ta bort grupp - Searching - Söker + Move group to recycle bin? + - Attributes - Attribut + Do you really want to move the group "%1" to the recycle bin? + - Attachments - Bilagor + Successfully merged the database files. + - Notes - Anteckningar + Database was not modified by merge operation. + - Window - Fönster - - - Sequence - Sekvens - - - Search - Sök - - - Clear - Rensa - - - Never - Aldrig - - - [PROTECTED] - [SKYDDAD] - - - Disabled - Inaktiverad - - - Enabled - Aktiverad + Shared group... + @@ -1292,7 +1641,7 @@ Do you want to merge your changes? n/a - + n/a (encrypted) @@ -1300,7 +1649,7 @@ Do you want to merge your changes? Select private key - + Välj privat nyckel File too large to be a private key @@ -1308,7 +1657,7 @@ Do you want to merge your changes? Failed to open private key - + Misslyckades med att öppna privat nyckel Entry history @@ -1330,22 +1679,10 @@ Do you want to merge your changes? New attribute Nytt attribut - - Confirm Remove - Bekräfta borttagning - Are you sure you want to remove this attribute? Är du säker på att du vill ta bort detta attribut? - - [PROTECTED] - [SKYDDAD] - - - Press reveal to view or edit - - Tomorrow Imorgon @@ -1356,15 +1693,11 @@ Do you want to merge your changes? %n month(s) - %n månad%n månader - - - 1 year - 1 år + %n månad(er)%n månad(er) Apply generated password? - + Använd genererat lösenord? Do you want to apply the generated password to this entry? @@ -1374,6 +1707,26 @@ Do you want to merge your changes? Entry updated successfully. + + Entry has unsaved changes + + + + New attribute %1 + Nytt attribut %1 + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + %n år%n år + + + Confirm Removal + Bekräfta borttagning + EditEntryWidgetAdvanced @@ -1399,7 +1752,7 @@ Do you want to merge your changes? Reveal - + Visa Attachments @@ -1430,7 +1783,7 @@ Do you want to merge your changes? Window Associations - + Fönsterassociering + @@ -1511,7 +1864,7 @@ Do you want to merge your changes? EditEntryWidgetSSHAgent Form - + Formulär Remove key from agent after @@ -1547,7 +1900,7 @@ Do you want to merge your changes? n/a - + n/a Copy to clipboard @@ -1555,7 +1908,7 @@ Do you want to merge your changes? Private key - + Private key External file @@ -1618,6 +1971,97 @@ Do you want to merge your changes? Ärv från förälder grupp (%1) + + EditGroupWidgetKeeShare + + Form + Formulär + + + Type: + Typ: + + + Path: + Sökväg: + + + ... + ... + + + Password: + Lösenord: + + + Inactive + Inaktiv + + + Import from path + Importera från sökväg + + + Export to path + Exportera till sökväg + + + Synchronize with path + Synkronisera med sökväg + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + Databasdelning är inaktiverad + + + Database export is disabled + Databasexport är inaktiverad + + + Database import is disabled + Databasimport är inaktiverad + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + Välj källa för import + + + Select export target + Välj mål för export + + + Select import/export file + Välj fil för import/export + + + Clear + Rensa + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1657,7 +2101,7 @@ Do you want to merge your changes? Use custo&m icon - + Använd egen ikon Add custom icon @@ -1675,10 +2119,6 @@ Do you want to merge your changes? Unable to fetch favicon. Kunde inte hämta favicon. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Tips: Du kan aktivera Google som reserv under Verktyg>Inställningar>Säkerhet - Images Bilder @@ -1687,14 +2127,6 @@ Do you want to merge your changes? All files Alla filer - - Select Image - Välj bild - - - Can't read icon - Kan inte läsa ikon - Custom icon already exists @@ -1704,9 +2136,37 @@ Do you want to merge your changes? Bekräfta radering - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + Välj bild(er) + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + EditWidgetProperties @@ -1755,9 +2215,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Klon + %1 - Clone + %1 - Klona @@ -1775,7 +2234,7 @@ This may cause the affected plugins to malfunction. EntryAttachmentsWidget Form - + Formulär Add @@ -1801,10 +2260,6 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - Confirm Remove - Bekräfta borttagning - Save attachments Spara bilagor @@ -1820,28 +2275,34 @@ This may cause the affected plugins to malfunction. Confirm overwrite - + Bekräfta överskrivning Unable to save attachments: %1 - + Kunde inte spara bilagor: +%1 Unable to open attachment: %1 - + Kunde inte öppna bilaga: +%1 Unable to open attachments: %1 - + Kunde inte öppna bilagor: +%1 - Unable to open files: + Confirm remove + Bekräfta borttagning + + + Unable to open file(s): %1 - Lyckas inte öppna filer: -%1 + @@ -1915,22 +2376,122 @@ This may cause the affected plugins to malfunction. Modified - + Ändrad Accessed - + Läst Attachments Bilagor + + Yes + Ja + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + Generera TOTP Token + + + Close + Stäng + + + General + Allmänt + + + Username + Användarnamn + + + Password + Lösenord + + + Expiration + Utgår + + + URL + URL + + + Attributes + Attribut + + + Attachments + Bilagor + + + Notes + Anteckningar + + + Autotype + Autotyp + + + Window + Fönster + + + Sequence + Sekvens + + + Searching + Söker + + + Search + Sök + + + Clear + Rensa + + + Never + Aldrig + + + [PROTECTED] + [SKYDDAD] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Aktiverad + + + Disabled + Inaktiverad + + + Share + Dela + EntryView Customize View - + Anpassa vy Hide Usernames @@ -1963,6 +2524,11 @@ This may cause the affected plugins to malfunction. Recycle Bin Papperskorg + + [empty] + group has no children + [tom] + HostInstaller @@ -1975,61 +2541,6 @@ This may cause the affected plugins to malfunction. - - HttpPasswordGeneratorWidget - - Length: - Längd: - - - Character Types - Teckentyper - - - Upper Case Letters - Versaler - - - A-Z - A-Z - - - Lower Case Letters - Gemener - - - a-z - a-z - - - Numbers - Siffror - - - 0-9 - 0-9 - - - Special Characters - Specialtecken - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Uteslut liknande tecken - - - Ensure that the password contains characters from every group - Säkerställ att lösenordet innehåller tecken från varje grupp - - - Extended ASCII - Utökad ASCII - - KMessageWidget @@ -2055,6 +2566,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Fel lösenord eller korrupt databas-fil + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + Kdbx3Writer @@ -2213,10 +2744,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher @@ -2268,6 +2795,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2339,10 +2878,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid - - Unable to decrypt entry string - - Duplicate custom attribute found @@ -2381,7 +2916,7 @@ This is a one-way migration. You won't be able to open the imported databas Invalid number value - + Felaktigt numeriskt värde Invalid uuid value @@ -2392,6 +2927,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2412,7 +2953,7 @@ This is a one-way migration. You won't be able to open the imported databas Not a KeePass database. - Inte en KeePass databas + Inte en KeePass databas. Unsupported encryption algorithm. @@ -2555,55 +3096,142 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type - - - KeePass2 - AES: 256-bit - AES: 256-bitar - - - Twofish: 256-bit - Twofish: 256-bitar - - - ChaCha20: 256-bit - ChaCha20: 256-bitar - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – rekommenderad) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. + Disabled share - The lock file could not be created. Single-instance mode disabled. + Import from - Another instance of KeePassXC is already running. - En annan instans av KeePassXC körs redan. + Export to + - Fatal error while testing the cryptographic functions. - Allvarligt fel vid testning av kryptografiska funktioner. + Synchronize with + - KeePassXC - Error - KeePassXC - Fel + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + Avbryt + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + Lägg till %1 + + + Change %1 + Change a key component + Ändra %1 + + + Remove %1 + Remove a key component + Ta bort %1 + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + Bläddra + + + Generate + Generera + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Nyckel-filer + + + All files + Alla filer + + + Create Key File... + Skapa nyckel-fil... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Välj nyckel-fil @@ -2616,10 +3244,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases - - Import - Importera - &Help &Hjälp @@ -2628,14 +3252,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries - - Copy att&ribute to clipboard - Kopiera att&ribut till urklipp - - - Time-based one-time password - Tidsbaserat engångslösenord - &Groups &Grupper @@ -2664,30 +3280,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database &Stäng databas - - &New database - &Ny databas - - - Merge from KeePassX database - Sammanfoga med KeePassX databas - - - &Add new entry - &Lägg till ny post - - - &View/Edit entry - &Visa/redigera post - &Delete entry &Radera post - - &Add new group - &Lägg till ny grupp - &Edit group &Redigera grupp @@ -2700,14 +3296,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... Sp&ara databas som... - - Change &master key... - Ändra &huvudlösenord - - - &Database settings - &Databasinställningar - Database settings Databasinställningar @@ -2716,10 +3304,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry &Klona post - - &Find - &Hitta - Copy &username Kopiera &användarnamn @@ -2728,10 +3312,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard Kopiera användarnamn - - Cop&y password - Kop&iera lösenord - Copy password to clipboard Kopiera lösenord @@ -2744,14 +3324,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator Lösenordsgenerator - - &Perform Auto-Type - - - - &Open URL - &Öppna URL - &Lock databases &Lås databas @@ -2784,22 +3356,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... &Exportera till CSV-fil... - - Import KeePass 1 database... - Importera KeePass 1 databas... - - - Import CSV file... - Importera CSV fil... - - - Re&pair database... - Re&parera databas... - - - Show TOTP - Visa TOTP - Set up TOTP... Konfigurera TOTP... @@ -2820,14 +3376,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 Åtkomstfel för konfigurationsfil %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - läs bara - Settings Inställningar @@ -2840,26 +3388,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC Avsluta KeePassXC - - KeePass 2 Database - KeePass 2 databas - - - All files - Alla filer - - - Open database - Öppna databas - - - Save repaired database - Spara lagad databas - - - Writing the database failed. - Misslyckades med att skriva till databasen. - Please touch the button on your YubiKey! @@ -2870,6 +3398,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + &Donera + + + Report a &bug + Rapportera en &bug + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + &Import + + + Copy att&ribute... + Kopiera att&ribut... + + + TOTP... + TOTP... + + + &New database... + &Ny databas... + + + Create a new database + Skapa ny databas + + + &Merge from database... + &Sammanfoga från databas... + + + Merge from another KDBX database + Sammanfoga från annan KDBX-databas + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + Kopiera &lösenord + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + KeePass 1 databas... + + + Import a KeePass 1 database + Importera en KeePass1 databas + + + CSV file... + CSV-fil... + + + Import a CSV file + Importera en CSV-fil + + + Show TOTP... + Visa TOTP... + + + Show TOTP QR Code... + Visa TOTP QR-kod... + + + Check for Updates... + Sök efter uppdateringar... + + + Share entry + Dela post + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + Skriver över %1[%2] + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + Avancerade inställningar + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Krypteringsinställningar + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2887,7 +3676,7 @@ This version is not meant for production use. Key file way too small. - + Nyckelfilen är alldeles för liten Key file magic header id invalid @@ -2971,123 +3760,29 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Dialogruta + Enter password: + Ange lösenord: - This is required for accessing your databases from ChromeIPass or PassIFox + Confirm password: - Enable KeePassHTTP server - Aktivera KeePassHTTP server + Password + Lösenord - General - Allmän - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Returnerar bara de lämpligaste posterna för en viss webbadress istället för alla poster som rör den domänen. - - - &Return only best matching entries + Passwords do not match. - Re&quest to unlock the database if it is locked - Begär att låsa upp databasen om den är låst - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - - &Match URL schemes - - - - Sort matching entries by &username - - - - Sort &matching entries by title - - - - R&emove all shared encryption keys from active database - - - - Re&move all stored permissions from entries in active database - - - - Password Generator - Lösenordsgenerator - - - Advanced - Avancerat - - - Always allow &access to entries - - - - Always allow &updating entries - - - - Only the selected database has to be connected with a client. - Endast den valda databasen måste vara ansluten med en klient. - - - Searc&h in all opened databases for matching entries - - - - Automatically creating or updating string fields is not supported. - Automatiskt skapande eller uppdaterande av strängfält stöds inte. - - - &Return advanced string fields which start with "KPH: " - - - - HTTP Port: - Http-Port: - - - Default port: 19455 - Standard port: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC kommer att lyssna på denna port på 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Varning:</b> Följande parametrar kan vara farliga! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password @@ -3144,7 +3839,7 @@ Using default port 19455. Pick characters from every group - + Välj tecken från alla grupper &Length: @@ -3158,17 +3853,9 @@ Using default port 19455. Wordlist: Ordlista: - - Word Count: - Antal ord: - Word Separator: - Ord separator: - - - Generate - Generera + Ord separerare: Copy @@ -3182,10 +3869,6 @@ Using default port 19455. Close Stäng - - Apply - Utför - Entropy: %1 bit @@ -3214,6 +3897,171 @@ Using default port 19455. Password quality Utmärkt + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + Avancerat + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Ta bort + + + Move + + + + Empty + + + + Remove + Ta bort + + + Skip + + + + Disable + Stäng av + + + Merge + + QObject @@ -3233,34 +4081,18 @@ Using default port 19455. Cannot decrypt message Kan inte avkoda meddelande - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied Åtgärden avbröts eller nekades - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - Nyckelbytet misslyckades - Encryption key is not recognized - - No saved databases found - Ingen sparad databas hittades - Incorrect action Felaktig åtgärd @@ -3386,10 +4218,6 @@ Using default port 19455. Insert password to unlock %1: Ange lösenordet för att låsa upp %1: - - Failed to load key file %1 : %2 - Misslyckades med att ladda nyckelfilen %1: %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3465,21 +4293,15 @@ Tillgängliga kommandon: NULL device - + NULL device error reading from device fel vid läsning från enhet - - file empty ! - - filen är tom! - - malformed string - felaktigt uppbyggd sträng + felaktigt uppbyggd textsträng missing closing quote @@ -3513,10 +4335,6 @@ Tillgängliga kommandon: Created Skapad - - Legacy Browser Integration - - Browser Integration Webbläsarintegration @@ -3545,10 +4363,6 @@ Tillgängliga kommandon: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3559,27 +4373,441 @@ Tillgängliga kommandon: Generera ett nytt slumpmässigt lösenord. - Length of the generated password. - Längden av det genererade lösenordet. - - - Use lowercase characters in the generated password. + Invalid value for password length %1. - Use uppercase characters in the generated password. + Could not create entry with path %1. - Use numbers in the generated password. + Enter password for new entry: - Use special characters in the generated password. + Writing the database failed %1. - Use extended ASCII in the generated password. + Successfully added entry %1. + + + + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + Fil %1 finns inte. + + + Unable to open file %1. + Kunde inte öppna fil %1. + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + filen är tom + + + %1: (row, col) %2,%3 + %1: (rad, kolumn) %2,%3 + + + AES: 256-bit + AES: 256-bitar + + + Twofish: 256-bit + Twofish: 256-bitar + + + ChaCha20: 256-bit + ChaCha20: 256-bitar + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – rekommenderad) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Ogiltiga inställningar + + + Invalid Key + TOTP + Ogiltig nyckel + + + Message encryption failed. + Meddelandekryptering misslyckad. + + + No groups found + Inga grupper funna + + + Create a new database. + Skapa en ny databas. + + + File %1 already exists. + Filen %1 existerar redan. + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + Ta bort en post från databasen + + + Path of the entry to remove. + Sökväg till posten som tas bort + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + KeePassXC - plattformsoberoende lösenordshanterare + + + filenames of the password databases to open (*.kdbx) + namnen på lösenordsdatabaserna som öppnas (*.kdbx) + + + path to a custom config file + Sökväg till egen konfigurations-fil + + + key file of the database + nyckel-fil för databas + + + read password of the database from stdin + mottag databaslösenord från stdin + + + Parent window handle + + + + Another instance of KeePassXC is already running. + En annan instans av KeePassXC körs redan. + + + Fatal error while testing the cryptographic functions. + Allvarligt fel vid testning av kryptografiska funktioner. + + + KeePassXC - Error + KeePassXC - Fel + + + Database password: + Databaslösenord: + + + Cannot create new group @@ -3618,11 +4846,97 @@ Tillgängliga kommandon: - SearchWidget + SSHAgent - Search... - Sök... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + Fält + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + Exempel + + + + SearchWidget Search Sök @@ -3631,311 +4945,332 @@ Tillgängliga kommandon: Clear Rensa - - Case Sensitive - Skiftlägeskänslig - Limit search to selected group Begränsa sökningen till vald grupp + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Sök (%1)... + + + Case sensitive + Skiftlägeskänslig + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request + Active + Aktiv + + + Allow export - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Allow import - KeePassXC: Overwrite existing key? - KeePassXC: Skriv över befintlig nyckel? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Own certificate - KeePassXC: Update Entry - KeePassXC: Uppdatera post - - - Do you want to update the information in %1 - %2? - Vill du uppdatera informationen i %1 - %2? - - - KeePassXC: Database locked! - KeePassXC: Databasen är låst! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Fingerprint: - KeePassXC: Removed keys from database - KeePassXC: Nycklar borttagna från databasen + Certificate: + Certifikat: + + + Signer + + + + Key: + Nyckel: + + + Generate + Generera + + + Import + Importera + + + Export + Export + + + Imported certificates + + + + Trust + + + + Ask + Fråga + + + Untrust + + + + Remove + Ta bort + + + Path + Sökväg + + + Status + Status + + + Fingerprint + Fingeravtryck + + + Certificate + Certifikat + + + Trusted + + + + Untrusted + + + + Unknown + Okänd + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + Alla filer + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + Inte denna gång + + + Never + Aldrig + + + Always + Alltid + + + Just this time + Bara denna gång + + + Import from %1 failed (%2) + Import från %1 misslyckades (%2) + + + Import from %1 successful (%2) + Import från %1 lyckades (%2) + + + Imported from %1 + Importerad ifrån %1 + + + Signed share container are not supported - import prevented + + + + File is not readable + Filen är inte läsbar + + + Invalid sharing container + Ogiltig delningscontainer + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + Oväntat fel + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + Filen existerar inte. + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + Exportera till %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + Tidsinställt Lösenord + + + 000000 + 000000 + + + Copy + Kopiera - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - - - - KeePassXC: No keys found - KeePassXC: Inga nycklar hittade - - - No shared encryption-keys found in KeePassHttp Settings. - - - - KeePassXC: Settings not available! - KeePassXC: Inställningar är inte tillgängliga! - - - The active database does not contain an entry of KeePassHttp Settings. - - - - Removing stored permissions... - Tar bort lagrade behörigheter... - - - Abort - Avbryt - - - KeePassXC: Removed permissions - KeePassXC: Tog bort behörigheter - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC: Ingen post med behörigheter hittades! - - - The active database does not contain an entry with permissions. - Den aktiva databasen innehåller inte en post med behörigheter. + Expires in <b>%n</b> second(s) + Löper ut om %n sekund(er)Löper ut om <b>%n</b> sekund(er) - SettingsWidget + TotpExportSettingsDialog - Application Settings - Applikationsinställningar + Copy + Kopiera - General - Allmän - - - Security - Säkerhet - - - Access error for config file %1 - Åtkomstfel för konfigurationsfil %1 - - - - SettingsWidgetGeneral - - Basic Settings - Grund inställningar - - - Start only a single instance of KeePassXC - Tillåt endast en öppen instans av KeePassXC - - - Remember last databases - Komihåg senaste databasen - - - Remember last key files and security dongles + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - Load previous databases on startup - Ladda tidigare databaser vid uppstart + There was an error creating the QR code. + Det uppstod ett fel vid skapandet av QR-koden. - Automatically save on exit - Spara automatiskt när applikationen anslutas - - - Automatically save after every change - Spara automatiskt efter varje ändring - - - Automatically reload the database when modified externally - Ladda om databasen automatiskt när den ändras externt - - - Minimize when copying to clipboard - Minimera vid kopiering - - - Minimize window at application startup - Minimera fönstret vid start av programmet - - - Use group icon on entry creation - Använd gruppens ikon för nya poster - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Markera inte databasen som ändrad vi icke-data förändringar (t.ex. öppna grupper) - - - Hide the Details view - Dölj detaljvyn - - - Show a system tray icon - Visa statusfält ikon - - - Hide window to system tray when minimized - Vid minimering, minimera fönstret till systemfältet - - - Hide window to system tray instead of app exit - Vid stängning, minimera fönstret till systemfältet istället - - - Dark system tray icon - Mörk ikon för systemfältet - - - Language - Språk - - - Auto-Type - Auto-skriv - - - Use entry title to match windows for global Auto-Type - Använd postens titel för att matcha fönster för global auto-skriv - - - Use entry URL to match windows for global Auto-Type - Använd postens URL för att matcha fönster för global auto-skriv - - - Always ask before performing Auto-Type - Fråga alltid innan auto-skriv utförs - - - Global Auto-Type shortcut - Globalt auto-skriv kortkommando - - - Auto-Type delay - Auto-skriv fördröjning - - - ms - Milliseconds - ms. - - - Startup - Uppstart - - - File Management - Filhantering - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - Gör databasbackup innan sparning - - - Entry Management - Posthantering - - - General - Allmänt + Closing in %1 seconds. + Stänger om %1 sekunder. - SettingsWidgetSecurity - - Timeouts - Tidsgränser - - - Clear clipboard after - Rensa urklipp efter - - - sec - Seconds - sek - - - Lock databases after inactivity of - Lås databaser efter inaktivitet i - - - Convenience - Bekvämlighet - - - Lock databases when session is locked or lid is closed - Lås databaserna när sessionen låses eller locket stängs - - - Lock databases after minimizing the window - Lås databaserna när fönstret minimeras - - - Don't require password repeat when it is visible - Behöver inte upprepa lösenord när det är synligt - - - Show passwords in cleartext by default - Visa lösenord i klartext som standard - - - Hide passwords in the preview panel - Dölj lösenord i förhandsgranskningsrutan - - - Hide entry notes by default - Dölj posters anteckningar som standard - - - Privacy - Integritet - - - Use Google as fallback for downloading website icons - Använd Google som reserv för att ladda ner webbplatsikoner - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP Konfigurera TOTP @@ -3957,59 +5292,84 @@ Please unlock the selected database or choose another one which is unlocked.Använd anpassade inställningar - Note: Change these settings only if you know what you are doing. - Obs: Ändra bara dessa inställningar om du vet vad du gör. + Custom Settings + Anpassade inställningar Time step: Tidsteg: - 8 digits - 8 siffror - - - 6 digits - 6 siffror + sec + Seconds + sek Code size: Kodstorlek: - sec - Seconds - sek + 6 digits + 6 siffror + + + 7 digits + 7 siffror + + + 8 digits + 8 siffror - TotpDialog + UpdateCheckDialog - Timed Password - Tidsinställt Lösenord + Checking for updates + Söker efter uppdateringar - 000000 - 000000 + Checking for updates... + Söker efter uppdateringar... - Copy - Kopiera + Close + Stäng - Expires in - Går ut om + Update Error! + Uppdateringsfel! - seconds - sekunder + An error occurred in retrieving update information. + Ett felinträffade vid inhämtning av information. - - - UnlockDatabaseWidget - Unlock database - Lås upp databas + Please try again later. + Vänligen försök igen senare. + + + Software Update + Mjukvaruuppdatering + + + A new version of KeePassXC is available! + En ny version av KeePassXC är tillgänglig! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 är nu tillgänglig — du har %2. + + + Download it at keepassxc.org + Ladda ner den nu på keepassxc.org + + + You're up-to-date! + Du är uppdaterad! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 är för närvarande den nyaste tillgängliga version @@ -4044,41 +5404,25 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - Ta bort en post från databasen + Refresh + Uppdatera - Path of the database. - Sökväg till databasen + YubiKey Challenge-Response + - Path of the entry to remove. - Sökväg till posten som tas bort + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC - plattformsoberoende lösenordshanterare + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - namnen på lösenordsdatabaserna som öppnas (*.kdbx) - - - path to a custom config file - Sökväg till egen konfigurations-fil - - - key file of the database - nyckel-fil för databas - - - read password of the database from stdin - mottag databaslösenord från stdin - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_th.ts b/share/translations/keepassx_th.ts index ac86a9466..a7fbc578f 100644 --- a/share/translations/keepassx_th.ts +++ b/share/translations/keepassx_th.ts @@ -38,12 +38,6 @@ Copy to clipboard คัดลอกไปยังคลิปบอร์ด: - - Version %1 - - รุ่น %1 - - Revision: %1 การปรับปรุง: %1 @@ -77,32 +71,47 @@ Kernel: %3 %4 - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access + Version %1 - Remember this decision - จำการตัดสินใจนี้ + Build Type: %1 + - Allow - อนุญาต + Auto-Type + Auto-Type - Deny - ปฏิเสธ + Browser Integration + การทำงานร่วมกับเบราว์เซอร์ - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + SSH Agent + + + + YubiKey + + + + TouchID + + + + None + + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) @@ -112,6 +121,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + การตั้งค่าแอป + + + General + ทั่วไป + + + Security + ความมั่นคง + + + Access error for config file %1 + มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 + + + Icon only + + + + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + การตั้งค่าพื้นฐาน + + + Startup + + + + Start only a single instance of KeePassXC + + + + Remember last databases + จำฐานข้อมูลล่าสุด + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Minimize window at application startup + ย่อหน้าต่างลงเล็กสุดตอนเริ่มแอป + + + File Management + + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + บันทึกอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง + + + Automatically save on exit + บันทึกอัตโนมัติตอนออก + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Automatically reload the database when modified externally + + + + Entry Management + + + + Use group icon on entry creation + + + + Minimize when copying to clipboard + ย่อหน้าต่างเมื่อคัดลอกไปยังคลิปบอร์ด + + + Hide the entry preview panel + + + + General + ทั่วไป + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + แสดงไอคอนสำหรับ system tray + + + Dark system tray icon + + + + Hide window to system tray when minimized + + + + Language + ภาษา + + + Auto-Type + Auto-Type + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type typing delay + + + + ms + Milliseconds + มิลลิวิ + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + ล้างคลิปบอร์ดหลัง + + + sec + Seconds + วิ + + + Lock databases after inactivity of + ล็อกฐานข้อมูลหลังไม่มีการใช้งาน + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + ความสะดวก + + + Lock databases when session is locked or lid is closed + + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + ล็อกฐานข้อมูลหลังย่อหน้าต่างลงเล็กสุด + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + ไม่ต้องถามรหัสผ่านซ้ำถ้ามองเห็นรหัสผ่านอยู่ + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + + + + Privacy + ความเป็นส่วนตัว + + + Use DuckDuckGo as fallback for downloading website icons + + AutoType @@ -213,6 +493,26 @@ Please select whether you want to allow access. + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + ยกเลิก + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -286,14 +586,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension - - &Disconnect all browsers - หยุดการเชื่อมต่อกับทุกเบราว์เซอร์ (&D) - - - Forget all remembered &permissions - ลืมการอนุญาตที่เคยจำไว้ทั้งหมด (&P) - Advanced ขั้นสูง @@ -359,14 +651,6 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! - - Executable Files (*.exe);;All Files (*.*) - - - - Executable Files (*) - - Select custom proxy location @@ -375,6 +659,31 @@ Please select whether you want to allow access. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + + + + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + + + + All Files + + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + BrowserService @@ -410,148 +719,43 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? - - KeePassXC: Database locked! - KeePassXC: ฐานข้อมูลถูกล็อก! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - - - - KeePassXC: Settings not available! - KeePassXC: ไม่มีการตั้งค่าที่ใช้ได้! - - - The active database does not contain a settings entry. - - - - KeePassXC: No keys found - KeePassXC: ไม่พบกุญแจ - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - KeePassXC: กุญแจถูกนำออกจากฐานข้อมูล - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - - Abort หยุด - KeePassXC: Removed permissions - KeePassXC: การอนุญาตถูกนำออก + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! + KeePassXC: No entry with KeePassHTTP attributes found! - The active database does not contain an entry with permissions. - - - - - ChangeMasterKeyWidget - - Password - รหัสผ่าน - - - Enter password: - ป้อนรหัสผ่าน: - - - Repeat password: - ทวนรหัสผ่าน: - - - &Key file - แฟ้มกุญแจ (&K) - - - Browse - ดู - - - Create - สร้าง - - - Cha&llenge Response - รหัสสอบถาม รหัสตอบกลับ (&L) - - - Refresh - เรียกใหม่ - - - Key files - แฟ้มกุญแจ - - - All files - ทุกแฟ้ม - - - Create Key File... - สร้างแฟ้มกุญแจ... - - - Unable to create Key File : - ไม่สามารถสร้างแฟ้มกุญแจได้ : - - - Select a key file - เลือกแฟ้มกุญแจ - - - Empty password - รหัสผ่านว่างเปล่า - - - Do you really want to use an empty string as password? + The active database does not contain an entry with KeePassHTTP attributes. - Different passwords supplied. - รหัสผ่านที่ให้มาไม่ตรงกัน - - - Failed to set %1 as the Key file: -%2 + KeePassXC: Legacy browser integration settings detected - Legacy key file format - - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - - - - Changing master key failed: no YubiKey inserted. + Legacy browser integration settings have been detected. +Do you want to upgrade the settings to the latest standard? +This is necessary to maintain compatibility with the browser plugin. @@ -632,14 +836,6 @@ Please consider generating a new key file. Not present in CSV file - - Empty fieldname - ชื่อฟิลด์ว่างเปล่า - - - column - หลัก - Imported from CSV file นำเข้าจากแฟ้ม CSV แล้ว @@ -648,50 +844,86 @@ Please consider generating a new key file. Original data: ข้อมูลต้นฉบับ: - - Error(s) detected in CSV file ! - พบข้อผิดพลาดในแฟ้ม CSV ! - - - more messages skipped] - มีข้อความอีกมากที่ถูกข้ามไป] - Error ผิดพลาด + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - การนำเข้า CSV: ตัวเขียนมีข้อผิดพลาด: - - - - - CsvImportWizard - - Error - ผิดพลาด - - - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ +%1 + CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) + %n คอลัมน์ + + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + %n row(s) + + + + + Database + + Root + Root group name + รูต + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: %1 + + + + Could not save, database has no file name. + + + + File cannot be written as it is opened in read-only mode. + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + + DatabaseOpenWidget @@ -719,14 +951,6 @@ Please consider generating a new key file. Challenge Response: รหัสสอบถาม รหัสตอบกลับ: - - Unable to open the database. - ไม่สามารถเปิดฐานข้อมูล - - - Can't open key file - ไม่สามารถเปิดแฟ้มกุญแจ - Legacy key file format @@ -754,53 +978,248 @@ Please consider generating a new key file. Select key file เลือกแฟ้มกุญแจ - - - DatabaseRepairWidget - Repair database - ซ่อมฐานข้อมูล + TouchID for quick unlock + - Error - ผิดพลาด + Unable to open the database: +%1 + - Can't open key file - ไม่สามารถเปิดแฟ้มกุญแจ - - - Unable to open the database. - ไม่สามารถเปิดฐานข้อมูลดังกล่าว - - - Database opened fine. Nothing to do. - ฐานข้อมูลเปิดได้ปกติ ไม่ต้องทำอะไร - - - Success - สำเร็จ - - - The database has been successfully repaired -You can now save it. - ฐานข้อมูลดังกล่าวถูกซ่อมสำเร็จแล้ว -ตอนนี้คุณสามารถบันทึกมันได้ - - - Unable to repair the database. - ไม่สามารถซ่อมฐานข้อมูลดังกล่าว + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + รหัสผ่าน + + + + DatabaseSettingsDialog + + Advanced Settings + + General ทั่วไป - Encryption - การเข้ารหัสลับ + Security + ความมั่นคง + + + Master Key + + + + Encryption Settings + + + + Browser Integration + การทำงานร่วมกับเบราว์เซอร์ + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + หยุดการเชื่อมต่อกับทุกเบราว์เซอร์ (&D) + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + นำออก + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC: ไม่พบกุญแจ + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC: กุญแจถูกนำออกจากฐานข้อมูล + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + + + + Abort + หยุด + + + KeePassXC: Removed permissions + KeePassXC: การอนุญาตถูกนำออก + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + + + + The active database does not contain an entry with permissions. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + อัลกอริทึมเข้ารหัสลับ: + + + AES: 256 Bit (default) + AES: 256 บิต (ค่าปริยาย) + + + Twofish: 256 Bit + Twofish: 256 บิต + + + Key Derivation Function: + + + + Transform rounds: + รอบเปลี่ยนรูป: + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + Decryption Time: + + + + ?? s + + + + Change + + + + 100 ms + + + + 5 s + + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + + + + This is only important if you need to use your database with other programs. + + + + KDBX 4.0 (recommended) + + + + KDBX 3.1 + + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -850,40 +1269,15 @@ If you keep this number, your database may be too easy to crack! Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - อัลกอริทึมเข้ารหัสลับ: + + %1 ms + milliseconds + - - AES: 256 Bit (default) - AES: 256 บิต (ค่าปริยาย) - - - Twofish: 256 Bit - Twofish: 256 บิต - - - Key Derivation Function: - - - - Transform rounds: - รอบเปลี่ยนรูป: - - - Benchmark 1-second delay - - - - Memory Usage: - - - - Parallelism: - + + %1 s + seconds + @@ -934,12 +1328,83 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - รูต + Sharing + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + ความผิดพลาดที่ไม่รู้จัก + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + + + + Description: + + + + + DatabaseTabWidget KeePass 2 Database ฐานข้อมูล KeePass 2 @@ -952,30 +1417,10 @@ If you keep this number, your database may be too easy to crack! Open database เปิดฐานข้อมูล - - File not found! - ไม่พบแฟ้ม! - - - Unable to open the database. - ไม่สามารถเปิดฐานข้อมูล - - - File opened in read only mode. - เปิดแฟ้มแล้วในแบบอ่านอย่างเดียว - - - Open CSV file - เปิดแฟ้ม CSV - CSV file แฟ้ม CSV - - All files (*) - ทุกแฟ้ม () - Merge database ผสานฐานข้อมูล @@ -988,38 +1433,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database ฐานข้อมูล KeePass 1 - - Close? - ปิด? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" อยู่ในระหว่าการแก้ไข -ละทิ้งการเปลี่ยนแปลงทั้งหมดและปิดอยู่ดี? - - - Save changes? - บันทึกความเปลี่ยนแปลง? - - - "%1" was modified. -Save changes? - "%1" ถูกแก้ไข -บันทึกการเปลี่ยนแปลง? - - - Writing the database failed. - การเขียนฐานข้อมูลล้มเหลว - - - Passwords - รหัสผ่าน - - - Save database as - บันทึกฐานข้อมูลเป็น - Export database to CSV file ส่งออกฐานข้อมูลเป็นแฟ้ม CSV @@ -1029,35 +1442,39 @@ Save changes? การเขียนแฟ้ม CSV ล้มเหลว - New database - ฐานข้อมูลใหม่ - - - locked - ถูกล็อก - - - Lock database - ล็อกฐานข้อมูล - - - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + Database creation error - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Disable safe saves? + The database file does not exist or is not accessible. - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + Select CSV file + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier @@ -1067,41 +1484,17 @@ Disable safe saves and try again? Searching... ค้นหา... - - Change master key - เปลี่ยนกุญแจมาสเตอร์ - - - Delete entry? - ลบรายการ? - Do you really want to delete the entry "%1" for good? คุณต้องการจะลบรายการ "%1" ให้หายไปตลอดกาลจริงๆ? - - Delete entries? - ลบรายการ? - - - Do you really want to delete %1 entries for good? - คุณต้องการจะลบรายการ %1 รายการให้หายไปตลอดกาลจริงๆ? - - - Move entry to recycle bin? - - Do you really want to move entry "%1" to the recycle bin? - - Move entries to recycle bin? - ย้ายรายการไปถังขยะ? - Do you really want to move %n entry(s) to the recycle bin? - คุณต้องการจะย้ายรายการ %1 รายการไปยังถังขยะจริงๆ? + Execute command? @@ -1115,18 +1508,10 @@ Disable safe saves and try again? Remember my choice จำที่ฉันเลือก - - Delete group? - ลบกลุ่ม? - Do you really want to delete the group "%1" for good? คุณต้องการจะลบกลุ่ม "%1" ไปตลอดกาลจริงหรือ? - - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ - No current database. ไม่มีฐานข้อมูลขณะนี้ @@ -1160,10 +1545,6 @@ Disable safe saves and try again? Do you want to merge your changes? - - Could not open the new database file while attempting to autoreload this database. - - Empty recycle bin? @@ -1172,88 +1553,103 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? - - - DetailsWidget - - Generate TOTP Token - สร้างโทเคน TOTP + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - ปิด + File opened in read only mode. + เปิดแฟ้มแล้วในแบบอ่านอย่างเดียว - General - ทั่วไป - - - Password - รหัสผ่าน - - - URL - URL - - - Expiration - หมดอายุ - - - Username - ชื่อผู้ใช้ - - - Autotype + Lock Database? - Searching - กำลังค้นหา + You are editing an entry. Discard changes and lock anyway? + - Attributes - คุณสมบัติ + "%1" was modified. +Save changes? + "%1" ถูกแก้ไข +บันทึกการเปลี่ยนแปลง? - Attachments - แฟ้มแนบ + Database was modified. +Save changes? + - Notes - บันทึก + Save changes? + บันทึกความเปลี่ยนแปลง? - Window - หน้าต่าง + Could not open the new database file while attempting to autoreload. +Error: %1 + - Sequence - ลำดับ + Disable safe saves? + - Search - ค้นหา + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + - Clear - ล้าง + Writing the database failed. +%1 + - Never - ไม่เลย + Passwords + รหัสผ่าน - [PROTECTED] - [ถูกป้องกันอยู่] + Save database as + บันทึกฐานข้อมูลเป็น - Disabled - ปิดใช้ + KeePass 2 Database + ฐานข้อมูล KeePass 2 - Enabled - เปิดใช้ + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + + + + Delete group + + + + Move group to recycle bin? + + + + Do you really want to move the group "%1" to the recycle bin? + + + + Successfully merged the database files. + + + + Database was not modified by merge operation. + @@ -1326,22 +1722,10 @@ Do you want to merge your changes? New attribute คุณสมบัติใหม่ - - Confirm Remove - ยืนยันการนำออก - Are you sure you want to remove this attribute? - - [PROTECTED] - [ถูกป้องกันอยู่] - - - Press reveal to view or edit - - Tomorrow พรุ่งนี้ @@ -1354,10 +1738,6 @@ Do you want to merge your changes? %n month(s) %n เดือน - - 1 year - 1 ปี - Apply generated password? @@ -1370,6 +1750,26 @@ Do you want to merge your changes? Entry updated successfully. + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1614,6 +2014,81 @@ Do you want to merge your changes? + + EditGroupWidgetKeeShare + + Form + + + + Type: + + + + Path: + + + + ... + + + + Password: + รหัสผ่าน: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + EditGroupWidgetMain @@ -1671,10 +2146,6 @@ Do you want to merge your changes? Unable to fetch favicon. ไม่สามารถดึง favicon ได้ - - Hint: You can enable Google as a fallback under Tools>Settings>Security - - Images ภาพ @@ -1683,14 +2154,6 @@ Do you want to merge your changes? All files ทุกแฟ้ม - - Select Image - เลือกภาพ - - - Can't read icon - ไม่สามารถอ่านไอคอน - Custom icon already exists มีไอคอนที่กำหนดเองอยู่แล้ว @@ -1700,9 +2163,37 @@ Do you want to merge your changes? ยืนยันการลบ - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Custom icon successfully downloaded + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + + EditWidgetProperties @@ -1751,9 +2242,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - โคลน + %1 - Clone + @@ -1797,10 +2287,6 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - Confirm Remove - ยืนยันการนำออก - Save attachments บันทึกแฟ้มแนบ @@ -1837,10 +2323,13 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - ไม่สามารถเปิดแฟ้ม: -%1 + @@ -1924,6 +2413,106 @@ This may cause the affected plugins to malfunction. Attachments แฟ้มแนบ + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + สร้างโทเคน TOTP + + + Close + ปิด + + + General + ทั่วไป + + + Username + ชื่อผู้ใช้ + + + Password + รหัสผ่าน + + + Expiration + หมดอายุ + + + URL + URL + + + Attributes + คุณสมบัติ + + + Attachments + แฟ้มแนบ + + + Notes + บันทึก + + + Autotype + + + + Window + หน้าต่าง + + + Sequence + ลำดับ + + + Searching + กำลังค้นหา + + + Search + ค้นหา + + + Clear + ล้าง + + + Never + ไม่เลย + + + [PROTECTED] + [ถูกป้องกันอยู่] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + เปิดใช้ + + + Disabled + ปิดใช้ + + + Share + + EntryView @@ -1962,6 +2551,19 @@ This may cause the affected plugins to malfunction. Recycle Bin ถังขยะ + + [empty] + group has no children + + + + + GroupModel + + %1 + Template for name without annotation + + HostInstaller @@ -1974,61 +2576,6 @@ This may cause the affected plugins to malfunction. - - HttpPasswordGeneratorWidget - - Length: - ความยาว: - - - Character Types - ชนิดอักขระ - - - Upper Case Letters - อักษรตัวพิมพ์ใหญ่ - - - A-Z - A-Z - - - Lower Case Letters - อักษรตัวพิมพ์เล็ก - - - a-z - a-z - - - Numbers - ตัวเลข - - - 0-9 - 0-9 - - - Special Characters - อักขระพิเศษ - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - ไม่ใช้อักขระที่หน้าตาคล้ายกัน - - - Ensure that the password contains characters from every group - ทำให้แน่ใจว่ารหัสผ่านมีอักขระจากทุกกลุ่ม - - - Extended ASCII - - - KMessageWidget @@ -2054,6 +2601,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. + + missing database headers + + + + Header doesn't match hash + + + + Invalid header id size + + + + Invalid header field length + + + + Invalid header data length + + Kdbx3Writer @@ -2212,10 +2779,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - - Unsupported cipher @@ -2267,6 +2830,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2338,10 +2913,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid - - Unable to decrypt entry string - - Duplicate custom attribute found @@ -2391,6 +2962,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2400,7 +2977,7 @@ This is a one-way migration. You won't be able to open the imported databas Unable to open the database. - ไม่สามารถเปิดฐานข้อมูล + ไม่สามารถเปิดฐานข้อมูลดังกล่าว @@ -2554,55 +3131,126 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type - - - KeePass2 - AES: 256-bit - AES: 256 บิต - - - Twofish: 256-bit - Twofish: 256 บิต - - - ChaCha20: 256-bit - ChaCha20: 256 บิต - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – แนะนำ) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. + Disabled share - The lock file could not be created. Single-instance mode disabled. + Import from - Another instance of KeePassXC is already running. + Export to - Fatal error while testing the cryptographic functions. + Synchronize with + + + + + KeyComponentWidget + + Key Component - KeePassXC - Error - KeePassXC - ข้อผิดพลาด + Key Component Description + + + + Cancel + ยกเลิก + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + ดู + + + Generate + สร้าง + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + แฟ้มกุญแจ + + + All files + ทุกแฟ้ม + + + Create Key File... + สร้างแฟ้มกุญแจ... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + เลือกแฟ้มกุญแจ @@ -2615,10 +3263,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases ฐานข้อมูลที่เพิ่งใช้ (&R) - - Import - นำเข้า - &Help ช่วยเหลือ (&H) @@ -2627,14 +3271,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries - - Copy att&ribute to clipboard - - - - Time-based one-time password - - &Groups กลุ่ม (&G) @@ -2663,30 +3299,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database ปิดฐานข้อมูล (&C) - - &New database - ฐานข้อมูลใหม่ (&N) - - - Merge from KeePassX database - ผสานจากฐานข้อมูล KeePassX - - - &Add new entry - เพิ่มรายการใหม่ (&A) - - - &View/Edit entry - ดูและแก้ไขรายการ (&V) - &Delete entry ลบรายการ (&D) - - &Add new group - เพิ่มกลุ่มใหม่ (&A) - &Edit group แก้ไขกลุ่ม (&E) @@ -2699,14 +3315,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... บันทึกฐานข้อมูลเป็น (&V)... - - Change &master key... - เปลี่ยนกุญแจมาสเตอร์ (&M) - - - &Database settings - การตั้งค่าฐานข้อมูล (&D) - Database settings การตั้งค่าฐานข้อมูล @@ -2715,10 +3323,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry โคลนรายการ (&C) - - &Find - ค้นหา (&F) - Copy &username คัดลอกชื่อผู้ใช้ (&U) @@ -2727,10 +3331,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard คัดลอกชื่อผู้ใช้ไปคลิปบอร์ด - - Cop&y password - คัดลอกรหัสผ่าน (&Y) - Copy password to clipboard คัดลอกรหัสผ่านไปคลิปบอร์ด @@ -2743,14 +3343,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator ตัวสร้างรหัสผ่าน - - &Perform Auto-Type - - - - &Open URL - เปิด URL (&O) - &Lock databases ล็อกฐานข้อมูล (&L) @@ -2783,22 +3375,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... ส่งออกไปเป็นแฟ้ม CSV... (&E) - - Import KeePass 1 database... - นำเข้าฐานข้อมูล KeePass1... - - - Import CSV file... - นำเข้าแฟ้ม CSV... - - - Re&pair database... - ซ่อมฐานข้อมูล... (&P) - - - Show TOTP - แสดง TOTP - Set up TOTP... ติดตั้ง TOTP... @@ -2819,14 +3395,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - - - - read-only - อ่านอย่างเดียว - Settings ตั้งค่า @@ -2839,26 +3407,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC ออกจาก KeePassXC - - KeePass 2 Database - ฐานข้อมูล KeePass 2 - - - All files - ทุกแฟ้ม - - - Open database - เปิดฐานข้อมูล - - - Save repaired database - บันทึกฐานข้อมูลที่ซ่อมแล้ว - - - Writing the database failed. - การเขียนฐานข้อมูลล้มเหลว - Please touch the button on your YubiKey! กรุณาแตะปุ่มบน YubiKey ของคุณ! @@ -2869,6 +3417,267 @@ There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + รูต + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2970,123 +3779,33 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog + Enter password: + ป้อนรหัสผ่าน: + + + Confirm password: - This is required for accessing your databases from ChromeIPass or PassIFox + Password + รหัสผ่าน + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - Enable KeePassHTTP server + Password cannot be empty. - General - ทั่วไป - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + Passwords do not match. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - - - - &Return only best matching entries - - - - Re&quest to unlock the database if it is locked - - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - - - - &Match URL schemes - - - - Sort matching entries by &username - - - - Sort &matching entries by title - - - - R&emove all shared encryption keys from active database - - - - Re&move all stored permissions from entries in active database - - - - Password Generator - ตัวสร้างรหัสผ่าน - - - Advanced - ขั้นสูง - - - Always allow &access to entries - - - - Always allow &updating entries - - - - Only the selected database has to be connected with a client. - - - - Searc&h in all opened databases for matching entries - - - - Automatically creating or updating string fields is not supported. - - - - &Return advanced string fields which start with "KPH: " - - - - HTTP Port: - พอร์ต HTTP: - - - Default port: 19455 - พอร์ตมาตรฐาน: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - - - - <b>Warning:</b> The following options can be dangerous! - - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. + Generate master password @@ -3119,7 +3838,7 @@ Using default port 19455. Upper Case Letters - อักษรพิมพ์ใหญ่ + อักษรตัวพิมพ์ใหญ่ Lower Case Letters @@ -3157,18 +3876,10 @@ Using default port 19455. Wordlist: รายการคำ: - - Word Count: - จำนวนคำ: - Word Separator: ตัวแบ่งคำ: - - Generate - สร้าง - Copy คัดลอก @@ -3181,10 +3892,6 @@ Using default port 19455. Close ปิด - - Apply - ใช้ - Entropy: %1 bit เอนโทรปี: %1 บิต @@ -3213,6 +3920,171 @@ Using default port 19455. Password quality ดีมาก + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + ขั้นสูง + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + ลบ + + + Move + + + + Empty + + + + Remove + นำออก + + + Skip + + + + Disable + ปิดใช้ + + + Merge + + QObject @@ -3232,34 +4104,18 @@ Using default port 19455. Cannot decrypt message - - Timeout or cannot connect to KeePassXC - - Action cancelled or denied - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - - KeePassXC association failed, try again - - Key change was not successful - การเปลี่ยนกุญแจไม่สำเร็จ - Encryption key is not recognized ไม่รู้จักกุญแจเข้ารหัสลับ - - No saved databases found - ไม่มีฐานข้อมูลที่ถูกบันทึกอยู่ - Incorrect action การกระทำที่ไม่ถูกต้อง @@ -3375,7 +4231,7 @@ Using default port 19455. Extract and print the content of a database. - สกัดและแสดงเนื้อหาของฐานข้อมูล + สกัดและพิมพ์เนื้อหาของฐานข้อมูล Path of the database to extract. @@ -3385,10 +4241,6 @@ Using default port 19455. Insert password to unlock %1: - - Failed to load key file %1 : %2 - - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3467,12 +4319,6 @@ Available commands: error reading from device - - file empty ! - - แฟ้มว่างเปล่า! - - malformed string รูปแบบสตริงไม่ถูกต้อง @@ -3509,10 +4355,6 @@ Available commands: Created สร้าง - - Legacy Browser Integration - - Browser Integration การทำงานร่วมกับเบราว์เซอร์ @@ -3541,10 +4383,6 @@ Available commands: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3555,27 +4393,437 @@ Available commands: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + + + + Unable to open file %1. + + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256 บิต + + + Twofish: 256-bit + Twofish: 256 บิต + + + ChaCha20: 256-bit + ChaCha20: 256 บิต + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – แนะนำ) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + + + + Path of the entry to remove. + + + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + KeePassXC - cross-platform password manager + KeePassXC - แอปจัดการรหัสผ่านข้ามแพลตฟอร์ม + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + แฟ้มกุญแจสำหรับฐานข้อมูลดังกล่าว + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + KeePassXC - ข้อผิดพลาด + + + Database password: @@ -3614,11 +4862,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - ค้นหา... + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search ค้นหา @@ -3627,311 +4961,317 @@ Available commands: Clear ล้าง - - Case Sensitive - คำนึงถึงอักษรตัวใหญ่เล็ก - Limit search to selected group จำกัดการค้นไว้เฉพาะในกลุ่มที่เลือก + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request + Active - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. + Allow export - KeePassXC: Overwrite existing key? - KeePassXC: เขียนทับกุญแจที่มีอยู่เดิม? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Allow import - KeePassXC: Update Entry - KeePassXC: ปรับปรุงรายการ - - - Do you want to update the information in %1 - %2? + Own certificate - KeePassXC: Database locked! - KeePassXC: ฐานข้อมูลถูกล็อก! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Fingerprint: - KeePassXC: Removed keys from database - KeePassXC: กุญแจถูกนำออกจากฐานข้อมูล + Certificate: + + + + Signer + + + + Key: + กุญแจ: + + + Generate + สร้าง + + + Import + นำเข้า + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + นำออก + + + Path + + + + Status + + + + Fingerprint + + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + ทุกแฟ้ม + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + %1.%2 + Template for KeeShare key file + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3 + + + + Not this time + + + + Never + ไม่เลย + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature (%1) + + + + Could not embed database (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + + TotpDialog + + Timed Password + รหัสผ่านกำหนดเวลา + + + 000000 + 000000 + + + Copy + คัดลอก - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) + + + TotpExportSettingsDialog - KeePassXC: No keys found - KeePassXC: ไม่พบกุญแจ + Copy + คัดลอก - No shared encryption-keys found in KeePassHttp Settings. + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - KeePassXC: Settings not available! - KeePassXC: ไม่มีการตั้งค่าที่ใช้ได้! - - - The active database does not contain an entry of KeePassHttp Settings. + There was an error creating the QR code. - Removing stored permissions... - - - - Abort - หยุด - - - KeePassXC: Removed permissions - KeePassXC: การอนุญาตถูกนำออก - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - - - - The active database does not contain an entry with permissions. + Closing in %1 seconds. - SettingsWidget - - Application Settings - การตั้งค่าแอป - - - General - ทั่วไป - - - Security - ความมั่นคง - - - Access error for config file %1 - มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 - - - - SettingsWidgetGeneral - - Basic Settings - การตั้งค่าพื้นฐาน - - - Start only a single instance of KeePassXC - - - - Remember last databases - จำฐานข้อมูลล่าสุด - - - Remember last key files and security dongles - - - - Load previous databases on startup - - - - Automatically save on exit - บันทึกอัตโนมัติตอนออก - - - Automatically save after every change - บันทึกอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง - - - Automatically reload the database when modified externally - - - - Minimize when copying to clipboard - ย่อหน้าต่างเมื่อคัดลอกไปยังคลิปบอร์ด - - - Minimize window at application startup - ย่อหน้าต่างลงเล็กสุดตอนเริ่มแอป - - - Use group icon on entry creation - - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - - - - Hide the Details view - ซ่อนมุมมองละเอียด - - - Show a system tray icon - แสดงไอคอนสำหรับ system tray - - - Hide window to system tray when minimized - - - - Hide window to system tray instead of app exit - ซ่อนหน้าต่างไว้ที่ system tray แทนการออกจากแอป - - - Dark system tray icon - - - - Language - ภาษา - - - Auto-Type - Auto-Type - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - - - - Global Auto-Type shortcut - - - - Auto-Type delay - การหน่วง Auto-Type - - - ms - Milliseconds - มิลลิวิ - - - Startup - - - - File Management - - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - - - - Entry Management - - - - General - ทั่วไป - - - - SettingsWidgetSecurity - - Timeouts - - - - Clear clipboard after - ล้างคลิปบอร์ดหลัง - - - sec - Seconds - วิ - - - Lock databases after inactivity of - ล็อกฐานข้อมูลหลังไม่มีการใช้งาน - - - Convenience - ความสะดวก - - - Lock databases when session is locked or lid is closed - - - - Lock databases after minimizing the window - ล็อกฐานข้อมูลหลังย่อหน้าต่างลงเล็กสุด - - - Don't require password repeat when it is visible - ไม่ต้องถามรหัสผ่านซ้ำถ้ามองเห็นรหัสผ่านอยู่ - - - Show passwords in cleartext by default - แสดงรหัสผ่านอย่างเปิดเผยโดยปริยาย - - - Hide passwords in the preview panel - - - - Hide entry notes by default - - - - Privacy - ความเป็นส่วนตัว - - - Use Google as fallback for downloading website icons - ใช้กูเกิลเป็นวิธีสำรองเพื่อดาวน์โหลดไอคอนเว็บไซต์ - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog + TotpSetupDialog Setup TOTP ติดตั้ง TOTP @@ -3953,59 +5293,84 @@ Please unlock the selected database or choose another one which is unlocked.ใช้การตั้งค่าที่กำหนดเอง - Note: Change these settings only if you know what you are doing. - หมายเหตุ: เปลี่ยนแปลงการตั้งค่าเหล่านี้ก็ต่อเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่ + Custom Settings + Time step: ขั้นเวลา: - 8 digits - 8 หลัก - - - 6 digits - 6 หลัก + sec + Seconds + วิ Code size: ขนาดรหัส: - sec - Seconds - วิ + 6 digits + 6 หลัก + + + 7 digits + + + + 8 digits + 8 หลัก - TotpDialog + UpdateCheckDialog - Timed Password - รหัสผ่านกำหนดเวลา + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - คัดลอก + Close + ปิด - Expires in - หมดอายุใน + Update Error! + - seconds - วินาที + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - ปลดล็อกฐานข้อมูล + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4040,41 +5405,25 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. + Refresh + เรียกใหม่ + + + YubiKey Challenge-Response - Path of the database. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - Path of the entry to remove. + No YubiKey detected, please ensure it's plugged in. - KeePassXC - cross-platform password manager - KeePassXC - แอปจัดการรหัสผ่านข้ามแพลตฟอร์ม - - - filenames of the password databases to open (*.kdbx) - - - - path to a custom config file - - - - key file of the database - แฟ้มกุญแจสำหรับฐานข้อมูลดังกล่าว - - - read password of the database from stdin - - - - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_tr.ts b/share/translations/keepassx_tr.ts index b10711c9d..84a331e3d 100644 --- a/share/translations/keepassx_tr.ts +++ b/share/translations/keepassx_tr.ts @@ -19,7 +19,7 @@ Contributors - Katkı Verenler + Katkıcılar <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> @@ -37,36 +37,6 @@ Copy to clipboard Panoya kopyala - - Version %1 - - Sürüm %1 - - - - Revision: %1 - Düzeltme: %1 - - - Distribution: %1 - Dağıtım: %1 - - - Libraries: - Kütüphaneler: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - İşletim sistemi: %1 -MİB mimarisi: %2 -Çekirdek: %3 %4 - - - Enabled extensions: - Etkin eklentiler: - Project Maintainers: Proje Sahipleri: @@ -75,43 +45,283 @@ MİB mimarisi: %2 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. KeePassXC ekibinden özel teşekkürler, özgün KeePassX'i yaptığı için debfx'e gider. - - Build Type: %1 - - Yapı Tarzı: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Erişim Onayı - - - Remember this decision - Bu kararı hatırla - - - Allow - İzin ver - - - Deny - Reddet - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1, şu öge(ler) için parolalara erişim izni istedi. -Lütfen erişime izin vermek istediklerinizi seçin. - AgentSettingsWidget Enable SSH Agent (requires restart) - SSH Aracısı'nı etkinleştir (yeniden başlatma gerektirir) + SSH Aracısını etkinleştir (yeniden başlatma gerektirir) + + + Use OpenSSH for Windows instead of Pageant + Pageant yerine Windows için OpenSSH kullan + + + + ApplicationSettingsWidget + + Application Settings + Uygulama Ayarları + + + General + Genel + + + Security + Güvenlik + + + Access error for config file %1 + %1 yapılandırma dosyası için erişim hatası + + + Icon only + Sadece simge + + + Text only + Sadece yazı + + + Text beside icon + Simge yanında yazı + + + Text under icon + Simge altında yazı + + + Follow style + Takip tarzı + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Temel Ayarlar + + + Startup + Başlangıç + + + Start only a single instance of KeePassXC + KeePassXC 'nin yalnızca tek bir örneğini başlat + + + Remember last databases + Geçmiş veritabanlarını hatırla + + + Remember last key files and security dongles + Son anahtar dosyalarını ve güvenlik aygıtlarını anımsa + + + Load previous databases on startup + Başlangıçta önceki veritabanları yükle + + + Minimize window at application startup + Uygulama başlangıcında pencereyi simge durumuna küçült + + + File Management + Dosya Yönetimi + + + Safely save database files (may be incompatible with Dropbox, etc) + Veritabanı dosyalarını güvenli bir şekilde kaydet (Dropbox, vb. ile uyumsuz olabilir) + + + Backup database file before saving + Kaydetmeden önce veritabanı dosyasını yedekle + + + Automatically save after every change + Her değişiklik sonrası kendiliğinden kaydet + + + Automatically save on exit + Çıkışta kendiliğinden kaydet + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Veritabanı veri dışı değişiklikler için değiştirilmiş olarak işaretlenmez (örneğin, kümeleri genişletme) + + + Automatically reload the database when modified externally + Harici olarak değiştirildiğinde veritabanını otomatik olarak yeniden yükle + + + Entry Management + Girdi Yönetimi + + + Use group icon on entry creation + Girdi oluşturmada küme simgesini kullan + + + Minimize when copying to clipboard + Panoya kopyalarken simge durumuna küçült + + + Hide the entry preview panel + Girdi önizleme panelini gizle + + + General + Genel + + + Hide toolbar (icons) + Araç çubuğunu gizle (simgeler) + + + Minimize instead of app exit + Çıkmak yerine simge durumunda küçült + + + Show a system tray icon + Sistem tepsisi simgesi göster + + + Dark system tray icon + Koyu sistem tepsisi simgesi + + + Hide window to system tray when minimized + Simge durumuna küçültüldüğünde pencereyi sistem tepsisine gizle + + + Language + Dil + + + Auto-Type + Oto-Yazım + + + Use entry title to match windows for global Auto-Type + Genel Oto-Yazım için pencereleri karşılaştırmada girdi başlığını kullan + + + Use entry URL to match windows for global Auto-Type + Genel Oto-Yazım için pencereleri karşılaştırmada girdi URL'sini kullan + + + Always ask before performing Auto-Type + Oto-Yazım gerçekleştirmeden önce her zaman sor + + + Global Auto-Type shortcut + Genel Oto-Yazım kısayolu + + + Auto-Type typing delay + Oto-Yazım yazma gecikmesi + + + ms + Milliseconds + ms + + + Auto-Type start delay + Oto-Yazım başlangıç gecikmesi + + + Check for updates at application startup + Uygulama başlangıcında güncellemeleri kontrol et + + + Include pre-releases when checking for updates + Güncellemeleri kontrol ederken ön sürümleri dahil et + + + Movable toolbar + Hareketli araç çubuğu + + + Button style + Düğme tarzı + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Zaman Aşımları + + + Clear clipboard after + Sonrasında panoyu temizle + + + sec + Seconds + san + + + Lock databases after inactivity of + Etkinliğini kaybettikten sonra veritabanlarını kilitle + + + min + dak + + + Forget TouchID after inactivity of + Etkin olmadığında TouchID'yi unut + + + Convenience + Elverişlilik + + + Lock databases when session is locked or lid is closed + Oturum kilitlendiğinde veya kapak kapandığında veritabanlarını kilitle + + + Forget TouchID when session is locked or lid is closed + Oturum kilitlendiğinde veya kapak kapandığında TouchID'yi unut + + + Lock databases after minimizing the window + Pencereyi küçülttükten sonra veritabanlarını kilitle + + + Re-lock previously locked database after performing Auto-Type + Oto-Yazım gerçekleştirdikten sonra önceden kilitli veritabanını yeniden kilitle + + + Don't require password repeat when it is visible + Parola görünür olduğunda yineleme gerektirme + + + Don't hide passwords when editing them + Parolaları düzenlerken gizleme + + + Don't use placeholder for empty password fields + Boş parola alanları için yer tutucu kullanma + + + Hide passwords in the entry preview panel + Önizleme giriş panelinde parolaları gizle + + + Hide entry notes by default + Girdi notlarını öntanımlı olarak gizle + + + Privacy + Gizlilik + + + Use DuckDuckGo as fallback for downloading website icons + Web site simgelerini indirmek için DuckDuckGo'yu yedek olarak kullan @@ -164,7 +374,7 @@ Lütfen erişime izin vermek istediklerinizi seçin. AutoTypeMatchModel Group - Grup + Küme Title @@ -187,7 +397,7 @@ Lütfen erişime izin vermek istediklerinizi seçin. Select entry to Auto-Type: - Oto-Yazım için girdi seçin: + Oto-Yazım için girdi seçiniz: @@ -198,7 +408,7 @@ Lütfen erişime izin vermek istediklerinizi seçin. Remember this decision - Bu kararı hatırla + Bu kararı anımsa Allow @@ -211,8 +421,29 @@ Lütfen erişime izin vermek istediklerinizi seçin. %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. - %1, şu öge(ler) için şifrelere erişim izni istedi. -Lütfen erişime izin vermek isteyip istemediğinizi belirtin. + %1, şu öge(ler) için parolalara erişim izni istedi. +Lütfen erişime izin vermek istediklerinizi seçin. + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Tarayıcı Girdiyi Kaydet + + + Ok + Tamam + + + Cancel + İptal + + + You have multiple databases open. +Please select the correct database for saving credentials. + Çok sayıda açık veritabanı var. +Lütfen kimlik bilgilerini kaydetmek için doğru veritabanını seç. @@ -260,11 +491,11 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin. Re&quest to unlock the database if it is locked - Eğer kilitliyse veritabanını açmayı is&te + Eğer kilitliyse veri tabanını açmayı is&te Only entries with the same scheme (http://, https://, ...) are returned. - Sadece aynı şemaya sahip girişler (http://, https://, ...) döndürülür. + Yalnızca aynı şemadaki girdiler (http://, https://, ...) döndürülür. &Match URL scheme (e.g., https://...) @@ -272,7 +503,7 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin. Only returns the best matches for a specific URL instead of all entries for the whole domain. - Yalnızca tüm alan adı için tüm girdiler yerine belirli bir URL için en iyi eşleşenleri döndürür. + Tüm alan adı için tüm girdilerin yerine belirli bir URL için yalnızca en iyi eşleşmeyi döndürür. &Return only best-matching credentials @@ -288,14 +519,6 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin. Credentials mean login data requested via browser extension Eşleşen kimlik bilgilerini &kullanıcı adına göre sırala - - &Disconnect all browsers - &Tüm tarayıcıları kapatın - - - Forget all remembered &permissions - Tüm hatırlanan izinleri &unut - Advanced Gelişmiş @@ -312,7 +535,7 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin. Only the selected database has to be connected with a client. - Sadece seçilen veritabanının bir istemci ile bağlı olması gerekir. + Yalnızca seçilen veri tabanı istemciyle bağlanmış olmalıdır. Searc&h in all opened databases for matching credentials @@ -321,11 +544,11 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin. Automatically creating or updating string fields is not supported. - Dizi alanlarını otomatik oluşturma veya güncelleme desteklenmiyor. + Dizge alanlarını kendiliğinden oluşturma ve güncelleme desteklenmiyor. &Return advanced string fields which start with "KPH: " - "KPH: " ile başlayan gelişmiş dizi alanları &döndür + "KPH: " ile başlayan gelişmiş dizge alanları &döndür Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -333,7 +556,7 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin. Update &native messaging manifest files at startup - Başlangıçta yerel mesajlaşma &manifesto dosyalarını güncelle + Başlangıçta yerel mesajlaşma &amp;manifesto dosyalarını güncelle Support a proxy application between KeePassXC and browser extension. @@ -361,21 +584,42 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin. <b>Warning:</b> The following options can be dangerous! <b>Uyarı:</b> Aşağıdaki seçenekler tehlikeli olabilir! - - Executable Files (*.exe);;All Files (*.*) - Yürütülebilir Dosyalar (*.exe);;Bütün Dosyalar (*.*) - - - Executable Files (*) - Yürütülebilir Dosyalar (*) - Select custom proxy location Özel proxy konumunu seçin - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Üzgünüz, ancak şu anda Snap yayınları için KeePassXC-Tarayıcı desteklenmiyor. + &Tor Browser + &Tor Tarayıcı + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Uyarı</b>, keepassxc-proxy uygulaması bulunamadı!<br />Lütfen KeePassXC kurulum dizinini kontrol edin veya gelişmiş seçeneklerde özel yolu onaylayın.<br />Tarayıcı bütünleşmesi, proxy uygulaması olmadan ÇALIŞMAYACAKTIR.<br />Beklenen Yol: + + + Executable Files + Yürütülebilir Dosyalar + + + All Files + Tüm Dosyalar + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + HTTP ve Temel Kimlik Doğrulama için izin isteme + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -400,7 +644,7 @@ onu tanımlamak için benzersiz bir isim ver ve kabul et. KeePassXC: Overwrite existing key? - KeePassXC: Mevcut anahtarın üzerine yazılsın mı? + KeePassXC: Var olan anahtarın üstüne yaz? A shared encryption key with the name "%1" already exists. @@ -410,160 +654,61 @@ Do you want to overwrite it? KeePassXC: Update Entry - KeePassXC: Giriş Güncelleme + KeePassXC: Girdi Güncelle Do you want to update the information in %1 - %2? %1 -%2 bilgilerini güncellemek istiyor musun? - - KeePassXC: Database locked! - KeePassXC: Veritabanı kilitli! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Etkin veritabanı kilitli! -Lütfen seçili veritabanının kilidini açın veya kilidi açılan başka bir tane seçin. - - - KeePassXC: Settings not available! - KeePassXC: Ayarlar mevcut değil! - - - The active database does not contain a settings entry. - Aktif veritabanı bir ayar girişi içermiyor. - - - KeePassXC: No keys found - KeePassXC: Anahtar bulunamadı - - - No shared encryption keys found in KeePassXC Settings. - KeePassXC ayarlarında paylaşılan şifreleme anahtarı bulunamadı. - - - KeePassXC: Removed keys from database - KeePassXC: Anahtarlar veritabanından kaldırıldı - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Başarıyla %n şifreleme anahtarları KeePassXC ayarlarından kaldırıldı.%n şifreleme anahtarı(lar), KeePassXC ayarlarından başarıyla kaldırıldı. - - - Removing stored permissions… - Depolanmış izinler kaldırılıyor… - Abort İptal - KeePassXC: Removed permissions - KeePassXC: Kaldırılan izinler + Converting attributes to custom data… + Öznitelikleri özel verilere dönüştürüyor… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Dönüştürülmüş KeePassHTTP özellikleri + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1 girişinden başarıyla dönüştürülen özellikler. +Özel verilere %2 anahtarı taşındı. - Successfully removed permissions from %n entry(s). - Başarıyla izinleri %n entry(s) kaldırıldı.%n giriş(ler)den izinler başarıyla kaldırıldı. + Successfully moved %n keys to custom data. + %n anahtarları başarıyla özel verilere taşındı.%n anahtarları başarıyla özel verilere taşındı. - KeePassXC: No entry with permissions found! - KeePassXC: İzinli girdi bulunamadı! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: KeePassHTTP özelliklerine sahip bir giriş bulunamadı! - The active database does not contain an entry with permissions. - Etkin veritabanı izinli bir giriş içermiyor. - - - - ChangeMasterKeyWidget - - Password - Şifre + The active database does not contain an entry with KeePassHTTP attributes. + Aktif veritabanı KeePassHTTP özelliklerine sahip bir giriş içermiyor. - Enter password: - Şifre gir: + KeePassXC: Legacy browser integration settings detected + KeePassXC: Eski tarayıcı entegrasyon ayarları tespit edildi - Repeat password: - Şifreyi yinele: + KeePassXC: Create a new group + - &Key file - &Anahtar dosyası + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Gözat - - - Create - Oluştur - - - Cha&llenge Response - Karşılaştırma &Yanıtı - - - Refresh - Yenile - - - Key files - Anahtar dosyaları - - - All files - Bütün dosyalar - - - Create Key File... - Anahtar Dosyası Oluştur... - - - Unable to create Key File : - Anahtar Dosyası oluşturulamıyor : - - - Select a key file - Bir anahtar dosyası seç - - - Empty password - Boş parola - - - Do you really want to use an empty string as password? - Boş bir dizeyi gerçekten şifre olarak kullanmak ister misiniz? - - - Different passwords supplied. - Farklı şifreler sağlandı. - - - Failed to set %1 as the Key file: -%2 - %1 anahtar dosyası olarak ayarlanamadı: -%2 - - - Legacy key file format - Eski anahtar dosya biçimi - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - İleride desteklenmeyebilecek eski bir anahtar -dosya biçimi kullanıyorsunuz. - -Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. - - - Changing master key failed: no YubiKey inserted. - Ana anahtar değiştirme başarısız: YubiKey eklenmedi. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -578,7 +723,7 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. Replace username and password with references - Kullanıcı adı ve şifreyi referanslarla değiştir + Kullanıcı adı ve parolayı referanslarla değiştir Copy history @@ -609,11 +754,11 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. Text is qualified by - tarafından metin yetkili + Şu tarafından metin yetkilendirildi Fields are separated by - tarafından alanlar ayrıldı + Şu tarafından alanlar bölümlendi Comments start with @@ -621,11 +766,11 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. First record has field names - İlk kaydın alan adlarını var + İlk kayıt alan adlarını içerir Number of headers line to discard - Vazgeçilecek başlık satırı sayısı + Vazgeçilecek başlık satırı adedi Consider '\' an escape character @@ -633,23 +778,15 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. Preview - Ön izleme + Ön izle Column layout - Sütun düzeni + Kolon dizimi Not present in CSV file - CSV dosyasında mevcut değil - - - Empty fieldname - Boş alan adı - - - column - sütun + CSV içerisinde mevcut değil Imported from CSV file @@ -657,58 +794,99 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. Original data: - Orijinal veri: - - - Error(s) detected in CSV file ! - CSV dosyasında hata(lar) tespit edildi ! - - - more messages skipped] - daha fazla ileti atlandı] + Özgün veri: Error Hata + + Empty fieldname %1 + Boş alan adı %1 + + + column %1 + sütun %1 + + + Error(s) detected in CSV file! + CSV dosyasında hata(lar) saptandı ! + + + [%n more message(s) skipped] + [%n daha fazla ileti atlandı][%n daha fazla ileti atlandı] + CSV import: writer has errors: - - CSV içe aktarma: yazarda hatalar var: - - - - - CsvImportWizard - - Error - Hata - - - Unable to calculate master key - Ana anahtar hesaplanamıyor +%1 + CSV içe aktarma: yazarken hatalar var: +%1 CsvParserModel - - %n byte(s), - %n bayt, %n bayt(lar), - - - %n row(s), - %n satır, %n satır(lar), - %n column(s) - %n sütun%n sütun(lar) + %n sütun%n sütun + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bayt%n bayt + + + %n row(s) + %n satır%n satır + + + + Database + + Root + Root group name + Kök + + + File %1 does not exist. + %1 dosyası mevcut değil. + + + Unable to open file %1. + %1 dosyası açılamıyor. + + + Error while reading the database: %1 + Veritabanını okurken hata oluştu: %1 + + + Could not save, database has no file name. + Kaydedilemedi, veritabanında dosya adı yok. + + + File cannot be written as it is opened in read-only mode. + Dosya salt okunur kipinde açıldığı için yazılamıyor. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Veritabanı Kilidini Aç - KeePassXC DatabaseOpenWidget Enter master key - Ana anahtarı gir + Ana anahtar gir Key File: @@ -716,7 +894,7 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. Password: - Şifre: + Parola: Browse @@ -730,14 +908,6 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. Challenge Response: Karşılaştırma Yanıtı: - - Unable to open the database. - Veritabanı açılamıyor. - - - Can't open key file - Anahtar dosyası açılamıyor - Legacy key file format Eski anahtar dosya biçimi @@ -758,7 +928,7 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. All files - Bütün dosyalar + Tüm dosyalar Key files @@ -768,53 +938,254 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün. Select key file Anahtar dosyası seç - - - DatabaseRepairWidget - Repair database - Veritabanını onar + TouchID for quick unlock + Hızlı kilit açma için TouchID - Error - Hata + Unable to open the database: +%1 + Veritabanı açılamadı: +%1 - Can't open key file - Anahtar dosyası açılamıyor - - - Unable to open the database. - Veritabanı açılamıyor. - - - Database opened fine. Nothing to do. - Veritabanı iyi açıldı. Yapılacak bir şey yok. - - - Success - Başarılı - - - The database has been successfully repaired -You can now save it. - Veritabanı başarıyla onarıldı -Artık kaydedebilirsiniz. - - - Unable to repair the database. - Veritabanı onarılamıyor. + Can't open key file: +%1 + Anahtar dosyası açılamıyor: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Parolalar + + + + DatabaseSettingsDialog + + Advanced Settings + Gelişmiş Ayarlar + General Genel - Encryption - Şifreleme + Security + Güvenlik + + + Master Key + Ana Anahtar + + + Encryption Settings + Şifreleme Ayarları + + + Browser Integration + Tarayıcı Tümleşmesi + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Tarayıcı ayarları + + + &Disconnect all browsers + &Tüm tarayıcıları kapatın + + + Forg&et all site-specific settings on entries + Girdilerde siteye özgü tüm ayarları unut + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + KeePassHTTP niteliklerini &özel verilere taşı + + + Stored keys + Saklanan anahtarlar + + + Remove + Kaldır + + + Delete the selected key? + Seçili anahtarı silmek istiyor musun? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Seçili anahtarı gerçekten silmek istiyor musunuz? +Bu işlem, tarayıcı eklentisine bağlantıyı engelleyebilir. + + + Key + Anahtar + + + Value + Değer + + + Enable Browser Integration to access these settings. + Bu ayarlara erişmek için Tarayıcı Tümleşmesini etkinleştirin. + + + Disconnect all browsers + Tüm tarayıcıları kapatın + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Tüm tarayıcıların bağlantısını kesmek istiyor musunuz? +Bu işlem, tarayıcı eklentisine bağlantıyı engelleyebilir. + + + KeePassXC: No keys found + KeePassXC: Anahtar bulunamadı + + + No shared encryption keys found in KeePassXC settings. + KeePassXC ayarlarında paylaşılan şifreleme anahtarı bulunamadı. + + + KeePassXC: Removed keys from database + KeePassXC: Anahtarlar veritabanından kaldırıldı + + + Successfully removed %n encryption key(s) from KeePassXC settings. + %n şifreleme anahtarı KeePassXC ayarlarından başarıyla çıkarıldı.%n şifreleme anahtarı KeePassXC ayarlarından başarıyla çıkarıldı. + + + Forget all site-specific settings on entries + Girdilerde siteye özgü tüm ayarları unut + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + %n girişindeki izinler kaldırıldı. +Girişlere erişim izinleri iptal edilecek. + + + Removing stored permissions… + Depolanmış izinler kaldırılıyor… + + + Abort + İptal + + + KeePassXC: Removed permissions + KeePassXC: Kaldırılan izinler + + + Successfully removed permissions from %n entry(s). + %n girişindeki izinler başarıyla kaldırıldı.%n girişindeki izinler başarıyla kaldırıldı. + + + KeePassXC: No entry with permissions found! + KeePassXC: İzinli girdi bulunamadı! + + + The active database does not contain an entry with permissions. + Etkin veritabanı izinleri olan bir girdi içermiyor. + + + Move KeePassHTTP attributes to custom data + KeePassHTTP niteliklerini özel verilere taşı + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Tüm eski tarayıcı bütünleşme verilerini gerçekten en son standarda taşımak istiyor musunuz? +Tarayıcı eklentisiyle uyumluluğu korumak için bu gereklidir. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Şifreleme Algoritması: + + + AES: 256 Bit (default) + AES: 256 Bit (öntanımlı) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Anahtar Türetme Fonksiyonu: + + + Transform rounds: + Dönüşüm turları: + + + Benchmark 1-second delay + Karşılaştırma 1-saniyelik gecikme + + + Memory Usage: + Bellek Kullanımı: + + + Parallelism: + Paralellik: + + + Decryption Time: + Şifre Çözme Zamanı: + + + ?? s + ?? s + + + Change + Değiştir + + + 100 ms + 100 ms + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + Daha yüksek değerler daha fazla koruma sağlar, ancak veritabanını açmak daha uzun sürer. + + + Database format: + Veritabanı biçimi: + + + This is only important if you need to use your database with other programs. + Bu, veritabanınızı başka programlarla birlikte kullanmanız gerektiğinde önemlidir. + + + KDBX 4.0 (recommended) + KDBX 4.0 (önerilen) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + değişmedi Number of rounds too high @@ -861,47 +1232,22 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır MiB Abbreviation for Mebibytes (KDF settings) - MiB MiB + MBMB thread(s) Threads for parallel execution (KDF settings) - iş parçacıği iş parçacık(ları) + iş parçacığıiş parçacığı - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Şifreleme Algoritması: + + %1 ms + milliseconds + %1 ms%1 ms - - AES: 256 Bit (default) - AES: 256 Bit (varsayılan) - - - Twofish: 256 Bit - Twofish: 256 Bit - - - Key Derivation Function: - Anahtar Türetme Fonksiyonu: - - - Transform rounds: - Dönüşüm turları: - - - Benchmark 1-second delay - Karşılaştırma 1-saniyelik gecikme - - - Memory Usage: - Bellek Kullanımı: - - - Parallelism: - Paralellik: + + %1 s + seconds + %1 s%1 s @@ -912,15 +1258,15 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır Database name: - Veritabanı adı: + Veri tabanı adı: Database description: - Veritabanı açıklaması: + Veri tabanı ayrıntısı: Default username: - Varsayılan kullanıcı adı: + Öntanımlı kullanıcı adı: History Settings @@ -952,135 +1298,157 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Kök + Sharing + Paylaşım + + Breadcrumb + İçerik Haritası + + + Type + Tür + + + Path + Yol + + + Last Signer + Son İmzalayan + + + Certificates + Sertifikalar + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Ek koruma ekle... + + + No encryption key added + Şifreleme anahtarı eklenmedi + + + You must add at least one encryption key to secure your database! + Veritabanınızı korumak için en az bir şifreleme anahtarı eklemelisiniz! + + + No password set + Şifre ayarlanmadı + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + UYARI! Bir parola belirlemediniz. Parola olmadan bir veritabanı kullanmak kesinlikle önerilmez! + +Parola olmadan devam etmek istediğinize emin misiniz? + + + Unknown error + Bilinmeyen hata + + + Failed to change master key + Ana anahtar değiştirilemedi + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Veritabanı Adı: + + + Description: + Açıklama: + + + + DatabaseTabWidget KeePass 2 Database - KeePass 2 Veritabanı + KeePass 2 Veri Tabanı All files - Bütün dosyalar + Tüm dosyalar Open database - Veritabanını aç - - - File not found! - Dosya bulunamadı! - - - Unable to open the database. - Veritabanı açılamıyor. - - - File opened in read only mode. - Dosya salt okunur modda açıldı. - - - Open CSV file - CSV dosyası aç + Veri tabanı aç CSV file CSV dosyası - - All files (*) - Bütün dosyalar (*) - Merge database - Veritabanını birleştir + Veri tabanı birleştir Open KeePass 1 database - KeePass 1 veritabanı aç + KeePass 1 veri tabanı aç KeePass 1 database - KeePass 1 veritabanı - - - Close? - Kapat? - - - "%1" is in edit mode. -Discard changes and close anyway? - "%1" düzenleme modunda. -Değişikliklerden vazgeçip yine de kapatılsın mı? - - - Save changes? - Değişiklikleri kaydet? - - - "%1" was modified. -Save changes? - "%1" değiştirildi. -Değişiklikler kaydedilsin mi? - - - Writing the database failed. - Veritabanına yazma başarısız. - - - Passwords - Şifreler - - - Save database as - Veritabanını farklı kaydet + KeePass 1 veri tabanı Export database to CSV file - Veritabanını CSV dosyasına dışa aktar + Veri tabanını CSV dosyasına dışa aktar Writing the CSV file failed. CSV dosyasına yazma başarısız. - New database - Yeni veritabanı + Database creation error + Veritabanı oluşturma hatası - locked - kilitli + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + Oluşturulan veritabanının anahtarı veya KDF'si yoktur, kaydetme reddedilir. +Bu kesinlikle bir hatadır, lütfen geliştiricilere bildirin. - Lock database - Veritabanını kilitle + The database file does not exist or is not accessible. + Veritabanı dosyası mevcut değil veya erişilebilir değil. - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Şu anda düzenlemekte olduğunuz veritabanı kilitlenemiyor. -Lütfen değişikliklerinizi sonlandırmak veya vazgeçmek için iptal tuşuna basın. + Select CSV file + CSV dosyası seç - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Bu veritabanı değiştirildi. -Veritabanını kilitlemeden önce kaydetmek ister misiniz? -Aksi halde değişiklikleriniz kaybolacak. + New Database + Yeni Veritabanı - Disable safe saves? - Güvenli kaydetme devre dışı? + %1 [New Database] + Database tab name modifier + %1 [Yeni Veritabanı] - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC veritabanını birkaç kez kaydetmeyi başaramadı. Buna genellikle bir kayıt dosyası üzerinde kilit tutan dosya eşitleme hizmetleri neden olur. -Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi? + %1 [Locked] + Database tab name modifier + %1 [Kilitli] + + + %1 [Read-only] + Database tab name modifier + %1 [Salt okunur] @@ -1089,38 +1457,14 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?Searching... Aranıyor... - - Change master key - Ana anahtarı değiştir - - - Delete entry? - Girdiyi sil? - Do you really want to delete the entry "%1" for good? - "%1" girdisini gerçekten tamamen silmek istiyor musunuz? - - - Delete entries? - Girdileri sil? - - - Do you really want to delete %1 entries for good? - %1 girdiyi tümüyle silmek istediğinize emin misiniz? - - - Move entry to recycle bin? - Girdiyi geri dönüşüm kutusuna taşı? + "%1" girdisini tümüyle silmek istediğinize emin misiniz? Do you really want to move entry "%1" to the recycle bin? "%1" girdisini geri dönüşüm kutusuna taşımak istediğinize emin misiniz? - - Move entries to recycle bin? - Girdileri geri dönüşüm kutusuna taşı? - Do you really want to move %n entry(s) to the recycle bin? %n girdiyi geri dönüşüm kutusuna taşımak istediğinize emin misiniz?%n girdiyi geri dönüşüm kutusuna taşımak istediğinize emin misiniz? @@ -1135,27 +1479,19 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi? Remember my choice - Seçimimi hatırla - - - Delete group? - Grubu sil? + Seçimimi anımsa Do you really want to delete the group "%1" for good? - "%1" grubunu gerçekten tamamen silmek istiyor musunuz? - - - Unable to calculate master key - Ana anahtar hesaplanamıyor + "%1" kümesini tümüyle silmek istediğinize emin misiniz? No current database. - Geçerli veritabanı yok. + Geçerli veri tabanı yok. No source database, nothing to do. - Kaynak veritabanı yok, yapılacak bir şey yok. + Kaynak veri tabanı yok, yapılacak bir şey yok. Search Results (%1) @@ -1171,7 +1507,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi? The database file has changed. Do you want to load the changes? - Veritabanı dosyası değiştirildi. Değişiklikleri yüklemek ister misiniz? + Veri tabanı dosyası değiştirildi. Değişiklikleri yüklemek ister misiniz? Merge Request @@ -1183,10 +1519,6 @@ Do you want to merge your changes? Veritabanı dosyası değişti ve kaydedilmemiş değişiklikleriniz var. Değişikliklerinizi birleştirmek ister misiniz? - - Could not open the new database file while attempting to autoreload this database. - Bu veritabanını otomatik olarak yeniden yüklemeye çalışırken yeni veritabanı dosyası açılamadı. - Empty recycle bin? Geri dönüşüm kutusunu boşalt? @@ -1195,95 +1527,118 @@ Değişikliklerinizi birleştirmek ister misiniz? Are you sure you want to permanently delete everything from your recycle bin? Geri dönüşüm kutunuzdaki her şeyi kalıcı olarak silmek istediğinize emin misiniz? - - - DetailsWidget - - Generate TOTP Token - TOTP Jetonu Oluştur + + Do you really want to delete %n entry(s) for good? + %n girişlerini gerçekten kalıcı olarak silmek istiyor musunuz?%n girişlerini gerçekten kalıcı olarak silmek istiyor musunuz? + + + Delete entry(s)? + Girdiyi sil?Girdiyi sil? + + + Move entry(s) to recycle bin? + Girdiyi geri dönüşüm kutusuna taşı?Girdiyi geri dönüşüm kutusuna taşı? - Close - Kapat + File opened in read only mode. + Dosya salt okunur modda açıldı. - General - Genel + Lock Database? + Veritabanını Kilitle? - Password - Şifre + You are editing an entry. Discard changes and lock anyway? + Bir girişi düzenliyorsunuz. Değişiklikleri iptal et ve yine de kilitle? - URL - URL + "%1" was modified. +Save changes? + "%1" değiştirildi. +Değişiklikler kaydedilsin mi? - Expiration - Geçerlilik + Database was modified. +Save changes? + Veritabanı değiştirildi. +Değişiklikleri kaydet? - Username - Kullanıcı adı + Save changes? + Değişiklikleri kaydet? - Autotype - Oto-yazım + Could not open the new database file while attempting to autoreload. +Error: %1 + Otomatik yükleme denenirken yeni veritabanı dosyası açılamadı. +Hata: %1 - Searching - Aranıyor + Disable safe saves? + Güvenli kaydetme devre dışı? - Attributes - Öznitelikler + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC veritabanını birkaç kez kaydetmeyi başaramadı. Buna genellikle bir kayıt dosyası üzerinde kilit tutan dosya eşitleme hizmetleri neden olur. +Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi? - Attachments - Dosya ekleri + Writing the database failed. +%1 + Veritabanını yazma başarısız +%1 - Notes - Notlar + Passwords + Parolalar - Window - Pencere + Save database as + Veritabanını farklı kaydet - Sequence - Sıra + KeePass 2 Database + KeePass 2 Veritabanı - Search - Ara + Replace references to entry? + Giriş referansları değiştirilsin mi? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Giriş "%1" , %2 referansa sahip. Değerlerin referanslarını üzerine yazmak, bu girişi atlamak ya da yine de silmek istiyor musunuz?Giriş "%1" , %2 referansa sahip. Değerlerin referanslarını üzerine yazmak, bu girişi atlamak ya da yine de silmek istiyor musunuz? - Clear - Temizle + Delete group + Kümeyi sil - Never - Asla + Move group to recycle bin? + Kümeyi geri dönüşüm kutusuna taşı? - [PROTECTED] - [KORUMALI] + Do you really want to move the group "%1" to the recycle bin? + "%1" kümesini geri dönüşüm kutusuna taşımak istiyor musunuz? - Disabled - Devre dışı + Successfully merged the database files. + Veritabanı dosyaları başarıyla birleştirildi. - Enabled - Etkin + Database was not modified by merge operation. + Veritabanı birleştirme işlemi tarafından değiştirilmedi. + + + Shared group... + EditEntryWidget Entry - Giriş + Girdi Advanced @@ -1307,11 +1662,11 @@ Değişikliklerinizi birleştirmek ister misiniz? SSH Agent - SSH Ajanı + SSH Aracısı n/a - + yok (encrypted) @@ -1323,7 +1678,7 @@ Değişikliklerinizi birleştirmek ister misiniz? File too large to be a private key - Dosya bir özel anahtar olmak için çok büyük + Dosya özel anahtar olmak için çok büyük Failed to open private key @@ -1331,39 +1686,27 @@ Değişikliklerinizi birleştirmek ister misiniz? Entry history - Giriş geçmişi + Girdi geçmişi Add entry - Giriş ekle + Girdi ekle Edit entry - Girişi düzenle + Girdiyi düzenle Different passwords supplied. - Farklı şifreler sağlandı. + Farklı parolalar sağlandı. New attribute Yeni öznitelik - - Confirm Remove - Kaldırmayı Onayla - Are you sure you want to remove this attribute? - Bu özniteliği kaldırmak istediğinizden emin misiniz? - - - [PROTECTED] - [KORUMALI] - - - Press reveal to view or edit - Görüntüleme veya düzenlemeyi belirlemek için basın + Bu özniteliği silmek istediğinizden emin misiniz? Tomorrow @@ -1377,21 +1720,37 @@ Değişikliklerinizi birleştirmek ister misiniz? %n month(s) %n ay%n ay - - 1 year - 1 yıl - Apply generated password? - Oluşturulan şifreyi uygula? + Oluşturulan parolayı uygula? Do you want to apply the generated password to this entry? - Oluşturulan şifreyi bu girişe uygulamak istiyor musunuz? + Oluşturulan parolayı bu girişe uygulamak istiyor musunuz? Entry updated successfully. - Giriş başarıyla güncellendi. + Girdi güncelleme başarılı. + + + Entry has unsaved changes + Giriş kaydedilmemiş değişikliklere sahip + + + New attribute %1 + Yeni öznitelik %1 + + + [PROTECTED] Press reveal to view or edit + [KORUMALI] Görmek veya düzenlemek için göstere bas + + + %n year(s) + %n yıl%n yıl + + + Confirm Removal + Kaldırmayı Onayla @@ -1422,7 +1781,7 @@ Değişikliklerinizi birleştirmek ister misiniz? Attachments - Dosya ekleri + Ekler Foreground Color: @@ -1437,15 +1796,15 @@ Değişikliklerinizi birleştirmek ister misiniz? EditEntryWidgetAutoType Enable Auto-Type for this entry - Bu giriş için Oto-Yazımı etkinleştir + Bu girdi için Oto-Yazımı etkinleştir Inherit default Auto-Type sequence from the &group - &Gruptan varsayılan Oto-Yazım sırasını devral + Öntanımlı Oto-Yazım dizilişini &kümeden devral &Use custom Auto-Type sequence: - Özel Oto-Yazım sırası k&ullan: + Özel Oto-Yazım dizilişi k&ullan: Window Associations @@ -1495,7 +1854,7 @@ Değişikliklerinizi birleştirmek ister misiniz? Password: - Şifre: + Parola: Repeat: @@ -1523,7 +1882,7 @@ Değişikliklerinizi birleştirmek ister misiniz? Expires - Geçersiz + Biter @@ -1554,7 +1913,7 @@ Değişikliklerinizi birleştirmek ister misiniz? Add key to agent when database is opened/unlocked - Veritabanı kapalı/kilitliyken ajana anahtar ekle + Veritabanı kapalı/kilitliyken ajana anahtarı ekle Comment @@ -1562,11 +1921,11 @@ Değişikliklerinizi birleştirmek ister misiniz? Decrypt - Şifresiz + Şifreyi Çöz n/a - + yok Copy to clipboard @@ -1587,26 +1946,26 @@ Değişikliklerinizi birleştirmek ister misiniz? Attachment - Dosya eki + Dosya Eki Add to agent - Ajana ekle + İstemciye ekle Remove from agent - Ajandan kaldır + İstemciden kaldır Require user confirmation when this key is used - Bu tuş kullanıldığında kullanıcı onayı gerekir + Bu tuş kullanıldığında kullanıcı onayı iste EditGroupWidget Group - Grup + Küme Icon @@ -1618,30 +1977,121 @@ Değişikliklerinizi birleştirmek ister misiniz? Add group - Grup ekle + Küme ekle Edit group - Grubu düzenle + Kümeyi düzenle Enable - Etkin + Etkinleştir Disable - Devre dışı + Devre dışı bırak Inherit from parent group (%1) - Ana gruptan devral (%1) + Üst kümeden devral (%1) + + + + EditGroupWidgetKeeShare + + Form + Form + + + Type: + Tür: + + + Path: + Yol: + + + ... + ... + + + Password: + Parola: + + + Inactive + Etkisiz + + + Import from path + Yoldan içe aktar + + + Export to path + Yola aktar + + + Synchronize with path + Yol ile eşitle + + + Your KeePassXC version does not support sharing your container type. Please use %1. + KeePassXC sürümünüz kapsayıcı tür paylaşımını desteklemez. Lütfen %1 kullanın. + + + Database sharing is disabled + Veritabanı paylaşımı devre dışı + + + Database export is disabled + Veritabanı dışa aktarımı devre dışı + + + Database import is disabled + Veritabanı içe aktarımı devre dışı + + + KeeShare unsigned container + KeeShare imzalanmamış kapsayıcı + + + KeeShare signed container + KeeShare imzalanmış kapsayıcı + + + Select import source + İçe aktarım kaynağını seç + + + Select export target + Dışa aktarma hedefini seç + + + Select import/export file + Aktarma dosyasını seç içe/dışa + + + Clear + Temizle + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + EditGroupWidgetMain Name - Adı + Ad Notes @@ -1649,11 +2099,11 @@ Değişikliklerinizi birleştirmek ister misiniz? Expires - Geçersiz + Biter Search - Arama + Ara Auto-Type @@ -1661,22 +2111,22 @@ Değişikliklerinizi birleştirmek ister misiniz? &Use default Auto-Type sequence of parent group - Ana grubun varsayılan Oto-Yazım sırasını kullan + Üst kümenin öntanımlı Oto-Yazım dizilişini k&ullan Set default Auto-Type se&quence - Varsayılan Oto-Yazım &sırasını ayarla + Öntanımlı Oto-Yazım &dizilişi belirle EditWidgetIcons &Use default icon - &Varsayılan simge kullan + &Öntanımlı simge kullan Use custo&m icon - Özel si&mge kullan + Öze&l simge kullan Add custom icon @@ -1694,25 +2144,13 @@ Değişikliklerinizi birleştirmek ister misiniz? Unable to fetch favicon. Simge alınamadı. - - Hint: You can enable Google as a fallback under Tools>Settings>Security - İpucu: Google’ı Araçlar>Ayarlar>Güvenlik altından geri almak gibi etkinleştirebilirsiniz - Images Resimler All files - Bütün dosyalar - - - Select Image - Resim Seç - - - Can't read icon - Simge okunamadı + Tüm dosyalar Custom icon already exists @@ -1723,8 +2161,36 @@ Değişikliklerinizi birleştirmek ister misiniz? Silmeyi Onayla - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Bu simge %1 girişi tarafından kullanılıyor ve varsayılan simge tarafından değiştirilecek. Silmek istediğinize emin misiniz? + Custom icon successfully downloaded + Özel simge başarıyla indirildi + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + İpucu: DuckDuckGo'yu bir geri dönüş olarak etkinleştirebilirsiniz. Araçlar/Ayarlar/Güvenlik + + + Select Image(s) + Resim Seç + + + Successfully loaded %1 of %n icon(s) + %n simgesinin %1'i başarıyla yüklendi%n simgesinin %1'i başarıyla yüklendi + + + No icons were loaded + Hiçbir simge yüklenmedi + + + %n icon(s) already exist in the database + %n simgesi veritabanında zaten var%n simgesi veritabanında zaten var + + + The following icon(s) failed: + Aşağıdaki simge başarısız oldu:Aşağıdaki simge başarısız oldu: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Bu simge %n girişi tarafından kullanılır ve varsayılan simge ile değiştirilir. Silmek istediğinize emin misiniz?Bu simge %n girişi tarafından kullanılır ve varsayılan simge ile değiştirilir. Silmek istediğinize emin misiniz? @@ -1747,7 +2213,7 @@ Değişikliklerinizi birleştirmek ister misiniz? Plugin Data - + Eklenti Verisi Remove @@ -1755,12 +2221,14 @@ Değişikliklerinizi birleştirmek ister misiniz? Delete plugin data? - + Eklenti verisi silinsin mi? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - + Seçilen eklenti verilerini gerçekten silmek istiyor musunuz? + +Bu etkilenen eklentilerin bozulmasına neden olabilir. Key @@ -1774,9 +2242,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - Klon + %1 - Clone + %1 - Klon @@ -1818,11 +2285,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - Kaldırmayı Onayla + %n eki kaldırmak istediğinize emin misiniz?%n eki kaldırmak istediğinize emin misiniz? Save attachments @@ -1857,14 +2320,19 @@ This may cause the affected plugins to malfunction. Unable to open attachments: %1 - Ekler açılamıyor: + Açılamayan ekler: %1 - Unable to open files: + Confirm remove + Kaldırmayı onayla + + + Unable to open file(s): %1 - Dosyalar açılamıyor: -%1 + Dosyalar açılamıyor: +%1Dosyalar açılamıyor: +%1 @@ -1948,6 +2416,106 @@ This may cause the affected plugins to malfunction. Attachments Ekler + + Yes + Evet + + + TOTP + TOTP + + + + EntryPreviewWidget + + Generate TOTP Token + TOTP Jetonu Oluştur + + + Close + Kapat + + + General + Genel + + + Username + Kullanıcı adı + + + Password + Parola + + + Expiration + Geçerlilik + + + URL + URL + + + Attributes + Öznitelikler + + + Attachments + Dosya ekleri + + + Notes + Notlar + + + Autotype + Oto-yazım + + + Window + Pencere + + + Sequence + Sıra + + + Searching + Aranıyor + + + Search + Ara + + + Clear + Temizle + + + Never + Asla + + + [PROTECTED] + [KORUMALI] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Etkin + + + Disabled + Devre dışı + + + Share + Paylaş + EntryView @@ -1986,6 +2554,11 @@ This may cause the affected plugins to malfunction. Recycle Bin Geri Dönüşüm Kutusu + + [empty] + group has no children + [boş] + HostInstaller @@ -1998,61 +2571,6 @@ This may cause the affected plugins to malfunction. Yerel mesajlaşma betik dosyası kaydedilemiyor. - - HttpPasswordGeneratorWidget - - Length: - Uzunluk: - - - Character Types - Karakter Türleri - - - Upper Case Letters - Büyük Harfler - - - A-Z - A-Z - - - Lower Case Letters - Küçük Harfler - - - a-z - a-z - - - Numbers - Rakamlar - - - 0-9 - 0-9 - - - Special Characters - Özel Karakterler - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Benzer karakterleri dışla - - - Ensure that the password contains characters from every group - Parolanın her kümeden karakter içerdiğine emin ol - - - Extended ASCII - Genişletilmiş ASCII - - KMessageWidget @@ -2072,18 +2590,38 @@ This may cause the affected plugins to malfunction. Unable to issue challenge-response. - + challenge-response açılamıyor. Wrong key or database file is corrupt. Yanlış anahtar veya veri tabanı dosyası bozuk. + + missing database headers + eksik veritabanı başlıkları + + + Header doesn't match hash + Başlık sağlama ile eşleşmiyor + + + Invalid header id size + Geçersiz başlık kimliği boyutu + + + Invalid header field length + Geçersiz başlık alanı genişliği + + + Invalid header data length + Geçersiz başlık veri genişliği + Kdbx3Writer Unable to issue challenge-response. - + challenge-response açılamıyor. Unable to calculate master key @@ -2114,7 +2652,7 @@ This may cause the affected plugins to malfunction. Unknown cipher - + Bilinmeyen şifre Invalid header id size @@ -2155,74 +2693,74 @@ This may cause the affected plugins to malfunction. Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - + Desteklenmeyen KeePass değişken harita sürümü. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita giriş adı uzunluğu Invalid variant map entry name data Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita girdi adı verisi Invalid variant map entry value length Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita girdi değeri uzunluğu Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - + Geçersiz değişken harita girdi değeri verisi Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita Bool girdi değeri uzunluğu Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita Int32 girdi değeri uzunluğu Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita UInt32 girdi değeri uzunluğu Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita Int64 girdi değeri uzunluğu Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita UInt64 girdi değeri uzunluğu Invalid variant map entry type Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita girdi tipi Invalid variant map field type size Translation: variant map = data structure for storing meta data - + Geçersiz değişken harita alan tipi boyutu Kdbx4Writer Invalid symmetric cipher algorithm. - + Geçersiz simetrik şifreleme algoritması. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - + Geçersiz simetrik şifreleme IV boyutu. Unable to calculate master key @@ -2231,18 +2769,14 @@ This may cause the affected plugins to malfunction. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - + KDF parametreleri değişken haritası serileştirme başarısız KdbxReader - - Invalid cipher uuid length - - Unsupported cipher - + Desteklenmeyen şifreleme Invalid compression flags length @@ -2254,27 +2788,27 @@ This may cause the affected plugins to malfunction. Invalid master seed size - + Geçersiz ana çekirdek boyutu Invalid transform seed size - + Geçersiz dönüşüm çekirdek boyutu Invalid transform rounds size - + Geçersiz dönüşüm tur boyutu Invalid start bytes size - + Geçersiz başlangıç bayt boyutu Invalid random stream id size - + Geçersiz rastgele akış kimliği boyutu Invalid inner random stream cipher - + Geçersiz dahili rastgele akış şifresi Not a KeePass database. @@ -2294,6 +2828,18 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Unsupported KeePass 2 database version. Desteklenmeyen KeePass 2 veri tabanı sürümü. + + Invalid cipher uuid length: %1 (length=%2) + Geçersiz şifreleme UUID uzunluğu: %1 (uzunluk=%2) + + + Unable to parse UUID: %1 + UUID ayrıştırılamadı: %1 + + + Failed to read database file. + Veritabanı dosyası okunamadı. + KdbxXmlReader @@ -2315,108 +2861,113 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Multiple group elements - + Çoklu küme elementleri Null group uuid - + Boş küme benzersiz tanımlayıcı Invalid group icon number - + Geçersiz küme simge numarası Invalid EnableAutoType value - + Geçersiz Oto-Yazım Etkin değeri Invalid EnableSearching value - + Geçersiz Arama Etkin değeri No group uuid found - + Hiçbir kümede UUID bulunamadı Null DeleteObject uuid - + Boş "DeleteObject" "uuid" Missing DeletedObject uuid or time - + Hatalı "DeleteObject" evrensel benzersiz tanımlayıcı "uuid" veya zamanı Null entry uuid - + Boş evrensel benzersiz tanımlayıcı "uuid" girdisi Invalid entry icon number - + Geçersiz simge numarası girdisi History element in history entry - + Geçmiş girdisinde geçmiş element No entry uuid found - + +Evrensel benzersiz tanımlayıcı "uuid" girdisi bulunamadı History element with different uuid - - - - Unable to decrypt entry string - + Farklı evrensel benzersiz tanımlayıcı "uuid" ile geçmiş öğesi Duplicate custom attribute found - + Yinelenen özel öznitelik bulundu Entry string key or value missing - + Giriş dizesi anahtarı veya değeri eksik Duplicate attachment found - + Yinelenen ek bulundu Entry binary key or value missing - + Giriş ikili anahtar veya değeri eksik Auto-type association window or sequence missing - + Oto-Yazım ilişkilendirme penceresi veya sırası eksik Invalid bool value - + Geçersiz boolean değeri Invalid date time value - + Geçersiz tarih zaman değeri Invalid color value - + Geçersiz renk değeri Invalid color rgb part - + Geçersiz renk RGB parçası Invalid number value - + Geçersiz numara değeri Invalid uuid value - + Geçersiz Evrensel Benzersiz Tanımlayıcı "uuid" değeri Unable to decompress binary Translator meant is a binary data inside an entry - + İkili dosya sıkıştırmasını açma başarısız + + + XML error: +%1 +Line %2, column %3 + XML hatası: +%1 +Satır %2, sütun %3 @@ -2451,31 +3002,31 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Unable to read encryption IV IV = Initialization Vector for symmetric cipher - + Şifreleme IV okunamadı Invalid number of groups - + Geçersiz küme numarası Invalid number of entries - + Geçersiz giriş numarası Invalid content hash size - + Geçersiz içerik karma boyutu Invalid transform seed size - + Geçersiz dönüşüm çekirdek boyutu Invalid number of transform rounds - + Geçersiz dönüşüm turu sayısı Unable to construct group tree - + Küme ağacı oluşturulamadı Root @@ -2483,7 +3034,7 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Unable to calculate master key - Ana anahtar hesaplanamaz + Ana anahtar hesaplanamıyor Wrong key or database file is corrupt. @@ -2491,145 +3042,236 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Key transformation failed - + Anahtar dönüştürme başarısız Invalid group field type number - + Geçersiz küme alanı türü numarası Invalid group field size - + Geçersiz küme alanı boyutu Read group field data doesn't match size - + Okuma grubu alan verisi boyutuyla eşleşmiyor Incorrect group id field size - + Hatalı küme kimliği alan boyutu Incorrect group creation time field size - + Hatalı küme oluşturma zaman alanı boyutu Incorrect group modification time field size - + Hatalı küme değişiklik zaman alanı boyutu Incorrect group access time field size - + Hatalı küme erişim zamanı alan boyutu Incorrect group expiry time field size - + Hatalı küme zaman aşımı alan boyutu Incorrect group icon field size - + Geçersiz küme simge alanı boyutu Incorrect group level field size - + Geçersiz küme seviye alanı boyutu Invalid group field type - + Geçersiz küme alanı tipi Missing group id or level - + Eksik küme kimliği veya seviyesi Missing entry field type number - + Eksik girdi alanı tipi numarası Invalid entry field size - + Geçersiz girdi alanı boyutu Read entry field data doesn't match size - + Giriş alan verisi okuma boyutuyla eşleşmiyor Invalid entry uuid field size - + Geçersiz Evrensel Benzersiz Tanımlayıcı alan boyutu girişi Invalid entry group id field size - + Geçersiz küme kimliği alan boyutu girişi Invalid entry icon field size - + Geçersiz giriş simgesi alan boyutu Invalid entry creation time field size - + Geçersiz giriş oluşturma zamanı alan boyutu Invalid entry modification time field size - + Geçersiz giriş değiştirme zamanı alan boyutu Invalid entry expiry time field size - + Geçersiz giriş süre sonu alan boyutu Invalid entry field type + Geçersiz girdi alanı tipi + + + unable to seek to content position + içerik konumuna ulaşılamıyor + + + + KeeShare + + Disabled share + Engelli paylaşım + + + Import from + Şuradan içe aktar + + + Export to + Dışa aktar + + + Synchronize with + Şununla eşitle + + + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 - KeePass2 + KeyComponentWidget - AES: 256-bit - AES: 256-bit + Key Component + Anahtar Bileşen - Twofish: 256-bit - Twofish: 256-bit + Key Component Description + Anahtar Bileşen Açıklaması - ChaCha20: 256-bit - ChaCha20: 256-bit + Cancel + İptal - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Key Component set, click to change or remove + Anahtar Bileşen seti, değiştirmek veya kaldırmak için tıkla - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Add %1 + Add a key component + Ekle %1 - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – önerilen) + Change %1 + Change a key component + Değiştir %1 + + + Remove %1 + Remove a key component + Kaldır %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 ayarlı, değiştirmek veya kaldırmak için tıkla - Main + KeyFileEditWidget - Existing single-instance lock file is invalid. Launching new instance. - Var olan tekil oluşum kilit dosyası geçersiz. Yeni oluşum başlatılıyor. + Browse + Gözat - The lock file could not be created. Single-instance mode disabled. - Kilit dosyası oluşturulamadı. Tekil oluşum kipi devre dışı bırakıldı. + Generate + Oluştur - Another instance of KeePassXC is already running. - Başka bir KeePassXC oluşumu zaten çalışıyor. + Key File + Anahtar Dosyası - Fatal error while testing the cryptographic functions. - Kriptografik işlevler sınanırken ölümcül hata. + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Ek güvenlik için rasgele bayt içeren bir anahtar dosyası ekleyebilirsiniz.</p><p>Gizli tutmalı ve asla kaybetmemelisin yoksa kilitleneceksin!</p> - KeePassXC - Error - KeePassXC - Hata + Legacy key file format + Eski anahtar dosya biçimi + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Gelecekte desteklenmeyecek olan eski bir anahtar +dosyası biçimi kullanıyorsunuz. + +Lütfen ana anahtar ayarlarına gidin ve yeni bir anahtar dosyası oluşturun. + + + Error loading the key file '%1' +Message: %2 + '%1' anahtar dosyası yüklenirken hata +İleti: %2 + + + Key files + Anahtar dosyaları + + + All files + Bütün dosyalar + + + Create Key File... + Anahtar Dosyası Oluştur... + + + Error creating key file + Anahtar dosyası oluşturulurken hata + + + Unable to create key file: %1 + Anahtar dosya oluşturulamıyor: %1 + + + Select a key file + Bir anahtar dosyası seç @@ -2642,10 +3284,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke &Recent databases &Son veri tabanları - - Import - İçe aktar - &Help &Yardım @@ -2654,14 +3292,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke E&ntries G&irdiler - - Copy att&ribute to clipboard - Öznite&liği panoya kopyala - - - Time-based one-time password - - &Groups &Kümeler @@ -2690,30 +3320,10 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke &Close database Veri tabanını &kapat - - &New database - &Yeni veri tabanı - - - Merge from KeePassX database - KeePassX veri tabanından birleştir - - - &Add new entry - Yeni girdi &ekle - - - &View/Edit entry - Girdiyi &göster/düzenle - &Delete entry Girdiyi &sil - - &Add new group - Yeni küme &ekle - &Edit group Kümeyi &düzenle @@ -2726,14 +3336,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Sa&ve database as... Veri tabanını farklı ka&ydet... - - Change &master key... - Ana anahtarı değiştir... - - - &Database settings - &Veri tabanı ayarları - Database settings Veri tabnı ayarları @@ -2742,10 +3344,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke &Clone entry Girdiyi &klonla - - &Find - &Bul - Copy &username &Kullanıcı adını kopyala @@ -2754,10 +3352,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Copy username to clipboard Kullanıcı adını panoya kopyala - - Cop&y password - Parolayı kop&yala - Copy password to clipboard Parolayı panoya kopyala @@ -2770,14 +3364,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Password Generator Parola Oluşturucu - - &Perform Auto-Type - Oto-Yazım &gerçekleştir - - - &Open URL - URL'yi &aç - &Lock databases Veri tabanlarını &kilitle @@ -2810,22 +3396,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke &Export to CSV file... &CSV dosyasına aktar... - - Import KeePass 1 database... - KeePass 1 veri tabanını içe aktar - - - Import CSV file... - CSV dosyasını içe aktar... - - - Re&pair database... - Veri tabanını onar... - - - Show TOTP - ZTSP'yi göster - Set up TOTP... TOTP kurulumu yap... @@ -2846,14 +3416,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Access error for config file %1 %1 yapılandırma dosyası için erişim hatası - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Görünüşe göre KeePassHTTP'yi tarayıcı tümleşmesi için kullanıyorsunuz. Bu özellik terk edilmiştir ve ileride kaldırılacaktır.<br>Bunun yerine KeePassXC-Browser'a geçin! Göçle ilgili yardım için <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">göç kılavuzumuzu</a> ziyaret edin (uyarı %1 / 3).</p> - - - read-only - salt okunur - Settings Ayarlar @@ -2866,26 +3428,6 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke Quit KeePassXC KeePassXC'den Çık - - KeePass 2 Database - KeePass 2 Veri Tabanı - - - All files - Tüm dosyalar - - - Open database - Veri tabanı aç - - - Save repaired database - Onarılan veri tabanını kaydet - - - Writing the database failed. - Veri tabanına yazma başarısız. - Please touch the button on your YubiKey! Lütfen YubiKey'inizdeki düğmeye dokunun! @@ -2898,6 +3440,269 @@ This version is not meant for production use. Yüksek bozulma tehlikesi bulunmaktadır, veri tabanlarınızın yedeğini alın. Bu sürüm, üretimde kullanıma uygun değildir. + + &Donate + Bağış + + + Report a &bug + Hata raporla + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + Uyarı: Qt sürümünüz Keepassxc'nin ekran klavyesiyle çökmesine neden olabilir! +Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz. + + + &Import + &İçe aktar + + + Copy att&ribute... + Öznite&liği kopyala... + + + TOTP... + TOTP... + + + &New database... + &Yeni veritabanı... + + + Create a new database + Yeni veritabanı oluştur + + + &Merge from database... + Veritabanından &birleştir ... + + + Merge from another KDBX database + Başka bir KDBX veritabanından birleştir + + + &New entry + &Yeni girdi + + + Add a new entry + Yeni girdi ekle + + + &Edit entry + &Girdiyi düzenle + + + View or edit entry + Girdiyi göster ve düzenle + + + &New group + &Yeni küme + + + Add a new group + Yeni küme ekle + + + Change master &key... + Ana &anahtarı değiştir... + + + &Database settings... + &Veritabanı ayarları... + + + Copy &password + Kopyala &parola + + + Perform &Auto-Type + &Oto-Yazım gerçekleştir + + + Open &URL + URL'yi &Aç + + + KeePass 1 database... + KeePass 1 veritabanı... + + + Import a KeePass 1 database + KeePass 1 veritabanını içe aktar + + + CSV file... + CSV dosyası... + + + Import a CSV file + CSV dosyasını içe aktar + + + Show TOTP... + TOTP Göster... + + + Show TOTP QR Code... + TOTP QR Kodunu Göster... + + + Check for Updates... + Güncellemeleri kontrol et... + + + Share entry + Girişi paylaş + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + NOT: KeePassXC'nin yayın öncesi bir sürümünü kullanıyorsunuz! +Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değildir. + + + Check for updates on startup? + Başlangıçta güncellemeleri kontrol et? + + + Would you like KeePassXC to check for updates on startup? + KeePassXC'in başlangıçta güncellemeleri kontrol etmesini ister misiniz? + + + You can always check for updates manually from the application menu. + Güncellemeleri her zaman elle uygulama menüsünden kontrol edebilirsiniz. + + + + Merger + + Creating missing %1 [%2] + Eksik %1 [%2] oluşturuluyor + + + Relocating %1 [%2] + %1 taşınıyor [%2] + + + Overwriting %1 [%2] + %1 üzerine yazılıyor [%2] + + + older entry merged from database "%1" + eski giriş "%1" veritabanından birleştirildi + + + Adding backup for older target %1 [%2] + Eski hedef için yedekleme ekle %1 [%2] + + + Adding backup for older source %1 [%2] + Eski kaynak için yedekleme ekle %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Eski hedef girişini yeni kaynağın üstüne yeniden uygulama %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Eski kaynak girişini yeni hedefin üstüne yeniden uygulama %1 [%2] + + + Synchronizing from newer source %1 [%2] + Yeni kaynaktan eşitle %1 [%2] + + + Synchronizing from older source %1 [%2] + Eski kaynaktan eşitle %1 [%2] + + + Deleting child %1 [%2] + Alt girişleri sil %1 [%2] + + + Deleting orphan %1 [%2] + Sahipsizleri sil %1 [%2] + + + Changed deleted objects + Değiştirilen silinmiş nesneler + + + Adding missing icon %1 + Eksik simge ekle %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Yeni bir KeePassXC veritabanı oluştur... + + + Root + Root group + Kök + + + + NewDatabaseWizardPage + + WizardPage + SayfaSihirbazı + + + En&cryption Settings + &Şifreleme Ayarları + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Burada veritabanı şifreleme ayarlarını düzenleyebilirsiniz. Endişelenmeyin, bunları daha sonra veritabanı ayarlarında değiştirebilirsiniz. + + + Advanced Settings + Gelişmiş Ayarlar + + + Simple Settings + Temel Ayarlar + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Şifreleme Ayarları + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Burada veritabanı şifreleme ayarlarını düzenleyebilirsiniz. Endişelenmeyin, bunları daha sonra veritabanı ayarlarında değiştirebilirsiniz. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Veritabanı Ana Anahtar + + + A master key known only to you protects your database. + Yalnızca sizin tarafınızdan bilinen bir ana anahtar veritabanınızı korur. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Genel Veritabanı Bilgileri + + + Please fill in the display name and an optional description for your new database: + Lütfen yeni veritabanınız için görünen ad ve isteğe bağlı bir açıklama girin: + OpenSSHKey @@ -2907,7 +3712,7 @@ Bu sürüm, üretimde kullanıma uygun değildir. PEM boundary mismatch - + PEM limitleri uyumsuz Base64 decoding failed @@ -2919,7 +3724,7 @@ Bu sürüm, üretimde kullanıma uygun değildir. Key file magic header id invalid - + Anahtar dosyası sihirli başlık kimliği geçersiz Found zero keys @@ -2935,47 +3740,47 @@ Bu sürüm, üretimde kullanıma uygun değildir. No private key payload to decrypt - + Şifresini çözmek için yüklü özel anahtar yok Trying to run KDF without cipher - + Şifre olmadan Anahtar Türetme İşlevi çalıştırma deneniyor Passphrase is required to decrypt this key - + Bu anahtarın şifresini çözmek için parola gerekiyor Key derivation failed, key file corrupted? - + Anahtar türetme başarısız, anahtar dosya bozuk mu? Decryption failed, wrong passphrase? - + Şifre çözme başarısız, parola yanlış mı? Unexpected EOF while reading public key - + Ortak anahtar okunurken beklenmeyen dosya sonu Unexpected EOF while reading private key - + Özel anahtar okunurken beklenmeyen dosya sonu Can't write public key as it is empty - + Ortak anahtar boş olduğu için yazılamıyor Unexpected EOF when writing public key - + Ortak anahtar yazılırken beklenmeyen dosya sonu Can't write private key as it is empty - + Özel anahtar boş olduğu için yazılamıyor Unexpected EOF when writing private key - + Özel anahtar yazılırken beklenmeyen dosya sonu Unsupported key type: %1 @@ -2983,15 +3788,15 @@ Bu sürüm, üretimde kullanıma uygun değildir. Unknown cipher: %1 - + Bilinmeyen şifre: %1 Cipher IV is too short for MD5 kdf - + Cipher IV, MD5 kdf için çok kısa Unknown KDF: %1 - + Bilinmeyen KDF: %1 Unknown key type: %1 @@ -2999,125 +3804,30 @@ Bu sürüm, üretimde kullanıma uygun değildir. - OptionDialog + PasswordEditWidget - Dialog - Diyalog + Enter password: + Parolayı gir: - This is required for accessing your databases from ChromeIPass or PassIFox - Bu, ChromeIPass veya PassIFox'tan veri tabanlarınıza erişirken gereklidir + Confirm password: + Parolayı onayla: - Enable KeePassHTTP server - KeePassHTTP sunucusunu etkinleştir + Password + Parola - General - Genel + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Parola, veritabanınızın güvenliğini sağlamak için birincil yöntemdir.</p><p>Güçlü parolalar uzun ve benzersizdir. KeePassXC sizin için bir tane üretebilir.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Kimlik bilgisi istendiğinde bildirim g&öster + Passwords do not match. + Parolalar uyuşmuyor. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Tüm alan adı için tüm girdilerin yerine belirli bir URL için yalnızca en iyi eşleşmeyi döndürür. - - - &Return only best matching entries - Yalnızca en iyi eşleşen girdileri &döndür - - - Re&quest to unlock the database if it is locked - Eğer kilitliyse veri tabanını açmayı is&te - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Yalnızca aynı şemalı girdiler (http://, https://, ftp://, ...) döndürülür. - - - &Match URL schemes - URL şemalarını &eşle - - - Sort matching entries by &username - Eşleşen girdileri &kullanıcı adına göre sırala - - - Sort &matching entries by title - &Eşleşen girdileri başlığa göre sırala - - - R&emove all shared encryption keys from active database - Paylaşılan tüm anahtarları etkin veri tabanından ka&ldır - - - Re&move all stored permissions from entries in active database - Saklanan tüm izinleri etkin veri tabanındaki girdilerden kal&dır - - - Password Generator - Parola Oluşturucu - - - Advanced - Gelişmiş - - - Always allow &access to entries - Her zaman girdilere &erişime izin ver - - - Always allow &updating entries - Her zaman girdileri g&üncellemeye izin ver - - - Only the selected database has to be connected with a client. - Yalnızca seçilen veri tabanı istemciyle bağlanmış olmalıdır. - - - Searc&h in all opened databases for matching entries - Eşleşen girdiler için tüm açık veri tabanlarını a&ra - - - Automatically creating or updating string fields is not supported. - Dizge alanlarını kendiliğinden oluşturma ve güncelleme desteklenmiyor. - - - &Return advanced string fields which start with "KPH: " - "KPH: " ile başlayan gelişmiş dizge alanları &döndür - - - HTTP Port: - HTTP Bağlantı noktası: - - - Default port: 19455 - Öntanımlı bağlantı noktası: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC, 127.0.0.1 üzerinde bu bağlantı noktasını dinleyecek. - - - <b>Warning:</b> The following options can be dangerous! - <b>Uyarı:</b> Aşağıdaki seçenekler tehlikeli olabilir! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP terk edilmiştir ve ileride kaldırılacaktır.<br>Bunun yerine KeePassXC-Browser'a geçin! Göçle ilgili yardım için <a href="https://keepassxc.org/docs/keepassxc-browser-migration">göç kılavuzumuzu</a> ziyaret edin.</p> - - - Cannot bind to privileged ports - - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - 1024'ün altındaki ayrıcalıklı bağlantı noktalarına bağlanamaz! -Öntanımlı bağlantı noktası olan 19455 kullanılıyor. + Generate master password + Ana parola oluştur @@ -3187,18 +3897,10 @@ Using default port 19455. Wordlist: Sözcük listesi: - - Word Count: - Sözcük Sayısı: - Word Separator: Sözcük Ayırıcı: - - Generate - Oluştur - Copy Kopyala @@ -3211,10 +3913,6 @@ Using default port 19455. Close Kapat - - Apply - Uygula - Entropy: %1 bit Entropi: %1 bit @@ -3243,16 +3941,181 @@ Using default port 19455. Password quality Harika + + ExtendedASCII + GenişletilmişASCII + + + Switch to advanced mode + Gelişmiş kipe geç + + + Advanced + Gelişmiş + + + Upper Case Letters A to F + A'dan F'ye Büyük Harfler + + + A-Z + A-Z + + + Lower Case Letters A to F + A'dan F'ye Küçük Harfler + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Ayraç + + + {[( + {[( + + + Punctuation + Noktalama + + + .,:; + .,:; + + + Quotes + Tırnak + + + " ' + " ' + + + Math + Matematiksel + + + <*+!?= + <*+!?= + + + Dashes + Tire + + + \_|-/ + \_|-/ + + + Logograms + Logogramlar + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Basit kipe geç + + + Simple + Basit + + + Character set to exclude from generated password + Oluşturulan paroladan dışlanacak karakter kümesi + + + Do not include: + Dahil etme: + + + Add non-hex letters to "do not include" list + Listeye onaltılık (hex) olmayan harfler ekleme "dahil etmeyin" + + + Hex + Hex + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Dışlanan karakterler: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Sözcük &Sayısı: + + + Regenerate + Yeniden oluştur + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Seç + + + + QMessageBox + + Overwrite + Üzerine yaz + + + Delete + Sil + + + Move + Taşı + + + Empty + Boş + + + Remove + Kaldır + + + Skip + Atla + + + Disable + Devre dışı + + + Merge + Birleştir + QObject Database not opened - Veri tabanı açılmadı + Veritabanı açılmadı Database hash not available - + Veritabanı karma erişilemez Client public key not received @@ -3262,34 +4125,18 @@ Using default port 19455. Cannot decrypt message İletinin şifresi çözülemedi - - Timeout or cannot connect to KeePassXC - Zaman aşımı veya KeePassXC'ye bağlanılamadı - Action cancelled or denied Eylem iptal edildi veya reddedildi - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - İleti şifrelenemedi veya genel anahtar bulunamadı. KeePassXC'de Yerel Mesajlaşma etkin mi? - KeePassXC association failed, try again KeePassXC ilişkilendirmesi başarısız, yeniden dene - - Key change was not successful - Anahtar değişimi başarılı değil - Encryption key is not recognized Şifreleme anahtarı tanınmadı - - No saved databases found - Kaydedilmiş veri tabanı bulunamadı - Incorrect action Doğru olmayan eylem @@ -3344,7 +4191,7 @@ Using default port 19455. Prompt for the entry's password. - + Giriş parolasını sor. Generate a password for the entry. @@ -3369,7 +4216,7 @@ Using default port 19455. Path of the entry to clip. clip = copy to clipboard - + Girişi kısaltmanın yolu. Timeout in seconds before clearing the clipboard. @@ -3393,7 +4240,7 @@ Using default port 19455. Estimate the entropy of a password. - Parolanın entropisini ölç + Parolanın entropisini ölç. Password for which to estimate the entropy. @@ -3415,10 +4262,6 @@ Using default port 19455. Insert password to unlock %1: %1 kilidini kaldırmak için parola yerleştir: - - Failed to load key file %1 : %2 - %1 anahtar dosyası yüklenemedi : %2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3445,7 +4288,7 @@ Kullanılabilir komutlar: List database entries. - Veri tabanı girdilerini listele. + Veritabanı girdilerini listele. Path of the group to list. Default is / @@ -3461,35 +4304,35 @@ Kullanılabilir komutlar: Merge two databases. - İki veri tabanını birleştir. + İki veritabanını birleştir. Path of the database to merge into. - Veri tabanının nereye birleştirileceği. + Veritabanının nereye birleştirileceği. Path of the database to merge from. - Veri tabanının nereden birleştirileceği. + Veritabanının nereden birleştirileceği. Use the same credentials for both database files. - Her iki veri tabanı dosyası için aynı kimliği kullan. + Her iki veritabanı dosyası için aynı kimliği kullan. Key file of the database to merge from. - + Birleştirilecek veritabanının anahtar dosyası. Show an entry's information. - + Bir girişin bilgilerini göster. Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - + Gösterilecek özniteliklerin isimleri. Bu seçenek, her bir özniteliğin verilen sıraya göre bir satırda gösterilmesiyle birden fazla kez belirtilebilir. Eğer hiçbir öznitelik belirtilmediyse, varsayılan özniteliklerin bir özeti verilir. attribute - + öznitelik Name of the entry to show. @@ -3503,19 +4346,13 @@ Kullanılabilir komutlar: error reading from device aygıttan okurken hata - - file empty ! - - dosya boş ! - - malformed string kusurlu dizge missing closing quote - + kapanış tırnak işareti eksik Group @@ -3539,79 +4376,489 @@ Kullanılabilir komutlar: Last Modified - + Son değişiklik Created Oluşturuldu - - Legacy Browser Integration - - Browser Integration Tarayıcı Tümleşmesi YubiKey[%1] Challenge Response - Slot %2 - %3 - + YubiKey[%1] Karşılaştırma Yanıtı - Yuva %2 - %3 Press - + Basın Passive - + Pasif SSH Agent - SSH Ajanı + SSH Aracısı Generate a new random diceware passphrase. - + Yeni bir rastgele diceware parolası oluştur. Word count for the diceware passphrase. - - - - count - + Diceware parolası için kelime sayısı. Wordlist for the diceware generator. [Default: EFF English] - + Diceware oluşturucu için Kelime Listesi. +[Varsayılan: EFF İngilizce] Generate a new random password. - + Yeni bir karışık şifre oluştur. - Length of the generated password. - + Invalid value for password length %1. + %1 parola uzunluğu için geçersiz değer. - Use lowercase characters in the generated password. - + Could not create entry with path %1. + %1 yolu ile giriş oluşturulamadı. - Use uppercase characters in the generated password. - + Enter password for new entry: + Yeni girdi için parolayı gir: - Use numbers in the generated password. - + Writing the database failed %1. + Veritabanı yazma %1 başarısız oldu. - Use special characters in the generated password. - + Successfully added entry %1. + %1 girişi başarıyla eklendi. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + Geçerli TOTP'yi panoya kopyala. + + + Invalid timeout value %1. + Geçersiz zaman aşımı değeri %1. + + + Entry %1 not found. + %1 girişi bulunamadı. + + + Entry with path %1 has no TOTP set up. + %1 yolunun girişinde TOTP ayarlanmadı. + + + Entry's current TOTP copied to the clipboard! + Girişin mevcut TOTP'si panoya kopyalandı! + + + Entry's password copied to the clipboard! + Giriş parolası panoya kopyalandı! + + + Clearing the clipboard in %1 second(s)... + %1 saniye içinde pano temizleniyor...%1 saniye içinde pano temizleniyor... + + + Clipboard cleared! + Pano temizlendi! + + + Silence password prompt and other secondary outputs. + Sessiz parola istemi ve diğer ikincil çıkışlar. + + + count + CLI parameter + sayım + + + Invalid value for password length: %1 + Parola uzunluğu için geçersiz değer: %1 + + + Could not find entry with path %1. + Giriş yolu bulunamadı %1. + + + Not changing any field for entry %1. + %1 girişi için herhangi bir alanı değiştirmez. + + + Enter new password for entry: + Girdi için yeni şifre girin: + + + Writing the database failed: %1 + Veritabanını yazma başarısız oldu: %1 + + + Successfully edited entry %1. + %1 girişi başarıyla düzenlendi. + + + Length %1 + Uzunluk %1 + + + Entropy %1 + Entropi %1 + + + Log10 %1 + Günlük10 %1 + + + Multi-word extra bits %1 + Çok kelimeli ekstra bit %1 + + + Type: Bruteforce + Tür: Zorla + + + Type: Dictionary + Tür: Sözlük + + + Type: Dict+Leet + Tür: Sözlük+Leet + + + Type: User Words + Tür: Kullanıcı Sözcükleri + + + Type: User+Leet + Tür: Kullanıcı+Leet + + + Type: Repeated + Tür: Tekrarlanan + + + Type: Sequence + Tür: Sıra + + + Type: Spatial + Tür: Mekansal + + + Type: Date + Tür: Tarih + + + Type: Bruteforce(Rep) + Tür: Zorla(Rep) + + + Type: Dictionary(Rep) + Tür: Sözlük(Rep) + + + Type: Dict+Leet(Rep) + Tür: Sözlük+Leet(Rep) + + + Type: User Words(Rep) + Tür: Kullanıcı Sözcükleri(Rep) + + + Type: User+Leet(Rep) + Tür: Kullanıcı+Leet(Rep) + + + Type: Repeated(Rep) + Tür: Tekrarlanan(Rep) + + + Type: Sequence(Rep) + Tür: Sıra(Rep) + + + Type: Spatial(Rep) + Tür: Mekansal(Rep) + + + Type: Date(Rep) + Tür: Tarih(Rep) + + + Type: Unknown%1 + Tür: Bilinmiyor%1 + + + Entropy %1 (%2) + Entropi %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Parola uzunluğu (%1) != parçaların uzunluğu toplamı (%2) *** + + + Failed to load key file %1: %2 + Anahtar dosyası yüklenemedi %1: %2 + + + File %1 does not exist. + %1 dosyası mevcut değil. + + + Unable to open file %1. + %1 dosyası açılamıyor. + + + Error while reading the database: +%1 + Veritabanını okurken hata +%1 + + + Error while parsing the database: +%1 + Veritabanını ayrıştırırken hata oluştu +%1 + + + Length of the generated password + Oluşturulan parolanın uzunluğu + + + Use lowercase characters + Küçük harfli karakterler kullan + + + Use uppercase characters + Büyük harfli karakterler kullan + + + Use numbers. + Sayıları kullan + + + Use special characters + Özel karakterler kullan + + + Use extended ASCII + Genişletilmiş ASCII kullan + + + Exclude character set + Karakter kümesini hariç tut + + + chars + karakter + + + Exclude similar looking characters + Benzer görünen karakterleri hariç tut + + + Include characters from every selected group + Seçilen her kümedeki karakterleri dahil et + + + Recursively list the elements of the group. + Kümenin ögelerini yinelemeli olarak sıralayın. + + + Cannot find group %1. + % 1 kümesi bulunamıyor. + + + Error reading merge file: +%1 + Birleştirme dosyası okunurken hata: +%1 + + + Unable to save database to file : %1 + Veritabanı dosyaya kaydedilemedi: %1 + + + Unable to save database to file: %1 + Veritabanı dosyaya kaydedilemedi: %1 + + + Successfully recycled entry %1. + %1 girişi başarıyla geri dönüştürüldü. + + + Successfully deleted entry %1. + %1 girişi başarıyla silindi. + + + Show the entry's current TOTP. + Girişin mevcut TOTP'sini göster. + + + ERROR: unknown attribute %1. + HATA: bilinmeyen özellik %1. + + + No program defined for clipboard manipulation + Pano manipülasyonu için tanımlanmış bir program yok + + + Unable to start program %1 + Program başlatılamıyor %1 + + + file empty + dosya boş + + + %1: (row, col) %2,%3 + %1: (satır, sütun) %2,%3 + + + AES: 256-bit + AES: 256-bit + + + Twofish: 256-bit + Twofish: 256-bit + + + ChaCha20: 256-bit + ChaCha20: 256-bit + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – önerilen) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Geçersiz Ayarlar + + + Invalid Key + TOTP + Geçersiz Anahtar + + + Message encryption failed. + Mesaj şifreleme başarısız. + + + No groups found + Hiçbir küme bulunamadı + + + Create a new database. + Yeni veritabanı oluştur. + + + File %1 already exists. + %1 dosyası zaten var. + + + Loading the key file failed + Anahtar dosyası yüklenemedi + + + No key is set. Aborting database creation. + Hiçbir anahtar ayarlanmadı. Veritabanı oluşturma iptal ediliyor. + + + Failed to save the database: %1. + Veritabanı kaydedilemedi: %1. + + + Successfully created new database. + Yeni veritabanı başarıyla oluşturuldu. + + + Insert password to encrypt database (Press enter to leave blank): + Veritabanını şifrelemek için parola ekle (Boş bırakmak için Enter tuşuna bas): + + + Creating KeyFile %1 failed: %2 + %1 AnahtarDosyası oluşturulamadı: %2 + + + Loading KeyFile %1 failed: %2 + %1 AnahtarDosyası yüklenemedi:%2 + + + Remove an entry from the database. + Veritabanından bir girdi kaldır. + + + Path of the entry to remove. + Kaldırılacak girdinin yolu. + + + Existing single-instance lock file is invalid. Launching new instance. + Var olan tekil oluşum kilit dosyası geçersiz. Yeni oluşum başlatılıyor. + + + The lock file could not be created. Single-instance mode disabled. + Kilit dosyası oluşturulamadı. Tekil oluşum kipi devre dışı bırakıldı. + + + KeePassXC - cross-platform password manager + KeePassXC - çapraz platformlu parola yöneticisi + + + filenames of the password databases to open (*.kdbx) + açılacak parola veritabanlarının dosya adları (*.kdbx) + + + path to a custom config file + özel yapılandırma dosyası yolu + + + key file of the database + veritabanı'nın anahtar dosyası + + + read password of the database from stdin + veritabanının parolasını stdin'den oku + + + Parent window handle + Ana pencere işlemesi + + + Another instance of KeePassXC is already running. + Başka bir KeePassXC oluşumu zaten çalışıyor. + + + Fatal error while testing the cryptographic functions. + Kriptografik işlevler sınanırken ölümcül hata. + + + KeePassXC - Error + KeePassXC - Hata + + + Database password: + Veritabanı parolası: + + + Cannot create new group @@ -3623,15 +4870,15 @@ Kullanılabilir komutlar: Error writing to underlying device: - + Temel aygıta yazma hatası: Error opening underlying device: - + Temel aygıtı açma hatası: Error reading data from underlying device: - + Temel aygıttan veri okuma hatası: Internal zlib error when decompressing: @@ -3650,11 +4897,97 @@ Kullanılabilir komutlar: - SearchWidget + SSHAgent - Search... - Ara... + Agent connection failed. + İstemci bağlantısı başarısız. + + Agent protocol error. + İstemci protokol hatası. + + + No agent running, cannot add identity. + Çalışan istemci yok, kimlik ekleyemezsiniz. + + + No agent running, cannot remove identity. + Çalışan istemci yok, kimlik silemezsiniz. + + + Agent refused this identity. Possible reasons include: + İstemci bu kimliği reddetti. Olası nedenler şunlardır: + + + The key has already been added. + Anahtar zaten eklendi. + + + Restricted lifetime is not supported by the agent (check options). + Kısıtlı süre istemci tarafından desteklenmez (seçenekleri kontrol edin). + + + A confirmation request is not supported by the agent (check options). + Onay isteği istemci tarafından desteklenmiyor (seçenekleri kontrol edin). + + + + SearchHelpWidget + + Search Help + Yardım Ara + + + Search terms are as follows: [modifiers][field:]["]term["] + Arama terimleri şunlar gibidir: [değiştiren][alan:]["]terim["] + + + Every search term must match (ie, logical AND) + Her arama terimi eşleşmelidir (yani, mantıksal ve) + + + Modifiers + Düzenleyen + + + exclude term from results + terimi sonuçların dışında tut + + + match term exactly + tam eşleşme terimi + + + use regex in term + regex terimini kullan + + + Fields + Alanlar + + + Term Wildcards + Terim Joker Karakterler + + + match anything + hepsiyle eşleştir + + + match one + birini eşleştir + + + logical OR + mantıksal yada + + + Examples + Örnekler + + + + SearchWidget Search Ara @@ -3663,359 +4996,289 @@ Kullanılabilir komutlar: Clear Temizle - - Case Sensitive - Büyük Küçük Harfe Duyarlı - Limit search to selected group Aramayı seçilen kümeye sınırla - - - Service - KeePassXC: New key association request - KeePassXC: Yeni anahtar ilişkilendirme isteği + Search Help + Yardım Ara - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Yukarıdaki anahtar için ilişkilendirme isteği aldınız. -Eğer KeePassXC veri tabanınıza erişmesine izin vermek isterseniz -tanımlamak için ona eşsiz bir ad verin ve kabul edin. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Ara (%1)... - KeePassXC: Overwrite existing key? - KeePassXC: Var olan anahtarın üstüne yaz? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - "%1" adlı bir paylaşılan şifreleme anahtarı zaten var. -Üzerine yazmak ister misiniz? - - - KeePassXC: Update Entry - KeePassXC: Girdi Güncelle - - - Do you want to update the information in %1 - %2? - %1 -%2 bilgilerini güncellemek istiyor musun? - - - KeePassXC: Database locked! - KeePassXC: Veri tabanı kilitli! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Etkin veri tabanı kilitli! -Lütfen seçilen veri tabanının kilidini kaldırın veya kilitli olmayan birini seçin. - - - KeePassXC: Removed keys from database - KeePassXC: Anahtarlar veri tabanından kaldırıldı - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - - - - KeePassXC: No keys found - KeePassXC: Anahtar bulunamadı - - - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp Ayarlarında paylaşılan şifreleme anahtarı bulunamadı. - - - KeePassXC: Settings not available! - KeePassXC: Ayarlar kullanılabilir değil! - - - The active database does not contain an entry of KeePassHttp Settings. - Etkin veri tabanı KeePassHttp Ayarlarının girdisini barındırmıyor. - - - Removing stored permissions... - Saklanan izinler kaldırılıyor... - - - Abort - İptal - - - KeePassXC: Removed permissions - KeePassXC: Silinen yetkiler - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC: İzinli girdi bulunamadı! - - - The active database does not contain an entry with permissions. - Etkin veri tabanı izinleri olan girdi barındırmıyor. + Case sensitive + Harfe duyarlı - SettingsWidget + SettingsWidgetKeeShare - Application Settings - Uygulama Ayarları + Active + Aktif - General - Genel + Allow export + Dışa aktarmaya izin ver - Security - Güvenlik + Allow import + İçe aktarmaya izin ver - Access error for config file %1 - %1 yapılandırma dosyası için erişim hatası - - - - SettingsWidgetGeneral - - Basic Settings - Temel Ayarlar + Own certificate + Kendi sertifikası - Start only a single instance of KeePassXC - Yalnızca tek KeePassXC oluşumu başlat + Fingerprint: + Parmak izi: - Remember last databases - Son veri tabanlarını anımsa + Certificate: + Sertifika: - Remember last key files and security dongles - Son anahtar dosyalarını ve güvenlik aygıtlarını anımsa - - - Load previous databases on startup - Başlangıçta önceki veri tabanlarını yükle - - - Automatically save on exit - Çıkışta kendiliğinden kaydet - - - Automatically save after every change - Her değişiklik sonrası kendiliğinden kaydet - - - Automatically reload the database when modified externally - Veri tabanı dışarıdan değiştirildiğinde kendiliğinden yeniden yükle - - - Minimize when copying to clipboard - Panoya kopyalarken simge durumuna küçült - - - Minimize window at application startup - Uygulama başlangıcında pencereyi simge durumuna küçült - - - Use group icon on entry creation - Girdi oluşturmada küme simgesini kullan - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Veri dışı değişiklikler (kümeleri genişletmek gibi) için veri tabanını değiştirildi olarak imleme - - - Hide the Details view - - - - Show a system tray icon - Sistem tepsisi simgesi göster - - - Hide window to system tray when minimized - Simge durumuna küçültüldüğünde pencereyi sistem tepsisine gizle - - - Hide window to system tray instead of app exit - Uygulamadan çıkmak yerine pencereyi sistem tepsisine gizle - - - Dark system tray icon - - - - Language - Dil - - - Auto-Type - Oto-Yazım - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - Oto-Yazım gerçekleştirmeden önce her zaman sor - - - Global Auto-Type shortcut - Küresel Oto-Yazım kısayolu - - - Auto-Type delay - Oto-Yazım gecikmesi - - - ms - Milliseconds - ms - - - Startup - Başlangıç - - - File Management - Dosya Yönetimi - - - Safely save database files (may be incompatible with Dropbox, etc) - Veri tabanı dosyalarını güvenle kaydet (Dropbox vb. ile uyumsuz olabilir) - - - Backup database file before saving - Kaydetmeden önce veri tabanı dosyasını yedekle - - - Entry Management - Girdi Yönetimi - - - General - Genel - - - - SettingsWidgetSecurity - - Timeouts - Zaman Aşımları - - - Clear clipboard after - Şundan sonra panoyu temizle - - - sec - Seconds - san - - - Lock databases after inactivity of - Şu kadar hareketsizlikten sonra veri tabanlarını kilitle - - - Convenience - Elverişlilik - - - Lock databases when session is locked or lid is closed - Oturum kilitlendiğinde veya kapak kapandığında veri tabanlarını kilitle - - - Lock databases after minimizing the window - Pencereyi küçülttükten sonra veri tabanlarını kilitle - - - Don't require password repeat when it is visible - Parola görünür olduğunda yineleme gerektirme - - - Show passwords in cleartext by default - Parolaları öntanımlı olarak düz metinde göster - - - Hide passwords in the preview panel - - - - Hide entry notes by default - Girdi notlarını öntanımlı olarak gizle - - - Privacy - Gizlilik - - - Use Google as fallback for downloading website icons - Web site simgelerini indirmek için Google'ı yedek olarak kullan - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog - - Setup TOTP - ZTSP'yi kur + Signer + İmzalayan Key: Anahtar: - Default RFC 6238 token settings + Generate + Oluştur + + + Import + İçe aktar + + + Export + Dışa aktar + + + Imported certificates + Alınan sertifikalar + + + Trust + Güven + + + Ask + Sor + + + Untrust + Güvenme + + + Remove + Kaldır + + + Path + Yol + + + Status + Durum + + + Fingerprint + Parmak izi + + + Certificate + Sertifika + + + Trusted + Güvenilir + + + Untrusted + Güvenilmez + + + Unknown + Bilinmeyen + + + key.share + Filetype for KeeShare key + anahtar.paylaş + + + KeeShare key file + KeeShare anahtar dosyası + + + All files + Bütün dosyalar + + + Select path + Yol seç + + + Exporting changed certificate + Değişen sertifikayı dışa aktar + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Aktarılan sertifika kullanılan sertifika ile aynı değil. Mevcut sertifikayı vermek aktarmak musunuz? + + + Signer: + + + + + ShareObserver + + Import from container without signature + İmzayı kapsayıcıdan içeri aktar + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + İmzalı olmadığından paylaşılan kapsayıcının kaynağını doğrulayamazsınız. %1 ögesinden gerçekten almak istiyor musunuz? + + + Import from container with certificate + Sertifikayı kapsayıcıdan içe aktar + + + Not this time + Bu sefer değil + + + Never + Asla + + + Always + Daima + + + Just this time + Sadece bu seferlik + + + Import from %1 failed (%2) + % 1'den içe aktarma başarısız (%2) + + + Import from %1 successful (%2) + %1'den içe aktarma başarılı (%2) + + + Imported from %1 + %1 den içe aktarıldı + + + Signed share container are not supported - import prevented + İmzalı paylaşım kapsayıcısı desteklenmiyor -içeri alma engellendi + + + File is not readable + Dosya okunamıyor + + + Invalid sharing container + Geçersiz kapsayıcı paylaşımı + + + Untrusted import prevented + Güvenilmeyen içe aktarma önlendi + + + Successful signed import + İmzalı içe aktarma başarılır + + + Unexpected error + Beklenmeyen hata + + + Unsigned share container are not supported - import prevented + İmzalanmamış paylaşım kapsayıcısı desteklenmiyor -içeri alma engellendi + + + Successful unsigned import + İmzasız içe aktarma başarılı + + + File does not exist + Dosya mevcut değil + + + Unknown share container type + Bilinmeyen kapsayıcı paylaşım türü + + + Overwriting signed share container is not supported - export prevented + İmzalanmış paylaşım kapsayıcısının üzerine yazma desteklenmiyor -dışa aktarma engellendi + + + Could not write export container (%1) + Dışa aktarma kapsayıcısı (%1) yazılamadı + + + Overwriting unsigned share container is not supported - export prevented + İmzalanmamış paylaşım kapsayıcısının üzerine yazma desteklenmiyor -dışa aktarma engellendi + + + Could not write export container + Dışa aktarma kapsayıcısı yazılamadı + + + Unexpected export error occurred + Beklenmeyen dışa aktarma hatası oluştu + + + Export to %1 failed (%2) + %1'e aktarma başarısız oldu (%2) + + + Export to %1 successful (%2) + %1’e aktarma başarılı (%2) + + + Export to %1 + %1'e aktar + + + Do you want to trust %1 with the fingerprint of %2 from %3? + %3'ten %2 parmak izi ile %1'e güvenmek ister misiniz? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 - Steam token settings + Conflicting export target path %1 in %2 - Use custom settings - Özel ayarlar kullan - - - Note: Change these settings only if you know what you are doing. - Not: Bu ayarları yalnızca ne yaptığınızı biliyorsanız değiştirin. - - - Time step: + Could not embed signature: Could not open file to write (%1) - 8 digits - 8 hane + Could not embed signature: Could not write file (%1) + - 6 digits - 6 hane + Could not embed database: Could not open file to write (%1) + - Code size: - Kod boyutu: - - - sec - Seconds - san + Could not embed database: Could not write file (%1) + @@ -4032,20 +5295,132 @@ Lütfen seçilen veri tabanının kilidini kaldırın veya kilitli olmayan birin Copy Kopyala - - Expires in - Süre bitimi - - - seconds - saniye + + Expires in <b>%n</b> second(s) + <b>%n</b> saniye içinde sona erecek<b>%n</b> saniye içinde sona erecek - UnlockDatabaseWidget + TotpExportSettingsDialog - Unlock database - Veri tabanı kilidini kaldır + Copy + Kopyala + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + NOT: Bu TOTP ayarları özeldir ve diğer kimlik doğrulayıcılarla çalışmayabilir. + + + There was an error creating the QR code. + QR kodunu oluştururken bir hata oluştu. + + + Closing in %1 seconds. + %1 saniye içinde kapanıyor. + + + + TotpSetupDialog + + Setup TOTP + TOTP Kurulum + + + Key: + Anahtar: + + + Default RFC 6238 token settings + Varsayılan RFC 6238 anahtar ayarları + + + Steam token settings + Steam anahtar ayarları + + + Use custom settings + Özel ayarlar kullan + + + Custom Settings + Özel Ayarlar + + + Time step: + Zaman adımı: + + + sec + Seconds + san + + + Code size: + Kod boyutu: + + + 6 digits + 6 hane + + + 7 digits + 7 hane + + + 8 digits + 8 hane + + + + UpdateCheckDialog + + Checking for updates + Güncellemeleri kontrol et + + + Checking for updates... + Güncellemeler kontrol ediliyor... + + + Close + Kapat + + + Update Error! + Güncelleme Hatası! + + + An error occurred in retrieving update information. + Güncelleme bilgileri alınırken bir hata oluştu. + + + Please try again later. + Lütfen daha sonra tekrar deneyin. + + + Software Update + Yazılım Güncellemesi + + + A new version of KeePassXC is available! + KeePassXC'in yeni bir sürümü mevcut! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 şimdi kullanılabilir — sizdeki %2. + + + Download it at keepassxc.org + Keepassxc.org adresinden indirin + + + You're up-to-date! + Güncelsin! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 şu anda mevcut en yeni sürüm @@ -4056,11 +5431,11 @@ Lütfen seçilen veri tabanının kilidini kaldırın veya kilitli olmayan birin Create new database - Yeni veri tabanı oluştur + Yeni veritabanı oluştur Open existing database - Var olan veri tabanını aç + Varolan veritabanını aç Import from KeePass 1 @@ -4072,50 +5447,34 @@ Lütfen seçilen veri tabanının kilidini kaldırın veya kilitli olmayan birin Recent databases - Son veri tabanları + Son veritabanları Welcome to KeePassXC %1 - + KeePassXC'ye hoş geldin %1 - main + YubiKeyEditWidget - Remove an entry from the database. - Veri tabanından bir girdi kaldır. + Refresh + Yenile - Path of the database. - Veri tabanının yolu. + YubiKey Challenge-Response + YubiKey Challenge-Response - Path of the entry to remove. - Kaldırılacak girdinin yolu. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Eğer bir <a href="https://www.yubico.com/">YubiKey</a>sahibiyseniz ek güvenlik için kullanabilirsiniz.</p><p>YubiKey, yuvalarından birinin programlanması gerekir <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC - çapraz platformlu parola yöneticisi + No YubiKey detected, please ensure it's plugged in. + Hiçbir YubiKey algılanmadı, lütfen fişe takılı olduğundan emin olun. - filenames of the password databases to open (*.kdbx) - açılacak parola veri tabanlarının dosya adları (*.kdbx) - - - path to a custom config file - özel yapılandırma dosyası yolu - - - key file of the database - veri tabanının anahtar dosyası - - - read password of the database from stdin - veri tabanının parolasını stdin'den oku - - - Parent window handle - + No YubiKey inserted. + YubiKey eklenmedi. \ No newline at end of file diff --git a/share/translations/keepassx_uk.ts b/share/translations/keepassx_uk.ts index e112bb27c..fbd14999b 100644 --- a/share/translations/keepassx_uk.ts +++ b/share/translations/keepassx_uk.ts @@ -11,7 +11,7 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Повідомляйте про помилки на <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Повідомляйте про вади на <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. @@ -37,75 +37,14 @@ Copy to clipboard Скопіювати в кишеню - - Version %1 - - Версія %1 - - - - Revision: %1 - Ревізія: %1 - - - Distribution: %1 - Дистрибутив: %1 - - - Libraries: - Бібліотеки: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Операційна система: %1 -Архітектура ЦП: %2 -Ядро: %3 %4 - - - Enabled extensions: - Увімкнені розширення: - Project Maintainers: - Супровідники проекту: + Супровідники проекту: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. Команда KeePassXC щиро дякує debfx за створення первісної версії KeePassX. - - Build Type: %1 - - Тип збірки: %1 - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - Підтвердити доступ KeePassXC до HTTP - - - Remember this decision - Запам'ятати цей вибір - - - Allow - Дозволити - - - Deny - Заборонити - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 запитує доступ до паролів у цих записах. -Дозволити доступ? - AgentSettingsWidget @@ -113,6 +52,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) Увімкнути посередника SSH (вимагає перезапуск) + + Use OpenSSH for Windows instead of Pageant + Використовувати OpenSSH для Windows замість Pageant + + + + ApplicationSettingsWidget + + Application Settings + Налаштування застосунку + + + General + Загальне + + + Security + Безпека + + + Access error for config file %1 + Помилка доступу до файлу конфігурації %1 + + + Icon only + Лише значок + + + Text only + Лише текст + + + Text beside icon + Текст поруч зі значком + + + Text under icon + Текст під значком + + + Follow style + Наслідувати стиль + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Базове налаштування + + + Startup + Запуск + + + Start only a single instance of KeePassXC + Запускати лише один примірник KeePassXC + + + Remember last databases + Пам’ятати останні сховища + + + Remember last key files and security dongles + Пам'ятати останні файли ключів і механізми захисту + + + Load previous databases on startup + Завантажувати попереднє сховище під час запуску + + + Minimize window at application startup + Згортати вікно після запуску застосунку + + + File Management + Керування файлами + + + Safely save database files (may be incompatible with Dropbox, etc) + Безпечно зберігати файли сховища (може бути несумісним з Dropbox та ін.) + + + Backup database file before saving + Створювати резервну копію сховища перед збереженням + + + Automatically save after every change + Автоматично зберігати після кожної зміни + + + Automatically save on exit + Автоматично зберігати перед виходом + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Не помічати сховище зміненим після змін, що не стосуються даних (напр. розкриття груп) + + + Automatically reload the database when modified externally + Автоматично перезавантажувати сховище після зовнішніх змін + + + Entry Management + Керування записами + + + Use group icon on entry creation + Використовувати для нових записів значок групи + + + Minimize when copying to clipboard + Згортати після копіювання до кишені + + + Hide the entry preview panel + Сховати панель передперегляду запису + + + General + Загальне + + + Hide toolbar (icons) + Сховати панель інструментів + + + Minimize instead of app exit + Мінімізувати вікно замість закриття + + + Show a system tray icon + Показувати значок у системному лотку + + + Dark system tray icon + Темний значок у системному лотку + + + Hide window to system tray when minimized + Після згортання ховати вікно в системний лоток + + + Language + Мова + + + Auto-Type + Автозаповнення + + + Use entry title to match windows for global Auto-Type + Використовувати заголовок запису для знаходження відповідного вікна у глобальному автозаповненні + + + Use entry URL to match windows for global Auto-Type + Використовувати URL запису для знаходження відповідного вікна у глобальному автозаповненні + + + Always ask before performing Auto-Type + Завжди питати перед автозаповненням + + + Global Auto-Type shortcut + Глобальні сполучення клавіш для автозаповнення + + + Auto-Type typing delay + Затримка введення символів при автозаповненні + + + ms + Milliseconds + мс + + + Auto-Type start delay + Затримка початку автозаповнення + + + Check for updates at application startup + Перевіряти наявність оновлень під час запуску застосунку + + + Include pre-releases when checking for updates + Пропонувати попередні випуски для оновлення + + + Movable toolbar + Рухома панель інструментів + + + Button style + Стиль кнопок + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Час очікування + + + Clear clipboard after + Очищати кишеню через + + + sec + Seconds + сек + + + Lock databases after inactivity of + Блокувати сховища, неактивні протягом + + + min + хвилин + + + Forget TouchID after inactivity of + Забувати TouchID, неактивний протягом + + + Convenience + Зручність + + + Lock databases when session is locked or lid is closed + Блокувати сховища після блокування сесії або закриття кришки пристрою + + + Forget TouchID when session is locked or lid is closed + Забувати TouchID після блокування сесії або закриття кришки пристрою + + + Lock databases after minimizing the window + Блокувати сховища після згортання вікна + + + Re-lock previously locked database after performing Auto-Type + Блокувати попередньо заблоковане сховище після завершення автозаповнення + + + Don't require password repeat when it is visible + Не запитувати підтвердження пароля, якщо він не прихований + + + Don't hide passwords when editing them + Не приховувати паролі під час їх редагування + + + Don't use placeholder for empty password fields + Не показувати текст-заповнювач для порожніх полів паролів + + + Hide passwords in the entry preview panel + Приховувати паролі у панелі передперегляду запису + + + Hide entry notes by default + Типово приховувати нотатки до запису + + + Privacy + Приватність + + + Use DuckDuckGo as fallback for downloading website icons + Використовувати DuckDuckGo як запасний варіант при завантаженні значків веб-сторінок + AutoType @@ -134,15 +344,15 @@ Please select whether you want to allow access. This Auto-Type command contains a very long delay. Do you really want to proceed? - Команда Автозаповнення містить надто велику затримку. Ви впевнені, що хочете продовжити? + Команда Автозаповнення містить надто довгу затримку. Ви дійсно хочете продовжити? This Auto-Type command contains very slow key presses. Do you really want to proceed? - Команда Автозаповнення містить надто повільні натискання клавіш. Ви впевнені, що хочете продовжити? + Команда Автозаповнення містить надто повільні натискання клавіш. Ви дійсно хочете продовжити? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - Команда Автозаповнення містить параметри, що надто часто повторюються. Ви впевнені, що хочете продовжити? + Команда Автозаповнення містить надто часто повторювані параметри. Ви дійсно хочете продовжити? @@ -194,7 +404,7 @@ Please select whether you want to allow access. BrowserAccessControlDialog KeePassXC-Browser Confirm Access - Підтвердження доступу для KeePassXC-Browser + Підтвердження доступу для KeePassXC-Переглядача Remember this decision @@ -211,8 +421,29 @@ Please select whether you want to allow access. %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. - %1 запитує доступ до паролів у цих записах. -Дозволити доступ? + %1 запитує доступ до паролів у таких записах. +Оберіть, чи бажаєте Ви дозволити доступ. + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Збереження запису + + + Ok + Гаразд + + + Cancel + Скасувати + + + You have multiple databases open. +Please select the correct database for saving credentials. + У вас відкрито декілька сховищ. +Будь ласка, оберіть правильне сховище для збереження реєстраційних даних. @@ -223,11 +454,11 @@ Please select whether you want to allow access. This is required for accessing your databases with KeePassXC-Browser - Це необхідно для надання KeePassXC-Browser доступу до Ваших сховищ + Це необхідно для надання KeePassXC-Переглядачу доступу до Ваших сховищ Enable KeepassXC browser integration - Увімкнути інтеграцію KeePassXC з браузером + Сполучити KeePassXC з переглядачами General @@ -235,7 +466,7 @@ Please select whether you want to allow access. Enable integration for these browsers: - Увімкнути інтеграцію з цими браузерами: + Сполучити з такими переглядачами: &Google Chrome @@ -288,17 +519,9 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension Сортувати збіжні реєстраційні дані за іменем користувача - - &Disconnect all browsers - &Від'єднати від усіх браузерів - - - Forget all remembered &permissions - Забути всі збережені дозволи - Advanced - Розширені + Розширене Never &ask before accessing credentials @@ -325,7 +548,7 @@ Please select whether you want to allow access. &Return advanced string fields which start with "KPH: " - Показати розширені текстові поля, що починаються з «KPH: » + Показувати розширені текстові поля, що починаються з «KPH: » Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -337,11 +560,11 @@ Please select whether you want to allow access. Support a proxy application between KeePassXC and browser extension. - Підтримувати посередницькі додатки між KeePassXC та розширенням браузера. + Підтримувати посередницький застосунок між KeePassXC та розширенням переглядача. Use a &proxy application between KeePassXC and browser extension - Використовувати посередницький додаток між KeePassXC та розширенням браузера + Використовувати посередницький застосунок між KeePassXC та розширенням переглядача Use a custom proxy location if you installed a proxy manually. @@ -361,21 +584,42 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>Попередження:</b> ці параметри можуть бути небезпечними! - - Executable Files (*.exe);;All Files (*.*) - Виконавчі файли (*.exe);;Всі файли (*.*) - - - Executable Files (*) - Виконавчі файли (*) - Select custom proxy location Вибрати власне розташування посередника - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Вибачте, але KeePassXC-Browser поки що не підтримується Snap-версіях. + &Tor Browser + Переглядач &Tor + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>Попередження:</b> застосунок keepassxc-proxy не знайдено!<br />Будь ласка, перевірте наявність застосунку в директорії встановлення KeePassXC або підтвердьте власний шлях у розширених налаштуваннях.<br />Сполучення з переглядачем <b>не працюватими</b> без посередницького застосунку.<br />Очікуваний шлях: + + + Executable Files + Виконувані файли + + + All Files + Всі файли + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + Не запитувати дозвіл для HTTP &Basic Auth + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -392,7 +636,7 @@ give it a unique name to identify and accept it. Ви одержали запит на прив'язку вказаного ключа. Якщо Ви бажаєте надати доступ до Вашого сховища KeePassXC, -вкажіть унікальну назву та підтвердьте прив'язку. +вкажіть унікальну назву та схваліть прив'язку. Save and allow access @@ -416,154 +660,55 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? Бажаєте оновити інформацію у %1 – %2? - - KeePassXC: Database locked! - KeePassXC: сховище заблоковане! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Чинне сховище заблоковане! -Будь ласка, розблокуйте обране сховище або виберіть інше незаблоковане. - - - KeePassXC: Settings not available! - KeePassXC: налаштування недоступні! - - - The active database does not contain a settings entry. - Поточне сховище не містить запису налаштувань. - - - KeePassXC: No keys found - KeePassXC: жодного ключа не знайдено - - - No shared encryption keys found in KeePassXC Settings. - Не знайдено спільних ключів шифрування у налаштуваннях KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: ключі видалено зі сховища - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Успішно видалено %n шифрувальний ключ з налаштувань KeePassXC.Успішно видалено %n шифрувальні ключа з налаштувань KeePassXC.Успішно видалено %n шифрувальних ключів з налаштувань KeePassXC.Успішно видалено %n шифрувальних ключів з налаштувань KeePassXC. - - - Removing stored permissions… - Видалення збережених привілеїв... - Abort Скасувати - KeePassXC: Removed permissions - KeePassXC: привілеї видалено + Converting attributes to custom data… + Перетворення атрибутів користувацьких даних… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Атрибути KeePassHTTP перетворено + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Атрибути %1 запису(-ів) успішно перетворені. +%2 ключів переміщено до користувацьких даних. - Successfully removed permissions from %n entry(s). - Успішно видалено привілеї для %n запису.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів. + Successfully moved %n keys to custom data. + %n ключ успішно переміщено до користувацьких даних.%n ключа успішно переміщено до користувацьких даних.%n ключів успішно переміщено до користувацьких даних.%n ключів успішно переміщено до користувацьких даних. - KeePassXC: No entry with permissions found! - KeePassXC: запис з привілеями не знайдено! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Записів з атрибутами KeePassHTTP не знайдено! - The active database does not contain an entry with permissions. - Поточне сховище не містить записів з привілеями. - - - - ChangeMasterKeyWidget - - Password - Пароль + The active database does not contain an entry with KeePassHTTP attributes. + Поточне сховище не містить запису з атрибутами KeePassHTTP. - Enter password: - Введіть пароль: + KeePassXC: Legacy browser integration settings detected + KeePassXC: знайдено застаріле налаштування сполучення з переглядачами - Repeat password: - Повторіть пароль: + KeePassXC: Create a new group + - &Key file - Файл-&ключ + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - Огляд - - - Create - Створити - - - Cha&llenge Response - Виклик-відповідь - - - Refresh - Оновити - - - Key files - Файли-ключі - - - All files - Всі файли - - - Create Key File... - Створити файл-ключ... - - - Unable to create Key File : - Неможливо створити файл-ключ: - - - Select a key file - Обрати файл-ключ - - - Empty password - Порожній пароль - - - Do you really want to use an empty string as password? - Ви дійсно бажаєте використати порожній рядок як пароль? - - - Different passwords supplied. - Паролі не співпадають. - - - Failed to set %1 as the Key file: -%2 - Не вдалося встановити %1 в якості файла-ключа: -%2 - - - Legacy key file format - Застарілий формат файла-ключа - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Ви використовуєте застарілий формат файла-ключа, підтримку якого -може бути скасовано у майбутньому. - -Бажано створити новий файл-ключ. - - - Changing master key failed: no YubiKey inserted. - Спроба змінити головний ключ зазнала невдачі: YubiKey не вставлено. + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -574,7 +719,7 @@ Please consider generating a new key file. Append ' - Clone' to title - Додавати « – клон» до заголовка + Додати « – клон» до заголовка Replace username and password with references @@ -643,72 +788,105 @@ Please consider generating a new key file. Not present in CSV file Відсутні у файлі CSV - - Empty fieldname - Без назви - - - column - колонка - Imported from CSV file Імпортовано з файлу CSV Original data: - Початкові дані: - - - Error(s) detected in CSV file ! - У CSV файлі знайдено помилку(-ки)! - - - more messages skipped] - решта повідомлень пропущена] + Початкові дані: Error Помилка + + Empty fieldname %1 + Порожня назва поля %1 + + + column %1 + колонка %1 + + + Error(s) detected in CSV file! + У файлі CSV знайдено помилки! + + + [%n more message(s) skipped] + [ще %n повідомлення пропущено][ще %n повідомлення пропущено][ще %n повідомлень пропущено][ще %n повідомлень пропущено] + CSV import: writer has errors: - - Імпорт CSV – помилки записувача: - - - - - CsvImportWizard - - Error - Помилка - - - Unable to calculate master key - Неможливо вирахувати головний ключ +%1 + Імпорт CSV: помилки записувача: +%1 CsvParserModel - - %n byte(s), - %n байт,%n byte(s), %n байта, %n байтів, %n байтів, - - - %n row(s), - %n рядок, %n рядка, %n рядків, %n рядків, - %n column(s) %n колонка%n колонки%n колонок%n колонок + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n байт%n байти%n байтів%n байтів + + + %n row(s) + %n рядок%n рядки%n рядків%n рядків + + + + Database + + Root + Root group name + Корінь + + + File %1 does not exist. + Файл %1 не існує. + + + Unable to open file %1. + Неможливо відкрити файл %1. + + + Error while reading the database: %1 + Помилка читання сховища: %1 + + + Could not save, database has no file name. + Не вдалося зберегти, для сховища не вказане ім'я файлу. + + + File cannot be written as it is opened in read-only mode. + Неможливо записати файл, оскільки він відкритий у режимі читання. + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Розблокувати сховище - KeePassXC + DatabaseOpenWidget Enter master key - Уведіть головний ключ + Введіть головний ключ Key File: @@ -730,14 +908,6 @@ Please consider generating a new key file. Challenge Response: Виклик-відповідь: - - Unable to open the database. - Неможливо відкрити сховище. - - - Can't open key file - Не вдається відкрити файл-ключ - Legacy key file format Застарілий формат файла-ключа @@ -768,105 +938,174 @@ Please consider generating a new key file. Select key file Оберіть файл-ключ - - - DatabaseRepairWidget - Repair database - Полагодити сховище + TouchID for quick unlock + TouchID для швидкого розблокування - Error - Помилка + Unable to open the database: +%1 + Неможливо відкрити сховище: +%1 - Can't open key file - Не вдається відкрити файл-ключ - - - Unable to open the database. - Неможливо відкрити сховище. - - - Database opened fine. Nothing to do. - Сховище відкрито без помилок. Обробка не потрібна. - - - Success - Успішно - - - The database has been successfully repaired -You can now save it. - Лагодження сховища успішно завершено. -Тепер Ви можете його зберегти. - - - Unable to repair the database. - Неможливо полагодити сховище. + Can't open key file: +%1 + Не вдається відкрити файл ключа: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + Паролі + + + + DatabaseSettingsDialog + + Advanced Settings + Розширене налаштування + General Загальні - Encryption - Шифрування + Security + Безпека - Number of rounds too high - Key transformation rounds - Кількість циклів занадто висока + Master Key + Головний ключ - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! - Ви використовуєте занадто багато циклів перетворення для ключа у форматі Argon2. - -Якщо Ви залишите таку кількість циклів, відкриття Вашого сховища може тривати кілька годин або днів (чи навіть довше)! + Encryption Settings + Налаштування шифрування - Understood, keep number - Зрозуміло, кількість залишено + Browser Integration + Сполучення з переглядачем + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + Налаштування KeePassXC-Browser - Cancel + &Disconnect all browsers + &Від'єднати від усіх переглядачів + + + Forg&et all site-specific settings on entries + &Забути особливе налаштування сайтів у всіх записах + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Перемістити атрибути KeePassHTTP до &користувацьких даних у KeePassXC-переглядачі + + + Stored keys + Збережені ключі + + + Remove + Видалити + + + Delete the selected key? + Видалити вибраний ключ? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Ви дійсно бажаєте видалити позначений ключ? +Це може пошкодити сполучення з модулем переглядача. + + + Key + Ключ + + + Value + Значення + + + Enable Browser Integration to access these settings. + Увімкніть сполучення з переглядачем, щоб дістати доступ до цих параметрів. + + + Disconnect all browsers + Від'єднати від усіх переглядачів + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Ви дійсно хочете від'єднати усі переглядачі? +Це може пошкодити сполучення з модулем переглядача. + + + KeePassXC: No keys found + KeePassXC: жодного ключа не знайдено + + + No shared encryption keys found in KeePassXC settings. + Не знайдено жодного спільного ключа у параметрах KeePassXC. + + + KeePassXC: Removed keys from database + KeePassXC: ключі видалено зі сховища + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Успішно видалено %n ключ шифрування з параметрів KeePassXC.Успішно видалено %n ключі шифрування з параметрів KeePassXC.Успішно видалено %n ключів шифрування з параметрів KeePassXC.Успішно видалено %n ключів шифрування з параметрів KeePassXC. + + + Forget all site-specific settings on entries + Забути особливе налаштування сайтів у всіх записах + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Ви дійсно бажаєте позбутися особливого налаштування всіх сайтів у кожному записі? +Дозволи доступу до записів будуть скасовані. + + + Removing stored permissions… + Видалення збережених дозволів... + + + Abort Скасувати - Number of rounds too low - Key transformation rounds - Кількість циклів занадто низька - - - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! - Ви використовуєте занадто мало циклів перетворення для ключа у форматі AES-KDF. - -Якщо Ви залишите таку кількість циклів, Ваше сховище буде легко зламати. - - - KDF unchanged - ФОК не змінено - - - Failed to transform key with new KDF parameters; KDF unchanged. - Спроба перетворити ключ згідно з новими налаштуваннями ФОК зазнала невдачі; ФОК залишилась без змін + KeePassXC: Removed permissions + KeePassXC: дозволи видалено - MiB - Abbreviation for Mebibytes (KDF settings) - МіБМіБМіБМіБ + Successfully removed permissions from %n entry(s). + Успішно видалено дозволи з %n запису.Успішно видалено дозволи з %n записів.Успішно видалено дозволи з %n записів.Успішно видалено дозволи з %n записів. - - thread(s) - Threads for parallel execution (KDF settings) - потікпотокипотоківпотоків + + KeePassXC: No entry with permissions found! + KeePassXC: запис з дозволами не знайдено! + + + The active database does not contain an entry with permissions. + Поточне сховище не містить записів з дозволами. + + + Move KeePassHTTP attributes to custom data + Перемістити атрибути KeePassHTTP до користувацьких даних + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Ви дійсно бажаєте оновити застаріле налаштування сполучення з переглядачами згідно з найновішими стандартами? +Це необхідно для підтримання сумісності з модулем переглядача. @@ -903,6 +1142,113 @@ If you keep this number, your database may be too easy to crack! Parallelism: Паралельність: + + Decryption Time: + Час розшифрування: + + + ?? s + ?? с + + + Change + Змінити + + + 100 ms + 100 мс + + + 5 s + 5 с + + + Higher values offer more protection, but opening the database will take longer. + Вищі значення поліпшують захист, але сповільнюють відкривання сховища. + + + Database format: + Формат сховища: + + + This is only important if you need to use your database with other programs. + Це важливо тільки якщо Вам потрібно використовувати Ваше сховище з іншими програмами. + + + KDBX 4.0 (recommended) + KDBX 4.0 (рекомендовано) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + без змін + + + Number of rounds too high + Key transformation rounds + Кількість циклів надто висока + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + Ви використовуєте надто багато циклів перетворення для ключа у форматі Argon2. + +Якщо Ви залишите таку кількість циклів, відкриття Вашого сховища може тривати кілька годин або днів (чи навіть довше)! + + + Understood, keep number + Зрозуміло, залишити таку кількість + + + Cancel + Скасувати + + + Number of rounds too low + Key transformation rounds + Кількість циклів надто низька + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + Ви використовуєте надто мало циклів перетворення для ключа у форматі AES-KDF. + +Якщо Ви залишите таку кількість циклів, Ваше сховище буде легко зламати! + + + KDF unchanged + ФОК не змінено + + + Failed to transform key with new KDF parameters; KDF unchanged. + Спроба перетворити ключ згідно з новими налаштуваннями ФОК зазнала невдачі; ФОК залишилась без змін. + + + MiB + Abbreviation for Mebibytes (KDF settings) + МіБМіБМіБМіБ + + + thread(s) + Threads for parallel execution (KDF settings) + потікпотокипотоківпотоків + + + %1 ms + milliseconds + %1 мс%1 мс%1 мс%1 мс + + + %1 s + seconds + %1 мс%1 мс%1 мс%1 с + DatabaseSettingsWidgetGeneral @@ -936,7 +1282,7 @@ If you keep this number, your database may be too easy to crack! MiB - МіБ + МіБ Use recycle bin @@ -944,7 +1290,7 @@ If you keep this number, your database may be too easy to crack! Additional Database Settings - Додаткові налаштування сховища + Додаткове налаштування сховища Enable &compression (recommended) @@ -952,12 +1298,85 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Корінь + Sharing + Спільне користування + + Breadcrumb + Хлібні крихти + + + Type + Тип + + + Path + Шлях + + + Last Signer + Останній підписувач + + + Certificates + Сертифікати + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + Поліпшити захист... + + + No encryption key added + Жодного шифрувального ключа не додано + + + You must add at least one encryption key to secure your database! + Ви мусите додати щонайменьше один шифрувальний ключ, щоб захистити Ваше сховище! + + + No password set + Пароль не встановлено + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + <b>Попередження!</b> Ви не встановили пароль. Використання сховища без пароля не рекомендоване! + +Ви дійсно хочете продовжити без пароля? + + + Unknown error + Невідома помилка + + + Failed to change master key + Зміна головного ключа зазнала невдачі + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Назва сховища: + + + Description: + Опис: + + + + DatabaseTabWidget KeePass 2 Database Сховище KeePass 2 @@ -970,30 +1389,10 @@ If you keep this number, your database may be too easy to crack! Open database Відкрити сховище - - File not found! - Файл не знайдено! - - - Unable to open the database. - Неможливо відкрити сховище. - - - File opened in read only mode. - Файл відкритий лише для читання. - - - Open CSV file - Відкрити CSV файл - CSV file Файл CSV - - All files (*) - Усі файли (*) - Merge database Об'єднати сховище @@ -1006,38 +1405,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database Сховище KeePass 1 - - Close? - Закрити? - - - "%1" is in edit mode. -Discard changes and close anyway? - «%1» в режимі редагування. -Відхилити зміни і все одно закрити? - - - Save changes? - Зберегти зміни? - - - "%1" was modified. -Save changes? - «%1» змінено. -Зберегти зміни? - - - Writing the database failed. - Записати сховище не вдалося. - - - Passwords - Паролі - - - Save database as - Зберегти сховище як - Export database to CSV file Експортувати сховище у файл CSV @@ -1047,83 +1414,60 @@ Save changes? Не вдалось записати CSV файл. - New database + Database creation error + Помилка створення сховища + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + Створене сховище не має ані ключа, ані ФОК, і тому не може бути збереженим. +Це напевно вада у програмі. Будь ласка, повідомте про це розробникам. + + + The database file does not exist or is not accessible. + Файл сховища не існує або недоступний. + + + Select CSV file + Вибрати файл CSV + + + New Database Нове сховище - locked - заблоковано + %1 [New Database] + Database tab name modifier + %1 [Нове сховище] - Lock database - Заблокувати сховище + %1 [Locked] + Database tab name modifier + %1 [Заблоковане] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Неможливо заблокувати сховище, яке Ви зараз редагуєте. -Натисніть «скасувати», щоб завершити зміни або відкинути їх. - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - У сховище було внесено зміни. -Ви хочете зберегти його перед блокуванням? -Інакше внесені зміни буде втрачено. - - - Disable safe saves? - Вимкнути безпечне збереження? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - KeePassXC не зміг зберегти сховище кілька разів поспіль. Швидше за все це сталося тому, що служба узгодження файлів блокує файл для запису. -Вимкнути безпечне збереження і спробувати знов? + %1 [Read-only] + Database tab name modifier + %1 [лише читання] DatabaseWidget Searching... - Шукаю… - - - Change master key - Змінити головний ключ - - - Delete entry? - Видалити запис? + Триває пошук… Do you really want to delete the entry "%1" for good? Ви дійсно хочете остаточно видалити запис «%1»? - - Delete entries? - Видалити записи? - - - Do you really want to delete %1 entries for good? - Ви дійсно хочете остаточно видалити %1 записи(-ів)? - - - Move entry to recycle bin? - Перемістити запис у смітник? - Do you really want to move entry "%1" to the recycle bin? - Ви справді хочете перемістити запис «%1» у смітник? - - - Move entries to recycle bin? - Перемістити записи до смітника? + Ви дійсно хочете перемістити запис «%1» у смітник? Do you really want to move %n entry(s) to the recycle bin? - Ви дійсно хочете перемістити %n запис у смітник?Ви дійсно хочете перемістити %n записи в смітник?Ви дійсно хочете перемістити %n записів у смітник?Ви дійсно хочете перемістити %n записів у смітник? + Ви дійсно хочете перемістити %n запис у смітник?Ви дійсно хочете перемістити %n записи у смітник?Ви дійсно хочете перемістити %n записів у смітник?Ви дійсно хочете перемістити %n записів у смітник? Execute command? @@ -1131,31 +1475,23 @@ Disable safe saves and try again? Do you really want to execute the following command?<br><br>%1<br> - Ви справді хочете виконати таку команду? <br><br>%1<br> + Ви дійсно хочете виконати таку команду? <br><br>%1<br> Remember my choice Запам'ятати мій вибір - - Delete group? - Видалити групу? - Do you really want to delete the group "%1" for good? Ви дійсно хочете остаточно видалити групу «%1»? - - Unable to calculate master key - Неможливо вирахувати головний ключ - No current database. Сховище не обране. No source database, nothing to do. - Джерельне сховище відсутнє, обробка не потрібна. + Джерельне сховище відсутнє, оброблення не потрібне. Search Results (%1) @@ -1183,10 +1519,6 @@ Do you want to merge your changes? Файл сховища було змінено, а Ви маєте незбережені зміни. Об‘єднати ці зміни? - - Could not open the new database file while attempting to autoreload this database. - Не вдалося відкрити нове сховище під час автоматичного перезавантаження цього сховища. - Empty recycle bin? Спорожнити смітник? @@ -1195,88 +1527,111 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? Ви дійсно бажаєте остаточно видалити все зі смітника? - - - DetailsWidget - - Generate TOTP Token - Створити позначку ТОГ + + Do you really want to delete %n entry(s) for good? + Ви дійсно хочете остаточно видалити %n запис?Ви дійсно хочете остаточно видалити %n записи?Ви дійсно хочете остаточно видалити %n записів?Ви дійсно хочете остаточно видалити %n записів? + + + Delete entry(s)? + Видалити запис?Видалити записи?Видалити записи?Видалити записи? + + + Move entry(s) to recycle bin? + Перемістити запис у смітник?Перемістити записи в смітник?Перемістити записи в смітник?Перемістити записи в смітник? - Close - Закрити + File opened in read only mode. + Файл відкритий лише для читання. - General - Загальні + Lock Database? + Заблокувати сховище? - Password - Пароль + You are editing an entry. Discard changes and lock anyway? + Ви змінюєте запис. Відкинути зміни і все одно заблокувати? - URL - URL + "%1" was modified. +Save changes? + «%1» змінено. +Зберегти зміни? - Expiration - Термін чинності + Database was modified. +Save changes? + Сховище змінено. +Зберегти зміни? - Username - Ім’я користувача + Save changes? + Зберегти зміни? - Autotype - Автозаповнення + Could not open the new database file while attempting to autoreload. +Error: %1 + Відкриття нового файлу сховища зазнало невдачі під час автоматичного перевантаження. +Помилка: %1 - Searching - Шукаю + Disable safe saves? + Вимкнути безпечне збереження? - Attributes - Атрибути + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC не зміг зберегти сховище кілька разів поспіль. Швидше за все це сталося тому, що служба узгодження файлів блокує файл для запису. +Вимкнути безпечне збереження і спробувати знов? - Attachments - Вкладення + Writing the database failed. +%1 + Записати сховище не вдалося. +%1 - Notes - Примітки + Passwords + Паролі - Window - Вікно + Save database as + Зберегти сховище як - Sequence - Послідовність + KeePass 2 Database + Сховище KeePass 2 - Search - Пошук + Replace references to entry? + Замінити посилання на запис? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Запис «%1» має %2 посилання. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити?Запис «%1» має %2 посилання. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити?Запис «%1» має %2 посилань. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити?Запис «%1» має %2 посилань. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити? - Clear - Очистити + Delete group + Видалити групу - Never - Ніколи + Move group to recycle bin? + Перемістити групу у смітник? - [PROTECTED] - [ЗАХИЩЕНО] + Do you really want to move the group "%1" to the recycle bin? + Ви дійсно хочете перемістити групу «%1» у смітник? - Disabled - Вимкнено + Successfully merged the database files. + Файли сховищ вдало об'єднано. - Enabled - Увімкнено + Database was not modified by merge operation. + Об'єднання не змінило сховище. + + + Shared group... + @@ -1311,7 +1666,7 @@ Do you want to merge your changes? n/a - n/a + немає (encrypted) @@ -1349,37 +1704,21 @@ Do you want to merge your changes? New attribute Новий атрибут - - Confirm Remove - Схваліть видалення - Are you sure you want to remove this attribute? Ви дійсно бажаєте видалити цей атрибут? - - [PROTECTED] - [ЗАХИЩЕНО] - - - Press reveal to view or edit - Натисніть «показати» для перегляду або редагування - Tomorrow Завтра %n week(s) - %n тиждень%n тижні%n тижнів%n тижнів + %n тиждень%n тижня%n тижнів%n тижнів %n month(s) - %n місяць%n місяці%n місяців%n місяців - - - 1 year - 1 рік + %n місяць%n місяця%n місяців%n місяців Apply generated password? @@ -1393,6 +1732,26 @@ Do you want to merge your changes? Entry updated successfully. Запис успішно оновлено. + + Entry has unsaved changes + Запис має незбережені зміни + + + New attribute %1 + Новий атрибут %1 + + + [PROTECTED] Press reveal to view or edit + [ЗАХИЩЕНО] Натисніть «показати», щоб переглянути або змінити + + + %n year(s) + %n рік%n роки%n років%n років + + + Confirm Removal + Схваліть видалення + EditEntryWidgetAdvanced @@ -1430,7 +1789,7 @@ Do you want to merge your changes? Background Color: - Колір тла: + Колір тла: @@ -1445,7 +1804,7 @@ Do you want to merge your changes? &Use custom Auto-Type sequence: - Використати власну послідовність автозаповнення + &Використати власну послідовність автозаповнення: Window Associations @@ -1484,7 +1843,7 @@ Do you want to merge your changes? Delete all - Видалити все + Видалити всі @@ -1499,7 +1858,7 @@ Do you want to merge your changes? Repeat: - Пароль ще раз: + Повторіть пароль: Title: @@ -1515,7 +1874,7 @@ Do you want to merge your changes? Toggle the checkbox to reveal the notes section. - Натисніть перемикач, щоб показати розділ нотаток + Натисніть перемикач, щоб показати розділ нотаток. Username: @@ -1523,7 +1882,7 @@ Do you want to merge your changes? Expires - Закінчується + Знечинюється @@ -1534,11 +1893,11 @@ Do you want to merge your changes? Remove key from agent after - Видаляти ключ з в'язки посередника після + Видаляти ключ із в'язки посередника після seconds - секунд + секунд Fingerprint @@ -1546,7 +1905,7 @@ Do you want to merge your changes? Remove key from agent when database is closed/locked - Видаляти ключ з в'язки посередника під час блокування або закриття сховища + Видаляти ключ із в'язки посередника під час блокування або закриття сховища Public key @@ -1566,7 +1925,7 @@ Do you want to merge your changes? n/a - n/a + немає Copy to clipboard @@ -1595,11 +1954,11 @@ Do you want to merge your changes? Remove from agent - Видалити з в'язкі посередника + Видалити з в'язки посередника Require user confirmation when this key is used - Запрошувати підтвердження для використання цього ключа + Запитувати підтвердження для використання цього ключа @@ -1637,6 +1996,97 @@ Do you want to merge your changes? Успадкувати від батьківської групи (%1) + + EditGroupWidgetKeeShare + + Form + Форма + + + Type: + Тип: + + + Path: + Шлях: + + + ... + ... + + + Password: + Пароль: + + + Inactive + Неактивна + + + Import from path + Імпортувати зі шляху + + + Export to path + Експортувати за шляхом + + + Synchronize with path + Узгодити за шляхом + + + Your KeePassXC version does not support sharing your container type. Please use %1. + Ваша версія KeePassXC не підтримує спільне використання типу Вашої оболонки. Будь ласка, використайте %1. + + + Database sharing is disabled + Спільне користування сховищами вимкнено + + + Database export is disabled + Експорт сховищ вимкнено + + + Database import is disabled + Імпорт сховищ вимкнено + + + KeeShare unsigned container + Непідписана оболонка KeeShare + + + KeeShare signed container + Підписана оболонка KeeShare + + + Select import source + Вибрати джерело імпорту + + + Select export target + Вибрати ціль експорту + + + Select import/export file + Вибрати файл імпорту/експорту + + + Clear + Очистити + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1649,7 +2099,7 @@ Do you want to merge your changes? Expires - Закінчується + Знечинюється Search @@ -1661,22 +2111,22 @@ Do you want to merge your changes? &Use default Auto-Type sequence of parent group - Використати типову послідовність автозаповнення батьківської групи + &Використати типову послідовність автозаповнення батьківської групи Set default Auto-Type se&quence - Встановити типову послідовність автозаповнення + Встановити типову &послідовність автозаповнення EditWidgetIcons &Use default icon - Використати типовий значок + Використати &типовий значок Use custo&m icon - Використати власний значок + Використати &власний значок Add custom icon @@ -1692,11 +2142,7 @@ Do you want to merge your changes? Unable to fetch favicon. - Неможливо дістати фавікон - - - Hint: You can enable Google as a fallback under Tools>Settings>Security - Порада: Ви можете увімкнути Google у якості запасного варіанту шляхом вибору Інструменти>Налаштування>Безпека + Неможливо дістати фавікон. Images @@ -1706,14 +2152,6 @@ Do you want to merge your changes? All files Всі файли - - Select Image - Вибір зображення - - - Can't read icon - Неможливо прочитати значок - Custom icon already exists Свій значок вже існує @@ -1723,8 +2161,36 @@ Do you want to merge your changes? Схвалити видалення - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Цей значок використовують %1 записи. Він буде замінений типовим значком. Ви дійсно бажаєте видалити його? + Custom icon successfully downloaded + Користувацький занчок успішно завантажено + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + Порада: Ви можете ввімкнути DuckDuckGo як запасний варіант у Інструменти>Налаштування>Безпека + + + Select Image(s) + Вибрати зображення + + + Successfully loaded %1 of %n icon(s) + Успішно завантажено %1 з %n значкаУспішно завантажено %1 з %n значківУспішно завантажено %1 з %n значківУспішно завантажено %1 з %n значків + + + No icons were loaded + Жодного значка не завантажено + + + %n icon(s) already exist in the database + %n значок вже існує у сховищі%n значки вже існують у сховищі%n значків вже існують у сховищі%n значків вже існують у сховищі + + + The following icon(s) failed: + Такий значок зазнав невдачі:Такі значки зазнали невдачі:Такі значки зазнали невдачі:Такі значки зазнали невдачі: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + Цей значок використовує %n запис і його буде замінено на типовий значок. Ви дійсно хочете видалити його?Цей значок використовують %n записи і його буде замінено на типовий значок. Ви дійсно хочете видалити його?Цей значок використовують %n записів і його буде замінено на типовий значок. Ви дійсно хочете видалити його?Цей значок використовують %n записів і його буде замінено на типовий значок. Ви дійсно хочете видалити його? @@ -1775,9 +2241,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - – клон + %1 - Clone + %1 - Клон @@ -1819,11 +2284,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - Ви дійсно хочете видалити %n вкладення?Ви дійсно хочете видалити %n вкладення?Ви дійсно хочете видалити %n вкладень?Ви дійсно хочете видалити %n вкладень? - - - Confirm Remove - Схваліть видалення + Ви дійсно бажаєте видалити %n вкладення?Ви дійсно бажаєте видалити %n вкладення?Ви дійсно бажаєте видалити %n вкладень?Ви дійсно бажаєте видалити %n вкладень? Save attachments @@ -1841,7 +2302,7 @@ This may cause the affected plugins to malfunction. Confirm overwrite - Схваліть перезапис + Схвалити перезапис Unable to save attachments: @@ -1862,10 +2323,17 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + Схвалити видалення + + + Unable to open file(s): %1 - Неможливо відкрити файли: -%1 + Неможливо відкрити файл: +%1Неможливо відкрити файли: +%1Неможливо відкрити файли: +%1Неможливо відкрити файли: +%1 @@ -1899,7 +2367,7 @@ This may cause the affected plugins to malfunction. Ref: Reference abbreviation - Пос.: + Пос.: Group @@ -1931,7 +2399,7 @@ This may cause the affected plugins to malfunction. Expires - Закінчується + Знечинюється Created @@ -1949,6 +2417,106 @@ This may cause the affected plugins to malfunction. Attachments Вкладення + + Yes + Так + + + TOTP + ТОП + + + + EntryPreviewWidget + + Generate TOTP Token + Створити позначку ТОП + + + Close + Закрити + + + General + Загальні + + + Username + Ім’я користувача + + + Password + Пароль + + + Expiration + Знечинюється + + + URL + URL + + + Attributes + Атрибути + + + Attachments + Вкладення + + + Notes + Примітки + + + Autotype + Автозаповнення + + + Window + Вікно + + + Sequence + Послідовність + + + Searching + Пошук + + + Search + Пошук + + + Clear + Очистити + + + Never + Ніколи + + + [PROTECTED] + [ЗАХИЩЕНО] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Увімкнено + + + Disabled + Вимкнено + + + Share + Спільне використання + EntryView @@ -1958,19 +2526,19 @@ This may cause the affected plugins to malfunction. Hide Usernames - Ховати імена користувача + Приховувати імена користувача Hide Passwords - Сховати паролі + Приховувати паролі Fit to window - Припасувати до вікна + Припасовувати до вікна Fit to contents - Припасувати до вмісту + Припасовувати до вмісту Reset to defaults @@ -1987,6 +2555,11 @@ This may cause the affected plugins to malfunction. Recycle Bin Смітник + + [empty] + group has no children + [порожня] + HostInstaller @@ -1999,66 +2572,11 @@ This may cause the affected plugins to malfunction. Неможливо зберегти файл сценарію для власного обміну повідомленнями. - - HttpPasswordGeneratorWidget - - Length: - Довжина: - - - Character Types - Види символів - - - Upper Case Letters - Великі літери - - - A-Z - A-Z - - - Lower Case Letters - Малі літери - - - a-z - a-z - - - Numbers - Цифри - - - 0-9 - 0-9 - - - Special Characters - Спеціальні символи - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - Виключити неоднозначні символи - - - Ensure that the password contains characters from every group - Забезпечити входження до пароля символів з кожної групи - - - Extended ASCII - Розширені ASCII - - KMessageWidget &Close - Закрити + &Закрити Close message @@ -2069,7 +2587,7 @@ This may cause the affected plugins to malfunction. Kdbx3Reader Unable to calculate master key - Неможливо вирахувати головний ключ + Неможливо обчислити головний ключ Unable to issue challenge-response. @@ -2079,6 +2597,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. Неправильний ключ або пошкоджене сховище. + + missing database headers + відсутні заголовки сховища + + + Header doesn't match hash + Заголовок не відповідає контрольній сумі + + + Invalid header id size + Хибний розмір ідентифікатора заголовка + + + Invalid header field length + Хибна довжина поля заголовка + + + Invalid header data length + Хибна довжина даних заголовка + Kdbx3Writer @@ -2088,7 +2626,7 @@ This may cause the affected plugins to malfunction. Unable to calculate master key - Неможливо вирахувати головний ключ + Неможливо обчислити головний ключ @@ -2099,7 +2637,7 @@ This may cause the affected plugins to malfunction. Unable to calculate master key - Неможливо вирахувати головний ключ + Неможливо обчислити головний ключ Invalid header checksum size @@ -2111,7 +2649,7 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. (HMAC mismatch) - Хибний ключ або пошкоджене сховище. (невідповідність HMAC) + Неправильний ключ або пошкоджене сховище. (невідповідність HMAC) Unknown cipher @@ -2171,12 +2709,12 @@ This may cause the affected plugins to malfunction. Invalid variant map entry value length Translation: variant map = data structure for storing meta data - Хибна довжина запису в структурі метаданих + Хибна довжина значення запису в структурі метаданих Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - Хибний запису в структурі метаданих + Хибне значення запису в структурі метаданих Invalid variant map Bool entry value length @@ -2227,7 +2765,7 @@ This may cause the affected plugins to malfunction. Unable to calculate master key - Неможливо вирахувати головний ключ + Неможливо обчислити головний ключ Failed to serialize KDF parameters variant map @@ -2237,10 +2775,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - Хибна довжина uuid шифру - Unsupported cipher Непідтримуваний шифр @@ -2279,7 +2813,7 @@ This may cause the affected plugins to malfunction. Not a KeePass database. - Не сховище KeePass. + Це не сховище KeePass. The selected file is an old KeePass 1 database (.kdb). @@ -2295,6 +2829,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. Непідтримувана версія сховища KeePass 2. + + Invalid cipher uuid length: %1 (length=%2) + Хибна довжина uuid шифру: %1 (довжина=%2) + + + Unable to parse UUID: %1 + Неможливо розібрати UUID: %1 + + + Failed to read database file. + Зчитування файлу сховища зазнало невдачі. + KdbxXmlReader @@ -2324,7 +2870,7 @@ This is a one-way migration. You won't be able to open the imported databas Invalid group icon number - Хибний номер значка групи + Хибна кількість значків групи Invalid EnableAutoType value @@ -2344,7 +2890,7 @@ This is a one-way migration. You won't be able to open the imported databas Missing DeletedObject uuid or time - Бракує часу або uuid для DeleteObject + Бракує значення часу або uuid для DeleteObject Null entry uuid @@ -2352,7 +2898,7 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry icon number - Хибний номер значка запису + Хибна кількість значків запису History element in history entry @@ -2366,17 +2912,13 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid Елемент журналу з відмінним uuid - - Unable to decrypt entry string - Неможливо розшифрувати текст запису - Duplicate custom attribute found Знайдено дублікат Вашого власного атрибута Entry string key or value missing - Бракує текстового ключа або значення запису + Запису бракує текстового ключа або значення Duplicate attachment found @@ -2384,11 +2926,11 @@ This is a one-way migration. You won't be able to open the imported databas Entry binary key or value missing - Бракує двійкового ключа або значення запису + Запису бракує двійкового ключа або значення Auto-type association window or sequence missing - Вікно або послідовність прив'язки автозаповнення відсутнє + Відсутнє вікно або послідовність прив'язки автозаповнення Invalid bool value @@ -2408,7 +2950,7 @@ This is a one-way migration. You won't be able to open the imported databas Invalid number value - Хибне цифрове значення + Хибне числове значення Invalid uuid value @@ -2419,6 +2961,14 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry Неможливо розпакувати двійковий код + + XML error: +%1 +Line %2, column %3 + Помилка XML: +%1 +Рядок %2, знакопозиція %3 + KeePass1OpenWidget @@ -2443,11 +2993,11 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported encryption algorithm. - Цей алгоритм шифрування не підтримується. + Непідтримуваний алгоритм шифрування. Unsupported KeePass database version. - Ця версія сховища KeePass не підтримується. + Непідтримувана версія сховища KeePass. Unable to read encryption IV @@ -2484,7 +3034,7 @@ This is a one-way migration. You won't be able to open the imported databas Unable to calculate master key - Неможливо вирахувати головний ключ + Неможливо обчислити головний ключ Wrong key or database file is corrupt. @@ -2544,7 +3094,7 @@ This is a one-way migration. You won't be able to open the imported databas Missing entry field type number - Бракує номера типу для поля запису + Бракує кількості типів для поля запису Invalid entry field size @@ -2582,203 +3132,238 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type Хибний тип поля запису - - - KeePass2 - AES: 256-bit - AES: 256-біт - - - Twofish: 256-bit - Twofish: 256-біт - - - ChaCha20: 256-bit - ChaCha20: 256-біт - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – рекомендовано) + unable to seek to content position + неможливо знайти позицію вмісту - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - Наявний блокувальний файл режиму одного примірника є хибним. Запускаю новий примірник. + Disabled share + Вимкнуте спільне користування - The lock file could not be created. Single-instance mode disabled. - Неможливо створити блокувальний файл. Режим одного примірника вимкнено. + Import from + Імпортувати з - Another instance of KeePassXC is already running. - Інший примірник KeePassXC вже запущений. + Export to + Експортувати до - Fatal error while testing the cryptographic functions. - Невиправна помилка в процесі тестування криптографічних функцій. + Synchronize with + Узгодити з - KeePassXC - Error - KeePassXC – помилка + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + Складник ключа + + + Key Component Description + Опис складника ключа + + + Cancel + Скасувати + + + Key Component set, click to change or remove + Набір складників ключа, клацніть щоб змінити або видалити + + + Add %1 + Add a key component + Додати %1 + + + Change %1 + Change a key component + Змінити %1 + + + Remove %1 + Remove a key component + Видалити %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 встановлено, клацніть, щоб змінити або видалити + + + + KeyFileEditWidget + + Browse + Огляд + + + Generate + Створити + + + Key File + Файл-ключ + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>Ви можете додати файл-ключ, що містить випадкові байти для покращення безпеки.</p><p>Ви мусите зберігати його таємно і не губити, інакше Ви не зможете відкрити сховище.</p> + + + Legacy key file format + Застарілий формат файла-ключа + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + Ви використовуєте застарілий формат файла-ключа, підтримку якого +може бути скасовано у майбутньому. + +Будь ласка, перейдіть до налаштування головного ключа і створіть новий файл-ключ. + + + Error loading the key file '%1' +Message: %2 + Помилка завантаження файла-ключа '%1' +Повідомлення: %2 + + + Key files + Файли-ключі + + + All files + Всі файли + + + Create Key File... + Створити файл-ключ... + + + Error creating key file + Помилка створення файла-ключа + + + Unable to create key file: %1 + Неможливо створити файл-ключ: %1 + + + Select a key file + Обрати файл-ключ MainWindow &Database - Сховище + &Сховище &Recent databases - Останні сховища - - - Import - Імпорт + &Останні сховища &Help - Довідка + &Довідка E&ntries - Записи - - - Copy att&ribute to clipboard - Копіювати атрибут до кишені - - - Time-based one-time password - Тимчасовий одноразовий пароль + &Записи &Groups - Групи + &Групи &Tools - Інструменти + &Інструменти &Quit - Вихід + &Вихід &About - Про KeePassXC + &Про KeePassXC &Open database... - Відкрити сховище… + Від&крити сховище… &Save database - Зберігти сховище + З&берегти сховище &Close database - Закрити сховище - - - &New database - Нове сховище - - - Merge from KeePassX database - Об'єднати зі сховищем KeePassX - - - &Add new entry - Додати новий запис - - - &View/Edit entry - Переглянути/змінити запис + З&акрити сховище &Delete entry - Видалити запис - - - &Add new group - Додати нову групу + В&идалити запис &Edit group - Змінити групу + З&мінити групу &Delete group - Видалити групу + Вида&лити групу Sa&ve database as... - Зберегти сховище як… - - - Change &master key... - Змінити головний ключ… - - - &Database settings - Налаштування сховища + Зберегти сховище &як… Database settings - Параметри сховища + Налаштування сховища &Clone entry - Клонувати запис - - - &Find - Знайти + Клон&увати запис Copy &username - Копіювати ім'я користувача + Скопі&ювати ім'я користувача Copy username to clipboard - Копіювати ім’я користувача в кишеню - - - Cop&y password - Копіювати пароль + Скопіювати ім’я користувача в кишеню Copy password to clipboard - Копіювати пароль в буфер обміну + Скопіювати пароль у кишеню &Settings - Налаштування + Нала&штування Password Generator Генератор паролів - - &Perform Auto-Type - Виконати автозаповнення - - - &Open URL - Відкрити URL - &Lock databases Замкнути сховища @@ -2789,7 +3374,7 @@ This is a one-way migration. You won't be able to open the imported databas Copy title to clipboard - Скопіювати заголовок до кишені + Скопіювати заголовок у кишеню &URL @@ -2797,7 +3382,7 @@ This is a one-way migration. You won't be able to open the imported databas Copy URL to clipboard - Скопіювати URL до кишені + Скопіювати URL у кишеню &Notes @@ -2805,35 +3390,19 @@ This is a one-way migration. You won't be able to open the imported databas Copy notes to clipboard - Скопіювати нотатки до кишені + Скопіювати нотатки в кишеню &Export to CSV file... Експортувати до файлу CSV… - - Import KeePass 1 database... - Імпортувати сховище KeePass 1… - - - Import CSV file... - Імпортувати файл CSV… - - - Re&pair database... - Полагодити сховище… - - - Show TOTP - Показати ТОГ - Set up TOTP... - Налаштувати ТОГ… + Налаштувати ТОП… Copy &TOTP - Скопіювати ТОГ + Скопіювати ТОП E&mpty recycle bin @@ -2847,14 +3416,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 Помилка доступу до файлу конфігурації %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>Схоже, що Ви використовуєте KeePassHTTP для інтеграції з браузером. Цей засіб застарів і незабаром буде видалений. <br>Натомість, будь ласка, використовуйте KeePassXC-Browser! Інформацію з переходу Ви можете знайти у нашому <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">посібнику</a> (попередження %1 of 3).</p> - - - read-only - тільки для читання - Settings Налаштування @@ -2867,26 +3428,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC Вийти з KeePassXC - - KeePass 2 Database - Сховище KeePass 2 - - - All files - Всі файли - - - Open database - Відкрити сховище - - - Save repaired database - Зберегти налагоджене сховище - - - Writing the database failed. - Записати сховище не вдалося. - Please touch the button on your YubiKey! Натисніть, будь ласка, кнопку на вашому YubiKey! @@ -2899,12 +3440,274 @@ This version is not meant for production use. Зберігайте резервну копію Ваших сховищ через підвищений ризик пошкодження даних. Ця версія не призначена для повсякденного користування. + + &Donate + Пожерт&вувати + + + Report a &bug + Повідомит&и про помилку + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + <b>Попередження</b>: Використання Вашої версії Qt з екранною клавіатурою може призвести до збою KeePassXC. + + + &Import + Імпортувати + + + Copy att&ribute... + Скопіювати атрибут... + + + TOTP... + ТОП... + + + &New database... + Нове сховище... + + + Create a new database + Створити нове сховище + + + &Merge from database... + Об'єднати зі сховищем... + + + Merge from another KDBX database + Об'єднати з іншого сховища KDBX + + + &New entry + Новий запис + + + Add a new entry + Додати новий запис + + + &Edit entry + Змінити запис + + + View or edit entry + Переглянути або змінити запис + + + &New group + Нова група + + + Add a new group + Додати нову групу + + + Change master &key... + Змінити головний ключ... + + + &Database settings... + Налаштування сховища... + + + Copy &password + Скопіювати пароль + + + Perform &Auto-Type + Виконати Автозаповнення + + + Open &URL + Відкрити URL + + + KeePass 1 database... + Сховище KeePass 1... + + + Import a KeePass 1 database + Імпортувати сховище KeePass 1 + + + CSV file... + Файл CSV... + + + Import a CSV file + Імпортувати файл CSV + + + Show TOTP... + Показати ТОП... + + + Show TOTP QR Code... + Показати QR-код ТОП... + + + Check for Updates... + Перевірити наявність оновлень... + + + Share entry + Спільне використання запису + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + <b>Примітка</b>: Ви використовуєте попередню версію KeePassXC! +Зважайте на можливість деяких вади та незначних проблем, ця версія не призначена для повсякденного користування. + + + Check for updates on startup? + Перевіряти наявність оновлень під час запуску? + + + Would you like KeePassXC to check for updates on startup? + Ви хочете, щоб KeePassXC перевіряв наявність оновлень під час запуску? + + + You can always check for updates manually from the application menu. + Ви завжди можете перевірити наявність оновлень з меню застосунку. + + + + Merger + + Creating missing %1 [%2] + Створення відсутніх %1 [%2] + + + Relocating %1 [%2] + Переміщення %1 [%2] + + + Overwriting %1 [%2] + Перезапис %1 [%2] + + + older entry merged from database "%1" + об'єднано зі старішим записом зі сховища "%1" + + + Adding backup for older target %1 [%2] + Створення резервної копії старішої цілі %1 [%2] + + + Adding backup for older source %1 [%2] + Створення резервної копії старішого джерела %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Накладання старішого цільового запису на новіше джерело %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Накладання новішого джерельного запису на старішу ціль %1 [%2] + + + Synchronizing from newer source %1 [%2] + Узгодження з новішим джерелом %1 [%2] + + + Synchronizing from older source %1 [%2] + Узгодження зі старішим джерелом %1 [%2] + + + Deleting child %1 [%2] + Видалення нащадка %1 [%2] + + + Deleting orphan %1 [%2] + Видалення поодинокого об'єкту %1 [%2] + + + Changed deleted objects + Змінено видалені об'єкти + + + Adding missing icon %1 + Додавання відсутнього значка %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Створити нове сховище KeePassXC... + + + Root + Root group + Корінь + + + + NewDatabaseWizardPage + + WizardPage + Сторінка майстера налаштування + + + En&cryption Settings + Налаштування &шифрування + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища. + + + Advanced Settings + Розширене налаштування + + + Simple Settings + Просте налаштування + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Налаштування шифрування + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища. + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + Головний ключ сховища + + + A master key known only to you protects your database. + Відомий тільки Вам головний ключ захищає Ваше сховище. + + + + NewDatabaseWizardPageMetaData + + General Database Information + Загальна інформація про сховище + + + Please fill in the display name and an optional description for your new database: + Будь ласка, надайте назву для показу і, можливо, іншу необов'язкову інформацію щодо Вашого нового сховища: + OpenSSHKey Invalid key file, expecting an OpenSSH key - Хибний файл ключа. Ключ має бути у форматі OpenSSH. + Хибний файл ключа. Ключ має бути у форматі OpenSSH PEM boundary mismatch @@ -2944,7 +3747,7 @@ This version is not meant for production use. Passphrase is required to decrypt this key - Для розшифрування цього ключа потрібен пароль + Для розшифрування цього ключа потрібен вираз пароля Key derivation failed, key file corrupted? @@ -2952,7 +3755,7 @@ This version is not meant for production use. Decryption failed, wrong passphrase? - Розшифрувати не вдалося, можливо, через хибний пароль + Розшифрувати не вдалося, можливо, через хибний вираз пароля? Unexpected EOF while reading public key @@ -2980,7 +3783,7 @@ This version is not meant for production use. Unsupported key type: %1 - Непідтримуваний вид ключа: %1 + Непідтримуваний тип ключа: %1 Unknown cipher: %1 @@ -3000,125 +3803,30 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - Діалог + Enter password: + Введіть пароль: - This is required for accessing your databases from ChromeIPass or PassIFox - Це необхідно, щоб надати ChromeIPass або PassIFox доступ до вашого сховища + Confirm password: + Підтвердження пароля: - Enable KeePassHTTP server - Увімкнути сервер KeePassHTTP + Password + Пароль - General - Загальні + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>Пароль є основним засобом для убезпечення Вашого сховища.</p><p>Найкращі паролі мають бути довгими та унікальними. KeePassXC може створити такий для Вас.</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Показувати повідомлення, коли надходить запит на реєстраційні дані + Passwords do not match. + Паролі не збігаються. - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Показувати лише найкращі збіги для певного URL замість усіх записів для всієї області. - - - &Return only best matching entries - Показувати лише найкращі збіги - - - Re&quest to unlock the database if it is locked - Запитувати щодо розблокування сховища, якщо воно заблоковане - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Показані тільки записи з такою самою схемою (http://, https://, ftp://, …). - - - &Match URL schemes - Узгодити зі схемами URL - - - Sort matching entries by &username - Сортувати збіги за ім'ям користувача - - - Sort &matching entries by title - Сортувати збіги за заголовком - - - R&emove all shared encryption keys from active database - Видалити всі спільні шифрувальні ключі з активного сховища - - - Re&move all stored permissions from entries in active database - Видалити всі збережені привілеї для записів у активному сховищу - - - Password Generator - Генератор паролів - - - Advanced - Розширені - - - Always allow &access to entries - Завжди дозволяти доступ до записів - - - Always allow &updating entries - Завжди дозволяти оновлення записів - - - Only the selected database has to be connected with a client. - Тільки вибране сховище має бути під'єднаним через клієнта. - - - Searc&h in all opened databases for matching entries - Шукати збіги у всіх відкритих сховищах - - - Automatically creating or updating string fields is not supported. - Автоматичне створення та оновлення текстових полів не втілене. - - - &Return advanced string fields which start with "KPH: " - Показати розширені текстові поля, що починаються з «KPH: » - - - HTTP Port: - Шлюз HTTP: - - - Default port: 19455 - Типовий шлюз: 19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC чекатиме на сигнали через цей шлюз за адресою 127.0.0.1 - - - <b>Warning:</b> The following options can be dangerous! - <b>Попередження:</b> ці параметри можуть бути небезпечними! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP застарів і може бути видалений у майбутньому.<br>Натомість, будь ласка, використовуйте KeePassXC-Browser! Інформацію з переходу Ви можете знайти у нашому <a href="https://keepassxc.org/docs/keepassxc-browser-migration">посібнику</a>.</p> - - - Cannot bind to privileged ports - Неможливо приєднатись до привілейованих шлюзів - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - Неможливо приєднатись до привілейованих шлюзів нижче 1024! -Натомість буде використано шлюз 19455. + Generate master password + Створити головний пароль @@ -3182,27 +3890,19 @@ Using default port 19455. Passphrase - Пароль + Вираз пароля Wordlist: Перелік слів: - - Word Count: - Кількість слів - Word Separator: - Розділювач слів - - - Generate - Створити + Розділювач слів: Copy - Копіювати + Скопіювати Accept @@ -3212,10 +3912,6 @@ Using default port 19455. Close Закрити - - Apply - Застосувати - Entropy: %1 bit Ентропія: %1 біт @@ -3244,6 +3940,171 @@ Using default port 19455. Password quality Відмінна + + ExtendedASCII + Розширені ASCII + + + Switch to advanced mode + Перемкнути в розширений режим + + + Advanced + Розширені + + + Upper Case Letters A to F + Великі літери від A до F + + + A-Z + A-Z + + + Lower Case Letters A to F + Маленькі літери від A до F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + Дужки + + + {[( + {[( + + + Punctuation + Знаки пунктуації + + + .,:; + .,:; + + + Quotes + Лапки + + + " ' + " ' + + + Math + Мат. символи + + + <*+!?= + <*+!?= + + + Dashes + Риски + + + \_|-/ + \_|-/ + + + Logograms + Логограми + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + Перемкнути у простий режим + + + Simple + Простий + + + Character set to exclude from generated password + Набір символів, які треба уникати + + + Do not include: + Не залучати: + + + Add non-hex letters to "do not include" list + Не залучати літери, що не представляють шистнадцятковий код (G - Z) + + + Hex + Шістнадцяткові числа + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Виключені знаки: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + Кількість &слів: + + + Regenerate + Оновити + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + Вибрати + + + + QMessageBox + + Overwrite + Перезаписати + + + Delete + Видалити + + + Move + Перемістити + + + Empty + Спорожнити + + + Remove + Видалити + + + Skip + Пропустити + + + Disable + Вимкнути + + + Merge + Об'єднати + QObject @@ -3263,34 +4124,18 @@ Using default port 19455. Cannot decrypt message Неможливо розшифрувати повідомлення - - Timeout or cannot connect to KeePassXC - Перевищено час очікування або неможливо під'єднатися до KeePassXC - Action cancelled or denied Дію скасовано або заборонено - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Неможливо зашифрувати повідомлення або знайти відкритий ключ. Переконайтеся, що власний обмін повідомленнями у KeePassXC ввімкнено. - KeePassXC association failed, try again Прив'язка KeePassXC зазнала невдачі, спробуйте ще раз - - Key change was not successful - Зміна ключа зазнала невдачі - Encryption key is not recognized Шифрувальний ключ не розпізнано - - No saved databases found - Збережених сховищ не знайдено - Incorrect action Хибна дія @@ -3313,7 +4158,7 @@ Using default port 19455. Add a new entry to a database. - Додати новий запис до сховища + Додати новий запис до сховища. Path of the database. @@ -3349,11 +4194,11 @@ Using default port 19455. Generate a password for the entry. - Згенерувати пароль для запису. + Створити пароль для запису. Length for the generated password. - Довжина згенерованого пароля. + Довжина створюваного пароля. length @@ -3361,24 +4206,24 @@ Using default port 19455. Path of the entry to add. - Шлях до запису, що треба додати. + Шлях до запису, що підлягає додаванню. Copy an entry's password to the clipboard. - Копіювати пароль запису до буферу обміну. + Скопіювати пароль запису в кишеню. Path of the entry to clip. clip = copy to clipboard - Шлях до запису, що треба скопіювати. + Шлях до запису, що підлягає копіюванню. Timeout in seconds before clearing the clipboard. - Час очікування перед очищенням кишені. + Час очікування в секундах перед очищенням кишені. Edit an entry. - Змінити запис + Змінити запис. Title for the entry. @@ -3398,7 +4243,7 @@ Using default port 19455. Password for which to estimate the entropy. - Пароль, для якого обчислюється ентропія. + Пароль, що підлягає обчисленню ентропії. Perform advanced analysis on the password. @@ -3410,15 +4255,11 @@ Using default port 19455. Path of the database to extract. - Шлях до сховища, щоб відкрити. + Шлях до сховища для видобування. Insert password to unlock %1: - Вставте пароль для відкриття %1: - - - Failed to load key file %1 : %2 - Не вдалося завантажити файл ключа %1 : %2 + Введіть пароль для розблокування %1: WARNING: You are using a legacy key file format which may become @@ -3474,7 +4315,7 @@ Available commands: Use the same credentials for both database files. - Використовувати ті ж самі реєстраційні дані для обох сховищ. + Використовувати однакові реєстраційні дані для обох сховищ. Key file of the database to merge from. @@ -3502,13 +4343,7 @@ Available commands: error reading from device - помилка під час зчитування з пристрію - - - file empty ! - - файл порожній! - + помилка читання з пристрою malformed string @@ -3546,13 +4381,9 @@ Available commands: Created Створено - - Legacy Browser Integration - Застарілий спосіб інтеграції з браузером - Browser Integration - Інтеграція з браузером + Сполучення з переглядачем YubiKey[%1] Challenge Response - Slot %2 - %3 @@ -3572,15 +4403,11 @@ Available commands: Generate a new random diceware passphrase. - Генерувати новий пароль методом гральних кісток (diceware). + Створити новий вираз пароля методом гральних кісток (diceware). Word count for the diceware passphrase. - Кількість слів у паролі. - - - count - кількість + Кількість слів у виразі пароля. Wordlist for the diceware generator. @@ -3590,73 +4417,576 @@ Available commands: Generate a new random password. - Згенерувати новий випадковий пароль. + Створити новий випадковий пароль. - Length of the generated password. - Довжина генерованого пароля. + Invalid value for password length %1. + Неправильне значення довжини пароля %1. - Use lowercase characters in the generated password. - Використовувати малі літери в генерації пароля. + Could not create entry with path %1. + Неможливо створити запис із шляхом %1. - Use uppercase characters in the generated password. - Використовувати великі літери в генерації пароля. + Enter password for new entry: + Введіть пароль для нового запису: - Use numbers in the generated password. - Використовувати цифри в генерації пароля. + Writing the database failed %1. + Записати сховище не вдалося %1. - Use special characters in the generated password. - Використовувати спеціальні символи в генерації пароля. + Successfully added entry %1. + Успішно додано запис %1. - Use extended ASCII in the generated password. - Використовувати розширений набір ASCII в генерації пароля. + Copy the current TOTP to the clipboard. + Копіювати поточний ТОП до кишені. + + + Invalid timeout value %1. + Хибне значення ліміту часу %1. + + + Entry %1 not found. + Запис %1 не знайдено. + + + Entry with path %1 has no TOTP set up. + Запис із шляхом %1 не має налаштованого ТОП. + + + Entry's current TOTP copied to the clipboard! + Поточний ТОП запису скопійовано до кишені! + + + Entry's password copied to the clipboard! + Пароль запису скопійовано до кишені! + + + Clearing the clipboard in %1 second(s)... + Очищення кишені через %1 секунду...Очищення кишені через %1 секунди...Очищення кишені через %1 секунд...Очищення кишені через %1 секунд... + + + Clipboard cleared! + Кишеню очищено! + + + Silence password prompt and other secondary outputs. + Тихе запрошення пароля та інші вторинні виводи. + + + count + CLI parameter + кількість + + + Invalid value for password length: %1 + Хибне значення довжини пароля: %1 + + + Could not find entry with path %1. + Неможливо знайти запис із шляхом %1. + + + Not changing any field for entry %1. + Поля запису %1 залишаються без змін. + + + Enter new password for entry: + Введіть новий пароль для запису: + + + Writing the database failed: %1 + Записати сховище не вдалося: %1 + + + Successfully edited entry %1. + Успішно змінено запис %1. + + + Length %1 + Довжина: %1 + + + Entropy %1 + Ентропія: %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Багатословні додаткові біти %1 + + + Type: Bruteforce + Тип: Метод грубої сили + + + Type: Dictionary + Тип: Словник + + + Type: Dict+Leet + Тип: Словник+Leet + + + Type: User Words + Тип: Користувацькі слова + + + Type: User+Leet + Тип: Користувач+Leet + + + Type: Repeated + Тип: Повторювання + + + Type: Sequence + Тип: Послідовність + + + Type: Spatial + Тип: Просторовий + + + Type: Date + Тип: Дата + + + Type: Bruteforce(Rep) + Тип: Метод грубої сили (повт.) + + + Type: Dictionary(Rep) + Тип: Словник (повт.) + + + Type: Dict+Leet(Rep) + Тип: Словник+Leet (повт.) + + + Type: User Words(Rep) + Тип: Користувацькі слова (повт.) + + + Type: User+Leet(Rep) + Тип: Користувач+Leet (повт.) + + + Type: Repeated(Rep) + Тип: Повторювання (повт.) + + + Type: Sequence(Rep) + Тип: Послідовність (повт.) + + + Type: Spatial(Rep) + Тип: Просторовий (повт.) + + + Type: Date(Rep) + Тип: Дата (повт.) + + + Type: Unknown%1 + Тип: Невідомий%1 + + + Entropy %1 (%2) + Ентропія: %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Довжина пароля (%1) != сума довжин частин (%2) *** + + + Failed to load key file %1: %2 + Завантаження файла ключа зазнало невдачі %1: %2 + + + File %1 does not exist. + Файл %1 не існує. + + + Unable to open file %1. + Неможливо відкрити файл %1. + + + Error while reading the database: +%1 + Помилка читання сховища: +%1 + + + Error while parsing the database: +%1 + Помилка синтаксичного аналізу сховища: +%1 + + + Length of the generated password + Довжина створюваного пароля + + + Use lowercase characters + Використовувати малі літери + + + Use uppercase characters + Використовувати великі літери + + + Use numbers. + Використовувати цифри. + + + Use special characters + Використовувати спеціальні символи + + + Use extended ASCII + Використовувати розширені ASCII + + + Exclude character set + Виключити набір символів + + + chars + символи + + + Exclude similar looking characters + Виключати схожі символи + + + Include characters from every selected group + Використовувати символи з кожної групи + + + Recursively list the elements of the group. + Показувати елементи групи рекурсивно. + + + Cannot find group %1. + Неможливо знайти групу %1. + + + Error reading merge file: +%1 + Помилка читання файлу для об'єднання: +%1 + + + Unable to save database to file : %1 + Неможливо зберегти сховище до файлу : %1 + + + Unable to save database to file: %1 + Неможливо зберегти сховище до файлу: %1 + + + Successfully recycled entry %1. + Успішно видалено запис %1. + + + Successfully deleted entry %1. + Успішно вилучено запис %1. + + + Show the entry's current TOTP. + Показати поточний ТОП запису. + + + ERROR: unknown attribute %1. + ПОМИЛКА: невідомий атрибут %1. + + + No program defined for clipboard manipulation + Програма для дій з кишенею не означена + + + Unable to start program %1 + Неможливо запустити програму %1 + + + file empty + порожній файл + + + %1: (row, col) %2,%3 + %1: (рядок, позиція) %2,%3 + + + AES: 256-bit + AES: 256-біт + + + Twofish: 256-bit + Twofish: 256-біт + + + ChaCha20: 256-bit + ChaCha20: 256-біт + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – рекомендовано) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + Хибне налаштування + + + Invalid Key + TOTP + Хибний ключ + + + Message encryption failed. + Шифрування повідомлення зазнало невдачі. + + + No groups found + Жодної групи не знайдено + + + Create a new database. + Створити нове сховище. + + + File %1 already exists. + Файл %1 вже існує. + + + Loading the key file failed + Завантаження ключа зазнало невдачі + + + No key is set. Aborting database creation. + Ключ не встановлено. Створення сховища скасовано. + + + Failed to save the database: %1. + Зберегти сховище не вдалося %1. + + + Successfully created new database. + Нове сховище успішно створено. + + + Insert password to encrypt database (Press enter to leave blank): + Введіть пароль для шифрування сховища (натисніть Ввід аби залишити пустим): + + + Creating KeyFile %1 failed: %2 + Створення файла ключа %1 зазнало невдачі: %2 + + + Loading KeyFile %1 failed: %2 + Завантаження файла ключа %1 зазнало невдачі: %2 + + + Remove an entry from the database. + Видалити запис зі сховища. + + + Path of the entry to remove. + Шлях до запису, що підлягає видаленню. + + + Existing single-instance lock file is invalid. Launching new instance. + Наявний блокувальний файл режиму одного примірника є хибним. Запускаємо новий примірник. + + + The lock file could not be created. Single-instance mode disabled. + Неможливо створити блокувальний файл. Режим одного примірника вимкнено. + + + KeePassXC - cross-platform password manager + KeePassXC – багатоплатформний розпорядник паролів + + + filenames of the password databases to open (*.kdbx) + назви файлів сховищ, які треба відкрити (*.kdbx) + + + path to a custom config file + шлях до власного файла налаштувань + + + key file of the database + файл-ключ сховища + + + read password of the database from stdin + отримати пароль до сховища із stdin + + + Parent window handle + Логічний номер батьківського вікна + + + Another instance of KeePassXC is already running. + Інший примірник KeePassXC вже запущено. + + + Fatal error while testing the cryptographic functions. + Невиправна помилка в процесі тестування криптографічних функцій. + + + KeePassXC - Error + KeePassXC – помилка + + + Database password: + Пароль сховища: + + + Cannot create new group + QtIOCompressor Internal zlib error when compressing: - Внутрішня помилка zlib при стисненні: + Внутрішня помилка zlib під час стиснення: Error writing to underlying device: - Помилка запису на основний пристрій: + Помилка запису на основний пристрій: Error opening underlying device: - Помилка відкриття основного пристрою: + Помилка відкриття основного пристрою: Error reading data from underlying device: - Помилка читання з основного пристрою: + Помилка читання з основного пристрою: Internal zlib error when decompressing: - Внутрішня помилка zlib при розпакуванні: + Внутрішня помилка zlib під час розпакування: QtIOCompressor::open The gzip format not supported in this version of zlib. - Формат gzip не підтримується в цій версії zlib. + Ця версія zlib не підтримує формат gzip. Internal zlib error: - Внутрішня помилка zlib: + Внутрішня помилка zlib: + + + + SSHAgent + + Agent connection failed. + Не вдалося з'єднатися з посередником. + + + Agent protocol error. + Помилка протоколу посередника. + + + No agent running, cannot add identity. + Немає запущеного посередника, неможливо додати ключ до в'язки. + + + No agent running, cannot remove identity. + Немає запущеного посередника, неможливо видалити ключ із в'язки. + + + Agent refused this identity. Possible reasons include: + Посередник відхилив цей ключ. Ймовірні причини: + + + The key has already been added. + Цей ключ вже додано. + + + Restricted lifetime is not supported by the agent (check options). + Обмеження часу не підтримується цим посередником (перевірте налаштування). + + + A confirmation request is not supported by the agent (check options). + Запит підтвердження не підтримується цим посередником (перевірте налаштування). + + + + SearchHelpWidget + + Search Help + Довідка з пошуку + + + Search terms are as follows: [modifiers][field:]["]term["] + Пошукові терміни мають такий формат: [модифікатори][поле:]["]термін["] + + + Every search term must match (ie, logical AND) + Всі пошукові терміни повинні співпадати (тобто, логічне І) + + + Modifiers + Модифікатори + + + exclude term from results + Виключити термін з результатів + + + match term exactly + лише точні збіги з терміном + + + use regex in term + увімкнути реґулярні вирази у терміні + + + Fields + Поля + + + Term Wildcards + Байдужі символи у термінах + + + match anything + відповідає будь-якому текстові + + + match one + відповідає одному символові + + + logical OR + логічне АБО + + + Examples + Приклади SearchWidget - - Search... - Знайти... - Search Пошук @@ -3665,359 +4995,289 @@ Available commands: Clear Очистити - - Case Sensitive - Чутливість до регістру - Limit search to selected group Обмежити пошук вибраною групою - - - Service - KeePassXC: New key association request - KeePassXC: новий запит на прив'язку ключа + Search Help + Довідка з пошуку - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - Ви одержали запит на прив'язку вказаного ключа. -Якщо Ви бажаєте надати доступ до Вашого сховища KeePassXC -надайте унікальну назву та підтвердьте його. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Знайти (%1)... - KeePassXC: Overwrite existing key? - KeePassXC: перезаписати наявний ключ? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Спільний ключ шифрування з назвою «%1» вже існує. -Перезаписати його? - - - KeePassXC: Update Entry - KeePassXC: оновити запис - - - Do you want to update the information in %1 - %2? - Бажаєте оновити інформацію у %1 – %2? - - - KeePassXC: Database locked! - KeePassXC: сховище заблоковане! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Чинне сховище заблоковане! -Будь ласка, розблокуйте обране сховище або виберіть інше незаблоковане. - - - KeePassXC: Removed keys from database - KeePassXC: ключі видалено зі сховища - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Успішно видалено %n шифрувальний ключ з HTTP налаштувань KeePassX.Успішно видалено %n шифрувальних ключа з HTTP налаштувань KeePassX.Успішно видалено %n шифрувальних ключів з HTTP налаштувань KeePassX.Успішно видалено %n шифрувальних ключів з HTTP налаштувань KeePassX. - - - KeePassXC: No keys found - KeePassXC: жодного ключа не знайдено - - - No shared encryption-keys found in KeePassHttp Settings. - Не знайдено спільних ключів шифрування у налаштуваннях KeePassHttp. - - - KeePassXC: Settings not available! - KeePassXC: налаштування недоступні! - - - The active database does not contain an entry of KeePassHttp Settings. - Поточне сховище не містить налаштувань KeePassHttp. - - - Removing stored permissions... - Видалення збережених привілеїв… - - - Abort - Скасувати - - - KeePassXC: Removed permissions - KeePassXC: привілеї видалено - - - Successfully removed permissions from %n entries. - Успішно видалено привілеї для %n запису.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів. - - - KeePassXC: No entry with permissions found! - KeePassXC: запис з привілеями не знайдено! - - - The active database does not contain an entry with permissions. - Поточне сховище не містить записів з привілеями… + Case sensitive + Враховується регістр - SettingsWidget + SettingsWidgetKeeShare - Application Settings - Параметри застосунку + Active + Активний - General - Загальні + Allow export + Дозволити експорт - Security - Безпека + Allow import + Дозволити імпорт - Access error for config file %1 - Помилка доступу до файлу конфігурації %1 - - - - SettingsWidgetGeneral - - Basic Settings - Базові налаштування + Own certificate + Власний сертифікат - Start only a single instance of KeePassXC - Запускати лише один примірник KeePassXC + Fingerprint: + Відбиток: - Remember last databases - Пам’ятати останнє сховище + Certificate: + Сертифікат: - Remember last key files and security dongles - Пам'ятати останні файли ключів і механізми захисту - - - Load previous databases on startup - Завантажувати попереднє сховище під час запуску - - - Automatically save on exit - Автоматично зберігати при виході - - - Automatically save after every change - Автоматично зберігати після кожної зміни - - - Automatically reload the database when modified externally - Автоматично перезавантажувати сховище після зовнішніх змін - - - Minimize when copying to clipboard - Згортати при копіюванні до кишені - - - Minimize window at application startup - Згорнути вікно після запуску застосунку - - - Use group icon on entry creation - Використовувати для нових записів значок групи - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - Не помічати сховище зміненим після змін, що не стосуються даних (напр. розкриття груп) - - - Hide the Details view - Сховати докладний перегляд - - - Show a system tray icon - Показувати значок в треї - - - Hide window to system tray when minimized - При згортанні ховати вікно в область системних повідомлень - - - Hide window to system tray instead of app exit - Ховати вікно у системний лоток замість закриття застосунку. - - - Dark system tray icon - Темний значок у системному лотку - - - Language - Мова - - - Auto-Type - Автозаповнення - - - Use entry title to match windows for global Auto-Type - Використовувати заголовок запису для знаходження відповідного вікна у глобальному автозаповненні - - - Use entry URL to match windows for global Auto-Type - Використовувати URL запису для знаходження відповідного вікна у глобальному автозаповненні - - - Always ask before performing Auto-Type - Завжди питати перед автозаповненням - - - Global Auto-Type shortcut - Глобальні сполучення клавіш для автозаповнення - - - Auto-Type delay - Затримка автозаповнення - - - ms - Milliseconds - мс - - - Startup - Запуск - - - File Management - Керування файлами - - - Safely save database files (may be incompatible with Dropbox, etc) - Безпечно зберігати файли сховища (може бути несумісним з Dropbox та ін.) - - - Backup database file before saving - Створювати резервну копію сховища перед збереженням - - - Entry Management - Керування записами - - - General - Загальні - - - - SettingsWidgetSecurity - - Timeouts - Час очикування - - - Clear clipboard after - Очищати кишеню через - - - sec - Seconds - сек - - - Lock databases after inactivity of - Заблокувати сховище, неактивне протягом - - - Convenience - Зручність - - - Lock databases when session is locked or lid is closed - Блокувати сховища після блокування сесії або закриття кришки пристрою - - - Lock databases after minimizing the window - Заблоковувати сховища після згортання вікна - - - Don't require password repeat when it is visible - Не запитувати підтвердження пароля, якщо він не приховується - - - Show passwords in cleartext by default - Типово показувати паролі у відкритому вигляді - - - Hide passwords in the preview panel - Приховувати паролі у панелі перегляду - - - Hide entry notes by default - Типово ховати нотатки до запису - - - Privacy - Приватність - - - Use Google as fallback for downloading website icons - Використовувати Google як запасний варіант для завантаження значків сторінок - - - Re-lock previously locked database after performing Auto-Type - Заблоковувати попередньо заблоковане сховище після завершення автозаповнення - - - - SetupTotpDialog - - Setup TOTP - Встановити ТОГ + Signer + Підписувач Key: Ключ: - Default RFC 6238 token settings - Типові налаштування позначки RFC 6238 + Generate + Створити - Steam token settings - Налаштування позначки потока + Import + Імпорт - Use custom settings - Використовувати власні налаштування + Export + Експорт - Note: Change these settings only if you know what you are doing. - Увага: змінюйте ці налаштування тільки якщо Ви певно знаєте, що Ви робите. + Imported certificates + Імпортовані сертифікати - Time step: - Крок зміни часу: + Trust + Довірити - 8 digits - 8 цифр + Ask + Запитати - 6 digits - 6 цифр + Untrust + Не довіряти - Code size: - Розмір кодування: + Remove + Видалити - sec - Seconds - сек + Path + Шлях + + + Status + Стан + + + Fingerprint + Відбиток + + + Certificate + Сертифікат + + + Trusted + Перевірений + + + Untrusted + Неперевірений + + + Unknown + Невідомий + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + Файл ключа KeeShare + + + All files + Всі файли + + + Select path + Вибрати шлях + + + Exporting changed certificate + Експортування зміненого сертифікату + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Експортований сертифікат не відповідає чинному сертифікатові. Бажаєте експортувати чинний сертифікат? + + + Signer: + + + + + ShareObserver + + Import from container without signature + Імпортування з оболонки без підпису + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Ми не можемо перевірити джерело спільної оболонки, тому що вона не підписана. Ви дійсно хочете імпортувати з %1? + + + Import from container with certificate + Імпортування з оболонки, що має сертифікат + + + Not this time + Не зараз + + + Never + Ніколи + + + Always + Завжди + + + Just this time + Тільки зараз + + + Import from %1 failed (%2) + Імпортування з %1 зазнало невдачі (%2) + + + Import from %1 successful (%2) + Успішно імпортовано з %1 (%2) + + + Imported from %1 + Імпортовано з %1 + + + Signed share container are not supported - import prevented + Підтримання підписаних спільних оболонок відсутнє - імпортування відвернуте + + + File is not readable + Файл непридатний до опрацювання + + + Invalid sharing container + Хибна спільна оболонка + + + Untrusted import prevented + Неперевірене імпортування відвернуте + + + Successful signed import + Успішне підписане імпортування + + + Unexpected error + Неочікувана помилка + + + Unsigned share container are not supported - import prevented + Підтримання непідписаних спільних оболонок відсутнє – імпортування відвернуте + + + Successful unsigned import + Успішне непідписане імпортування + + + File does not exist + Файл не існує + + + Unknown share container type + Невідомий тип спільної оболонки + + + Overwriting signed share container is not supported - export prevented + Перезаписування підписаної спільної оболонки не підтримане – експортування відвернуте + + + Could not write export container (%1) + Неможливо записати експортну оболонку (%1) + + + Overwriting unsigned share container is not supported - export prevented + Перезаписування непідписаної спільної оболонки не підтримане – експортування відвернуте + + + Could not write export container + Неможливо записати експортну оболонку + + + Unexpected export error occurred + Неочікувана помилка під час експортування + + + Export to %1 failed (%2) + Експортування з %1 зазнало невдачі (%2) + + + Export to %1 successful (%2) + Успішно експортовано %1 (%2) + + + Export to %1 + Експортування %1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + @@ -4032,22 +5292,134 @@ Please unlock the selected database or choose another one which is unlocked. Copy - Копіювати + Cкопіювати - - Expires in - Втрачає чинність через - - - seconds - секунд + + Expires in <b>%n</b> second(s) + Втрачає чинність через <b>%n</b> секундуВтрачає чинність через <b>%n</b> секундиВтрачає чинність через <b>%n</b> секундВтрачає чинність через <b>%n</b> секунд - UnlockDatabaseWidget + TotpExportSettingsDialog - Unlock database - Розблокувати сховище + Copy + Cкопіювати + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + УВАГА: Таке налаштування ТОП є нестандартним і може не працювати з іншими автентифікаторами. + + + There was an error creating the QR code. + Не вдалося створити QR-код. + + + Closing in %1 seconds. + Закриється через %1 секунд. + + + + TotpSetupDialog + + Setup TOTP + Налаштування ТОП + + + Key: + Ключ: + + + Default RFC 6238 token settings + Типове налаштування позначки RFC 6238 + + + Steam token settings + Налаштування позначки потока + + + Use custom settings + Використовувати власне налаштування + + + Custom Settings + Власне налаштування + + + Time step: + Крок зміни часу: + + + sec + Seconds + сек + + + Code size: + Розмір кодування: + + + 6 digits + 6 цифр + + + 7 digits + 7 цифр + + + 8 digits + 8 цифр + + + + UpdateCheckDialog + + Checking for updates + Перевіряння наявності оновлень + + + Checking for updates... + Перевіряння наявності оновлень... + + + Close + Закрити + + + Update Error! + Помилка оновлення! + + + An error occurred in retrieving update information. + Помилка під час видобування інформації щодо оновлення. + + + Please try again later. + Будь ласка, спробуйте ще раз пізніше. + + + Software Update + Оновлення програми + + + A new version of KeePassXC is available! + Доступна нова версія KeePassXC! + + + KeePassXC %1 is now available — you have %2. + Доступна версія %1 KeePassXC — Ваша версія %2. + + + Download it at keepassxc.org + Завантажити її з keepassxc.org + + + You're up-to-date! + Маєте найновішу версію! + + + KeePassXC %1 is currently the newest version available + Наразі KeePassXC %1 є найновішую доступною версією @@ -4082,42 +5454,26 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - Видалити запис зі сховища. + Refresh + Оновити - Path of the database. - Шлях до сховища. + YubiKey Challenge-Response + YubiKey Challenge-Response - Path of the entry to remove. - Шлях до запису, який треба видалити. + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Якщо у вас є <a href="https://www.yubico.com/">YubiKey</a>, ви можете використовувати його для додаткової безпеки.</p><p>Один із слотів YubiKey має бути налаштованим як <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - KeePassXC - cross-platform password manager - KeePassXC – кросплатформний менеджер паролів + No YubiKey detected, please ensure it's plugged in. + YubiKey не знайдено, будь ласка, впевніться, що він підключений. - filenames of the password databases to open (*.kdbx) - Назви файлів сховищ, які треба відкрити (*.kdbx) - - - path to a custom config file - шлях до власного файла налаштувань - - - key file of the database - файл-ключ сховища - - - read password of the database from stdin - отримати пароль до сховища із stdin - - - Parent window handle - Логічний номер батьківського вікна + No YubiKey inserted. + YubiKey не підключений. \ No newline at end of file diff --git a/share/translations/keepassx_zh_CN.ts b/share/translations/keepassx_zh_CN.ts index 25253c508..a50530b00 100644 --- a/share/translations/keepassx_zh_CN.ts +++ b/share/translations/keepassx_zh_CN.ts @@ -15,7 +15,7 @@ KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - KeePassXC 使用第 2 版 GNU 通用公共授权协议(GPL)分发,你也可以根据需要选用第 3 版。 + KeePassXC 使用第 2 版 GNU 通用公共授权协议(GPL)分发,(你也可以根据需要)选用第 3 版。 Contributors @@ -37,36 +37,6 @@ Copy to clipboard 复制到剪贴板 - - Version %1 - - 版本 %1 - - - - Revision: %1 - 修订版本:%1 - - - Distribution: %1 - 发行版: %1 - - - Libraries: - 库: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - 操作系统:%1 -CPU 架构:%2 -内核:%3 %4 - - - Enabled extensions: - 已启用的扩展: - Project Maintainers: 项目维护者: @@ -75,42 +45,283 @@ CPU 架构:%2 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. KeePassXC 团队特别感谢 debfx 开发了最初版 KeePassX - - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP 确认访问 - - - Remember this decision - 记住此选项 - - - Allow - 允许 - - - Deny - 拒绝 - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 请求获取这些条目的密码。 -请选择是否允许。 - AgentSettingsWidget Enable SSH Agent (requires restart) - 启用 SSH 代理(需要重启) + 启用 SSH 代理(需要重启) + + + Use OpenSSH for Windows instead of Pageant + 使用OpenSSH for Windows而不是Pageant + + + + ApplicationSettingsWidget + + Application Settings + 应用程序设置 + + + General + 常规 + + + Security + 安全 + + + Access error for config file %1 + 访问配置文件出错 %1 + + + Icon only + 仅限图标 + + + Text only + 仅文本 + + + Text beside icon + 图标旁边的文字 + + + Text under icon + 图标下的文本 + + + Follow style + 跟随风格 + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + 基础设置 + + + Startup + 启动 + + + Start only a single instance of KeePassXC + 只启动一个 KeePassXC 实例 + + + Remember last databases + 记住最近的数据库 + + + Remember last key files and security dongles + 记住上次的密钥文件和安全模块 + + + Load previous databases on startup + 在启动时加载最近的数据库 + + + Minimize window at application startup + 在应用程序启动时窗口最小化 + + + File Management + 文件管理 + + + Safely save database files (may be incompatible with Dropbox, etc) + 安全保存数据库文件(可能与Dropbox等不兼容) + + + Backup database file before saving + 保存前备份数据库文件 + + + Automatically save after every change + 修改后自动保存 + + + Automatically save on exit + 离开后自动保存 + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + 不要因非数据的更改而将数据库标记为已修改 (比如增加群组) + + + Automatically reload the database when modified externally + 当外部修改时自动重新加载数据库 + + + Entry Management + 进入管理 + + + Use group icon on entry creation + 新增项目时使用群组图标 + + + Minimize when copying to clipboard + 复制到剪贴板后最小化 + + + Hide the entry preview panel + 在预览面板中隐藏条目 + + + General + 常规 + + + Hide toolbar (icons) + 隐藏工具栏(图标) + + + Minimize instead of app exit + 最小化而不是退出应用程序 + + + Show a system tray icon + 显示任务栏图标 + + + Dark system tray icon + 暗色系统托盘图标 + + + Hide window to system tray when minimized + 将窗口最小化至任务栏 + + + Language + 语言 + + + Auto-Type + 自动输入 + + + Use entry title to match windows for global Auto-Type + 使用条目标题匹配全局自动类型的窗口 + + + Use entry URL to match windows for global Auto-Type + 使用条目URL匹配全局自动类型的窗口 + + + Always ask before performing Auto-Type + 总在执行自动输入前询问 + + + Global Auto-Type shortcut + 自动输入全局快捷键 + + + Auto-Type typing delay + 自动输入时延迟 + + + ms + Milliseconds + 毫秒 + + + Auto-Type start delay + 启用输入时延迟 + + + Check for updates at application startup + 在应用程序启动时检查更新 + + + Include pre-releases when checking for updates + 检查更新时包括预发布 + + + Movable toolbar + 可移动工具栏 + + + Button style + 按钮样式 + + + + ApplicationSettingsWidgetSecurity + + Timeouts + 超时 + + + Clear clipboard after + 在多久后清除剪贴板 + + + sec + Seconds + + + + Lock databases after inactivity of + 在多久没有动作之后锁住数据库 + + + min + + + + Forget TouchID after inactivity of + 没有动作后锁定TouchID + + + Convenience + 便利性 + + + Lock databases when session is locked or lid is closed + 系统锁定或盖子合上时锁定数据库 + + + Forget TouchID when session is locked or lid is closed + 系统锁定或盖子关闭时锁定TouchID + + + Lock databases after minimizing the window + 在最小化窗口后锁定数据库 + + + Re-lock previously locked database after performing Auto-Type + 执行自动类型后重新锁定先前锁定的数据库 + + + Don't require password repeat when it is visible + 可见时不需要重复输入密码 + + + Don't hide passwords when editing them + 编辑时不要隐藏密码 + + + Don't use placeholder for empty password fields + 不要将占位符用于空密码字段 + + + Hide passwords in the entry preview panel + 在预览面板条目中隐藏密码 + + + Hide entry notes by default + 默认情况下隐藏条目备注 + + + Privacy + 隐私 + + + Use DuckDuckGo as fallback for downloading website icons + 使用 DuckDuckGo 作为下载网站图标的备选 @@ -214,6 +425,27 @@ Please select whether you want to allow access. 请选择是否允许。 + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-浏览器保存条目 + + + Ok + 确定 + + + Cancel + 取消 + + + You have multiple databases open. +Please select the correct database for saving credentials. + 您打开了多个数据库 +请选择正确的数据库以保存凭据。 + + BrowserOptionDialog @@ -255,7 +487,7 @@ Please select whether you want to allow access. Show a &notification when credentials are requested Credentials mean login data requested via browser extension - 当请求凭据时显示通知 (&N) + 当请求凭据时显示通知 Re&quest to unlock the database if it is locked @@ -280,21 +512,13 @@ Please select whether you want to allow access. Sort &matching credentials by title Credentials mean login data requested via browser extension - 按照名称排列匹配的凭据 + 根据名称排列匹配的凭据 Sort matching credentials by &username Credentials mean login data requested via browser extension 根据用户名排列匹配的凭据 - - &Disconnect all browsers - - - - Forget all remembered &permissions - 取消所有记住的权限 - Advanced 高级 @@ -307,7 +531,7 @@ Please select whether you want to allow access. Never ask before &updating credentials Credentials mean login data requested via browser extension - + 更新凭据时不再询问 Only the selected database has to be connected with a client. @@ -360,21 +584,42 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>警告:</b> 以下选项可能有危险! - - Executable Files (*.exe);;All Files (*.*) - 可执行文件(*.exe);;所有文件(*.*) - - - Executable Files (*) - 可执行文件(*) - Select custom proxy location 选择自定义代理路径 - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - 非常抱歉,KeePassXC-Browser 当前不支持 Snap 发行包 + &Tor Browser + &Tor浏览器 + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + <b>警告</b>,找不到keepassxc 代理应用程序!<br />请检查KeePassXC安装目录或确认高级选项中的自定义路径。<br />如果没有代理应用程序,浏览器集成将无法工作.<br /> 可执行路径: + + + Executable Files + 可执行文件 + + + All Files + 所有文件 + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + 不要请求 http 和基本身份验证的许可 + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -399,7 +644,7 @@ give it a unique name to identify and accept it. KeePassXC: Overwrite existing key? - KeePassXC︰ 覆盖现有的密钥吗? + KeePassXC:覆盖现有的密钥吗? A shared encryption key with the name "%1" already exists. @@ -409,159 +654,61 @@ Do you want to overwrite it? KeePassXC: Update Entry - KeePassXC︰ 更新条目 + KeePassXC:更新条目 Do you want to update the information in %1 - %2? 你想更新 %1-%2 中的信息吗? - - KeePassXC: Database locked! - KeePassXC︰ 数据库被锁定 ! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 激活的数据库被锁定 ! -请解锁选定的数据库或选择另一已解锁的数据库。 - - - KeePassXC: Settings not available! - KeePassXC︰ 设置不可用 ! - - - The active database does not contain a settings entry. - 当前数据库中不包含设置的条目。 - - - KeePassXC: No keys found - KeePassXC︰ 未找到键 - - - No shared encryption keys found in KeePassXC Settings. - - - - KeePassXC: Removed keys from database - KeePassXC︰ 从数据库中删除键 - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - - Abort 中断 - KeePassXC: Removed permissions - KeePassXC︰ 已删除的权限 + Converting attributes to custom data… + 将属性转换为自定义数据... + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC:转换成KeePassHTTP属性 + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + 成功转换了 %1 个条目的属性(s) +将 %2 个密钥移动到自定义数据。 - Successfully removed permissions from %n entry(s). - + Successfully moved %n keys to custom data. + 已成功将 %n 个密钥移动到自定义数据。 - KeePassXC: No entry with permissions found! - KeePassXC: 未找到权限的条目! + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC:找不到KeePassHTTP属性的条目! - The active database does not contain an entry with permissions. - 当前数据库中不包含具有权限的条目。 - - - - ChangeMasterKeyWidget - - Password - 密码 + The active database does not contain an entry with KeePassHTTP attributes. + 当前数据库中没有KeePassHTTP属性的条目。 - Enter password: - 输入密码: + KeePassXC: Legacy browser integration settings detected + KeePassXC:检测到旧版浏览器集成设置 - Repeat password: - 重复密码: + KeePassXC: Create a new group + - &Key file - 密钥文件(K) + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - 浏览 - - - Create - 创建 - - - Cha&llenge Response - 挑战应答(L) - - - Refresh - 刷新 - - - Key files - 密钥文件 - - - All files - 所有文件 - - - Create Key File... - 创建密钥文件... - - - Unable to create Key File : - 无法创建密钥文件: - - - Select a key file - 选择密钥文件 - - - Empty password - 空密码 - - - Do you really want to use an empty string as password? - 你确定要使用空密码? - - - Different passwords supplied. - 密码不一致 - - - Failed to set %1 as the Key file: -%2 - 无法设置 %1 为秘钥文件: -%2 - - - Legacy key file format - 旧式密钥文件格式 - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - 您使用的是旧式密钥文件格式,将来可能会不再被支持。 - -请考虑生成一个新的密钥文件。 - - - Changing master key failed: no YubiKey inserted. - 修改主密码失败:YubiKey 未插入。 + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -641,14 +788,6 @@ Please consider generating a new key file. Not present in CSV file 未出现在 CSV 文件中 - - Empty fieldname - 空字段名 - - - column - - Imported from CSV file 导入 CSV 文件 @@ -657,49 +796,90 @@ Please consider generating a new key file. Original data: 原始数据: - - Error(s) detected in CSV file ! - 在 CSV 文件中检测到错误! - - - more messages skipped] - 更多的信息被跳过 - Error 错误 + + Empty fieldname %1 + 空字段名 %1 + + + column %1 + 列 %1 + + + Error(s) detected in CSV file! + 在 CSV 文件中检测到错误(s)! + + + [%n more message(s) skipped] + [%n 信息(s) 被跳过] + CSV import: writer has errors: - +%1 CSV 导入: 编辑器错误: - - - - - CsvImportWizard - - Error - 错误 - - - Unable to calculate master key - 无法计算主密码 +%1 CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) - + %n 列 + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n 字节(s) + + + %n row(s) + %n 行(s) + + + + Database + + Root + Root group name + 根群组 + + + File %1 does not exist. + 文件 %1 不存在。 + + + Unable to open file %1. + 无法打开文件 %1。 + + + Error while reading the database: %1 + 读取数据库时出错: %1 + + + Could not save, database has no file name. + 无法保存,数据库没有文件名。 + + + File cannot be written as it is opened in read-only mode. + 文件无法写入,因为它以只读模式打开。 + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + 解锁数据库 - KeePassXC @@ -728,14 +908,6 @@ Please consider generating a new key file. Challenge Response: 挑战应答: - - Unable to open the database. - 无法打开数据库 - - - Can't open key file - 无法打开密钥文件 - Legacy key file format 旧式密钥文件格式 @@ -765,101 +937,174 @@ Please consider generating a new key file. Select key file 选择密钥文件 - - - DatabaseRepairWidget - Repair database - 修复数据库 + TouchID for quick unlock + TouchID 快速解锁 - Error - 错误 + Unable to open the database: +%1 + 无法打开数据库: +%1 - Can't open key file - 无法打开密钥文件 - - - Unable to open the database. - 无法打开数据库 - - - Database opened fine. Nothing to do. - 数据库打开正常。没什么可做的。 - - - Success - 成功 - - - The database has been successfully repaired -You can now save it. - 数据库已经修复成功 -现在可以保存数据库 - - - Unable to repair the database. - 无法修复数据库 + Can't open key file: +%1 + 无法打开密钥文件: +%1 - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + 密码 + + + + DatabaseSettingsDialog + + Advanced Settings + 高级设置 + General 常规 - Encryption - 加密 + Security + 安全 - Number of rounds too high - Key transformation rounds - + Master Key + 主密钥 - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! - + Encryption Settings + 加密设置 - Understood, keep number - + Browser Integration + 浏览器配合 + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-浏览器设置 - Cancel - 取消 + &Disconnect all browsers + 断开与所有浏览器的关联 - Number of rounds too low - Key transformation rounds - + Forg&et all site-specific settings on entries + 取消条目上所有特定于站点的设置 - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! - + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + 将KeePassHTTP属性移动到KeePassXC-Browser和自定义数据 - KDF unchanged - + Stored keys + 存储密钥 - Failed to transform key with new KDF parameters; KDF unchanged. - + Remove + 移除 + + + Delete the selected key? + 删除所选密钥? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + 你确定要删除所选的密钥吗? +这可能会影响与浏览器插件的连接。 + + + Key + 密钥 + + + Value + + + + Enable Browser Integration to access these settings. + 启用浏览器集成以访问这些设置。 + + + Disconnect all browsers + 断开与所有浏览器的关联 + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + 你确定要断开与所有浏览器的关联吗? +这可能会影响与浏览器插件的连接。 + + + KeePassXC: No keys found + KeePassXC:未找到键 + + + No shared encryption keys found in KeePassXC settings. + 在KeePassXC设置中找不到共享加密密钥。 + + + KeePassXC: Removed keys from database + KeePassXC:从数据库中删除键 - MiB - Abbreviation for Mebibytes (KDF settings) - + Successfully removed %n encryption key(s) from KeePassXC settings. + 已成功从KeePassXC设置中删除了 %n 个加密密钥(s)。 + + + Forget all site-specific settings on entries + 取消条目上所有特定于站点的设置 + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + 您确定要取消每个条目上的所有特定于站点的设置吗? +访问条目的权限将被撤销。 + + + Removing stored permissions… + 正在删除存储的权限... + + + Abort + 中断 + + + KeePassXC: Removed permissions + KeePassXC:已删除的权限 - thread(s) - Threads for parallel execution (KDF settings) - + Successfully removed permissions from %n entry(s). + 已成功从 %n 个条目(s)中删除权限。 + + + KeePassXC: No entry with permissions found! + KeePassXC: 未找到权限的条目! + + + The active database does not contain an entry with permissions. + 当前数据库中不包含具有权限的条目。 + + + Move KeePassHTTP attributes to custom data + 将KeePassHTTP属性移动到自定义数据 + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + 您确定要将所有旧版浏览器集成数据移至最新标准吗? +这对于保持与浏览器插件的兼容性是必要的。 @@ -886,7 +1131,7 @@ If you keep this number, your database may be too easy to crack! Benchmark 1-second delay - + 基准1秒延迟 Memory Usage: @@ -894,7 +1139,114 @@ If you keep this number, your database may be too easy to crack! Parallelism: - + 平行运算: + + + Decryption Time: + 解密时间: + + + ?? s + ?? s + + + Change + 更改 + + + 100 ms + 100 毫秒 + + + 5 s + 5 s + + + Higher values offer more protection, but opening the database will take longer. + 较高的值可提供更多保护,但打开数据库需要更长时间。 + + + Database format: + 数据库格式: + + + This is only important if you need to use your database with other programs. + 只有在需要将数据库与其他程序一起使用时,这才是重要的。 + + + KDBX 4.0 (recommended) + KDBX 4.0(推荐) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + 不变 + + + Number of rounds too high + Key transformation rounds + 回合数太高 + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + 你正在对 Argon2 使用相当高的密钥转换回合数。 + +如果仍执意使用此数量,你的数据库可能需要数小时或数天(甚至更长时间)才能打开! + + + Understood, keep number + 了解,仍使用此数量 + + + Cancel + 取消 + + + Number of rounds too low + Key transformation rounds + 回合数太低 + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + 你正对AES-KDF使用过低的密钥转换回合数。 + +如果仍执意使用此数量,你的数据库可能会变得相当简单即能破解! + + + KDF unchanged + KDF不变 + + + Failed to transform key with new KDF parameters; KDF unchanged. + 无法使用新的KDF参数转换密钥; KDF不变。 + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB + + + thread(s) + Threads for parallel execution (KDF settings) + 线程(s) + + + %1 ms + milliseconds + %1 毫秒 + + + %1 s + seconds + %1 秒 @@ -929,7 +1281,7 @@ If you keep this number, your database may be too easy to crack! MiB - MiB + MiB Use recycle bin @@ -945,12 +1297,85 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - 根群组 + Sharing + 共享 + + Breadcrumb + 痕迹 + + + Type + 类型 + + + Path + 路径 + + + Last Signer + 最后的签名者 + + + Certificates + 证书 + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + 添加额外保护...... + + + No encryption key added + 没有添加加密密钥 + + + You must add at least one encryption key to secure your database! + 您必须添加至少一个加密密钥,才能保护您的数据库! + + + No password set + 没有设置密码 + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + 警告! 您尚未设置密码。强烈建议不要使用没有密码的数据库! + +您确定要在没有密码的情况下继续吗? + + + Unknown error + 未知错误 + + + Failed to change master key + 无法更改主密钥 + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + 数据库名称: + + + Description: + 描述: + + + + DatabaseTabWidget KeePass 2 Database KeePass 2 数据库 @@ -963,30 +1388,10 @@ If you keep this number, your database may be too easy to crack! Open database 打开数据库 - - File not found! - 找不到文件! - - - Unable to open the database. - 无法打开数据库 - - - File opened in read only mode. - 文件在只读模式下打开。 - - - Open CSV file - 打开 CSV 文件 - CSV file CSV 文件 - - All files (*) - 所有文件 (*) - Merge database 合并数据库 @@ -999,38 +1404,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 数据库 - - Close? - 关闭? - - - "%1" is in edit mode. -Discard changes and close anyway? - 正在编辑 "%1" 。 -仍然要放弃修改并且关闭吗? - - - Save changes? - 保存修改? - - - "%1" was modified. -Save changes? - "%1" 已被修改。 -要保存吗? - - - Writing the database failed. - 数据库写入失败 - - - Passwords - 密码 - - - Save database as - 数据库另存为 - Export database to CSV file 导出数据库为 CSV 文件 @@ -1040,39 +1413,41 @@ Save changes? 写入 CSV 文件失败 - New database + Database creation error + 数据库创建错误 + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + 创建的数据库没有密钥或KDF,拒绝保存 +这是一个错误,请向开发人员报告。 + + + The database file does not exist or is not accessible. + 数据库文件不存在或无法访问。 + + + Select CSV file + 选择CSV文件 + + + New Database 新建数据库 - locked - 已锁定 + %1 [New Database] + Database tab name modifier + %1 [新建数据库] - Lock database - 锁定数据库 + %1 [Locked] + Database tab name modifier + %1 [锁定] - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - 不能锁定正在编辑的数据库。 -点击“取消”继续编辑, 点击“确定”丢弃更改。 - - - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - 数据库已经更改。 -你想在锁定它之前保存修改吗? -否则修改将会丢失。 - - - Disable safe saves? - - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - + %1 [Read-only] + Database tab name modifier + %1 [只读] @@ -1081,38 +1456,14 @@ Disable safe saves and try again? Searching... 搜索中... - - Change master key - 更改主密码 - - - Delete entry? - 删除项目? - Do you really want to delete the entry "%1" for good? 你确定永久删除 "%1" 项目吗? - - Delete entries? - 删除项目? - - - Do you really want to delete %1 entries for good? - 你确定永远删除 "%1" 项目吗? - - - Move entry to recycle bin? - 移动项目到回收站? - Do you really want to move entry "%1" to the recycle bin? 是否删除 "%1" 项目到回收站? - - Move entries to recycle bin? - 移动项目到垃圾桶? - Do you really want to move %n entry(s) to the recycle bin? 你确定要将 %n 个项目移到垃圾桶? @@ -1129,18 +1480,10 @@ Disable safe saves and try again? Remember my choice 记住我的选择 - - Delete group? - 删除群组? - Do you really want to delete the group "%1" for good? 你确定永久删除 "%1" 群组吗? - - Unable to calculate master key - 无法计算主密码 - No current database. 没有当前的数据库。 @@ -1172,11 +1515,8 @@ Disable safe saves and try again? The database file has changed and you have unsaved changes. Do you want to merge your changes? - - - - Could not open the new database file while attempting to autoreload this database. - 在尝试自动载入此数据库时不能打开新的数据库文件。 + 数据库文件改变了,你有未保存的更改。 +你想合并你的修改吗? Empty recycle bin? @@ -1186,88 +1526,111 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? 你确定要永久删除回收站中的所有内容? - - - DetailsWidget - - Generate TOTP Token - 生成 TOTP 令牌 + + Do you really want to delete %n entry(s) for good? + 你真的想删除 %n 个条目(s)吗? + + + Delete entry(s)? + 删除项目(s)? + + + Move entry(s) to recycle bin? + 移动项目(s)到回收站? - Close - 关闭 + File opened in read only mode. + 文件在只读模式下打开。 - General - 常规 + Lock Database? + 锁定数据库? - Password + You are editing an entry. Discard changes and lock anyway? + 您正在编辑一个项目。放弃更改和锁定? + + + "%1" was modified. +Save changes? + "%1" 已被修改。 +要保存吗? + + + Database was modified. +Save changes? + 数据库已被修改 +保存更改? + + + Save changes? + 保存修改? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + 尝试自动重载时无法打开新的数据库文件 +错误:%1 + + + Disable safe saves? + 禁用安全保存? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC未能多次保存数据库。 这可能是由保存文件锁定的文件同步服务引起的。 +禁用安全保存并重试? + + + Writing the database failed. +%1 + 写入数据库失败 +%1 + + + Passwords 密码 - URL - 网址 + Save database as + 数据库另存为 - Expiration - 过期时间 + KeePass 2 Database + KeePass 2 数据库 - Username - 用户名 + Replace references to entry? + 替换对条目的引用? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + 条目"%1"具有 %2 引用。是否要用值覆盖引用、跳过此项或是否无论如何删除引用? - Autotype - 自动填充 + Delete group + 删除群组 - Searching - 搜索 + Move group to recycle bin? + 是否将组移动到回收站? - Attributes - 添加属性 + Do you really want to move the group "%1" to the recycle bin? + 是否确实要将组"%1"移动到回收站? - Attachments - 附件 + Successfully merged the database files. + 已成功合并数据库文件。 - Notes - 备注 + Database was not modified by merge operation. + 合并操作未修改数据库。 - Window - 窗口 - - - Sequence - 顺序 - - - Search - 搜索 - - - Clear - 清除 - - - Never - 从不 - - - [PROTECTED] - [受保护的内容] - - - Disabled - 禁用 - - - Enabled - 启用 + Shared group... + @@ -1302,7 +1665,7 @@ Do you want to merge your changes? n/a - + (encrypted) @@ -1318,7 +1681,7 @@ Do you want to merge your changes? Failed to open private key - + 无法打开私钥 Entry history @@ -1340,22 +1703,10 @@ Do you want to merge your changes? New attribute 添加属性 - - Confirm Remove - 确认删除 - Are you sure you want to remove this attribute? 你确定要移除这个属性? - - [PROTECTED] - [受保护的内容] - - - Press reveal to view or edit - - Tomorrow 明天 @@ -1366,11 +1717,7 @@ Do you want to merge your changes? %n month(s) - %n 个月 - - - 1 year - 1 年 + %n 月 Apply generated password? @@ -1384,6 +1731,26 @@ Do you want to merge your changes? Entry updated successfully. 项目已成功更新。 + + Entry has unsaved changes + 项目有未保存的更改 + + + New attribute %1 + 添加属性 %1 + + + [PROTECTED] Press reveal to view or edit + [受保护的内容] 点击“揭示”来查看或编辑 + + + %n year(s) + %n 年(s) + + + Confirm Removal + 确认删除 + EditEntryWidgetAdvanced @@ -1456,7 +1823,7 @@ Do you want to merge your changes? Use a specific sequence for this association: - + 使用特定序列进行此关联: @@ -1506,7 +1873,7 @@ Do you want to merge your changes? Toggle the checkbox to reveal the notes section. - + 切换复选框以显示备注部分。 Username: @@ -1521,15 +1888,15 @@ Do you want to merge your changes? EditEntryWidgetSSHAgent Form - + 表格 Remove key from agent after - + 稍后从代理中删除密钥 seconds - + Fingerprint @@ -1537,19 +1904,19 @@ Do you want to merge your changes? Remove key from agent when database is closed/locked - + 数据库关闭/锁定时,从代理中删除密钥 Public key - + 公钥 Add key to agent when database is opened/unlocked - + 在打开/解锁数据库时向代理添加密钥 Comment - + 注解 Decrypt @@ -1557,7 +1924,7 @@ Do you want to merge your changes? n/a - + Copy to clipboard @@ -1565,11 +1932,11 @@ Do you want to merge your changes? Private key - + 私钥 External file - + 外部文件 Browse... @@ -1578,19 +1945,19 @@ Do you want to merge your changes? Attachment - + 附件 Add to agent - + 添加到代理 Remove from agent - + 从代理中删除 Require user confirmation when this key is used - + 使用此密钥时需要用户确认 @@ -1628,6 +1995,97 @@ Do you want to merge your changes? 继承自父群组(%1) + + EditGroupWidgetKeeShare + + Form + 表格 + + + Type: + 类型: + + + Path: + 路径: + + + ... + ... + + + Password: + 密码: + + + Inactive + 无效 + + + Import from path + 从路径导入 + + + Export to path + 导出到路径 + + + Synchronize with path + 与路径同步 + + + Your KeePassXC version does not support sharing your container type. Please use %1. + 您的KeePassXC版本不支持共享您的容器类型。请使用%1。 + + + Database sharing is disabled + 数据库共享已禁用 + + + Database export is disabled + 数据库导出被禁用 + + + Database import is disabled + 数据库导入被禁用 + + + KeeShare unsigned container + keshare 未签名的容器 + + + KeeShare signed container + 签名容器 + + + Select import source + 选择导入源 + + + Select export target + 选择导出目标 + + + Select import/export file + 选择导入文件 + + + Clear + 清除 + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1685,10 +2143,6 @@ Do you want to merge your changes? Unable to fetch favicon. 无法获取网站图标 - - Hint: You can enable Google as a fallback under Tools>Settings>Security - 提示:你可以在 工具 > 设置 > 安全 中启用 Google 作为备选 - Images 图片 @@ -1697,14 +2151,6 @@ Do you want to merge your changes? All files 所有文件 - - Select Image - 选择图片 - - - Can't read icon - 无法读取图标 - Custom icon already exists 已经存在自定义图标 @@ -1714,8 +2160,36 @@ Do you want to merge your changes? 确认删除 - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - 这个图标被 %1 个条目使用,将会被默认图标替换。你确定要删除它吗? + Custom icon successfully downloaded + 自定义图标已成功下载 + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + 提示:您可以在工具>设置>安全性下启用DuckDuckGo作为后备 + + + Select Image(s) + 选择图像 + + + Successfully loaded %1 of %n icon(s) + 已成功加载 %1 / %n 图标 + + + No icons were loaded + 没有加载图标 + + + %n icon(s) already exist in the database + %n 图标已存在于数据库中 + + + The following icon(s) failed: + 以下图标失败: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + 此图标由 %n 个条目使用,并将替换为默认图标。 你确定你要删除吗? @@ -1738,7 +2212,7 @@ Do you want to merge your changes? Plugin Data - + 插件数据 Remove @@ -1746,28 +2220,28 @@ Do you want to merge your changes? Delete plugin data? - + 是否删除插件数据? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - + 你真的想删除所选的插件数据吗? +这可能会导致受影响的插件出现问题。 Key - + 密钥 Value - + Entry - - Clone - Suffix added to cloned entries - - 副本 + %1 - Clone + %1 - 复制 @@ -1778,14 +2252,14 @@ This may cause the affected plugins to malfunction. Size - + 大小 EntryAttachmentsWidget Form - + 表格 Add @@ -1805,42 +2279,41 @@ This may cause the affected plugins to malfunction. Select files - + 选择文件 Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - 确认删除 + 你确定要删除%n个附件吗? Save attachments - + 保存附件 Unable to create directory: %1 - + 无法创建目录: +%1 Are you sure you want to overwrite the existing file "%1" with the attachment? - + 您确定要用附件覆盖现有文件“%1”吗? Confirm overwrite - + 确认覆盖 Unable to save attachments: %1 - + 无法保存附件: +%1 Unable to open attachment: %1 - + 无法打开附件: +%1 Unable to open attachments: @@ -1848,9 +2321,14 @@ This may cause the affected plugins to malfunction. 无法打开附件:%1 - Unable to open files: + Confirm remove + 确认删除 + + + Unable to open file(s): %1 - 无法打开文件:%1 + 无法打开文件: +%1 @@ -1920,50 +2398,150 @@ This may cause the affected plugins to malfunction. Created - + 创建 Modified - + 已修改 Accessed - + 已读取 Attachments 附件 + + Yes + + + + TOTP + TOTP 密码 + + + + EntryPreviewWidget + + Generate TOTP Token + 生成 TOTP 令牌 + + + Close + 关闭 + + + General + 常规 + + + Username + 用户名 + + + Password + 密码 + + + Expiration + 过期时间 + + + URL + 网址 + + + Attributes + 添加属性 + + + Attachments + 附件 + + + Notes + 备注 + + + Autotype + 自动填充 + + + Window + 窗口 + + + Sequence + 顺序 + + + Searching + 搜索 + + + Search + 搜索 + + + Clear + 清除 + + + Never + 从不 + + + [PROTECTED] + [受保护的内容] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + 启用 + + + Disabled + 禁用 + + + Share + 共享 + EntryView Customize View - + 自定义视图 Hide Usernames - + 隐藏用户名 Hide Passwords - + 隐藏密码 Fit to window - + 适应窗口 Fit to contents - + 适合内容 Reset to defaults - + 重置为默认值 Attachments (icon) - + 附件(图标) @@ -1972,71 +2550,21 @@ This may cause the affected plugins to malfunction. Recycle Bin 回收站 + + [empty] + group has no children + [空] + HostInstaller KeePassXC: Cannot save file! - + KeePassXC:无法保存文件! Cannot save the native messaging script file. - - - - - HttpPasswordGeneratorWidget - - Length: - 长度: - - - Character Types - 字符类型 - - - Upper Case Letters - 大写字母 - - - A-Z - A-Z - - - Lower Case Letters - 小写字母 - - - a-z - a-z - - - Numbers - 数字 - - - 0-9 - 0-9 - - - Special Characters - 特殊字符 - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - 排除相似的字符 - - - Ensure that the password contains characters from every group - 确保密码包含每一种字符 - - - Extended ASCII - 扩展 ASCII + 无法保存本机消息传递脚本文件。 @@ -2064,6 +2592,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. 密钥错误或数据库损坏 + + missing database headers + 缺少数据库头 + + + Header doesn't match hash + 标题与哈希不匹配 + + + Invalid header id size + 无效的标头ID大小 + + + Invalid header field length + 无效的标头字段长度 + + + Invalid header data length + 无效的标头数据长度 + Kdbx3Writer @@ -2080,7 +2628,7 @@ This may cause the affected plugins to malfunction. Kdbx4Reader missing database headers - + 缺少数据库头 Unable to calculate master key @@ -2088,127 +2636,127 @@ This may cause the affected plugins to malfunction. Invalid header checksum size - + 无效的报头校验大小 Header SHA256 mismatch - + SHA256标头不匹配 Wrong key or database file is corrupt. (HMAC mismatch) - + 错误的密钥或数据库文件已损坏。 (HMAC不匹配) Unknown cipher - + 未知的加密 Invalid header id size - + 无效的标头ID大小 Invalid header field length - + 无效的标头字段长度 Invalid header data length - + 无效的标头数据长度 Failed to open buffer for KDF parameters in header - + 无法打开在标头中KDF参数的缓冲区 Unsupported key derivation function (KDF) or invalid parameters - + 不支持的密钥派生函数(KDF)或无效参数 Legacy header fields found in KDBX4 file. - + 在KDBX4文件中找到旧的标头字段。 Invalid inner header id size - + 无效的内部标头ID大小 Invalid inner header field length - + 无效的内部标头字段长度 Invalid inner header binary size - + 无效的内部标题二进制文件 Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - + 不支持的KeePass变体映射版本。 Invalid variant map entry name length Translation: variant map = data structure for storing meta data - + 无效的变量映射条目名称长度 Invalid variant map entry name data Translation: variant map = data structure for storing meta data - + 无效的变量映射条目名称数据 Invalid variant map entry value length Translation: variant map = data structure for storing meta data - + 无效的变量映射条目值长度 Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - + 无效的变量映射条目值数据 Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - + 无效的变量映射Bool条目值 Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - + 无效的变量映射Int32条目值长度 Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - + 无效的变量映射 UInt32条目值长度 Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - + 无效的变量映射Int64条目值长度 Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - + 无效的变量映射UInt64条目值长度 Invalid variant map entry type Translation: variant map = data structure for storing meta data - + 无效的变量映射条目类型 Invalid variant map field type size Translation: variant map = data structure for storing meta data - + 无效的变量映射字段类型大小 Kdbx4Writer Invalid symmetric cipher algorithm. - + 无效的对称密码算法。 Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - + 无效的对称密码IV大小。 Unable to calculate master key @@ -2217,50 +2765,46 @@ This may cause the affected plugins to malfunction. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - + 无法序列化KDF参数变量映射 KdbxReader - - Invalid cipher uuid length - - Unsupported cipher - + 不支持的加密 Invalid compression flags length - + 无效的压缩标志长度 Unsupported compression algorithm - + 不支持的压缩算法 Invalid master seed size - + 无效的主种子大小 Invalid transform seed size - + 无效的转换种子大小 Invalid transform rounds size - + 无效的转换回合数 Invalid start bytes size - + 无效的起始字节大小 Invalid random stream id size - + 无效的随机流 ID 大小 Invalid inner random stream cipher - + 无效的内部随机流密码 Not a KeePass database. @@ -2277,38 +2821,50 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. - + 不支持的KeePass 2数据库版本。 + + + Invalid cipher uuid length: %1 (length=%2) + 无效密码uuid长度: %1(长度=%2) + + + Unable to parse UUID: %1 + 无法解析 UUID: %1 + + + Failed to read database file. + 无法读取数据库文件。 KdbxXmlReader XML parsing failure: %1 - + XML 解析失败:%1 No root group - + 无权限群组 Missing icon uuid or data - + 缺少图标 uuid 或数据 Missing custom data key or value - + 缺少自定义数据键或值 Multiple group elements - + 多个组元素 Null group uuid - + 空的组 UUID Invalid group icon number - + 无效的组图标编号 Invalid EnableAutoType value @@ -2316,43 +2872,39 @@ This is a one-way migration. You won't be able to open the imported databas Invalid EnableSearching value - + 无效的EnableSearching值 No group uuid found - + 找不到群组 uuid Null DeleteObject uuid - + 空的 DeleteObject uuid Missing DeletedObject uuid or time - + 缺少 DeletedObject uuid 或时间 Null entry uuid - + 空的项目 uuid Invalid entry icon number - + 无效的条目图标编号 History element in history entry - + 历史条目中的历史元素 No entry uuid found - + 找不到项目 uuid History element with different uuid - - - - Unable to decrypt entry string - + 具有不同 uuid 的历史元素 Duplicate custom attribute found @@ -2360,48 +2912,56 @@ This is a one-way migration. You won't be able to open the imported databas Entry string key or value missing - + 输入字符串键或值丢失 Duplicate attachment found - + 找到重复的附件 Entry binary key or value missing - + 缺少输入二进制密钥或值 Auto-type association window or sequence missing - + 缺少自动键入关联窗口或序列 Invalid bool value - + 无效的布尔值 Invalid date time value - + 无效的日期时间值 Invalid color value - + 无效的颜色值 Invalid color rgb part - + 无效的颜色rgb部分 Invalid number value - + 无效的数值 Invalid uuid value - + 无效的 uuid 值 Unable to decompress binary Translator meant is a binary data inside an entry - + 无法解压缩二进制文件 + + + XML error: +%1 +Line %2, column %3 + XML错误: +%1 +行 %2,列 %3 @@ -2436,31 +2996,31 @@ This is a one-way migration. You won't be able to open the imported databas Unable to read encryption IV IV = Initialization Vector for symmetric cipher - + 无法读取加密IV Invalid number of groups - + 无效的群组数 Invalid number of entries - + 无效的条目数 Invalid content hash size - + 无效的内容散列大小 Invalid transform seed size - + 无效的转换种子大小 Invalid number of transform rounds - + 无效的转换回合数 Unable to construct group tree - + 无法构成群组树 Root @@ -2476,145 +3036,236 @@ This is a one-way migration. You won't be able to open the imported databas Key transformation failed - + 密钥转换失败 Invalid group field type number - + 无效的组字段类型编号 Invalid group field size - + 无效组字段大小 Read group field data doesn't match size - + 读取组字段数据与大小不匹配 Incorrect group id field size - + 组ID字段大小不正确 Incorrect group creation time field size - + 组创建时间字段大小不正确 Incorrect group modification time field size - + 组修改时间字段大小不正确 Incorrect group access time field size - + 组访问时间字段大小不正确 Incorrect group expiry time field size - + 组到期时间字段大小不正确 Incorrect group icon field size - + 组图标字段大小不正确 Incorrect group level field size - + 组级别字段大小不正确 Invalid group field type - + 无效的组字段类型 Missing group id or level - + 缺少组ID或级别 Missing entry field type number - + 缺少输入字段类型编号 Invalid entry field size - + 无效的输入字段大小 Read entry field data doesn't match size - + 读取输入字段数据与大小不匹配 Invalid entry uuid field size - + 无效的条目 uuid 字段大小 Invalid entry group id field size - + 无效的条目组ID字段大小 Invalid entry icon field size - + 无效的输入图标字段大小 Invalid entry creation time field size - + 无效的条目创建时间字段大小 Invalid entry modification time field size - + 无效的条目修改时间字段大小 Invalid entry expiry time field size - + 无效的条目到期时间字段大小 Invalid entry field type + 无效的输入字段类型 + + + unable to seek to content position + 无法寻求满足的内容 + + + + KeeShare + + Disabled share + 禁用共享 + + + Import from + 从导入 + + + Export to + 导出到 + + + Synchronize with + 与同步 + + + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 - KeePass2 + KeyComponentWidget - AES: 256-bit - AES:256位 + Key Component + 密钥组件 - Twofish: 256-bit - Twofish:256位 + Key Component Description + 密钥组件描述 - ChaCha20: 256-bit - ChaCha20:256位 + Cancel + 取消 - AES-KDF (KDBX 4) - AES-KDF(KDBX 4) + Key Component set, click to change or remove + 密钥组件集,单击以更改或删除 - AES-KDF (KDBX 3.1) - AES-KDF(KDBX 3.1) + Add %1 + Add a key component + 添加 %1 - Argon2 (KDBX 4 – recommended) - Argon2(推荐 KDBX 4) + Change %1 + Change a key component + 更改 %1 + + + Remove %1 + Remove a key component + 删除 %1 + + + %1 set, click to change or remove + Change or remove a key component + %1 设置,单击以更改或删除 - Main + KeyFileEditWidget - Existing single-instance lock file is invalid. Launching new instance. - 单实例锁无效,正在重启实例 + Browse + 浏览 - The lock file could not be created. Single-instance mode disabled. - 无法创建锁定文件。 单实例模式已禁用。 + Generate + 生成 - Another instance of KeePassXC is already running. - 另一个 KeePassXC 实例已在运行 + Key File + 密钥文件 - Fatal error while testing the cryptographic functions. - 在测试加密函数时发生重大错误。 + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + <p>您可以添加包含随机字节的密钥文件以获得额外的安全性。</p><p>您必须保密,不要丢失它,否则您将被锁定!</p> - KeePassXC - Error - KeePassXC - 错误 + Legacy key file format + 旧式密钥文件格式 + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + 您正在使用可能成为的旧密钥文件格式 +将来不再支持。 + +请转到主密钥设置并生成新密钥文件。 + + + Error loading the key file '%1' +Message: %2 + 加载密钥文件 '%1' 时出错 +消息: %2 + + + Key files + 密钥文件 + + + All files + 所有文件 + + + Create Key File... + 创建密钥文件... + + + Error creating key file + 创建密钥文件时出错 + + + Unable to create key file: %1 + 无法创建密钥文件: %1 + + + Select a key file + 选择密钥文件 @@ -2627,10 +3278,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases 最近的数据库(R) - - Import - 导入 - &Help 帮助(H) @@ -2639,14 +3286,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries 项目(N) - - Copy att&ribute to clipboard - 将属性复制到剪贴板(R) - - - Time-based one-time password - - &Groups 群组(G) @@ -2675,30 +3314,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database 关闭数据库(C) - - &New database - 新建数据库(N) - - - Merge from KeePassX database - 从 KeePassX 数据库合并 - - - &Add new entry - 新增项目(A) - - - &View/Edit entry - 浏览/编辑项目(V) - &Delete entry 删除项目(D) - - &Add new group - 新增群组(A) - &Edit group 编辑群组(E) @@ -2711,14 +3330,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... 数据库另存为(V)... - - Change &master key... - 更改主密码(M),,, - - - &Database settings - 数据库设置(D) - Database settings 数据库设置 @@ -2727,10 +3338,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry 复制项目(C) - - &Find - 查找(F) - Copy &username 复制用户名(U) @@ -2739,10 +3346,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard 将用户名复制到剪贴板 - - Cop&y password - 复制密码(Y) - Copy password to clipboard 将密码复制到剪贴板 @@ -2755,14 +3358,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator 密码生成器 - - &Perform Auto-Type - 执行自动输入(P) - - - &Open URL - 打开网址O) - &Lock databases 锁定数据库(L) @@ -2795,22 +3390,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... 导出为 CSV 文件(E)... - - Import KeePass 1 database... - 导入 KeePass 1 数据库... - - - Import CSV file... - 导入 CSV 文件... - - - Re&pair database... - 修复数据库(P)... - - - Show TOTP - 显示 TOTP 密码 - Set up TOTP... 设置 TOTP 密码... @@ -2821,7 +3400,7 @@ This is a one-way migration. You won't be able to open the imported databas E&mpty recycle bin - + 清空回收站 Clear history @@ -2831,14 +3410,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 访问配置文件出错 %1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>您可能正在使用 KeePassHTTP 来连接浏览器插件。该功能目前已被弃用,并且在未来将会被移除。<br>请切换到 KeePassXC-Browser! 如果在迁移中您需要帮助,请访问<a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">迁移指南</a> (警告 %1/3)。</p> - - - read-only - 只读 - Settings 设置 @@ -2851,26 +3422,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC 退出 KeePassXC - - KeePass 2 Database - KeePass 2 数据库 - - - All files - 所有文件 - - - Open database - 打开数据库 - - - Save repaired database - 保存修复后的数据库 - - - Writing the database failed. - 数据库写入失败 - Please touch the button on your YubiKey! 请触摸你 YubiKey 上的按键! @@ -2879,228 +3430,398 @@ This is a one-way migration. You won't be able to open the imported databas WARNING: You are using an unstable build of KeePassXC! There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. - + 警告:您正在使用不稳定的KeePassXC版本! +存在高风险的损坏,维护数据库的备份。 +此版本不适用于生产用途。 + + + &Donate + &捐助 + + + Report a &bug + 报告&错误 + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + 警告:您的Qt版本可能会导致KeePassXC与屏幕键盘而崩溃! +我们建议您使用我们的下载页面上提供的AppImage。 + + + &Import + &导入 + + + Copy att&ribute... + 复制 att&ribute... + + + TOTP... + TOTP... + + + &New database... + &新数据库... + + + Create a new database + 创建一个新数据库 + + + &Merge from database... + &从数据库中合并... + + + Merge from another KDBX database + 从另一个KDBX数据库合并 + + + &New entry + &新项目 + + + Add a new entry + 添加新项目 + + + &Edit entry + &编辑项目 + + + View or edit entry + 查看或编辑项目 + + + &New group + &新群组 + + + Add a new group + 添加一个新群组 + + + Change master &key... + 修改主密钥... + + + &Database settings... + &数据库设置... + + + Copy &password + 复制 &密码 + + + Perform &Auto-Type + 执行和自动键入 + + + Open &URL + 打开 &URL链接 + + + KeePass 1 database... + KeePass 1 数据库... + + + Import a KeePass 1 database + 导入KeePass 1数据库 + + + CSV file... + CSV文件... + + + Import a CSV file + 导入CSV文件 + + + Show TOTP... + 显示 TOTP... + + + Show TOTP QR Code... + 显示TOTP 二维码... + + + Check for Updates... + 正在检查更新..。 + + + Share entry + 共享条目 + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + 注意:您使用的是KeePassXC的预发行版本! +预计一些错误和小问题, 这个版本并不打算用于生产使用。 + + + Check for updates on startup? + 是否在启动时检查更新? + + + Would you like KeePassXC to check for updates on startup? + 是否希望KeePassXC在启动时检查更新? + + + You can always check for updates manually from the application menu. + 您始终可以从应用程序菜单手动检查更新。 + + + + Merger + + Creating missing %1 [%2] + 创建缺少 %1 [%2] + + + Relocating %1 [%2] + 重新定位 %1 [%2] + + + Overwriting %1 [%2] + 覆盖 %1 [%2] + + + older entry merged from database "%1" + 从数据库 "%1" 合并的旧项目 + + + Adding backup for older target %1 [%2] + 为旧目标 %1 [%2]添加备份 + + + Adding backup for older source %1 [%2] + 为旧源 %1 添加备份 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + 在较新的源 %1 [%2]之上重新应用较旧的目标项目 + + + Reapplying older source entry on top of newer target %1 [%2] + 在较新的目标 %1 [%2]之上重新应用较旧的源项目 + + + Synchronizing from newer source %1 [%2] + 从较新的源 %1 [%2]同步 + + + Synchronizing from older source %1 [%2] + 从旧资源 %1 [%2]同步 + + + Deleting child %1 [%2] + 删除子项 %1 [%2] + + + Deleting orphan %1 [%2] + 删除孤立 %1 [%2] + + + Changed deleted objects + 更改已删除的对象 + + + Adding missing icon %1 + 添加缺少的图标 %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + 创建一个新的KeePassXC数据库... + + + Root + Root group + 根群组 + + + + NewDatabaseWizardPage + + WizardPage + 向导页 + + + En&cryption Settings + 加密设置 + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + 您可以在此处调整数据库加密设置。 不用担心,您可以稍后在数据库设置中更改它们。 + + + Advanced Settings + 高级设置 + + + Simple Settings + 简单设置 + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + 加密设置 + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + 您可以在此处调整数据库加密设置。 不用担心,您可以稍后在数据库设置中更改它们。 + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + 数据库主密钥 + + + A master key known only to you protects your database. + 只有您知道的主密钥才能保护您的数据库。 + + + + NewDatabaseWizardPageMetaData + + General Database Information + 一般的数据库信息 + + + Please fill in the display name and an optional description for your new database: + 请填写新数据库的显示名称和可选说明: OpenSSHKey Invalid key file, expecting an OpenSSH key - + 无效的密钥文件,需要OpenSSH密钥 PEM boundary mismatch - + PEM边界不匹配 Base64 decoding failed - + Base64 解码失败 Key file way too small. - + 密钥文件太小了。 Key file magic header id invalid - + 密钥文件魔术标头ID无效 Found zero keys - + 找到零密钥 Failed to read public key. - + 无法读取公钥。 Corrupted key file, reading private key failed - + 损坏的密钥文件,读取私钥失败 No private key payload to decrypt - + 私钥中没有载体可解密 Trying to run KDF without cipher - + 尝试运行无加密的 KDF Passphrase is required to decrypt this key - + 需要密码短语解密此密钥 Key derivation failed, key file corrupted? - + 密钥派生失败,密钥文件已损坏? Decryption failed, wrong passphrase? - + 解密失败,错误的密码短语? Unexpected EOF while reading public key - + 读取公钥时意外的文件结束 Unexpected EOF while reading private key - + 读取私钥时意外的文件结束 Can't write public key as it is empty - + 无法写公钥,因为它是空的 Unexpected EOF when writing public key - + 编写公钥时意外的文件结束 Can't write private key as it is empty - + 无法写私钥,因为它是空的 Unexpected EOF when writing private key - + 编写私钥时意外的文件结束 Unsupported key type: %1 - + 不支持的密钥类型: %1 Unknown cipher: %1 - + 未知加密:%1 Cipher IV is too short for MD5 kdf - + 密码IV对于MD5 kdf来说太短了 Unknown KDF: %1 - + 未知的KDF: %1 Unknown key type: %1 - + 未知密钥类型: %1 - OptionDialog + PasswordEditWidget - Dialog - 对话框 + Enter password: + 输入密码: - This is required for accessing your databases from ChromeIPass or PassIFox - 通过 ChromelPass 或 PasslFox 访问数据库需要此设置 + Confirm password: + 确认密码: - Enable KeePassHTTP server - 启用 KeePassHTTP 服务 + Password + 密码 - General - 常规 + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + <p>密码是保护数据库的主要方法。</p><p>良好的密码长且独特。 KeePassXC可以为您生成一个。</p> - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - 当请求凭证时显示通知(O) + Passwords do not match. + 密码不匹配。 - Only returns the best matches for a specific URL instead of all entries for the whole domain. - 只返回特定网址的最佳匹配,而不是整个域名的所有条目。 - - - &Return only best matching entries - 只返回最匹配的条目 - - - Re&quest to unlock the database if it is locked - 数据库锁定时请求解锁(Q) - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - 仅返回具有相同协议 (http://, https://, ftp://, ...) 的条目 - - - &Match URL schemes - 匹配 URL 协议(M) - - - Sort matching entries by &username - 根据用户名排序匹配项(U) - - - Sort &matching entries by title - 根据标题排序匹配项(M) - - - R&emove all shared encryption keys from active database - 移除所有激活数据库共享的加密密钥(E) - - - Re&move all stored permissions from entries in active database - 从活动数据库的条目中移除已存储的所有权限(M) - - - Password Generator - 密码生成器 - - - Advanced - 高级 - - - Always allow &access to entries - 永远允许访问项目(A) - - - Always allow &updating entries - 永远允许更新项目(U) - - - Only the selected database has to be connected with a client. - 只有选定的数据库必须与一个客户端连接。 - - - Searc&h in all opened databases for matching entries - 在所有打开的数据库中查找匹配项目(H) - - - Automatically creating or updating string fields is not supported. - 不支持自动创建或更新字符串字段。 - - - &Return advanced string fields which start with "KPH: " - 返回以“KPH:”开头的高级字符串字段(R) - - - HTTP Port: - HTTP 端口: - - - Default port: 19455 - 默认端口:19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC 将监听 127.0.0.1 上的此端口 - - - <b>Warning:</b> The following options can be dangerous! - <b>警告:</b> 以下选项可能有危险! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - <p>KeePassHTTP 已被弃用,并且在未来将会被移除。<br>请切换到 KeePassXC-Browser!如果在迁移中您需要帮助,请访问<a href="https://keepassxc.org/docs/keepassxc-browser-migration">迁移指南</a>。</p> - - - Cannot bind to privileged ports - 无法绑定到特权端口 - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - 无法绑定低于 1024 的特权端口 ! -使用默认端口 19455 + Generate master password + 生成主密码 @@ -3160,7 +3881,7 @@ Using default port 19455. &Length: - 长度(L)︰ + 长度(L): Passphrase @@ -3170,18 +3891,10 @@ Using default port 19455. Wordlist: 字符列表: - - Word Count: - 字数: - Word Separator: 字符分隔符: - - Generate - 生成 - Copy 复制 @@ -3194,10 +3907,6 @@ Using default port 19455. Close 关闭 - - Apply - 应用 - Entropy: %1 bit 熵:%1 比特 @@ -3226,68 +3935,217 @@ Using default port 19455. Password quality 优秀 + + ExtendedASCII + 扩展的ASCII + + + Switch to advanced mode + 切换到高级模式 + + + Advanced + 高级 + + + Upper Case Letters A to F + 大写字母A到F + + + A-Z + A-Z + + + Lower Case Letters A to F + 小写字母A至F + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + 括弧 + + + {[( + {[( + + + Punctuation + 标点 + + + .,:; + .,:; + + + Quotes + 引号 + + + " ' + " ' + + + Math + 数学 + + + <*+!?= + <*+!?= + + + Dashes + 破折号 + + + \_|-/ + \_|-/ + + + Logograms + 语标符号 + + + #$%&&@^`~ + #$%&&@^`~ + + + Switch to simple mode + 切换到简易模式 + + + Simple + 简易 + + + Character set to exclude from generated password + 从生成的密码中排除字符集 + + + Do not include: + 不包括: + + + Add non-hex letters to "do not include" list + 将非十六进制字母添加到“不包含”列表中 + + + Hex + 十六进制 + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + 排除的字符: "0", "1", "l", "I", "O", "|", "﹒" + + + Word Co&unt: + 字数: + + + Regenerate + 再生 + + + + QApplication + + KeeShare + KeeShare + + + + QFileDialog + + Select + 选择 + + + + QMessageBox + + Overwrite + 覆盖 + + + Delete + 删除 + + + Move + 移动 + + + Empty + + + + Remove + 移除 + + + Skip + 跳过 + + + Disable + 禁用 + + + Merge + 合并 + QObject Database not opened - + 数据库未打开 Database hash not available - + 数据库哈希值不可用 Client public key not received - + 未收到客户端公钥 Cannot decrypt message - - - - Timeout or cannot connect to KeePassXC - + 无法解密消息 Action cancelled or denied - - - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - + 操作被取消或被拒绝 KeePassXC association failed, try again - - - - Key change was not successful - + KeePassXC关联失败,请重试 Encryption key is not recognized - - - - No saved databases found - + 无法识别加密密钥 Incorrect action - + 操作错误 Empty message received - + 收到空消息 No URL provided - + 没有提供URL No logins found - + 找不到登录信息 Unknown error @@ -3295,7 +4153,7 @@ Using default port 19455. Add a new entry to a database. - + 向数据库添加新条目。 Path of the database. @@ -3303,23 +4161,23 @@ Using default port 19455. Key file of the database. - + 数据库的密钥文件。 path - + 路径 Username for the entry. - + 项目的用户名。 username - + 用户名 URL for the entry. - + 条目的URL。 URL @@ -3327,15 +4185,15 @@ Using default port 19455. Prompt for the entry's password. - + 提示输入密码。 Generate a password for the entry. - + 为条目生成密码。 Length for the generated password. - + 生成密码的长度。 length @@ -3343,28 +4201,28 @@ Using default port 19455. Path of the entry to add. - + 要添加的条目的路径。 Copy an entry's password to the clipboard. - + 将条目的密码复制到剪贴板。 Path of the entry to clip. clip = copy to clipboard - + 剪辑条目的路径。 Timeout in seconds before clearing the clipboard. - + 清除剪贴板前超时(以秒为单位)。 Edit an entry. - + 编辑项目。 Title for the entry. - + 项目标题。 title @@ -3372,19 +4230,19 @@ Using default port 19455. Path of the entry to edit. - + 要编辑的项目的路径。 Estimate the entropy of a password. - + 估计密码的熵。 Password for which to estimate the entropy. - + 用于估计熵的密码。 Perform advanced analysis on the password. - + 对密码执行高级分析。 Extract and print the content of a database. @@ -3396,25 +4254,27 @@ Using default port 19455. Insert password to unlock %1: - - - - Failed to load key file %1 : %2 - + 插入密码以解锁%1: WARNING: You are using a legacy key file format which may become unsupported in the future. Please consider generating a new key file. - + 警告:您使用的是旧密钥文件格式 +将来不受支持。 + +请考虑生成新的密钥文件。 Available commands: - + + +可用命令: + Name of the command to execute. @@ -3430,11 +4290,11 @@ Available commands: Find entries quickly. - + 快速查找项目。 Search term. - + 搜索词。 Merge two databases. @@ -3450,23 +4310,23 @@ Available commands: Use the same credentials for both database files. - + 对两个数据库文件使用相同的凭据。 Key file of the database to merge from. - + 要合并的数据库的密钥文件。 Show an entry's information. - + 显示条目的信息。 Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - + 要显示的属性的名称。 可以多次指定此选项,每个属性按给定顺序显示为每行一个。 如果未指定任何属性,则会给出默认属性的摘要。 attribute - + 属性 Name of the entry to show. @@ -3480,12 +4340,6 @@ Available commands: error reading from device 从设备读取发生错误 - - file empty ! - - 文件为空! - - malformed string 格式不正确的字符串 @@ -3516,15 +4370,11 @@ Available commands: Last Modified - + 上一次更改 Created - - - - Legacy Browser Integration - + 创建 Browser Integration @@ -3548,47 +4398,461 @@ Available commands: Generate a new random diceware passphrase. - + 生成新的随机diceware密码。 Word count for the diceware passphrase. - - - - count - + diceware密码短语的字数。 Wordlist for the diceware generator. [Default: EFF English] - + diceware生成器的词表。 +[默认:EFF英文] Generate a new random password. - + 生成一个新的随机密码。 - Length of the generated password. - + Invalid value for password length %1. + 密码长度 %1 的值无效。 - Use lowercase characters in the generated password. - + Could not create entry with path %1. + 无法创建路径为 %1 的项目。 - Use uppercase characters in the generated password. - + Enter password for new entry: + 输入新项目的密码: - Use numbers in the generated password. - + Writing the database failed %1. + 写入数据库失败 %1 。 - Use special characters in the generated password. - + Successfully added entry %1. + 成功添加了项目 %1 。 - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + 将当前TOTP复制到剪贴板。 + + + Invalid timeout value %1. + 超时值 %1 无效。 + + + Entry %1 not found. + 输入 %1 未找到。项目 + + + Entry with path %1 has no TOTP set up. + 路径 %1 的项目没有设置TOTP。 + + + Entry's current TOTP copied to the clipboard! + 项目的当前TOTP复制到剪贴板! + + + Entry's password copied to the clipboard! + 项目密码复制到剪贴板! + + + Clearing the clipboard in %1 second(s)... + 在 %1 秒内清除剪贴板... + + + Clipboard cleared! + 剪贴板已清除! + + + Silence password prompt and other secondary outputs. + 静默密码提示和其他辅助输出。 + + + count + CLI parameter + + + + Invalid value for password length: %1 + 密码长度的值无效:%1 + + + Could not find entry with path %1. + 找不到路径为 %1的项目。 + + + Not changing any field for entry %1. + 不更改项目 %1的任何字段。 + + + Enter new password for entry: + 输入新密码进入: + + + Writing the database failed: %1 + 写入数据库失败: %1 + + + Successfully edited entry %1. + 已成功编辑项目 %1。 + + + Length %1 + 长度 %1 + + + Entropy %1 + 熵 %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + 多字加号位%1 + + + Type: Bruteforce + 类型:暴力 + + + Type: Dictionary + 类型:字典 + + + Type: Dict+Leet + 类型:字典+名单 + + + Type: User Words + 类型:用户词 + + + Type: User+Leet + 类型:用户 + 名单 + + + Type: Repeated + 类型:重复 + + + Type: Sequence + 类型:序列 + + + Type: Spatial + 类型:空间 + + + Type: Date + 类型:日期 + + + Type: Bruteforce(Rep) + 类型:暴力破解(重复) + + + Type: Dictionary(Rep) + 类型:字典(重复) + + + Type: Dict+Leet(Rep) + 类型:字典+名单(重复) + + + Type: User Words(Rep) + 类型:用户词(重复) + + + Type: User+Leet(Rep) + 类型:用户词+名单(重复) + + + Type: Repeated(Rep) + 类型:重复(重复) + + + Type: Sequence(Rep) + 类型:序列(重复) + + + Type: Spatial(Rep) + 类型:空间(重复) + + + Type: Date(Rep) + 类型:日期(重复) + + + Type: Unknown%1 + 类型:未知%1 + + + Entropy %1 (%2) + 熵 %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** 密码长度 (%1) != 部件长度之和(%2) *** + + + Failed to load key file %1: %2 + 无法加载密钥文件 %1: %2 + + + File %1 does not exist. + 文件 %1 不存在。 + + + Unable to open file %1. + 无法打开文件 %1。 + + + Error while reading the database: +%1 + 读取数据库时出错: +%1 + + + Error while parsing the database: +%1 + 解析数据库时出错: +%1 + + + Length of the generated password + 生成密码的长度 + + + Use lowercase characters + 使用小写字符 + + + Use uppercase characters + 使用大写字符 + + + Use numbers. + 使用数字。 + + + Use special characters + 使用特殊字符 + + + Use extended ASCII + 使用扩展ASCII + + + Exclude character set + 排除字符集 + + + chars + 字符 + + + Exclude similar looking characters + 排除相似的字符 + + + Include characters from every selected group + 包括每个选定组中的字符 + + + Recursively list the elements of the group. + 递归列出组的元素。 + + + Cannot find group %1. + 找不到组%1。 + + + Error reading merge file: +%1 + 读取合并文件时出错: +%1 + + + Unable to save database to file : %1 + 无法将数据库保存到文件 : %1 + + + Unable to save database to file: %1 + 无法将数据库保存到文件: %1 + + + Successfully recycled entry %1. + 成功回收了项目%1。 + + + Successfully deleted entry %1. + 已成功删除项目%1。 + + + Show the entry's current TOTP. + 显示当前项目的TOTP。 + + + ERROR: unknown attribute %1. + 错误:未知属性%1。 + + + No program defined for clipboard manipulation + 没有为剪贴板操作定义程序 + + + Unable to start program %1 + 无法启动程序 %1 + + + file empty + 文件为空 + + + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 + + + AES: 256-bit + AES:256位 + + + Twofish: 256-bit + Twofish:256位 + + + ChaCha20: 256-bit + ChaCha20:256位 + + + Argon2 (KDBX 4 – recommended) + Argon2(推荐 KDBX 4) + + + AES-KDF (KDBX 4) + AES-KDF(KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF(KDBX 3.1) + + + Invalid Settings + TOTP + 无效的设置 + + + Invalid Key + TOTP + 无效的密钥 + + + Message encryption failed. + 消息加密失败。 + + + No groups found + 未找到组 + + + Create a new database. + 创建新数据库。 + + + File %1 already exists. + 文件%1 已存在。 + + + Loading the key file failed + 加载密钥文件失败 + + + No key is set. Aborting database creation. + 没有设置密钥。正在中止数据库创建。 + + + Failed to save the database: %1. + 未能保存数据库: %1。 + + + Successfully created new database. + 已成功创建新数据库。 + + + Insert password to encrypt database (Press enter to leave blank): + 插入密码加密数据库 (按回车键留空): + + + Creating KeyFile %1 failed: %2 + 创建密钥文件%1失败:%2 + + + Loading KeyFile %1 failed: %2 + 加载密钥文件 %1 失败: %2 + + + Remove an entry from the database. + 从数据库中删除条目。 + + + Path of the entry to remove. + 要删除的条目的路径。 + + + Existing single-instance lock file is invalid. Launching new instance. + 现有的单实例锁定文件无效。正在启动新实例。 + + + The lock file could not be created. Single-instance mode disabled. + 无法创建锁定文件。 单实例模式已禁用。 + + + KeePassXC - cross-platform password manager + KeePassXC - 跨平台密码管理软件 + + + filenames of the password databases to open (*.kdbx) + 将打开的密码数据库文件名(*.kdbx) + + + path to a custom config file + 自定义配置文件路径 + + + key file of the database + 数据库密钥文件 + + + read password of the database from stdin + 从标准输入读取数据库的密码 + + + Parent window handle + 父窗口句柄 + + + Another instance of KeePassXC is already running. + 另一个 KeePassXC 实例已在运行。 + + + Fatal error while testing the cryptographic functions. + 在测试加密函数时发生重大错误。 + + + KeePassXC - Error + KeePassXC - 错误 + + + Database password: + 数据库密码: + + + Cannot create new group @@ -3627,11 +4891,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - 搜索…… + Agent connection failed. + 代理连接失败。 + + Agent protocol error. + 代理协议错误。 + + + No agent running, cannot add identity. + 没有代理运行,无法添加标识。 + + + No agent running, cannot remove identity. + 没有代理运行,无法删除标识。 + + + Agent refused this identity. Possible reasons include: + 代理拒绝了这个标识。可能的原因包括: + + + The key has already been added. + 密钥已经添加。 + + + Restricted lifetime is not supported by the agent (check options). + 代理不支持受限制的有效周期(检查选项)。 + + + A confirmation request is not supported by the agent (check options). + 代理不支持确认请求(检查选项)。 + + + + SearchHelpWidget + + Search Help + 查询帮助 + + + Search terms are as follows: [modifiers][field:]["]term["] + 搜索字词如下: [modifiers][field:]["]term["] + + + Every search term must match (ie, logical AND) + 每个搜索词必须匹配 (ie, logical AND) + + + Modifiers + 修饰符 + + + exclude term from results + 从结果中排除期限 + + + match term exactly + 确切地匹配期限 + + + use regex in term + 在术语中使用正则表达式 + + + Fields + 字段 + + + Term Wildcards + 术语通配符 + + + match anything + 匹配任何东西 + + + match one + 匹配一个 + + + logical OR + 逻辑或 + + + Examples + 例子 + + + + SearchWidget Search 搜索 @@ -3640,359 +4990,289 @@ Available commands: Clear 清除 - - Case Sensitive - 区分大小写 - Limit search to selected group 在选中的群组中搜索 - - - Service - KeePassXC: New key association request - KeePassXC: 新的密钥关联请求 + Search Help + 查询帮助 - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - 你已收到上述密钥的关联请求。 -如果你想允许它访问你的 KeePassXC 数据库, -请为它提供一个唯一的名称来识别和接受它。 + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + 搜索(%1)... - KeePassXC: Overwrite existing key? - KeePassXC︰ 覆盖现有的密钥吗? - - - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - 一个共享的加密密钥,名为"%1"已存在。 -你想要覆盖它吗? - - - KeePassXC: Update Entry - KeePassXC︰ 更新条目 - - - Do you want to update the information in %1 - %2? - 你想更新 %1-%2 中的信息吗? - - - KeePassXC: Database locked! - KeePassXC︰ 数据库被锁定 ! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 激活的数据库被锁定 ! -请解锁选定的数据库或选择另一已解锁的数据库。 - - - KeePassXC: Removed keys from database - KeePassXC︰ 从数据库中删除键 - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - - - - KeePassXC: No keys found - KeePassXC︰ 未找到键 - - - No shared encryption-keys found in KeePassHttp Settings. - 没有在 KeePassHttp 设置中找到共享加密密钥。 - - - KeePassXC: Settings not available! - KeePassXC︰ 设置不可用 ! - - - The active database does not contain an entry of KeePassHttp Settings. - 当前数据库中没有 KeePassHttp 设置的条目。 - - - Removing stored permissions... - 正在删除存储的权限... - - - Abort - 中断 - - - KeePassXC: Removed permissions - KeePassXC︰ 已删除的权限 - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC: 未找到权限的条目! - - - The active database does not contain an entry with permissions. - 当前数据库中不包含具有权限的条目。 + Case sensitive + 区分大小写 - SettingsWidget + SettingsWidgetKeeShare - Application Settings - 应用程序设置 + Active + Active - General - 常规 + Allow export + 允许导出 - Security - 安全 + Allow import + 允许导入 - Access error for config file %1 - 访问配置文件出错 %1 - - - - SettingsWidgetGeneral - - Basic Settings - 基础设置 + Own certificate + 自己的证书 - Start only a single instance of KeePassXC - 只启动一个 KeePassXC 实例 + Fingerprint: + 指纹: - Remember last databases - 记住最近的数据库 + Certificate: + 证书: - Remember last key files and security dongles - 记住上次的密钥文件和安全模块 - - - Load previous databases on startup - 在启动时加载最近的数据库 - - - Automatically save on exit - 离开后自动保存 - - - Automatically save after every change - 修改后自动保存 - - - Automatically reload the database when modified externally - 当外部修改时自动重新加载数据库 - - - Minimize when copying to clipboard - 复制到剪贴板后最小化 - - - Minimize window at application startup - 在应用程序启动时窗口最小化 - - - Use group icon on entry creation - 新增项目时使用群组图标 - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - 不要因非数据的更改而将数据库标记为已修改 (比如增加群组) - - - Hide the Details view - - - - Show a system tray icon - 显示任务栏图标 - - - Hide window to system tray when minimized - 将窗口最小化至任务栏 - - - Hide window to system tray instead of app exit - 退出时将窗口最小化至任务栏 - - - Dark system tray icon - - - - Language - 语言 - - - Auto-Type - 自动输入 - - - Use entry title to match windows for global Auto-Type - - - - Use entry URL to match windows for global Auto-Type - - - - Always ask before performing Auto-Type - 总在执行自动输入前询问 - - - Global Auto-Type shortcut - 自动输入全局快捷键 - - - Auto-Type delay - 自动输入延迟 - - - ms - Milliseconds - 毫秒 - - - Startup - - - - File Management - - - - Safely save database files (may be incompatible with Dropbox, etc) - - - - Backup database file before saving - - - - Entry Management - - - - General - 常规 - - - - SettingsWidgetSecurity - - Timeouts - 超时 - - - Clear clipboard after - 在多久后清除剪贴板 - - - sec - Seconds - - - - Lock databases after inactivity of - 在多久没有动作之后锁住数据库 - - - Convenience - 便利性 - - - Lock databases when session is locked or lid is closed - 系统锁定或盖子合上时锁定数据库 - - - Lock databases after minimizing the window - 在最小化窗口后锁定数据库 - - - Don't require password repeat when it is visible - 可见时不需要重复输入密码 - - - Show passwords in cleartext by default - 默认以明码显示密码 - - - Hide passwords in the preview panel - - - - Hide entry notes by default - - - - Privacy - 隐私 - - - Use Google as fallback for downloading website icons - 使用 Google 作为下载网站图标时的备选 - - - Re-lock previously locked database after performing Auto-Type - - - - - SetupTotpDialog - - Setup TOTP - 设置定时一次性密码 + Signer + 签名 Key: 密钥: - Default RFC 6238 token settings + Generate + 生成 + + + Import + 导入 + + + Export + 输出 + + + Imported certificates + 导入的证书 + + + Trust + 信任 + + + Ask + 询问 + + + Untrust + 不信任 + + + Remove + 移除 + + + Path + 路径 + + + Status + 状态 + + + Fingerprint + 指纹 + + + Certificate + 证书 + + + Trusted + 信任 + + + Untrusted + 不可信 + + + Unknown + 未知 + + + key.share + Filetype for KeeShare key + key.share + + + KeeShare key file + KeeShare密钥文件 + + + All files + 所有文件 + + + Select path + 选择路径 + + + Exporting changed certificate + 导出已更改的证书 + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + 导出的证书与正在使用的证书不同。是否要导出当前证书? + + + Signer: + + + + + ShareObserver + + Import from container without signature + 从没有签名的容器导入 + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + 我们无法验证共享容器的来源, 因为它未签名。是否确实要从%1导入? + + + Import from container with certificate + 从带有证书的容器导入 + + + Not this time + 本次取消 + + + Never + 从不 + + + Always + 总是 + + + Just this time + 现在 + + + Import from %1 failed (%2) + 从%1 导入失败 (%2) + + + Import from %1 successful (%2) + 从%1导入成功 (%2) + + + Imported from %1 + 从%1导入 + + + Signed share container are not supported - import prevented + 不支持签名共享容器-导入已防止 + + + File is not readable + 文件不可读 + + + Invalid sharing container + 无效的共享容器 + + + Untrusted import prevented + 防止不受信任的导入 + + + Successful signed import + 成功导入签名 + + + Unexpected error + 意外错误 + + + Unsigned share container are not supported - import prevented + 不支持未签名的共享容器-导入已防止 + + + Successful unsigned import + 未签名成功导入 + + + File does not exist + 文件不存在 + + + Unknown share container type + 未知的共享容器类型 + + + Overwriting signed share container is not supported - export prevented + 不支持覆盖签名的共享容器-防止导出 + + + Could not write export container (%1) + 无法写入导出容器 (%1) + + + Overwriting unsigned share container is not supported - export prevented + 不支持覆盖未签名的共享容器-防止导出 + + + Could not write export container + 无法写入导出容器 + + + Unexpected export error occurred + 出现意外的导出错误 + + + Export to %1 failed (%2) + 导出到 %1 失败 (%2) + + + Export to %1 successful (%2) + 导出到 %1 成功 (%2) + + + Export to %1 + 导出到%1 + + + Do you want to trust %1 with the fingerprint of %2 from %3? + 是否要信任 %1, 来自 %3 的 %2 的指纹? {1 ?} {2 ?} + + + Multiple import source path to %1 in %2 - Steam token settings + Conflicting export target path %1 in %2 - Use custom settings - 使用自定义设置 + Could not embed signature: Could not open file to write (%1) + - Note: Change these settings only if you know what you are doing. - 注意:除非你知道自己在做什么,否则不要更改这些设置。 + Could not embed signature: Could not write file (%1) + - Time step: - 时间步进: + Could not embed database: Could not open file to write (%1) + - 8 digits - 8 位数字 - - - 6 digits - 6 位数字 - - - Code size: - 口令长度: - - - sec - Seconds - + Could not embed database: Could not write file (%1) + @@ -4009,20 +5289,132 @@ Please unlock the selected database or choose another one which is unlocked.Copy 复制 - - Expires in - 过期时间 - - - seconds - + + Expires in <b>%n</b> second(s) + 以<b>%n</b>秒到期 - UnlockDatabaseWidget + TotpExportSettingsDialog - Unlock database - 解锁数据库 + Copy + 复制 + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + 注意:这些TOTP设置是自定义的,可能无法与其他验证器一起使用。 + + + There was an error creating the QR code. + 创建二维码时出错。 + + + Closing in %1 seconds. + 在 %1 秒内关闭。 + + + + TotpSetupDialog + + Setup TOTP + 设置定时一次性密码 + + + Key: + 密钥: + + + Default RFC 6238 token settings + 默认RFC 6238令牌设置 + + + Steam token settings + Steam 令牌设置 + + + Use custom settings + 使用自定义设置 + + + Custom Settings + 自定义设置 + + + Time step: + 时间步进: + + + sec + Seconds + + + + Code size: + 口令长度: + + + 6 digits + 6 位数字 + + + 7 digits + 7位数 + + + 8 digits + 8 位数字 + + + + UpdateCheckDialog + + Checking for updates + 检查更新 + + + Checking for updates... + 正在检查更新... + + + Close + 关闭 + + + Update Error! + 更新错误! + + + An error occurred in retrieving update information. + 检索更新信息时出错。 + + + Please try again later. + 请稍后再试。 + + + Software Update + 软件更新 + + + A new version of KeePassXC is available! + 有一个新的KeePassXC版本! + + + KeePassXC %1 is now available — you have %2. + KeePassXC %1 现已推出 — 您拥有 %2。 + + + Download it at keepassxc.org + 在 keepassxc.org下载 + + + You're up-to-date! + 您使用的是最新的! + + + KeePassXC %1 is currently the newest version available + KeePassXC %1 是当前可用的最新版本 @@ -4041,7 +5433,7 @@ Please unlock the selected database or choose another one which is unlocked. Import from KeePass 1 - 导入KeePass 1 数据库 + 导入 KeePass 1 数据库 Import from CSV @@ -4053,46 +5445,30 @@ Please unlock the selected database or choose another one which is unlocked. Welcome to KeePassXC %1 - + 欢迎来到 KeePassXC %1 - main + YubiKeyEditWidget - Remove an entry from the database. - + Refresh + 刷新 - Path of the database. - 数据库路径 + YubiKey Challenge-Response + YubiKey挑战 - 回应 - Path of the entry to remove. - + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>如果您拥有<a href="https://www.yubico.com/">YubiKey</a>,则可以使用它来提高安全性。</p><p>YubiKey要求将其中一个插槽编程为<a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1挑战-回应</a>。</p> - KeePassXC - cross-platform password manager - KeePassXC - 跨平台密码管理软件 + No YubiKey detected, please ensure it's plugged in. + 没有检测到YubiKey,请确保已插入。 - filenames of the password databases to open (*.kdbx) - 将打开的密码数据库文件名(*.kdbx) - - - path to a custom config file - 自定义配置文件路径 - - - key file of the database - 数据库密钥文件 - - - read password of the database from stdin - 从标准输入读取数据库的密码 - - - Parent window handle - + No YubiKey inserted. + 没有插入YubiKey。 \ No newline at end of file diff --git a/share/translations/keepassx_zh_TW.ts b/share/translations/keepassx_zh_TW.ts index 6e9c7622c..7c5b5deb0 100644 --- a/share/translations/keepassx_zh_TW.ts +++ b/share/translations/keepassx_zh_TW.ts @@ -37,73 +37,13 @@ Copy to clipboard 複製到剪貼簿 - - Version %1 - - 版本 %1 - - - - Revision: %1 - 修訂:%1 - - - Distribution: %1 - 散佈:%1 - - - Libraries: - 函式庫: - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - 作業系統:%1 -處裡器架構:%2 -核心:%3 %4 - - - Enabled extensions: - 已啟用的擴充元件: - Project Maintainers: 專案維護者: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - - - - Build Type: %1 - - - - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP 存取確認 - - - Remember this decision - 記住此決定 - - - Allow - 允許 - - - Deny - 禁止 - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 要求存取下列項目的密碼。 -請選擇是否允許存取。 + KeePassXC 團隊特別鳴謝 debfx 開發了原本的 KeePassX @@ -112,6 +52,277 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) 啟用 SSH 代理 (需要重新啟動) + + Use OpenSSH for Windows instead of Pageant + + + + + ApplicationSettingsWidget + + Application Settings + 應用程式設定 + + + General + 一般 + + + Security + 安全性 + + + Access error for config file %1 + 設定檔存取錯誤:%1 + + + Icon only + 只有圖示 + + + Text only + 只有文字 + + + Text beside icon + 圖示旁有文字 + + + Text under icon + 圖示下有文字 + + + Follow style + + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + 基本設定 + + + Startup + 啟動 + + + Start only a single instance of KeePassXC + 只能啟動單一 KeePassXC 程式 + + + Remember last databases + 記住最近的資料庫 + + + Remember last key files and security dongles + 記住最近的金鑰檔案與安全加密狗 + + + Load previous databases on startup + 啟動時載入之前的資料庫 + + + Minimize window at application startup + 程式啟動時視窗最小化 + + + File Management + 檔案管理 + + + Safely save database files (may be incompatible with Dropbox, etc) + + + + Backup database file before saving + + + + Automatically save after every change + 修改後,自動儲存 + + + Automatically save on exit + 離開時,自動儲存 + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + 未變更資料時(例如:擴展群組時)不要將資料庫標記為已修改 + + + Automatically reload the database when modified externally + 當有外部修改時自動重新載入資料庫 + + + Entry Management + 項目管理 + + + Use group icon on entry creation + 新增項目時使用群組圖示 + + + Minimize when copying to clipboard + 在複製到剪貼簿時最小化 + + + Hide the entry preview panel + + + + General + 一般 + + + Hide toolbar (icons) + + + + Minimize instead of app exit + + + + Show a system tray icon + 顯示工作列圖示 + + + Dark system tray icon + 深色系統列圖示 + + + Hide window to system tray when minimized + 將視窗最小化至工作列 + + + Language + 語言 + + + Auto-Type + 自動輸入 + + + Use entry title to match windows for global Auto-Type + 使用項目標題來匹配全域自動輸入的視窗 + + + Use entry URL to match windows for global Auto-Type + 使用項目 URL 來匹配全域自動輸入的視窗 + + + Always ask before performing Auto-Type + 在執行自動輸入前始終詢問 + + + Global Auto-Type shortcut + 全域自動輸入快捷鍵 + + + Auto-Type typing delay + + + + ms + Milliseconds + 毫秒 + + + Auto-Type start delay + + + + Check for updates at application startup + + + + Include pre-releases when checking for updates + + + + Movable toolbar + + + + Button style + + + + + ApplicationSettingsWidgetSecurity + + Timeouts + 超時 + + + Clear clipboard after + 多久後清除剪貼簿 + + + sec + Seconds + + + + Lock databases after inactivity of + 多久沒有動作之後鎖定資料庫 + + + min + + + + Forget TouchID after inactivity of + + + + Convenience + 便利 + + + Lock databases when session is locked or lid is closed + 當工作階段鎖定或蓋上螢幕時鎖定資料庫 + + + Forget TouchID when session is locked or lid is closed + + + + Lock databases after minimizing the window + 最小化視窗後鎖定資料庫 + + + Re-lock previously locked database after performing Auto-Type + + + + Don't require password repeat when it is visible + 顯示密碼時不需要重複輸入密碼 + + + Don't hide passwords when editing them + + + + Don't use placeholder for empty password fields + + + + Hide passwords in the entry preview panel + + + + Hide entry notes by default + 預設隱藏項目備註 + + + Privacy + 隱私 + + + Use DuckDuckGo as fallback for downloading website icons + 使用 DuckDuckGo 作為下載網站圖示失敗時的備案 + AutoType @@ -214,6 +425,26 @@ Please select whether you want to allow access. 請選擇是否允許存取。 + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + + + Ok + + + + Cancel + 取消 + + + You have multiple databases open. +Please select the correct database for saving credentials. + + + BrowserOptionDialog @@ -287,14 +518,6 @@ Please select whether you want to allow access. Credentials mean login data requested via browser extension 依使用者名稱排序符合認證 (&U) - - &Disconnect all browsers - 與所有瀏覽器中斷連線 (&D) - - - Forget all remembered &permissions - 取消所有先前記住的權限 (&P) - Advanced 進階 @@ -360,20 +583,41 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! <b>警告:</b>下列選項可能極具風險! - - Executable Files (*.exe);;All Files (*.*) - 可執行檔 (* .exe);;所有檔案 (*) - - - Executable Files (*) - 可執行檔 (*) - Select custom proxy location 選擇自訂代理位置 - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + &Tor Browser + + + + <b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: + + + + Executable Files + 可執行檔案 + + + All Files + 所有檔案 + + + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + Please see special instructions for browser extension use below + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 @@ -415,153 +659,54 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? 是否要更新 %1 到 %2 的資訊? - - KeePassXC: Database locked! - KeePassXC:資料庫已鎖定! - - - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 目前的資料庫已鎖定! -請解鎖所選的資料庫或選擇其他已解鎖的資料庫。 - - - KeePassXC: Settings not available! - KeePassXC:設定不可用! - - - The active database does not contain a settings entry. - 目前的資料庫中沒有帶有設定的項目。 - - - KeePassXC: No keys found - KeePassXC:找不到金鑰 - - - No shared encryption keys found in KeePassXC Settings. - KeePassXC 設定中找不到共享加密金鑰。 - - - KeePassXC: Removed keys from database - KeePassXC:從資料庫中移除金鑰 - - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - - Removing stored permissions… - 正在移除所有已儲存的權限…… - Abort 中止 - KeePassXC: Removed permissions - KeePassXC:已移除權限 + Converting attributes to custom data… + + + + KeePassXC: Converted KeePassHTTP attributes + + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - Successfully removed permissions from %n entry(s). + Successfully moved %n keys to custom data. - KeePassXC: No entry with permissions found! - KeePassXC:找不到帶有權限的項目! + KeePassXC: No entry with KeePassHTTP attributes found! + - The active database does not contain an entry with permissions. - 目前的資料庫中沒有帶有權限的項目。 - - - - ChangeMasterKeyWidget - - Password - 密碼 + The active database does not contain an entry with KeePassHTTP attributes. + - Enter password: - 輸入密碼: + KeePassXC: Legacy browser integration settings detected + - Repeat password: - 再次輸入密碼: + KeePassXC: Create a new group + - &Key file - 金鑰檔案 (&K) + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - Browse - 瀏覽 - - - Create - 建立 - - - Cha&llenge Response - 挑戰回應 - - - Refresh - 重新整理 - - - Key files - 金鑰檔案 - - - All files - 所有檔案 - - - Create Key File... - 建立金鑰檔案…… - - - Unable to create Key File : - 無法建立金鑰檔案: - - - Select a key file - 選擇金鑰檔案 - - - Empty password - 清空密碼 - - - Do you really want to use an empty string as password? - 真的要使用空白密碼? - - - Different passwords supplied. - 填寫的密碼不一致。 - - - Failed to set %1 as the Key file: -%2 - 無法將 %1 設為金鑰檔案: -%2 - - - Legacy key file format - 舊式金鑰檔案格式 - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - 你正在使用未來將不再支援的舊式金鑰檔案格式。 - -請考慮產生新的金鑰。 - - - Changing master key failed: no YubiKey inserted. - 挑戰主金鑰失敗:沒有插入 YubiKey + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + @@ -641,14 +786,6 @@ Please consider generating a new key file. Not present in CSV file 不在 CSV 檔案內 - - Empty fieldname - 清空檔名 - - - column - - Imported from CSV file 已從 CSV 檔匯入 @@ -657,49 +794,89 @@ Please consider generating a new key file. Original data: 原始資料: - - Error(s) detected in CSV file ! - CSV 檔中檢測到錯誤! - - - more messages skipped] - 等訊息已跳過] - Error 錯誤 + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + CSV import: writer has errors: - - CSV 匯入:寫入器錯誤: - - - - - CsvImportWizard - - Error - 錯誤 - - - Unable to calculate master key - 無法計算主金鑰 +%1 + CsvParserModel - - %n byte(s), - - - - %n row(s), - - %n column(s) - + %n 列, + + + %1, %2, %3 + file info: bytes, rows, columns + %1,%2,%3 + + + %n byte(s) + %n 位元組 + + + %n row(s) + %n 列 + + + + Database + + Root + Root group name + + + + File %1 does not exist. + 檔案 %1 不存在。 + + + Unable to open file %1. + 無法開啟檔案 %1。 + + + Error while reading the database: %1 + 讀取資料庫時發生錯誤:%1 + + + Could not save, database has no file name. + 無法存檔,沒有資料庫的檔名。 + + + File cannot be written as it is opened in read-only mode. + 無法寫入檔案,因為該檔案以唯獨模式開啟。 + + + Key not transformed. This is a bug, please report it to the developers! + + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + @@ -728,14 +905,6 @@ Please consider generating a new key file. Challenge Response: 挑戰回應: - - Unable to open the database. - 無法開啟資料庫。 - - - Can't open key file - 無法開啟金鑰檔案 - Legacy key file format 舊式金鑰檔案格式 @@ -765,52 +934,248 @@ Please consider generating a new key file. Select key file 選擇金鑰檔案 - - - DatabaseRepairWidget - Repair database - 修復資料庫 + TouchID for quick unlock + - Error - 錯誤 + Unable to open the database: +%1 + - Can't open key file - 無法開啟金鑰檔案 - - - Unable to open the database. - 無法開啟資料庫。 - - - Database opened fine. Nothing to do. - 資料庫正常開啟。什麼都不做。 - - - Success - 成功 - - - The database has been successfully repaired -You can now save it. - 資料庫已成功修復,你現在可以直接儲存。 - - - Unable to repair the database. - 無法開啟資料庫 + Can't open key file: +%1 + - DatabaseSettingsWidget + DatabaseSettingWidgetMetaData + + Passwords + 密碼 + + + + DatabaseSettingsDialog + + Advanced Settings + + General 一般 - Encryption - 加密 + Security + 安全性 + + + Master Key + + + + Encryption Settings + + + + Browser Integration + 瀏覽器整合 + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + + + + &Disconnect all browsers + 與所有瀏覽器中斷連線 (&D) + + + Forg&et all site-specific settings on entries + + + + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + + + + Stored keys + + + + Remove + 移除 + + + Delete the selected key? + + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + + Key + + + + Value + + + + Enable Browser Integration to access these settings. + + + + Disconnect all browsers + + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + + KeePassXC: No keys found + KeePassXC:找不到金鑰 + + + No shared encryption keys found in KeePassXC settings. + + + + KeePassXC: Removed keys from database + KeePassXC:從資料庫中移除金鑰 + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Forget all site-specific settings on entries + + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + + Removing stored permissions… + 正在移除所有已儲存的權限…… + + + Abort + 中止 + + + KeePassXC: Removed permissions + KeePassXC:已移除權限 + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC:找不到帶有權限的項目! + + + The active database does not contain an entry with permissions. + 目前的資料庫中沒有帶有權限的項目。 + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + 加密演算法: + + + AES: 256 Bit (default) + AES:256 位元(預設) + + + Twofish: 256 Bit + Twofish:256 位元 + + + Key Derivation Function: + 金鑰衍生函數: + + + Transform rounds: + 加密轉換次數: + + + Benchmark 1-second delay + 效能測試一秒延遲 + + + Memory Usage: + 記憶體使用量: + + + Parallelism: + 平行運算: + + + Decryption Time: + 解密所需時間: + + + ?? s + ?? 秒 + + + Change + 更改 + + + 100 ms + 100 毫秒 + + + 5 s + 5 秒 + + + Higher values offer more protection, but opening the database will take longer. + + + + Database format: + 資料庫格式: + + + This is only important if you need to use your database with other programs. + 只有在您需要使用其他程式處理此資料庫時才重要。 + + + KDBX 4.0 (recommended) + KDBX 4.0 (推薦) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + 未更改 Number of rounds too high @@ -857,47 +1222,22 @@ If you keep this number, your database may be too easy to crack! MiB Abbreviation for Mebibytes (KDF settings) - + MiB thread(s) Threads for parallel execution (KDF settings) - + 執行緒 - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - 加密演算法: + + %1 ms + milliseconds + %1 毫秒 - - AES: 256 Bit (default) - AES:256 位元(預設) - - - Twofish: 256 Bit - Twofish:256 位元 - - - Key Derivation Function: - 金鑰衍生函數: - - - Transform rounds: - 加密轉換次數: - - - Benchmark 1-second delay - 效能測試一秒延遲 - - - Memory Usage: - 記憶體使用量: - - - Parallelism: - 平行運算: + + %1 s + seconds + %1 秒 @@ -944,16 +1284,87 @@ If you keep this number, your database may be too easy to crack! Enable &compression (recommended) - 啟用&壓縮 (推薦) + 啟用壓縮 (推薦) (&C) + + + + DatabaseSettingsWidgetKeeShare + + Sharing + + + + Breadcrumb + + + + Type + + + + Path + + + + Last Signer + + + + Certificates + + + + > + Breadcrumb separator + + + + + DatabaseSettingsWidgetMasterKey + + Add additional protection... + + + + No encryption key added + + + + You must add at least one encryption key to secure your database! + + + + No password set + + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + + Unknown error + 未知的錯誤 + + + Failed to change master key + + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + 資料庫名稱: + + + Description: + 描述: DatabaseTabWidget - - Root - Root group - - KeePass 2 Database KeePass 2 資料庫 @@ -966,30 +1377,10 @@ If you keep this number, your database may be too easy to crack! Open database 開啟資料庫 - - File not found! - 找不到檔案! - - - Unable to open the database. - 無法開啟資料庫。 - - - File opened in read only mode. - 已將檔案以唯讀模式開啟。 - - - Open CSV file - 開啟 CSV 檔 - CSV file CSV 檔案 - - All files (*) - 所有檔案 (*) - Merge database 合併資料庫 @@ -1002,38 +1393,6 @@ If you keep this number, your database may be too easy to crack! KeePass 1 database KeePass 1 資料庫 - - Close? - 關閉? - - - "%1" is in edit mode. -Discard changes and close anyway? - 「%1」 正在編輯模式中。 -是否要捨棄變更並關閉? - - - Save changes? - 儲存修改? - - - "%1" was modified. -Save changes? - 「%1」已修改。 -儲存變更? - - - Writing the database failed. - 寫入資料庫失敗。 - - - Passwords - 密碼 - - - Save database as - 資料庫另存為 - Export database to CSV file 將資料庫輸出成 CSV 檔案 @@ -1043,38 +1402,39 @@ Save changes? 寫入 CSV 檔案失敗。 - New database - 新的資料庫 + Database creation error + - locked - 已鎖定 + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - Lock database - 鎖定資料庫 + The database file does not exist or is not accessible. + - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - 目前正在編輯中,所以無法鎖定資料庫。 -請按取消以完成修改或捨棄修改。 + Select CSV file + - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - 此資料庫已修改。 -要在鎖定之前儲存資料庫? -不然則會遺失所有修改。 + New Database + 新建資料庫 - Disable safe saves? - 關閉安全存檔? + %1 [New Database] + Database tab name modifier + - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier @@ -1084,38 +1444,14 @@ Disable safe saves and try again? Searching... 搜尋中…… - - Change master key - 變更主金鑰 - - - Delete entry? - 刪除項目? - Do you really want to delete the entry "%1" for good? 真的要永久刪除「%1」? - - Delete entries? - 刪除項目? - - - Do you really want to delete %1 entries for good? - 真的要永久刪除 %1 個項目? - - - Move entry to recycle bin? - 將項目移到回收桶? - Do you really want to move entry "%1" to the recycle bin? 真的要將「%1」移到回收桶? - - Move entries to recycle bin? - 將項目移到回收桶? - Do you really want to move %n entry(s) to the recycle bin? 真的要將 %n 個項目移到回收桶? @@ -1132,18 +1468,10 @@ Disable safe saves and try again? Remember my choice 記住我的選擇 - - Delete group? - 刪除群組? - Do you really want to delete the group "%1" for good? 真的要永遠刪除「%1」群組? - - Unable to calculate master key - 無法計算主金鑰 - No current database. 無目前資料庫。 @@ -1178,10 +1506,6 @@ Do you want to merge your changes? 資料庫檔案已變更,且有尚未儲存的變更。 合併變更? - - Could not open the new database file while attempting to autoreload this database. - 自動重新讀取此資料庫時,無法開啟新資料庫檔案。 - Empty recycle bin? 清空回收桶? @@ -1190,88 +1514,107 @@ Do you want to merge your changes? Are you sure you want to permanently delete everything from your recycle bin? 確定要永久刪除回收桶內的項目? - - - DetailsWidget - - Generate TOTP Token - 產生 TOTP Token + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - Close - 關閉 + File opened in read only mode. + 已將檔案以唯讀模式開啟。 - General - 一般 + Lock Database? + - Password + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + 「%1」已修改。 +儲存變更? + + + Database was modified. +Save changes? + + + + Save changes? + 儲存修改? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + + + Disable safe saves? + 關閉安全存檔? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + + Writing the database failed. +%1 + + + + Passwords 密碼 - URL - 網址 + Save database as + 資料庫另存為 - Expiration - 過期 + KeePass 2 Database + KeePass 2 資料庫 - Username - 使用者名稱 + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Autotype - 自動輸入 + Delete group + 刪除群組 - Searching - 搜尋中 + Move group to recycle bin? + - Attributes - 屬性 + Do you really want to move the group "%1" to the recycle bin? + - Attachments - 附件 + Successfully merged the database files. + - Notes - 附註 + Database was not modified by merge operation. + - Window - 視窗 - - - Sequence - 序列 - - - Search - 搜尋 - - - Clear - 清除 - - - Never - 從不 - - - [PROTECTED] - [被保護] - - - Disabled - 停用 - - - Enabled - 啟用 + Shared group... + @@ -1344,22 +1687,10 @@ Do you want to merge your changes? New attribute 新的屬性 - - Confirm Remove - 確認移除 - Are you sure you want to remove this attribute? 確定要移除此屬性? - - [PROTECTED] - [被保護] - - - Press reveal to view or edit - 請按「揭示」以檢視或編輯 - Tomorrow 明天 @@ -1372,13 +1703,9 @@ Do you want to merge your changes? %n month(s) %n 個月 - - 1 year - 1 年 - Apply generated password? - + 使用產生的密碼? Do you want to apply the generated password to this entry? @@ -1388,6 +1715,26 @@ Do you want to merge your changes? Entry updated successfully. 項目已成功更新。 + + Entry has unsaved changes + + + + New attribute %1 + + + + [PROTECTED] Press reveal to view or edit + [受保護的內容] 請按「揭示」以檢視或編輯 + + + %n year(s) + + + + Confirm Removal + + EditEntryWidgetAdvanced @@ -1421,11 +1768,11 @@ Do you want to merge your changes? Foreground Color: - + 前景顏色: Background Color: - + 背景顏色: @@ -1632,6 +1979,97 @@ Do you want to merge your changes? 繼承自上層群組 (%1) + + EditGroupWidgetKeeShare + + Form + 表單 + + + Type: + + + + Path: + + + + ... + + + + Password: + 密碼: + + + Inactive + + + + Import from path + + + + Export to path + + + + Synchronize with path + + + + Your KeePassXC version does not support sharing your container type. Please use %1. + + + + Database sharing is disabled + + + + Database export is disabled + + + + Database import is disabled + + + + KeeShare unsigned container + + + + KeeShare signed container + + + + Select import source + + + + Select export target + + + + Select import/export file + + + + Clear + 清除 + + + The export container %1 is already referenced. + + + + The import container %1 is already imported. + + + + The container %1 imported and export by different groups. + + + EditGroupWidgetMain @@ -1689,10 +2127,6 @@ Do you want to merge your changes? Unable to fetch favicon. 無法擷取圖示。 - - Hint: You can enable Google as a fallback under Tools>Settings>Security - 提示:可以啟用 Google 當作備案。選項請至 工具>設定>安全性 - Images 圖片 @@ -1701,14 +2135,6 @@ Do you want to merge your changes? All files 所有檔案 - - Select Image - 選擇圖片 - - - Can't read icon - 無法讀取圖示 - Custom icon already exists 自訂圖示已經存在 @@ -1718,8 +2144,36 @@ Do you want to merge your changes? 確認刪除 - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - 有 %1 個項目使用此圖示,並將以預設圖示取代。確定要刪除圖示? + Custom icon successfully downloaded + + + + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + + + + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + + + + No icons were loaded + + + + %n icon(s) already exist in the database + + + + The following icon(s) failed: + + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + @@ -1769,9 +2223,8 @@ This may cause the affected plugins to malfunction. Entry - - Clone - Suffix added to cloned entries - - 複製 + %1 - Clone + @@ -1813,11 +2266,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - - - - Confirm Remove - 確認移除 + 確定移除 %n 個附件? Save attachments @@ -1856,10 +2305,13 @@ This may cause the affected plugins to malfunction. %1 - Unable to open files: + Confirm remove + + + + Unable to open file(s): %1 - 無法打開檔案: -%1 + @@ -1943,6 +2395,106 @@ This may cause the affected plugins to malfunction. Attachments 附件 + + Yes + + + + TOTP + + + + + EntryPreviewWidget + + Generate TOTP Token + 產生 TOTP Token + + + Close + 關閉 + + + General + 一般 + + + Username + 使用者名稱 + + + Password + 密碼 + + + Expiration + 過期 + + + URL + 網址 + + + Attributes + 屬性 + + + Attachments + 附件 + + + Notes + 附註 + + + Autotype + 自動輸入 + + + Window + 視窗 + + + Sequence + 序列 + + + Searching + 搜尋中 + + + Search + 搜尋 + + + Clear + 清除 + + + Never + 從不 + + + [PROTECTED] + [被保護] + + + <b>%1</b>: %2 + attributes line + + + + Enabled + 啟用 + + + Disabled + 停用 + + + Share + + EntryView @@ -1981,6 +2533,11 @@ This may cause the affected plugins to malfunction. Recycle Bin 回收桶 + + [empty] + group has no children + + HostInstaller @@ -1993,61 +2550,6 @@ This may cause the affected plugins to malfunction. 無法保存 native messaging 指令檔。 - - HttpPasswordGeneratorWidget - - Length: - 長度: - - - Character Types - 字元類型 - - - Upper Case Letters - 大寫英文字母 - - - A-Z - A-Z - - - Lower Case Letters - 小寫英文字母 - - - a-z - a-z - - - Numbers - 數字 - - - 0-9 - 0-9 - - - Special Characters - 特殊字元 - - - /*_& ... - /*_& ... - - - Exclude look-alike characters - 去除相似的字元 - - - Ensure that the password contains characters from every group - 確保密碼包含每一組字元 - - - Extended ASCII - 擴展 ASCII 碼 - - KMessageWidget @@ -2073,6 +2575,26 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. 金鑰不正確或是資料庫損壞。 + + missing database headers + 缺少資料庫標頭 + + + Header doesn't match hash + + + + Invalid header id size + 無效的標頭 ID 大小 + + + Invalid header field length + 無效的標頭欄位長度 + + + Invalid header data length + 無效的資料長度 + Kdbx3Writer @@ -2231,10 +2753,6 @@ This may cause the affected plugins to malfunction. KdbxReader - - Invalid cipher uuid length - 無效的加密法 uuid 長度 - Unsupported cipher 不支援的加密 @@ -2289,6 +2807,18 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported KeePass 2 database version. 不支援的 KeePass 2 資料庫版本。 + + Invalid cipher uuid length: %1 (length=%2) + + + + Unable to parse UUID: %1 + + + + Failed to read database file. + + KdbxXmlReader @@ -2360,10 +2890,6 @@ This is a one-way migration. You won't be able to open the imported databas History element with different uuid 具有不同 uuid 的歷史元素 - - Unable to decrypt entry string - 無法解密項目字串 - Duplicate custom attribute found 找到重複的自訂屬性 @@ -2413,6 +2939,12 @@ This is a one-way migration. You won't be able to open the imported databas Translator meant is a binary data inside an entry 無法解壓縮二進位資料 + + XML error: +%1 +Line %2, column %3 + + KeePass1OpenWidget @@ -2576,55 +3108,142 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type 無效的項目欄位類型 - - - KeePass2 - AES: 256-bit - AES: 256 位元 - - - Twofish: 256-bit - Twofish: 256 位元 - - - ChaCha20: 256-bit - ChaCha20: 256 位元 - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – 推薦) + unable to seek to content position + - Main + KeeShare - Existing single-instance lock file is invalid. Launching new instance. - 現有的單實例鎖定檔無效。正在啟動新實例。 + Disabled share + - The lock file could not be created. Single-instance mode disabled. - 無法建立鎖定文件。已停用單一實例模式。 + Import from + - Another instance of KeePassXC is already running. - 其他 KeePassXC 程式正在運行中。 + Export to + - Fatal error while testing the cryptographic functions. - 測試加密函數時發生重大錯誤。 + Synchronize with + - KeePassXC - Error - KeePassXC - 錯誤 + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + 取消 + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Browse + 瀏覽 + + + Generate + 產生 + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + 舊式金鑰檔案格式 + + + You are using a legacy key file format which may become +unsupported in the future. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + 金鑰檔案 + + + All files + 所有檔案 + + + Create Key File... + 建立金鑰檔案…… + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + 選擇金鑰檔案 @@ -2637,10 +3256,6 @@ This is a one-way migration. You won't be able to open the imported databas &Recent databases 最近的資料庫 (&R) - - Import - 匯入 - &Help 幫助 (&H) @@ -2649,14 +3264,6 @@ This is a one-way migration. You won't be able to open the imported databas E&ntries 項目 (&N) - - Copy att&ribute to clipboard - 複製屬性到剪貼簿 (&R) - - - Time-based one-time password - 限時單次密碼 - &Groups 群組 (&G) @@ -2685,30 +3292,10 @@ This is a one-way migration. You won't be able to open the imported databas &Close database 關閉資料庫 (&C) - - &New database - 新的資料庫 (&N) - - - Merge from KeePassX database - 從 KeePassX 資料庫合併 - - - &Add new entry - 新增項目 (&A) - - - &View/Edit entry - 檢視/編輯項目 (&V) - &Delete entry 刪除項目 (&D) - - &Add new group - 新增群組 (&A) - &Edit group 編輯群組 (&E) @@ -2721,14 +3308,6 @@ This is a one-way migration. You won't be able to open the imported databas Sa&ve database as... 將資料庫儲存為…… (&V) - - Change &master key... - 變更主金鑰…… (&M) - - - &Database settings - 資料庫設定 (&D) - Database settings 資料庫設定 @@ -2737,10 +3316,6 @@ This is a one-way migration. You won't be able to open the imported databas &Clone entry 複製項目 (&C) - - &Find - 尋找 (&F) - Copy &username 複製使用者名稱 (&U) @@ -2749,10 +3324,6 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard 將使用者名稱複製到剪貼簿 - - Cop&y password - 複製密碼 (&Y) - Copy password to clipboard 將密碼複製到剪貼簿 @@ -2765,14 +3336,6 @@ This is a one-way migration. You won't be able to open the imported databas Password Generator 密碼產生器 - - &Perform Auto-Type - 執行自動輸入 (&P) - - - &Open URL - 開啟網址 (&O) - &Lock databases 鎖定資料庫 (&L) @@ -2805,22 +3368,6 @@ This is a one-way migration. You won't be able to open the imported databas &Export to CSV file... 匯出到 CSV 檔案…… (&E) - - Import KeePass 1 database... - 匯入 KeePass 1 資料庫…… - - - Import CSV file... - 匯入 CSV 檔…… - - - Re&pair database... - 修復資料庫…… (&P) - - - Show TOTP - 顯示 TOTP - Set up TOTP... 安裝 TOTP @@ -2841,14 +3388,6 @@ This is a one-way migration. You won't be able to open the imported databas Access error for config file %1 設定檔存取錯誤:%1 - - <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - <p>您似乎正在使用 KeePassHTTP 瀏覽器整合功能>此功能已經棄用,未來我們將進行移除。<br>並請改用 KeePassXC-Browser 瀏覽器擴充功能!有關遷移的說明,請造訪我們的 <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">遷移指南</a> (警告 %1/3)</p> - - - read-only - 唯讀 - Settings 設定 @@ -2861,26 +3400,6 @@ This is a one-way migration. You won't be able to open the imported databas Quit KeePassXC 退出 KeePassXC - - KeePass 2 Database - KeePass 2 資料庫 - - - All files - 所有檔案 - - - Open database - 開啟資料庫 - - - Save repaired database - 儲存已修復的資料庫 - - - Writing the database failed. - 寫入資料庫失敗。 - Please touch the button on your YubiKey! 請觸摸你 YubiKey 上的按鈕! @@ -2893,6 +3412,267 @@ This version is not meant for production use. 具有高風險的破壞可能, 請備份你的資料庫. 這個版本不是給一般使用者使用. + + &Donate + + + + Report a &bug + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Copy att&ribute... + + + + TOTP... + + + + &New database... + + + + Create a new database + + + + &Merge from database... + + + + Merge from another KDBX database + + + + &New entry + + + + Add a new entry + + + + &Edit entry + + + + View or edit entry + + + + &New group + + + + Add a new group + + + + Change master &key... + + + + &Database settings... + + + + Copy &password + + + + Perform &Auto-Type + + + + Open &URL + + + + KeePass 1 database... + + + + Import a KeePass 1 database + + + + CSV file... + + + + Import a CSV file + + + + Show TOTP... + + + + Show TOTP QR Code... + + + + Check for Updates... + + + + Share entry + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + + + + + NewDatabaseWizardPage + + WizardPage + + + + En&cryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + + + + Simple Settings + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMasterKey + + Database Master Key + + + + A master key known only to you protects your database. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + OpenSSHKey @@ -2994,125 +3774,30 @@ This version is not meant for production use. - OptionDialog + PasswordEditWidget - Dialog - 對話方塊 + Enter password: + 輸入密碼: - This is required for accessing your databases from ChromeIPass or PassIFox - 啟用後才能讓 ChromeIPass 或 PassIFox 存取你的資料庫 + Confirm password: + - Enable KeePassHTTP server - 啟用 KeePassHTTP 伺服器 + Password + 密碼 - General - 一般 + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - 要求認證時顯示通知 (&O) + Passwords do not match. + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - 只回傳最佳的網址相符項目而非所有網址相符的項目。(&R) - - - &Return only best matching entries - 只回傳最佳的相符項目 (&R) - - - Re&quest to unlock the database if it is locked - 若資料庫已鎖定,則請求解鎖 (&Q) - - - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - 只顯示相同協定的項目。(http://, https://, ftp://, ...) - - - &Match URL schemes - 符合網址協定 (&M) - - - Sort matching entries by &username - 依使用者名稱排序符合項目 (&U) - - - Sort &matching entries by title - 依名稱排序符合項目 (&M) - - - R&emove all shared encryption keys from active database - 從目前的資料庫移除所有共用的加密金鑰 (&E) - - - Re&move all stored permissions from entries in active database - 從目前的資料庫項目中移除所有權限。 - - - Password Generator - 密碼產生器 - - - Advanced - 進階 - - - Always allow &access to entries - 總是允許存取項目 (&A) - - - Always allow &updating entries - 總是允許更新項目 (&U) - - - Only the selected database has to be connected with a client. - 只有所選的資料庫能連接到客戶端。 - - - Searc&h in all opened databases for matching entries - 在所有開啟的資料庫內搜尋相符的項目 (&H) - - - Automatically creating or updating string fields is not supported. - 不支援自動建立或更新文字欄位。 - - - &Return advanced string fields which start with "KPH: " - 回傳 「KPH: 」 起首的進階文字欄位 (&R) - - - HTTP Port: - HTTP 埠: - - - Default port: 19455 - 預設埠:19455 - - - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC 會在 127.0.0.1 上監聽此埠 - - - <b>Warning:</b> The following options can be dangerous! - <b>警告:</b>下列選項可能極具風險! - - - <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - KeePassHTTP 已經棄用,未來我們將進行移除。<br>並請改用 KeePassXC-Browser 瀏覽器擴充功能!有關遷移的說明,請造訪我們的 <a href="https://keepassxc.org/docs/keepassxc-browser-migration">遷移指南</a>。</p> - - - Cannot bind to privileged ports - 無法綁定到特殊權限埠 - - - Cannot bind to privileged ports below 1024! -Using default port 19455. - 無法綁定到 1024 以下的特殊權限埠! -將使用預設埠 19455。 + Generate master password + @@ -3182,18 +3867,10 @@ Using default port 19455. Wordlist: 詞彙表: - - Word Count: - 詞彙數: - Word Separator: 單詞分隔符號: - - Generate - 產生 - Copy 複製 @@ -3206,13 +3883,9 @@ Using default port 19455. Close 關閉 - - Apply - 套用 - Entropy: %1 bit - 資訊熵:%1 位元 + Entropy: %1 bit Password Quality: %1 @@ -3238,6 +3911,171 @@ Using default port 19455. Password quality 極好 + + ExtendedASCII + + + + Switch to advanced mode + + + + Advanced + 進階 + + + Upper Case Letters A to F + + + + A-Z + A-Z + + + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 + + + Braces + + + + {[( + + + + Punctuation + + + + .,:; + + + + Quotes + + + + " ' + + + + Math + + + + <*+!?= + + + + Dashes + + + + \_|-/ + + + + Logograms + + + + #$%&&@^`~ + + + + Switch to simple mode + + + + Simple + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Word Co&unt: + + + + Regenerate + + + + + QApplication + + KeeShare + + + + + QFileDialog + + Select + + + + + QMessageBox + + Overwrite + + + + Delete + 刪除 + + + Move + + + + Empty + + + + Remove + 移除 + + + Skip + + + + Disable + 關閉 + + + Merge + + QObject @@ -3257,34 +4095,18 @@ Using default port 19455. Cannot decrypt message 無法解密訊息 - - Timeout or cannot connect to KeePassXC - 逾時或無法連接到 KeePassXC - Action cancelled or denied 操作被取消或被拒絕 - - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - 無法加密訊息或未找到公開金鑰。是否在 KeePassXC 中啟用了 native messaging 功能? - KeePassXC association failed, try again KeePassXC 關聯失敗,請重試 - - Key change was not successful - 金鑰更改不成功 - Encryption key is not recognized 加密金鑰未被識別 - - No saved databases found - 找不到已保存的資料庫 - Incorrect action 錯誤的操作 @@ -3410,10 +4232,6 @@ Using default port 19455. Insert password to unlock %1: 插入密碼以解除鎖定 %1: - - Failed to load key file %1 : %2 - 未能載入金鑰檔 %1:%2 - WARNING: You are using a legacy key file format which may become unsupported in the future. @@ -3497,12 +4315,6 @@ Available commands: error reading from device 從裝置讀取時出錯 - - file empty ! - - 檔案是空的! - - malformed string 格式不正確的字串 @@ -3539,10 +4351,6 @@ Available commands: Created 已建立 - - Legacy Browser Integration - 舊式瀏覽器整合 - Browser Integration 瀏覽器整合 @@ -3571,10 +4379,6 @@ Available commands: Word count for the diceware passphrase. - - count - - Wordlist for the diceware generator. [Default: EFF English] @@ -3585,27 +4389,441 @@ Available commands: - Length of the generated password. + Invalid value for password length %1. - Use lowercase characters in the generated password. + Could not create entry with path %1. - Use uppercase characters in the generated password. + Enter password for new entry: - Use numbers in the generated password. + Writing the database failed %1. - Use special characters in the generated password. + Successfully added entry %1. - Use extended ASCII in the generated password. + Copy the current TOTP to the clipboard. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Entry's current TOTP copied to the clipboard! + + + + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Invalid value for password length: %1 + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + File %1 does not exist. + 檔案 %1 不存在。 + + + Unable to open file %1. + 無法開啟檔案 %1。 + + + Error while reading the database: +%1 + + + + Error while parsing the database: +%1 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use numbers. + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + Unable to start program %1 + + + + file empty + + + + %1: (row, col) %2,%3 + + + + AES: 256-bit + AES: 256 位元 + + + Twofish: 256-bit + Twofish: 256 位元 + + + ChaCha20: 256-bit + ChaCha20: 256 位元 + + + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – 推薦) + + + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) + + + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Insert password to encrypt database (Press enter to leave blank): + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Remove an entry from the database. + 從資料庫中移除項目。 + + + Path of the entry to remove. + 欲移除的項目路徑。 + + + Existing single-instance lock file is invalid. Launching new instance. + 現有的單實例鎖定檔無效。正在啟動新實例。 + + + The lock file could not be created. Single-instance mode disabled. + 無法建立鎖定文件。已停用單一實例模式。 + + + KeePassXC - cross-platform password manager + KeePassXC - 跨平台的密碼管理工具 + + + filenames of the password databases to open (*.kdbx) + 欲開啟的密碼資料庫檔名 (*.kdbx) + + + path to a custom config file + 自訂設定檔路徑 + + + key file of the database + 資料庫的金鑰檔案 + + + read password of the database from stdin + 從 stdin 讀取資料庫密碼 + + + Parent window handle + 父層視窗控制 + + + Another instance of KeePassXC is already running. + 其他 KeePassXC 程式正在運行中。 + + + Fatal error while testing the cryptographic functions. + 測試加密函數時發生重大錯誤。 + + + KeePassXC - Error + KeePassXC - 錯誤 + + + Database password: + + + + Cannot create new group @@ -3644,11 +4862,97 @@ Available commands: - SearchWidget + SSHAgent - Search... - 搜尋…… + Agent connection failed. + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget Search 搜尋 @@ -3657,315 +4961,332 @@ Available commands: Clear 清除 - - Case Sensitive - 區分大小寫 - Limit search to selected group 限制只搜尋選定的群組 + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + 區分大小寫 + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC:新的金鑰關聯請求 + Active + - You have received an association request for the above key. -If you would like to allow it access to your KeePassXC database -give it a unique name to identify and accept it. - 你已接收到上述金鑰的關聯請求。 -如果你允許透過此金鑰存取你的 KeePassXC 資料庫 -請取一個唯一識別名並按下接受。 + Allow export + - KeePassXC: Overwrite existing key? - KeePassXC:覆蓋現有的金鑰? + Allow import + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - 已存在名為「%1」的共用加密金鑰。 -進行覆蓋? + Own certificate + - KeePassXC: Update Entry - KeePassXC:更新項目 + Fingerprint: + - Do you want to update the information in %1 - %2? - 更新 %1 到 %2 的資訊? + Certificate: + - KeePassXC: Database locked! - KeePassXC:資料庫已鎖定! + Signer + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 目前的資料庫已鎖定! -請解鎖所選的資料庫或選擇其他已解鎖的資料庫。 + Key: + 金鑰: - KeePassXC: Removed keys from database - KeePassXC:從資料庫中移除金鑰 + Generate + 產生 + + + Import + 匯入 + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + 移除 + + + Path + + + + Status + + + + Fingerprint + 指紋 + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + 所有檔案 + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + + ShareObserver + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Not this time + + + + Never + 從不 + + + Always + + + + Just this time + + + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unexpected error + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + + TotpDialog + + Timed Password + 定時型密碼 + + + 000000 + 000000 + + + Copy + 複製 - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + Expires in <b>%n</b> second(s) - - KeePassXC: No keys found - KeePassXC:找不到金鑰 - - - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp Settings 中找不到共享加密金鑰。 - - - KeePassXC: Settings not available! - KeePassXC:設定不可用! - - - The active database does not contain an entry of KeePassHttp Settings. - 目前的資料庫沒有 KeePassHttp Settings 項目。 - - - Removing stored permissions... - 正在移除所有已儲存的權限…… - - - Abort - 中止 - - - KeePassXC: Removed permissions - KeePassXC:已移除權限 - - - Successfully removed permissions from %n entries. - - - - KeePassXC: No entry with permissions found! - KeePassXC:找不到帶有權限的項目! - - - The active database does not contain an entry with permissions. - 目前的資料庫中沒有帶有權限的項目。 - - SettingsWidget + TotpExportSettingsDialog - Application Settings - 應用程式設定 + Copy + 複製 - General - 一般 - - - Security - 安全性 - - - Access error for config file %1 - 設定檔存取錯誤:%1 - - - - SettingsWidgetGeneral - - Basic Settings - 基本設定 - - - Start only a single instance of KeePassXC - 只能啟動單一 KeePassXC 程式 - - - Remember last databases - 記住最近的資料庫 - - - Remember last key files and security dongles - 記住最近的金鑰檔案與安全加密狗 - - - Load previous databases on startup - 啟動時載入之前的資料庫 - - - Automatically save on exit - 離開時,自動儲存 - - - Automatically save after every change - 修改後,自動儲存 - - - Automatically reload the database when modified externally - 當有外部修改時自動重新載入資料庫 - - - Minimize when copying to clipboard - 在複製到剪貼簿時最小化 - - - Minimize window at application startup - 程式啟動時視窗最小化 - - - Use group icon on entry creation - 新增項目時使用群組圖示 - - - Don't mark database as modified for non-data changes (e.g., expanding groups) - 未變更資料時(例如:擴展群組時)不要將資料庫標記為已修改 - - - Hide the Details view - 隱藏詳細資訊檢視 - - - Show a system tray icon - 顯示工作列圖示 - - - Hide window to system tray when minimized - 將視窗最小化至工作列 - - - Hide window to system tray instead of app exit - 將視窗最小化至工作列而非關閉程式 - - - Dark system tray icon - 深色系統列圖示 - - - Language - 語言 - - - Auto-Type - 自動輸入 - - - Use entry title to match windows for global Auto-Type - 使用項目標題來匹配全域自動輸入的視窗 - - - Use entry URL to match windows for global Auto-Type - 使用項目 URL 來匹配全域自動輸入的視窗 - - - Always ask before performing Auto-Type - 在執行自動輸入前始終詢問 - - - Global Auto-Type shortcut - 全域自動輸入快捷鍵 - - - Auto-Type delay - 自動輸入延遲 - - - ms - Milliseconds - 毫秒 - - - Startup - 啟動 - - - File Management - 檔案管理 - - - Safely save database files (may be incompatible with Dropbox, etc) + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - Backup database file before saving + There was an error creating the QR code. - Entry Management - 項目管理 - - - General - 一般 - - - - SettingsWidgetSecurity - - Timeouts - 超時 - - - Clear clipboard after - 多久後清除剪貼簿 - - - sec - Seconds - - - - Lock databases after inactivity of - 多久沒有動作之後鎖定資料庫 - - - Convenience - 便利 - - - Lock databases when session is locked or lid is closed - 當工作階段鎖定或蓋上螢幕時鎖定資料庫 - - - Lock databases after minimizing the window - 最小化視窗後鎖定資料庫 - - - Don't require password repeat when it is visible - 顯示密碼時不需要重複輸入密碼 - - - Show passwords in cleartext by default - 預設以明碼顯示密碼 - - - Hide passwords in the preview panel - 在預覽面板中隱藏密碼 - - - Hide entry notes by default - 預設隱藏項目備註 - - - Privacy - 隱私 - - - Use Google as fallback for downloading website icons - 使用 Google 搜尋作為下載網站圖示的備案 - - - Re-lock previously locked database after performing Auto-Type + Closing in %1 seconds. - SetupTotpDialog + TotpSetupDialog Setup TOTP 安裝 TOTP @@ -3987,59 +5308,84 @@ Please unlock the selected database or choose another one which is unlocked.使用自訂設定 - Note: Change these settings only if you know what you are doing. - 注意:了解這些選項之前切勿進行變更。 + Custom Settings + Time step: 時間間隔: - 8 digits - 8 位數 - - - 6 digits - 6 位數 + sec + Seconds + Code size: 代碼長度: - sec - Seconds - + 6 digits + 6 位數 + + + 7 digits + + + + 8 digits + 8 位數 - TotpDialog + UpdateCheckDialog - Timed Password - 定時型密碼 + Checking for updates + - 000000 - 000000 + Checking for updates... + - Copy - 複製 + Close + 關閉 - Expires in - 還剩下 + Update Error! + - seconds - + An error occurred in retrieving update information. + - - - UnlockDatabaseWidget - Unlock database - 解鎖資料庫 + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + @@ -4074,42 +5420,26 @@ Please unlock the selected database or choose another one which is unlocked. - main + YubiKeyEditWidget - Remove an entry from the database. - 從資料庫中移除項目。 + Refresh + 重新整理 - Path of the database. - 資料庫的路徑。 + YubiKey Challenge-Response + - Path of the entry to remove. - 欲移除的項目路徑。 + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + - KeePassXC - cross-platform password manager - KeePassXC - 跨平台的密碼管理工具 + No YubiKey detected, please ensure it's plugged in. + - filenames of the password databases to open (*.kdbx) - 欲開啟的密碼資料庫檔名 (*.kdbx) - - - path to a custom config file - 自訂設定檔路徑 - - - key file of the database - 資料庫的金鑰檔案 - - - read password of the database from stdin - 從 stdin 讀取資料庫密碼 - - - Parent window handle - 父層視窗控制 + No YubiKey inserted. + \ No newline at end of file diff --git a/share/windows/create-ico.sh b/share/windows/create-ico.sh new file mode 100644 index 000000000..44ae06a04 --- /dev/null +++ b/share/windows/create-ico.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +if [[ -z "$1" ]]; then + echo "You must include an SVG file to convert!" + exit 1 +fi + +outfile=$2 +if [[ -z "outfile" ]]; then + outfile="logo.ico" +fi + +echo "Generating $outfile from $1..." +size_list=(16 24 32 48 64 128 256) +for size in ${size_list[@]}; do + inkscape -z -e $size.png -w $size -h $size "$1" >/dev/null 2>/dev/null +done + +images=`printf "%s.png " "${size_list[@]}"` +convert $images $outfile + +rm $images diff --git a/share/windows/icon.rc b/share/windows/icon.rc index 42221fe4e..aa025d85c 100644 --- a/share/windows/icon.rc +++ b/share/windows/icon.rc @@ -1 +1,2 @@ IDI_ICON1 ICON DISCARDABLE "keepassxc.ico" +IDI_KDBX ICON DISCARDABLE "keepassxc-kdbx.ico" \ No newline at end of file diff --git a/share/windows/keepassxc-kdbx.ico b/share/windows/keepassxc-kdbx.ico new file mode 100644 index 000000000..0cec1e4ce Binary files /dev/null and b/share/windows/keepassxc-kdbx.ico differ diff --git a/share/windows/keepassxc.ico b/share/windows/keepassxc.ico index a77c8391c..58ae8c2ba 100644 Binary files a/share/windows/keepassxc.ico and b/share/windows/keepassxc.ico differ diff --git a/share/windows/wix-patch.xml b/share/windows/wix-patch.xml index 1c1d222a9..205ffa352 100644 --- a/share/windows/wix-patch.xml +++ b/share/windows/wix-patch.xml @@ -5,4 +5,11 @@ Name="KeePassXC" Icon="ProductIcon.ico" WorkingDirectory="INSTALL_ROOT" Advertise="yes" /> + + + + + + + diff --git a/share/wizard/background-pixmap.png b/share/wizard/background-pixmap.png new file mode 100644 index 000000000..e64d87041 Binary files /dev/null and b/share/wizard/background-pixmap.png differ diff --git a/share/wizard/background-pixmap.svg b/share/wizard/background-pixmap.svg new file mode 100644 index 000000000..af48dcbc5 --- /dev/null +++ b/share/wizard/background-pixmap.svg @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/snapcraft.yaml b/snapcraft.yaml index 612fa2e64..16eb0890d 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -1,5 +1,5 @@ name: keepassxc -version: 2.3.4 +version: 2.4.0 grade: stable summary: Community-driven port of the Windows application “KeePass Password Safe” description: | @@ -7,12 +7,15 @@ description: | personal data management. It has a light interface, is cross-platform and published under the terms of the GNU General Public License. confinement: strict +base: core18 apps: keepassxc: command: desktop-launch keepassxc - plugs: [unity7, x11, opengl, gsettings, home, network, network-bind, removable-media, raw-usb] + plugs: [unity7, x11, opengl, gsettings, home, network, network-bind, removable-media, raw-usb, wayland, desktop-legacy] desktop: usr/share/applications/org.keepassxc.KeePassXC.desktop + environment: + DISABLE_WAYLAND: 1 cli: command: keepassxc-cli plugs: [gsettings, home, removable-media, raw-usb] @@ -27,16 +30,16 @@ parts: configflags: - -DCMAKE_BUILD_TYPE=Release - -DCMAKE_INSTALL_PREFIX=/usr - - -DCMAKE_LIBRARY_PATH=/opt/keepassxc-libs/lib/x86_64-linux-gnu - - -DCMAKE_INCLUDE_PATH=/opt/keepassxc-libs/include - -DKEEPASSXC_DIST_TYPE=Snap - -DKEEPASSXC_BUILD_TYPE=Release - -DWITH_TESTS=OFF - -DWITH_XC_ALL=ON + - -DWITH_XC_KEESHARE_SECURE=ON build-packages: - g++ - libgcrypt20-dev - libqt5x11extras5-dev + - libqt5svg5-dev - qtbase5-dev - qttools5-dev - qttools5-dev-tools @@ -46,24 +49,51 @@ parts: - libyubikey-dev - libykpers-1-dev - libsodium-dev + - libargon2-0-dev + - libqrencode-dev + - libquazip5-dev stage-packages: - dbus - qttranslations5-l10n # common translations - - libgcrypt20-18 + - libgcrypt20 - libykpers-1-1 - libargon2-0 - libsodium23 - libxtst6 - libqt5x11extras5 + - libqt5svg5 + - libqrencode3 + - libqt5concurrent5 + - libquazip5-1 - libusb-1.0-0 + - qtwayland5 override-build: | snapcraftctl build sed -i 's|Icon=keepassxc|Icon=${SNAP}/usr/share/icons/hicolor/256x256/apps/keepassxc.png|g' $SNAPCRAFT_PART_INSTALL/usr/share/applications/org.keepassxc.KeePassXC.desktop organize: usr/share/qt5/translations/*.qm: usr/share/keepassxc/translations/ - opt/keepassxc-libs/lib/x86_64-linux-gnu/*: usr/lib/x86_64-linux-gnu/ - opt/keepassxc-libs/share/locale/*: usr/share/locale/ stage: - -opt after: [desktop-qt5] + desktop-qt5: + source: https://github.com/ubuntu/snapcraft-desktop-helpers.git + source-subdir: qt + plugin: make + make-parameters: ["FLAVOR=qt5"] + build-packages: + - qtbase5-dev + - dpkg-dev + stage-packages: + - libxkbcommon0 + - ttf-ubuntu-font-family + - dmz-cursor-theme + - light-themes + - adwaita-icon-theme + - gnome-themes-standard + - shared-mime-info + - libqt5gui5 + - libgdk-pixbuf2.0-0 + - libqt5svg5 # for loading icon themes which are svg + - try: [appmenu-qt5] # not available on core18 + - locales-all diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 28a0753e9..110dc606c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2017 KeePassXC Team +# Copyright (C) 2018 KeePassXC Team # Copyright (C) 2010 Felix Geyer # # This program is free software: you can redistribute it and/or modify @@ -17,201 +17,210 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h) - -include(GetGitRevisionDescription) -get_git_head_revision(GIT_REFSPEC GIT_HEAD) -git_describe(GIT_DESCRIBE --long) - -if (NOT GIT_HEAD OR NOT GIT_DESCRIBE) - set(GIT_HEAD "") - set(GIT_DESCRIBE "") -endif() +configure_file(git-info.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/git-info.h) find_library(ZXCVBN_LIBRARIES zxcvbn) if(NOT ZXCVBN_LIBRARIES) - add_library(zxcvbn STATIC zxcvbn/zxcvbn.c) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn) - set(ZXCVBN_LIBRARIES zxcvbn) + add_library(zxcvbn STATIC zxcvbn/zxcvbn.c) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn) + set(ZXCVBN_LIBRARIES zxcvbn) endif(NOT ZXCVBN_LIBRARIES) -configure_file(version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY) - set(keepassx_SOURCES - core/AutoTypeAssociations.cpp - core/AsyncTask.h - core/AutoTypeMatch.cpp - core/Config.cpp - core/CsvParser.cpp - core/CustomData.cpp - core/Database.cpp - core/DatabaseIcons.cpp - core/Entry.cpp - core/EntryAttachments.cpp - core/EntryAttributes.cpp - core/EntrySearcher.cpp - core/FilePath.cpp - core/Global.h - core/Group.cpp - core/InactivityTimer.cpp - core/ListDeleter.h - core/Metadata.cpp - core/PasswordGenerator.cpp - core/PassphraseGenerator.cpp - core/SignalMultiplexer.cpp - core/ScreenLockListener.cpp - core/ScreenLockListener.h - core/ScreenLockListenerPrivate.h - core/ScreenLockListenerPrivate.cpp - core/TimeDelta.cpp - core/TimeInfo.cpp - core/Tools.cpp - core/Translator.cpp - core/Uuid.cpp - core/Base32.h - core/Base32.cpp - cli/Utils.cpp - cli/Utils.h - crypto/Crypto.cpp - crypto/CryptoHash.cpp - crypto/Random.cpp - crypto/SymmetricCipher.cpp - crypto/SymmetricCipherBackend.h - crypto/SymmetricCipherGcrypt.cpp - crypto/kdf/Kdf.cpp - crypto/kdf/Kdf_p.h - crypto/kdf/AesKdf.cpp - crypto/kdf/Argon2Kdf.cpp - format/CsvExporter.cpp - format/KeePass1.h - format/KeePass1Reader.cpp - format/KeePass2.cpp - format/KeePass2RandomStream.cpp - format/KeePass2Repair.cpp - format/KdbxReader.cpp - format/KdbxWriter.cpp - format/KdbxXmlReader.cpp - format/KeePass2Reader.cpp - format/KeePass2Writer.cpp - format/Kdbx3Reader.cpp - format/Kdbx3Writer.cpp - format/Kdbx4Reader.cpp - format/Kdbx4Writer.cpp - format/KdbxXmlWriter.cpp - gui/AboutDialog.cpp - gui/Application.cpp - gui/CategoryListWidget.cpp - gui/ChangeMasterKeyWidget.cpp - gui/Clipboard.cpp - gui/CloneDialog.cpp - gui/DatabaseOpenWidget.cpp - gui/DatabaseRepairWidget.cpp - gui/DatabaseSettingsWidget.cpp - gui/DatabaseTabWidget.cpp - gui/DatabaseWidget.cpp - gui/DatabaseWidgetStateSync.cpp - gui/DetailsWidget.cpp - gui/DialogyWidget.cpp - gui/DragTabBar.cpp - gui/EditWidget.cpp - gui/EditWidgetIcons.cpp - gui/EditWidgetProperties.cpp - gui/FileDialog.cpp - gui/Font.cpp - gui/IconModels.cpp - gui/KeePass1OpenWidget.cpp - gui/KMessageWidget.cpp - gui/LineEdit.cpp - gui/MainWindow.cpp - gui/MessageBox.cpp - gui/MessageWidget.cpp - gui/PasswordEdit.cpp - gui/PasswordGeneratorWidget.cpp - gui/SettingsWidget.cpp - gui/SearchWidget.cpp - gui/SortFilterHideProxyModel.cpp - gui/SetupTotpDialog.cpp - gui/TotpDialog.cpp - gui/UnlockDatabaseWidget.cpp - gui/UnlockDatabaseDialog.cpp - gui/WelcomeWidget.cpp - gui/widgets/ElidedLabel.cpp - gui/csvImport/CsvImportWidget.cpp - gui/csvImport/CsvImportWizard.cpp - gui/csvImport/CsvParserModel.cpp - gui/entry/AutoTypeAssociationsModel.cpp - gui/entry/AutoTypeMatchModel.cpp - gui/entry/AutoTypeMatchView.cpp - gui/entry/EditEntryWidget.cpp - gui/entry/EditEntryWidget_p.h - gui/entry/EntryAttachmentsModel.cpp - gui/entry/EntryAttachmentsWidget.cpp - gui/entry/EntryAttributesModel.cpp - gui/entry/EntryHistoryModel.cpp - gui/entry/EntryModel.cpp - gui/entry/EntryView.cpp - gui/group/EditGroupWidget.cpp - gui/group/GroupModel.cpp - gui/group/GroupView.cpp - keys/ChallengeResponseKey.h - keys/CompositeKey.cpp - keys/drivers/YubiKey.h - keys/FileKey.cpp - keys/Key.h - keys/PasswordKey.cpp - keys/YkChallengeResponseKey.cpp - streams/HashedBlockStream.cpp - streams/HmacBlockStream.cpp - streams/LayeredStream.cpp - streams/qtiocompressor.cpp - streams/StoreDataStream.cpp - streams/SymmetricCipherStream.cpp - totp/totp.h - totp/totp.cpp -) + core/AutoTypeAssociations.cpp + core/AutoTypeMatch.cpp + core/Compare.cpp + core/Config.cpp + core/CsvParser.cpp + core/CustomData.cpp + core/Database.cpp + core/DatabaseIcons.cpp + core/Entry.cpp + core/EntryAttachments.cpp + core/EntryAttributes.cpp + core/EntrySearcher.cpp + core/FilePath.cpp + core/FileWatcher.cpp + core/Bootstrap.cpp + core/Group.cpp + core/InactivityTimer.cpp + core/Merger.cpp + core/Metadata.cpp + core/PasswordGenerator.cpp + core/PassphraseGenerator.cpp + core/SignalMultiplexer.cpp + core/ScreenLockListener.cpp + core/ScreenLockListenerPrivate.cpp + core/TimeDelta.cpp + core/TimeInfo.cpp + core/Clock.cpp + core/Tools.cpp + core/Translator.cpp + core/Base32.cpp + cli/Utils.cpp + cli/TextStream.cpp + crypto/Crypto.cpp + crypto/CryptoHash.cpp + crypto/Random.cpp + crypto/SymmetricCipher.cpp + crypto/SymmetricCipherGcrypt.cpp + crypto/kdf/Kdf.cpp + crypto/kdf/AesKdf.cpp + crypto/kdf/Argon2Kdf.cpp + format/CsvExporter.cpp + format/KeePass1Reader.cpp + format/KeePass2.cpp + format/KeePass2RandomStream.cpp + format/KdbxReader.cpp + format/KdbxWriter.cpp + format/KdbxXmlReader.cpp + format/KeePass2Reader.cpp + format/KeePass2Writer.cpp + format/Kdbx3Reader.cpp + format/Kdbx3Writer.cpp + format/Kdbx4Reader.cpp + format/Kdbx4Writer.cpp + format/KdbxXmlWriter.cpp + gui/AboutDialog.cpp + gui/Application.cpp + gui/CategoryListWidget.cpp + gui/Clipboard.cpp + gui/CloneDialog.cpp + gui/DatabaseOpenWidget.cpp + gui/DatabaseTabWidget.cpp + gui/DatabaseWidget.cpp + gui/DatabaseWidgetStateSync.cpp + gui/EntryPreviewWidget.cpp + gui/DialogyWidget.cpp + gui/DragTabBar.cpp + gui/EditWidget.cpp + gui/EditWidgetIcons.cpp + gui/EditWidgetProperties.cpp + gui/FileDialog.cpp + gui/Font.cpp + gui/IconModels.cpp + gui/KeePass1OpenWidget.cpp + gui/KMessageWidget.cpp + gui/LineEdit.cpp + gui/MainWindow.cpp + gui/MessageBox.cpp + gui/MessageWidget.cpp + gui/PasswordEdit.cpp + gui/PasswordGeneratorWidget.cpp + gui/ApplicationSettingsWidget.cpp + gui/SearchWidget.cpp + gui/SortFilterHideProxyModel.cpp + gui/SquareSvgWidget.cpp + gui/TotpSetupDialog.cpp + gui/TotpDialog.cpp + gui/TotpExportSettingsDialog.cpp + gui/DatabaseOpenDialog.cpp + gui/WelcomeWidget.cpp + gui/csvImport/CsvImportWidget.cpp + gui/csvImport/CsvImportWizard.cpp + gui/csvImport/CsvParserModel.cpp + gui/entry/AutoTypeAssociationsModel.cpp + gui/entry/AutoTypeMatchModel.cpp + gui/entry/AutoTypeMatchView.cpp + gui/entry/EditEntryWidget.cpp + gui/entry/EntryAttachmentsModel.cpp + gui/entry/EntryAttachmentsWidget.cpp + gui/entry/EntryAttributesModel.cpp + gui/entry/EntryHistoryModel.cpp + gui/entry/EntryModel.cpp + gui/entry/EntryView.cpp + gui/group/EditGroupWidget.cpp + gui/group/GroupModel.cpp + gui/group/GroupView.cpp + gui/masterkey/KeyComponentWidget.cpp + gui/masterkey/PasswordEditWidget.cpp + gui/masterkey/YubiKeyEditWidget.cpp + gui/masterkey/KeyFileEditWidget.cpp + gui/dbsettings/DatabaseSettingsWidget.cpp + gui/dbsettings/DatabaseSettingsDialog.cpp + gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp + gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp + gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp + gui/dbsettings/DatabaseSettingsWidgetMasterKey.cpp + gui/settings/SettingsWidget.cpp + gui/widgets/ElidedLabel.cpp + gui/widgets/PopupHelpWidget.cpp + gui/wizard/NewDatabaseWizard.cpp + gui/wizard/NewDatabaseWizardPage.cpp + gui/wizard/NewDatabaseWizardPageMetaData.cpp + gui/wizard/NewDatabaseWizardPageEncryption.cpp + gui/wizard/NewDatabaseWizardPageMasterKey.cpp + keys/CompositeKey.cpp + keys/FileKey.cpp + keys/PasswordKey.cpp + keys/YkChallengeResponseKey.cpp + streams/HashedBlockStream.cpp + streams/HmacBlockStream.cpp + streams/LayeredStream.cpp + streams/qtiocompressor.cpp + streams/StoreDataStream.cpp + streams/SymmetricCipherStream.cpp + totp/totp.cpp) if(APPLE) - set(keepassx_SOURCES ${keepassx_SOURCES} - core/ScreenLockListenerMac.h - core/ScreenLockListenerMac.cpp - core/MacPasteboard.h - core/MacPasteboard.cpp - ) + set(keepassx_SOURCES + ${keepassx_SOURCES} + core/ScreenLockListenerMac.cpp + core/MacPasteboard.cpp + gui/macutils/MacUtils.cpp + gui/macutils/AppKitImpl.mm) endif() if(UNIX AND NOT APPLE) - set(keepassx_SOURCES ${keepassx_SOURCES} - core/ScreenLockListenerDBus.h - core/ScreenLockListenerDBus.cpp - gui/MainWindowAdaptor.cpp - ) + set(keepassx_SOURCES + ${keepassx_SOURCES} + core/ScreenLockListenerDBus.cpp + gui/MainWindowAdaptor.cpp) endif() if(MINGW) - set(keepassx_SOURCES ${keepassx_SOURCES} - core/ScreenLockListenerWin.h - core/ScreenLockListenerWin.cpp - ) + set(keepassx_SOURCES + ${keepassx_SOURCES} + core/ScreenLockListenerWin.cpp) +endif() +if(MINGW OR (UNIX AND NOT APPLE)) + set(keepassx_SOURCES + ${keepassx_SOURCES} + core/OSEventFilter.cpp) endif() -set(keepassx_SOURCES_MAINEXE - main.cpp -) +set(keepassx_SOURCES_MAINEXE main.cpp) add_feature_info(Auto-Type WITH_XC_AUTOTYPE "Automatic password typing") add_feature_info(Networking WITH_XC_NETWORKING "Compile KeePassXC with network access code (e.g. for downloading website icons)") add_feature_info(KeePassXC-Browser WITH_XC_BROWSER "Browser integration with KeePassXC-Browser") -add_feature_info(KeePassHTTP WITH_XC_HTTP "Browser integration compatible with ChromeIPass and PassIFox (deprecated, implies Networking)") add_feature_info(SSHAgent WITH_XC_SSHAGENT "SSH agent integration compatible with KeeAgent") +add_feature_info(KeeShare WITH_XC_KEESHARE "Sharing integration with KeeShare") +add_feature_info(KeeShare-Secure WITH_XC_KEESHARE_SECURE "Sharing integration with KeeShare with secure sources") add_feature_info(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response") - -add_subdirectory(http) +if(APPLE) + add_feature_info(TouchID WITH_XC_TOUCHID "TouchID integration") +endif() set(BROWSER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/browser) add_subdirectory(browser) add_subdirectory(proxy) if(WITH_XC_BROWSER) set(keepassxcbrowser_LIB keepassxcbrowser) + set(keepassx_SOURCES ${keepassx_SOURCES} gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp) endif() add_subdirectory(autotype) add_subdirectory(cli) +add_subdirectory(qrcode) +set(qrcode_LIB qrcode) + +add_subdirectory(crypto/ssh) +if(WITH_XC_CRYPTO_SSH) + set(crypto_ssh_LIB crypto_ssh) +endif() + +add_subdirectory(keeshare) +if(WITH_XC_KEESHARE) + set(keeshare_LIB keeshare) +endif() add_subdirectory(sshagent) if(WITH_XC_SSHAGENT) @@ -219,28 +228,31 @@ if(WITH_XC_SSHAGENT) endif() set(autotype_SOURCES - core/Tools.cpp - autotype/AutoType.cpp - autotype/AutoTypeAction.cpp - autotype/AutoTypePlatformPlugin.h - autotype/AutoTypeSelectDialog.cpp - autotype/AutoTypeSelectView.cpp - autotype/ShortcutWidget.cpp - autotype/WildcardMatcher.cpp - autotype/WindowSelectComboBox.cpp - autotype/test/AutoTypeTestInterface.h -) + core/Tools.cpp + autotype/AutoType.cpp + autotype/AutoTypeAction.cpp + autotype/AutoTypeSelectDialog.cpp + autotype/AutoTypeSelectView.cpp + autotype/ShortcutWidget.cpp + autotype/WildcardMatcher.cpp + autotype/WindowSelectComboBox.cpp) if(MINGW) - set(keepassx_SOURCES_MAINEXE - ${keepassx_SOURCES_MAINEXE} - ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) + set(keepassx_SOURCES_MAINEXE ${keepassx_SOURCES_MAINEXE} ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) endif() if(WITH_XC_YUBIKEY) - list(APPEND keepassx_SOURCES keys/drivers/YubiKey.cpp) + list(APPEND keepassx_SOURCES keys/drivers/YubiKey.cpp) else() - list(APPEND keepassx_SOURCES keys/drivers/YubiKeyStub.cpp) + list(APPEND keepassx_SOURCES keys/drivers/YubiKey.h keys/drivers/YubiKeyStub.cpp) +endif() + +if(WITH_XC_NETWORKING) + list(APPEND keepassx_SOURCES updatecheck/UpdateChecker.cpp gui/UpdateCheckDialog.cpp) +endif() + +if(WITH_XC_TOUCHID) + list(APPEND keepassx_SOURCES touchid/TouchID.mm) endif() add_library(autotype STATIC ${autotype_SOURCES}) @@ -250,29 +262,38 @@ add_library(keepassx_core STATIC ${keepassx_SOURCES}) set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) target_link_libraries(keepassx_core - autotype - ${keepassxchttp_LIB} - ${keepassxcbrowser_LIB} - ${sshagent_LIB} - Qt5::Core - Qt5::Network - Qt5::Concurrent - Qt5::Widgets - ${CURL_LIBRARIES} - ${YUBIKEY_LIBRARIES} - ${ZXCVBN_LIBRARIES} - ${ARGON2_LIBRARIES} - ${GCRYPT_LIBRARIES} - ${GPGERROR_LIBRARIES} - ${ZLIB_LIBRARIES}) + autotype + ${keepassxcbrowser_LIB} + ${qrcode_LIB} + Qt5::Core + Qt5::Concurrent + Qt5::Network + Qt5::Widgets + ${YUBIKEY_LIBRARIES} + ${ZXCVBN_LIBRARIES} + ${ARGON2_LIBRARIES} + ${GCRYPT_LIBRARIES} + ${GPGERROR_LIBRARIES} + ${ZLIB_LIBRARIES}) + +if(WITH_XC_SSHAGENT) + target_link_libraries(keepassx_core sshagent) +endif() +if(WITH_XC_KEESHARE) + target_link_libraries(keepassx_core keeshare) +endif() if(APPLE) - target_link_libraries(keepassx_core "-framework Foundation") + target_link_libraries(keepassx_core "-framework Foundation -framework AppKit") if(Qt5MacExtras_FOUND) - target_link_libraries(keepassx_core Qt5::MacExtras) + target_link_libraries(keepassx_core Qt5::MacExtras) + endif() + if(WITH_XC_TOUCHID) + target_link_libraries(keepassx_core "-framework Security") + target_link_libraries(keepassx_core "-framework LocalAuthentication") endif() endif() -if (UNIX AND NOT APPLE) +if(UNIX AND NOT APPLE) target_link_libraries(keepassx_core Qt5::DBus) endif() if(MINGW) @@ -280,15 +301,15 @@ if(MINGW) endif() if(MINGW) - include(GenerateProductVersion) - generate_product_version( - WIN32_ProductVersionFiles - NAME "KeePassXC" - COMPANY_NAME "KeePassXC Team" - VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR} - VERSION_MINOR ${KEEPASSXC_VERSION_MINOR} - VERSION_PATCH ${KEEPASSXC_VERSION_PATCH} - ) + include(GenerateProductVersion) + generate_product_version( + WIN32_ProductVersionFiles + NAME "KeePassXC" + COMPANY_NAME "KeePassXC Team" + VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR} + VERSION_MINOR ${KEEPASSXC_VERSION_MINOR} + VERSION_PATCH ${KEEPASSXC_VERSION_PATCH} + ) endif() add_executable(${PROGNAME} WIN32 ${keepassx_SOURCES_MAINEXE} ${WIN32_ProductVersionFiles}) @@ -297,111 +318,120 @@ target_link_libraries(${PROGNAME} keepassx_core) set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON) if(APPLE AND WITH_APP_BUNDLE) - configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) - set_target_properties(${PROGNAME} PROPERTIES - MACOSX_BUNDLE ON - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) + configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) + set_target_properties(${PROGNAME} PROPERTIES + MACOSX_BUNDLE ON + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) - if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") - install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" - DESTINATION "${DATA_INSTALL_DIR}") - endif() + if(WITH_XC_TOUCHID) + set_target_properties(${PROGNAME} PROPERTIES + CPACK_BUNDLE_APPLE_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/share/macosx/keepassxc.entitlements") + endif() - set(CPACK_GENERATOR "DragNDrop") - set(CPACK_DMG_FORMAT "UDBZ") - set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/share/macosx/DS_Store.in") - set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/share/macosx/background.tiff") - set(CPACK_DMG_VOLUME_NAME "${PROGNAME}") - set(CPACK_SYSTEM_NAME "OSX") - set(CPACK_STRIP_FILES ON) - set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}") - include(CPack) + if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") + install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" + DESTINATION "${DATA_INSTALL_DIR}") + endif() - add_custom_command(TARGET ${PROGNAME} - POST_BUILD - COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src - COMMENT "Deploying app bundle") + set(CPACK_GENERATOR "DragNDrop") + set(CPACK_DMG_FORMAT "UDBZ") + set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/share/macosx/DS_Store.in") + set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/share/macosx/background.tiff") + set(CPACK_DMG_VOLUME_NAME "${PROGNAME}") + set(CPACK_SYSTEM_NAME "OSX") + set(CPACK_STRIP_FILES ON) + set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}") + include(CPack) + + add_custom_command(TARGET ${PROGNAME} + POST_BUILD + COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src + COMMENT "Deploying app bundle") endif() install(TARGETS ${PROGNAME} - BUNDLE DESTINATION . COMPONENT Runtime - RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) + BUNDLE DESTINATION . COMPONENT Runtime + RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) if(MINGW) - if(${CMAKE_SIZEOF_VOID_P} EQUAL "8") - set(OUTPUT_FILE_POSTFIX "Win64") - else() - set(OUTPUT_FILE_POSTFIX "Win32") - endif() + if(${CMAKE_SIZEOF_VOID_P} EQUAL "8") + set(OUTPUT_FILE_POSTFIX "Win64") + else() + set(OUTPUT_FILE_POSTFIX "Win32") + endif() - # We have to copy the license file in the configuration phase. - # CMake checks that CPACK_RESOURCE_FILE_LICENSE actually exists and - # we have to copy it because WiX needs it to have a .txt extension. - execute_process(COMMAND ${CMAKE_COMMAND} -E copy - "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" - "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") + # We have to copy the license file in the configuration phase. + # CMake checks that CPACK_RESOURCE_FILE_LICENSE actually exists and + # we have to copy it because WiX needs it to have a .txt extension. + execute_process(COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" + "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") - string(REGEX REPLACE "-snapshot$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) + string(REGEX REPLACE "-.*$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) - set(CPACK_GENERATOR "ZIP;NSIS") - set(CPACK_STRIP_FILES OFF) - set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") - set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) - set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION_CLEAN}) - set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") - string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") - set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) - set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") - set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") - set(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\${PROGNAME}.exe") - string(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/windows/installer-wizard.bmp") - set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}") - set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROGNAME}.lnk' '$INSTDIR\\\\${PROGNAME}.exe'") - set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROGNAME}.lnk'") - set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") - set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") - set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") - set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") - set(CPACK_NSIS_URL_INFO_ABOUT "https://keepassxc.org") - set(CPACK_NSIS_DISPLAY_NAME ${PROGNAME}) - set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}") - set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe") - set(CPACK_WIX_UPGRADE_GUID 88785A72-3EAE-4F29-89E3-BC6B19BA9A5B) - set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") - set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp") - set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp") - set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml") - set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml") - set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org") - set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") - include(CPack) + set(CPACK_GENERATOR "ZIP;WIX") + set(CPACK_STRIP_FILES OFF) + set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") + set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) + set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION_CLEAN}) + set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") + string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") + set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) + set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") + set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") + set(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\${PROGNAME}.exe") + string(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/windows/installer-wizard.bmp") + set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}") + set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROGNAME}.lnk' '$INSTDIR\\\\${PROGNAME}.exe'") + set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROGNAME}.lnk'") + set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") + set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") + set(CPACK_NSIS_URL_INFO_ABOUT "https://keepassxc.org") + set(CPACK_NSIS_DISPLAY_NAME ${PROGNAME}) + set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}") + set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe") + set(CPACK_WIX_UPGRADE_GUID 88785A72-3EAE-4F29-89E3-BC6B19BA9A5B) + set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") + set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp") + set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp") + set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml") + set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml") + set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org") + set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") + include(CPack) - install(CODE " - set(gp_tool \"objdump\") - " COMPONENT Runtime) + install(CODE "set(gp_tool \"objdump\")" COMPONENT Runtime) - include(DeployQt4) - install_qt4_executable(${PROGNAME}.exe) - - # install Qt5 plugins - set(PLUGINS_DIR ${Qt5_PREFIX}/share/qt5/plugins) - install(FILES - ${PLUGINS_DIR}/platforms/qwindows$<$:d>.dll - ${PLUGINS_DIR}/platforms/qdirect2d$<$:d>.dll - DESTINATION "platforms") - install(FILES ${PLUGINS_DIR}/styles/qwindowsvistastyle$<$:d>.dll DESTINATION "styles") - install(FILES ${PLUGINS_DIR}/platforminputcontexts/qtvirtualkeyboardplugin$<$:d>.dll DESTINATION "platforminputcontexts") - install(FILES ${PLUGINS_DIR}/iconengines/qsvgicon$<$:d>.dll DESTINATION "iconengines") - install(FILES - ${PLUGINS_DIR}/imageformats/qgif$<$:d>.dll - ${PLUGINS_DIR}/imageformats/qicns$<$:d>.dll - ${PLUGINS_DIR}/imageformats/qico$<$:d>.dll - ${PLUGINS_DIR}/imageformats/qjpeg$<$:d>.dll - ${PLUGINS_DIR}/imageformats/qwebp$<$:d>.dll - DESTINATION "imageformats") + include(DeployQt4) + install_qt4_executable(${PROGNAME}.exe) - # install CA cert chains - install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs") + # install Qt5 plugins + set(PLUGINS_DIR ${Qt5_PREFIX}/share/qt5/plugins) + install(FILES + ${PLUGINS_DIR}/platforms/qwindows$<$:d>.dll + ${PLUGINS_DIR}/platforms/qdirect2d$<$:d>.dll + DESTINATION "platforms") + install(FILES ${PLUGINS_DIR}/styles/qwindowsvistastyle$<$:d>.dll DESTINATION "styles") + install(FILES ${PLUGINS_DIR}/platforminputcontexts/qtvirtualkeyboardplugin$<$:d>.dll DESTINATION "platforminputcontexts") + install(FILES ${PLUGINS_DIR}/iconengines/qsvgicon$<$:d>.dll DESTINATION "iconengines") + install(FILES + ${PLUGINS_DIR}/imageformats/qgif$<$:d>.dll + ${PLUGINS_DIR}/imageformats/qicns$<$:d>.dll + ${PLUGINS_DIR}/imageformats/qico$<$:d>.dll + ${PLUGINS_DIR}/imageformats/qjpeg$<$:d>.dll + ${PLUGINS_DIR}/imageformats/qwebp$<$:d>.dll + DESTINATION "imageformats") + + # install CA cert chains + install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs") + # install OpenSSL library + if(WITH_XC_NETWORKING) + find_library(OPENSSL_DLL NAMES libssl-1_1.dll libssl-1_1-x64.dll PATH_SUFFIXES bin) + find_library(CRYPTO_DLL NAMES libcrypto-1_1.dll libcrypto-1_1-x64.dll PATH_SUFFIXES bin) + install(FILES ${OPENSSL_DLL} ${CRYPTO_DLL} DESTINATION ".") + endif() endif() diff --git a/src/autotype/AutoType.cpp b/src/autotype/AutoType.cpp index d2d33ea53..012dee62c 100644 --- a/src/autotype/AutoType.cpp +++ b/src/autotype/AutoType.cpp @@ -20,7 +20,7 @@ #include #include -#include +#include #include "config-keepassx.h" @@ -43,7 +43,7 @@ AutoType::AutoType(QObject* parent, bool test) : QObject(parent) , m_autoTypeDelay(0) , m_currentGlobalKey(static_cast(0)) - , m_currentGlobalModifiers(0) + , m_currentGlobalModifiers(nullptr) , m_pluginLoader(new QPluginLoader(this)) , m_plugin(nullptr) , m_executor(nullptr) @@ -142,7 +142,7 @@ QStringList AutoType::windowTitles() void AutoType::raiseWindow() { -#if defined(Q_OS_MAC) +#if defined(Q_OS_MACOS) m_plugin->raiseOwnWindow(); #endif } @@ -213,7 +213,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c } if (hideWindow) { -#if defined(Q_OS_MAC) +#if defined(Q_OS_MACOS) m_plugin->raiseLastActiveWindow(); #else hideWindow->showMinimized(); @@ -268,7 +268,7 @@ void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) * Global Autotype entry-point function * Perform global Auto-Type on the active window */ -void AutoType::performGlobalAutoType(const QList& dbList) +void AutoType::performGlobalAutoType(const QList>& dbList) { if (!m_plugin) { return; @@ -287,7 +287,7 @@ void AutoType::performGlobalAutoType(const QList& dbList) QList matchList; - for (Database* db : dbList) { + for (const auto& db : dbList) { const QList dbEntries = db->rootGroup()->entriesRecursive(); for (Entry* entry : dbEntries) { const QSet sequences = autoTypeSequences(entry, windowTitle).toSet(); @@ -304,8 +304,8 @@ void AutoType::performGlobalAutoType(const QList& dbList) auto* msgBox = new QMessageBox(); msgBox->setAttribute(Qt::WA_DeleteOnClose); msgBox->setWindowTitle(tr("Auto-Type - KeePassXC")); - msgBox->setText(tr("Couldn't find an entry that matches the window title:").append("\n\n") - .append(windowTitle)); + msgBox->setText( + tr("Couldn't find an entry that matches the window title:").append("\n\n").append(windowTitle)); msgBox->setIcon(QMessageBox::Information); msgBox->setStandardButtons(QMessageBox::Ok); msgBox->show(); @@ -323,12 +323,11 @@ void AutoType::performGlobalAutoType(const QList& dbList) auto* selectDialog = new AutoTypeSelectDialog(); // connect slots, both of which must unlock the m_inGlobalAutoTypeDialog mutex - connect(selectDialog, SIGNAL(matchActivated(AutoTypeMatch)), - SLOT(performAutoTypeFromGlobal(AutoTypeMatch))); + connect(selectDialog, SIGNAL(matchActivated(AutoTypeMatch)), SLOT(performAutoTypeFromGlobal(AutoTypeMatch))); connect(selectDialog, SIGNAL(rejected()), SLOT(autoTypeRejectedFromGlobal())); selectDialog->setMatchList(matchList); -#if defined(Q_OS_MAC) +#if defined(Q_OS_MACOS) m_plugin->raiseOwnWindow(); Tools::wait(500); #endif @@ -449,11 +448,11 @@ QList AutoType::createActionFromTemplate(const QString& tmpl, c list.append(new AutoTypeKey(Qt::Key_Left)); } else if (tmplName.compare("right", Qt::CaseInsensitive) == 0) { list.append(new AutoTypeKey(Qt::Key_Right)); - } else if (tmplName.compare("insert", Qt::CaseInsensitive) == 0 || - tmplName.compare("ins", Qt::CaseInsensitive) == 0) { + } else if (tmplName.compare("insert", Qt::CaseInsensitive) == 0 + || tmplName.compare("ins", Qt::CaseInsensitive) == 0) { list.append(new AutoTypeKey(Qt::Key_Insert)); - } else if (tmplName.compare("delete", Qt::CaseInsensitive) == 0 || - tmplName.compare("del", Qt::CaseInsensitive) == 0) { + } else if (tmplName.compare("delete", Qt::CaseInsensitive) == 0 + || tmplName.compare("del", Qt::CaseInsensitive) == 0) { list.append(new AutoTypeKey(Qt::Key_Delete)); } else if (tmplName.compare("home", Qt::CaseInsensitive) == 0) { list.append(new AutoTypeKey(Qt::Key_Home)); @@ -463,8 +462,9 @@ QList AutoType::createActionFromTemplate(const QString& tmpl, c list.append(new AutoTypeKey(Qt::Key_PageUp)); } else if (tmplName.compare("pgdown", Qt::CaseInsensitive) == 0) { list.append(new AutoTypeKey(Qt::Key_PageDown)); - } else if (tmplName.compare("backspace", Qt::CaseInsensitive) == 0 || - tmplName.compare("bs", Qt::CaseInsensitive) == 0 || tmplName.compare("bksp", Qt::CaseInsensitive) == 0) { + } else if (tmplName.compare("backspace", Qt::CaseInsensitive) == 0 + || tmplName.compare("bs", Qt::CaseInsensitive) == 0 + || tmplName.compare("bksp", Qt::CaseInsensitive) == 0) { list.append(new AutoTypeKey(Qt::Key_Backspace)); } else if (tmplName.compare("break", Qt::CaseInsensitive) == 0) { list.append(new AutoTypeKey(Qt::Key_Pause)); @@ -591,13 +591,13 @@ QList AutoType::autoTypeSequences(const Entry* entry, const QString& wi } } - if (config()->get("AutoTypeEntryTitleMatch").toBool() && - windowMatchesTitle(windowTitle, entry->resolvePlaceholder(entry->title()))) { + if (config()->get("AutoTypeEntryTitleMatch").toBool() + && windowMatchesTitle(windowTitle, entry->resolvePlaceholder(entry->title()))) { sequenceList.append(entry->effectiveAutoTypeSequence()); } - if (config()->get("AutoTypeEntryURLMatch").toBool() && - windowMatchesUrl(windowTitle, entry->resolvePlaceholder(entry->url()))) { + if (config()->get("AutoTypeEntryURLMatch").toBool() + && windowMatchesUrl(windowTitle, entry->resolvePlaceholder(entry->url()))) { sequenceList.append(entry->effectiveAutoTypeSequence()); } @@ -605,7 +605,7 @@ QList AutoType::autoTypeSequences(const Entry* entry, const QString& wi return sequenceList; } } else { - sequenceList.append(entry->effectiveAutoTypeSequence()); + sequenceList.append(entry->effectiveAutoTypeSequence()); } return sequenceList; @@ -659,7 +659,7 @@ bool AutoType::checkSyntax(const QString& string) QString allowRepetition = "(?:\\s\\d+)?"; // the ":" allows custom commands with syntax S:Field // exclude BEEP otherwise will be checked as valid - QString normalCommands = "(?!BEEP\\s)[A-Z:]*" + allowRepetition; + QString normalCommands = "(?!BEEP\\s)[A-Z:]*" + allowRepetition; QString specialLiterals = "[\\^\\%\\(\\)~\\{\\}\\[\\]\\+]" + allowRepetition; QString functionKeys = "(?:F[1-9]" + allowRepetition + "|F1[0-2])" + allowRepetition; QString numpad = "NUMPAD\\d" + allowRepetition; @@ -672,10 +672,23 @@ bool AutoType::checkSyntax(const QString& string) QString shortcutKeys = "[\\^\\%~\\+@]"; // a normal string not in parentheses QString fixedStrings = "[^\\^\\%~\\+@\\{\\}]*"; - - QRegularExpression autoTypeSyntax("^(?:" + shortcutKeys + "|" + fixedStrings + "|\\{(?:" + normalCommands + "|" + specialLiterals + - "|" + functionKeys + "|" + numpad + "|" + delay + "|" + beep + "|" + vkey + ")\\}|\\{" + customAttributes + "\\})*$", - QRegularExpression::CaseInsensitiveOption); + // clang-format off + QRegularExpression autoTypeSyntax( + "^(?:" + shortcutKeys + "|" + fixedStrings + "|\\{(?:" + normalCommands + "|" + specialLiterals + "|" + + functionKeys + + "|" + + numpad + + "|" + + delay + + "|" + + beep + + "|" + + vkey + + ")\\}|\\{" + + customAttributes + + "\\})*$", + QRegularExpression::CaseInsensitiveOption); + // clang-format on QRegularExpressionMatch match = autoTypeSyntax.match(string); return match.hasMatch(); } @@ -686,7 +699,7 @@ bool AutoType::checkSyntax(const QString& string) bool AutoType::checkHighDelay(const QString& string) { // 5 digit numbers(10 seconds) are too much - QRegularExpression highDelay("\\{DELAY\\s\\d{5,}\\}", QRegularExpression::CaseInsensitiveOption); + QRegularExpression highDelay("\\{DELAY\\s\\d{5,}\\}", QRegularExpression::CaseInsensitiveOption); QRegularExpressionMatch match = highDelay.match(string); return match.hasMatch(); } @@ -697,7 +710,7 @@ bool AutoType::checkHighDelay(const QString& string) bool AutoType::checkSlowKeypress(const QString& string) { // 3 digit numbers(100 milliseconds) are too much - QRegularExpression slowKeypress("\\{DELAY=\\d{3,}\\}", QRegularExpression::CaseInsensitiveOption); + QRegularExpression slowKeypress("\\{DELAY=\\d{3,}\\}", QRegularExpression::CaseInsensitiveOption); QRegularExpressionMatch match = slowKeypress.match(string); return match.hasMatch(); } @@ -719,12 +732,13 @@ bool AutoType::checkHighRepetition(const QString& string) bool AutoType::verifyAutoTypeSyntax(const QString& sequence) { if (!AutoType::checkSyntax(sequence)) { - QMessageBox messageBox; - messageBox.critical(nullptr, tr("Auto-Type"), tr("The Syntax of your Auto-Type statement is incorrect!")); + QMessageBox::critical(nullptr, tr("Auto-Type"), tr("The Syntax of your Auto-Type statement is incorrect!")); return false; } else if (AutoType::checkHighDelay(sequence)) { QMessageBox::StandardButton reply; - reply = QMessageBox::question(nullptr, tr("Auto-Type"), + reply = QMessageBox::question( + nullptr, + tr("Auto-Type"), tr("This Auto-Type command contains a very long delay. Do you really want to proceed?")); if (reply == QMessageBox::No) { @@ -732,7 +746,9 @@ bool AutoType::verifyAutoTypeSyntax(const QString& sequence) } } else if (AutoType::checkSlowKeypress(sequence)) { QMessageBox::StandardButton reply; - reply = QMessageBox::question(nullptr, tr("Auto-Type"), + reply = QMessageBox::question( + nullptr, + tr("Auto-Type"), tr("This Auto-Type command contains very slow key presses. Do you really want to proceed?")); if (reply == QMessageBox::No) { @@ -740,8 +756,10 @@ bool AutoType::verifyAutoTypeSyntax(const QString& sequence) } } else if (AutoType::checkHighRepetition(sequence)) { QMessageBox::StandardButton reply; - reply = QMessageBox::question(nullptr, tr("Auto-Type"), - tr("This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?")); + reply = QMessageBox::question(nullptr, + tr("Auto-Type"), + tr("This Auto-Type command contains arguments which are " + "repeated very often. Do you really want to proceed?")); if (reply == QMessageBox::No) { return false; diff --git a/src/autotype/AutoType.h b/src/autotype/AutoType.h index 55adac7d1..f58a1c0c1 100644 --- a/src/autotype/AutoType.h +++ b/src/autotype/AutoType.h @@ -1,4 +1,4 @@ - /* +/* * Copyright (C) 2012 Felix Geyer * Copyright (C) 2017 KeePassXC Team * @@ -19,10 +19,10 @@ #ifndef KEEPASSX_AUTOTYPE_H #define KEEPASSX_AUTOTYPE_H +#include #include #include #include -#include #include "core/AutoTypeMatch.h" @@ -47,8 +47,7 @@ public: static bool checkSlowKeypress(const QString& string); static bool checkHighDelay(const QString& string); static bool verifyAutoTypeSyntax(const QString& sequence); - void performAutoType(const Entry* entry, - QWidget* hideWindow = nullptr); + void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr); inline bool isAvailable() { @@ -59,7 +58,7 @@ public: static void createTestInstance(); public slots: - void performGlobalAutoType(const QList& dbList); + void performGlobalAutoType(const QList>& dbList); void raiseWindow(); signals: diff --git a/src/autotype/AutoTypeAction.cpp b/src/autotype/AutoTypeAction.cpp index 64dae7962..f9d928f0d 100644 --- a/src/autotype/AutoTypeAction.cpp +++ b/src/autotype/AutoTypeAction.cpp @@ -34,7 +34,6 @@ void AutoTypeChar::accept(AutoTypeExecutor* executor) executor->execChar(this); } - AutoTypeKey::AutoTypeKey(Qt::Key key) : key(key) { @@ -50,7 +49,6 @@ void AutoTypeKey::accept(AutoTypeExecutor* executor) executor->execKey(this); } - AutoTypeDelay::AutoTypeDelay(int delayMs) : delayMs(delayMs) { @@ -66,7 +64,6 @@ void AutoTypeDelay::accept(AutoTypeExecutor* executor) executor->execDelay(this); } - AutoTypeClearField::AutoTypeClearField() { } @@ -81,7 +78,6 @@ void AutoTypeClearField::accept(AutoTypeExecutor* executor) executor->execClearField(this); } - void AutoTypeExecutor::execDelay(AutoTypeDelay* action) { Tools::wait(action->delayMs); @@ -91,3 +87,9 @@ void AutoTypeExecutor::execClearField(AutoTypeClearField* action) { Q_UNUSED(action); } + +AutoTypeAction::~AutoTypeAction() +{ + // This makes sure that AutoTypeAction's vtable is placed + // in this translation unit. +} diff --git a/src/autotype/AutoTypeAction.h b/src/autotype/AutoTypeAction.h index 7f0d829c0..e598b1dcc 100644 --- a/src/autotype/AutoTypeAction.h +++ b/src/autotype/AutoTypeAction.h @@ -19,8 +19,8 @@ #define KEEPASSX_AUTOTYPEACTION_H #include -#include #include +#include #include "core/Global.h" @@ -29,17 +29,17 @@ class AutoTypeExecutor; class KEEPASSX_EXPORT AutoTypeAction { public: - virtual ~AutoTypeAction() {} virtual AutoTypeAction* clone() = 0; virtual void accept(AutoTypeExecutor* executor) = 0; + virtual ~AutoTypeAction(); }; class KEEPASSX_EXPORT AutoTypeChar : public AutoTypeAction { public: explicit AutoTypeChar(const QChar& character); - AutoTypeAction* clone(); - void accept(AutoTypeExecutor* executor); + AutoTypeAction* clone() override; + void accept(AutoTypeExecutor* executor) override; const QChar character; }; @@ -48,8 +48,8 @@ class KEEPASSX_EXPORT AutoTypeKey : public AutoTypeAction { public: explicit AutoTypeKey(Qt::Key key); - AutoTypeAction* clone(); - void accept(AutoTypeExecutor* executor); + AutoTypeAction* clone() override; + void accept(AutoTypeExecutor* executor) override; const Qt::Key key; }; @@ -58,8 +58,8 @@ class KEEPASSX_EXPORT AutoTypeDelay : public AutoTypeAction { public: explicit AutoTypeDelay(int delayMs); - AutoTypeAction* clone(); - void accept(AutoTypeExecutor* executor); + AutoTypeAction* clone() override; + void accept(AutoTypeExecutor* executor) override; const int delayMs; }; @@ -68,14 +68,16 @@ class KEEPASSX_EXPORT AutoTypeClearField : public AutoTypeAction { public: AutoTypeClearField(); - AutoTypeAction* clone(); - void accept(AutoTypeExecutor* executor); + AutoTypeAction* clone() override; + void accept(AutoTypeExecutor* executor) override; }; class KEEPASSX_EXPORT AutoTypeExecutor { public: - virtual ~AutoTypeExecutor() {} + virtual ~AutoTypeExecutor() + { + } virtual void execChar(AutoTypeChar* action) = 0; virtual void execKey(AutoTypeKey* action) = 0; virtual void execDelay(AutoTypeDelay* action); diff --git a/src/autotype/AutoTypePlatformPlugin.h b/src/autotype/AutoTypePlatformPlugin.h index 96e947a0b..68cf99be2 100644 --- a/src/autotype/AutoTypePlatformPlugin.h +++ b/src/autotype/AutoTypePlatformPlugin.h @@ -25,7 +25,9 @@ class AutoTypePlatformInterface { public: - virtual ~AutoTypePlatformInterface() {} + virtual ~AutoTypePlatformInterface() + { + } virtual bool isAvailable() = 0; virtual QStringList windowTitles() = 0; virtual WId activeWindow() = 0; @@ -34,11 +36,13 @@ public: virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; virtual int platformEventFilter(void* event) = 0; virtual bool raiseWindow(WId window) = 0; - virtual void unload() {} + virtual void unload() + { + } virtual AutoTypeExecutor* createExecutor() = 0; -#if defined(Q_OS_MAC) +#if defined(Q_OS_MACOS) virtual bool raiseLastActiveWindow() = 0; virtual bool raiseOwnWindow() = 0; #endif diff --git a/src/autotype/AutoTypeSelectDialog.cpp b/src/autotype/AutoTypeSelectDialog.cpp index eae9e6ffb..1449f9e02 100644 --- a/src/autotype/AutoTypeSelectDialog.cpp +++ b/src/autotype/AutoTypeSelectDialog.cpp @@ -19,7 +19,11 @@ #include "AutoTypeSelectDialog.h" #include +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) +#include +#else #include +#endif #include #include #include @@ -44,7 +48,11 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) setWindowTitle(tr("Auto-Type - KeePassXC")); setWindowIcon(filePath()->applicationIcon()); +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + QRect screenGeometry = QApplication::screenAt(QCursor::pos())->availableGeometry(); +#else QRect screenGeometry = QApplication::desktop()->availableGeometry(QCursor::pos()); +#endif QSize size = config()->get("GUI/AutoTypeSelectDialogSize", QSize(600, 250)).toSize(); size.setWidth(qMin(size.width(), screenGeometry.width())); size.setHeight(qMin(size.height(), screenGeometry.height())); @@ -59,10 +67,13 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) QLabel* descriptionLabel = new QLabel(tr("Select entry to Auto-Type:"), this); layout->addWidget(descriptionLabel); + // clang-format off connect(m_view, SIGNAL(activated(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); connect(m_view, SIGNAL(clicked(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); connect(m_view->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(matchRemoved())); connect(m_view, SIGNAL(rejected()), SLOT(reject())); + // clang-format on + layout->addWidget(m_view); QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, this); @@ -109,7 +120,7 @@ void AutoTypeSelectDialog::matchRemoved() if (m_rejected) { return; } - + if (m_view->model()->rowCount() == 0) { reject(); } diff --git a/src/autotype/AutoTypeSelectView.cpp b/src/autotype/AutoTypeSelectView.cpp index e4dba0515..cfa113671 100644 --- a/src/autotype/AutoTypeSelectView.cpp +++ b/src/autotype/AutoTypeSelectView.cpp @@ -36,8 +36,7 @@ void AutoTypeSelectView::mouseMoveEvent(QMouseEvent* event) if (index.isValid()) { setCurrentIndex(index); setCursor(Qt::PointingHandCursor); - } - else { + } else { unsetCursor(); } diff --git a/src/autotype/CMakeLists.txt b/src/autotype/CMakeLists.txt index 4b3610538..df0483a08 100644 --- a/src/autotype/CMakeLists.txt +++ b/src/autotype/CMakeLists.txt @@ -1,23 +1,23 @@ if(WITH_XC_AUTOTYPE) - if(UNIX AND NOT APPLE) - find_package(X11) - find_package(Qt5X11Extras 5.2) - if(PRINT_SUMMARY) - add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") - add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") - add_feature_info(Qt5X11Extras Qt5X11Extras_FOUND "The Qt5X11Extras library is required for auto-type") + if(UNIX AND NOT APPLE) + find_package(X11) + find_package(Qt5X11Extras 5.2) + if(PRINT_SUMMARY) + add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") + add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") + add_feature_info(Qt5X11Extras Qt5X11Extras_FOUND "The Qt5X11Extras library is required for auto-type") + endif() + + if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND AND Qt5X11Extras_FOUND) + add_subdirectory(xcb) + endif() + elseif(APPLE) + add_subdirectory(mac) + elseif(WIN32) + add_subdirectory(windows) endif() - if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND AND Qt5X11Extras_FOUND) - add_subdirectory(xcb) + if(WITH_TESTS) + add_subdirectory(test) endif() - elseif(APPLE) - add_subdirectory(mac) - elseif(WIN32) - add_subdirectory(windows) - endif() - - if(WITH_TESTS) - add_subdirectory(test) - endif() endif() diff --git a/src/autotype/ShortcutWidget.cpp b/src/autotype/ShortcutWidget.cpp index 56a374011..3dcc669d9 100644 --- a/src/autotype/ShortcutWidget.cpp +++ b/src/autotype/ShortcutWidget.cpp @@ -24,7 +24,7 @@ ShortcutWidget::ShortcutWidget(QWidget* parent) : QLineEdit(parent) , m_key(static_cast(0)) - , m_modifiers(0) + , m_modifiers(nullptr) , m_locked(false) { setReadOnly(true); @@ -50,8 +50,7 @@ void ShortcutWidget::setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) if (autoType()->registerGlobalShortcut(m_key, m_modifiers)) { setStyleSheet(""); - } - else { + } else { setStyleSheet("background-color: #FF9696;"); } } @@ -59,7 +58,7 @@ void ShortcutWidget::setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) void ShortcutWidget::resetShortcut() { m_key = static_cast(0); - m_modifiers = 0; + m_modifiers = nullptr; m_locked = false; autoType()->unregisterGlobalShortcut(); } @@ -112,14 +111,12 @@ void ShortcutWidget::keyEvent(QKeyEvent* event) if (!release && !keyIsModifier) { if (modifiers != 0) { setShortcut(key, modifiers); - } - else { + } else { resetShortcut(); setStyleSheet(""); displayShortcut(key, modifiers); } - } - else { + } else { if (m_locked) { resetShortcut(); setStyleSheet(""); diff --git a/src/autotype/WildcardMatcher.cpp b/src/autotype/WildcardMatcher.cpp index ad83f9b0a..b69425ee1 100644 --- a/src/autotype/WildcardMatcher.cpp +++ b/src/autotype/WildcardMatcher.cpp @@ -18,12 +18,13 @@ #include "WildcardMatcher.h" #include +#include const QChar WildcardMatcher::Wildcard = '*'; const Qt::CaseSensitivity WildcardMatcher::Sensitivity = Qt::CaseInsensitive; -WildcardMatcher::WildcardMatcher(const QString& text) - : m_text(text) +WildcardMatcher::WildcardMatcher(QString text) + : m_text(std::move(text)) { } @@ -33,8 +34,7 @@ bool WildcardMatcher::match(const QString& pattern) if (patternContainsWildcard()) { return matchWithWildcards(); - } - else { + } else { return patternEqualsText(); } } @@ -63,8 +63,7 @@ bool WildcardMatcher::matchWithWildcards() bool WildcardMatcher::startOrEndDoesNotMatch(const QStringList& parts) { - return !m_text.startsWith(parts.first(), Sensitivity) || - !m_text.endsWith(parts.last(), Sensitivity); + return !m_text.startsWith(parts.first(), Sensitivity) || !m_text.endsWith(parts.last(), Sensitivity); } bool WildcardMatcher::partsMatch(const QStringList& parts) diff --git a/src/autotype/WildcardMatcher.h b/src/autotype/WildcardMatcher.h index 6ef48743b..d8ee1dc79 100644 --- a/src/autotype/WildcardMatcher.h +++ b/src/autotype/WildcardMatcher.h @@ -23,7 +23,7 @@ class WildcardMatcher { public: - explicit WildcardMatcher(const QString& text); + explicit WildcardMatcher(QString text); bool match(const QString& pattern); static const QChar Wildcard; diff --git a/src/autotype/mac/AutoTypeMac.cpp b/src/autotype/mac/AutoTypeMac.cpp index d8fcf6d7f..60cec1144 100644 --- a/src/autotype/mac/AutoTypeMac.cpp +++ b/src/autotype/mac/AutoTypeMac.cpp @@ -17,6 +17,7 @@ */ #include "AutoTypeMac.h" +#include "gui/macutils/MacUtils.h" #include @@ -25,8 +26,7 @@ #define INVALID_KEYCODE 0xFFFF AutoTypePlatformMac::AutoTypePlatformMac() - : m_appkit(new AppKit()) - , m_hotkeyRef(nullptr) + : m_hotkeyRef(nullptr) , m_hotkeyId({ 'kpx2', HOTKEY_ID }) { EventTypeSpec eventSpec; @@ -79,7 +79,7 @@ QStringList AutoTypePlatformMac::windowTitles() // WId AutoTypePlatformMac::activeWindow() { - return m_appkit->activeProcessId(); + return macUtils()->activeWindow(); } // @@ -159,7 +159,7 @@ AutoTypeExecutor* AutoTypePlatformMac::createExecutor() // bool AutoTypePlatformMac::raiseWindow(WId pid) { - return m_appkit->activateProcess(pid); + return macUtils()->raiseWindow(pid); } // @@ -167,7 +167,7 @@ bool AutoTypePlatformMac::raiseWindow(WId pid) // bool AutoTypePlatformMac::raiseLastActiveWindow() { - return m_appkit->activateProcess(m_appkit->lastActiveProcessId()); + return macUtils()->raiseLastActiveWindow(); } // @@ -175,7 +175,7 @@ bool AutoTypePlatformMac::raiseLastActiveWindow() // bool AutoTypePlatformMac::raiseOwnWindow() { - return m_appkit->activateProcess(m_appkit->ownProcessId()); + return macUtils()->raiseOwnWindow(); } // diff --git a/src/autotype/mac/AutoTypeMac.h b/src/autotype/mac/AutoTypeMac.h index d2c224784..875c21764 100644 --- a/src/autotype/mac/AutoTypeMac.h +++ b/src/autotype/mac/AutoTypeMac.h @@ -23,7 +23,6 @@ #include #include -#include "AppKit.h" #include "autotype/AutoTypePlatformPlugin.h" #include "autotype/AutoTypeAction.h" @@ -55,7 +54,6 @@ signals: void globalShortcutTriggered(); private: - std::unique_ptr m_appkit; EventHotKeyRef m_hotkeyRef; EventHotKeyID m_hotkeyId; diff --git a/src/autotype/mac/CMakeLists.txt b/src/autotype/mac/CMakeLists.txt index 08c532784..f1c5387f3 100644 --- a/src/autotype/mac/CMakeLists.txt +++ b/src/autotype/mac/CMakeLists.txt @@ -1,24 +1,22 @@ -set(autotype_mac_SOURCES - AutoTypeMac.cpp -) +set(autotype_mac_SOURCES AutoTypeMac.cpp) set(autotype_mac_mm_SOURCES - AppKitImpl.mm -) + ${CMAKE_SOURCE_DIR}/src/gui/macutils/AppKitImpl.mm + ${CMAKE_SOURCE_DIR}/src/gui/macutils/MacUtils.cpp) add_library(keepassx-autotype-cocoa MODULE ${autotype_mac_SOURCES} ${autotype_mac_mm_SOURCES}) set_target_properties(keepassx-autotype-cocoa PROPERTIES LINK_FLAGS "-framework Foundation -framework AppKit -framework Carbon") target_link_libraries(keepassx-autotype-cocoa ${PROGNAME} Qt5::Core Qt5::Widgets) if(WITH_APP_BUNDLE) - add_custom_command(TARGET keepassx-autotype-cocoa - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libkeepassx-autotype-cocoa.so ${PLUGIN_INSTALL_DIR} - COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app -executable=${PLUGIN_INSTALL_DIR}/libkeepassx-autotype-cocoa.so -no-plugins - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src - COMMENT "Deploying autotype plugin") + add_custom_command(TARGET keepassx-autotype-cocoa + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libkeepassx-autotype-cocoa.so ${PLUGIN_INSTALL_DIR} + COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app -executable=${PLUGIN_INSTALL_DIR}/libkeepassx-autotype-cocoa.so -no-plugins + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src + COMMENT "Deploying autotype plugin") else() - install(TARGETS keepassx-autotype-cocoa - BUNDLE DESTINATION . COMPONENT Runtime - LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) + install(TARGETS keepassx-autotype-cocoa + BUNDLE DESTINATION . COMPONENT Runtime + LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) endif() diff --git a/src/autotype/test/AutoTypeTest.cpp b/src/autotype/test/AutoTypeTest.cpp index e2ae7c692..f8754ef3b 100644 --- a/src/autotype/test/AutoTypeTest.cpp +++ b/src/autotype/test/AutoTypeTest.cpp @@ -110,7 +110,7 @@ bool AutoTypePlatformTest::raiseWindow(WId window) return false; } -#if defined(Q_OS_MAC) +#if defined(Q_OS_MACOS) bool AutoTypePlatformTest::raiseLastActiveWindow() { return false; diff --git a/src/autotype/test/AutoTypeTest.h b/src/autotype/test/AutoTypeTest.h index d434c4d34..a17028b51 100644 --- a/src/autotype/test/AutoTypeTest.h +++ b/src/autotype/test/AutoTypeTest.h @@ -20,13 +20,11 @@ #include -#include "autotype/AutoTypePlatformPlugin.h" #include "autotype/AutoTypeAction.h" +#include "autotype/AutoTypePlatformPlugin.h" #include "autotype/test/AutoTypeTestInterface.h" -class AutoTypePlatformTest : public QObject, - public AutoTypePlatformInterface, - public AutoTypeTestInterface +class AutoTypePlatformTest : public QObject, public AutoTypePlatformInterface, public AutoTypeTestInterface { Q_OBJECT Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformInterface") @@ -45,7 +43,7 @@ public: bool raiseWindow(WId window) override; AutoTypeExecutor* createExecutor() override; -#if defined(Q_OS_MAC) +#if defined(Q_OS_MACOS) bool raiseLastActiveWindow() override; bool raiseOwnWindow() override; #endif diff --git a/src/autotype/test/AutoTypeTestInterface.h b/src/autotype/test/AutoTypeTestInterface.h index 7ee6f21a8..7681f2ecb 100644 --- a/src/autotype/test/AutoTypeTestInterface.h +++ b/src/autotype/test/AutoTypeTestInterface.h @@ -23,7 +23,9 @@ class AutoTypeTestInterface { public: - virtual ~AutoTypeTestInterface() {} + virtual ~AutoTypeTestInterface() + { + } virtual void setActiveWindowTitle(const QString& title) = 0; virtual QString actionChars() = 0; diff --git a/src/autotype/test/CMakeLists.txt b/src/autotype/test/CMakeLists.txt index f41fa1b50..a9cf998df 100644 --- a/src/autotype/test/CMakeLists.txt +++ b/src/autotype/test/CMakeLists.txt @@ -1,6 +1,4 @@ -set(autotype_test_SOURCES - AutoTypeTest.cpp -) +set(autotype_test_SOURCES AutoTypeTest.cpp) add_library(keepassx-autotype-test MODULE ${autotype_test_SOURCES}) target_link_libraries(keepassx-autotype-test keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) diff --git a/src/autotype/windows/AutoTypeWindows.cpp b/src/autotype/windows/AutoTypeWindows.cpp index bcb610f0f..59dafcf14 100644 --- a/src/autotype/windows/AutoTypeWindows.cpp +++ b/src/autotype/windows/AutoTypeWindows.cpp @@ -94,7 +94,7 @@ void AutoTypePlatformWin::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModi // int AutoTypePlatformWin::platformEventFilter(void* event) { - MSG *msg = static_cast(event); + MSG* msg = static_cast(event); if (msg->message == WM_HOTKEY && msg->wParam == HOTKEY_ID) { emit globalShortcutTriggered(); @@ -168,6 +168,7 @@ void AutoTypePlatformWin::sendKey(Qt::Key key, bool isKeyDown) ::SendInput(1, &in, sizeof(INPUT)); } +// clang-format off // // Translate qt key code to windows virtual key code // see: https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx @@ -421,6 +422,7 @@ BOOL AutoTypePlatformWin::isExtendedKey(DWORD nativeKeyCode) return FALSE; } } +// clang-format on // // Translate qt key modifiers to windows modifiers @@ -473,17 +475,14 @@ BOOL AutoTypePlatformWin::isAltTabWindow(HWND hwnd) // // Window title enum proc // -BOOL CALLBACK AutoTypePlatformWin::windowTitleEnumProc( - _In_ HWND hwnd, - _In_ LPARAM lParam -) +BOOL CALLBACK AutoTypePlatformWin::windowTitleEnumProc(_In_ HWND hwnd, _In_ LPARAM lParam) { if (!isAltTabWindow(hwnd)) { // Skip window return TRUE; } - QStringList *list = reinterpret_cast(lParam); + QStringList* list = reinterpret_cast(lParam); QString title = windowTitle(hwnd); if (!title.isEmpty()) { @@ -501,7 +500,7 @@ QString AutoTypePlatformWin::windowTitle(HWND hwnd) wchar_t title[MAX_WINDOW_TITLE_LENGTH]; int count = ::GetWindowTextW(hwnd, title, MAX_WINDOW_TITLE_LENGTH); - return QString::fromUtf16(reinterpret_cast(title), count); + return QString::fromUtf16(reinterpret_cast(title), count); } // diff --git a/src/autotype/windows/AutoTypeWindows.h b/src/autotype/windows/AutoTypeWindows.h index 6d38a2508..f9dc249fc 100644 --- a/src/autotype/windows/AutoTypeWindows.h +++ b/src/autotype/windows/AutoTypeWindows.h @@ -22,8 +22,8 @@ #include #include -#include "autotype/AutoTypePlatformPlugin.h" #include "autotype/AutoTypeAction.h" +#include "autotype/AutoTypePlatformPlugin.h" class AutoTypePlatformWin : public QObject, public AutoTypePlatformInterface { @@ -71,4 +71,3 @@ private: }; #endif // KEEPASSX_AUTOTYPEWINDOWS_H - diff --git a/src/autotype/windows/CMakeLists.txt b/src/autotype/windows/CMakeLists.txt index cc3ad4b44..be74b7aa7 100644 --- a/src/autotype/windows/CMakeLists.txt +++ b/src/autotype/windows/CMakeLists.txt @@ -1,9 +1,7 @@ -set(autotype_win_SOURCES - AutoTypeWindows.cpp -) +set(autotype_win_SOURCES AutoTypeWindows.cpp) add_library(keepassx-autotype-windows MODULE ${autotype_win_SOURCES}) target_link_libraries(keepassx-autotype-windows keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) install(TARGETS keepassx-autotype-windows BUNDLE DESTINATION . COMPONENT Runtime -LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) + LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) diff --git a/src/autotype/xcb/AutoTypeXCB.cpp b/src/autotype/xcb/AutoTypeXCB.cpp index cd5e8acdc..94a132d40 100644 --- a/src/autotype/xcb/AutoTypeXCB.cpp +++ b/src/autotype/xcb/AutoTypeXCB.cpp @@ -40,14 +40,17 @@ AutoTypePlatformX11::AutoTypePlatformX11() m_atomUtf8String = XInternAtom(m_dpy, "UTF8_STRING", True); m_atomNetActiveWindow = XInternAtom(m_dpy, "_NET_ACTIVE_WINDOW", True); - m_classBlacklist << "desktop_window" << "gnome-panel"; // Gnome - m_classBlacklist << "kdesktop" << "kicker"; // KDE 3 + m_classBlacklist << "desktop_window" + << "gnome-panel"; // Gnome + m_classBlacklist << "kdesktop" + << "kicker"; // KDE 3 m_classBlacklist << "Plasma"; // KDE 4 m_classBlacklist << "plasmashell"; // KDE 5 - m_classBlacklist << "xfdesktop" << "xfce4-panel"; // Xfce 4 + m_classBlacklist << "xfdesktop" + << "xfce4-panel"; // Xfce 4 m_currentGlobalKey = static_cast(0); - m_currentGlobalModifiers = 0; + m_currentGlobalModifiers = nullptr; m_keysymTable = nullptr; m_xkb = nullptr; @@ -146,12 +149,9 @@ bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifi startCatchXErrors(); XGrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow, True, GrabModeAsync, GrabModeAsync); - XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, True, GrabModeAsync, - GrabModeAsync); - XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, True, GrabModeAsync, - GrabModeAsync); - XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, True, - GrabModeAsync, GrabModeAsync); + XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); + XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); + XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); stopCatchXErrors(); if (!m_xErrorOccurred) { @@ -160,8 +160,7 @@ bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifi m_currentGlobalKeycode = keycode; m_currentGlobalNativeModifiers = nativeModifiers; return true; - } - else { + } else { unregisterGlobalShortcut(key, modifiers); return false; } @@ -198,7 +197,7 @@ void AutoTypePlatformX11::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModi XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow); m_currentGlobalKey = static_cast(0); - m_currentGlobalModifiers = 0; + m_currentGlobalModifiers = nullptr; m_currentGlobalKeycode = 0; m_currentGlobalNativeModifiers = 0; } @@ -211,29 +210,25 @@ int AutoTypePlatformX11::platformEventFilter(void* event) if (type == XCB_KEY_PRESS || type == XCB_KEY_RELEASE) { xcb_key_press_event_t* keyPressEvent = static_cast(event); if (keyPressEvent->detail == m_currentGlobalKeycode - && (keyPressEvent->state & m_modifierMask) == m_currentGlobalNativeModifiers - && (!QApplication::activeWindow() || QApplication::activeWindow()->isMinimized()) - && m_loaded) { + && (keyPressEvent->state & m_modifierMask) == m_currentGlobalNativeModifiers + && (!QApplication::activeWindow() || QApplication::activeWindow()->isMinimized()) && m_loaded) { if (type == XCB_KEY_PRESS) { emit globalShortcutTriggered(); } return 1; } - } - else if (type == XCB_MAPPING_NOTIFY) { + } else if (type == XCB_MAPPING_NOTIFY) { xcb_mapping_notify_event_t* mappingNotifyEvent = static_cast(event); if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD - || mappingNotifyEvent->request == XCB_MAPPING_MODIFIER) - { + || mappingNotifyEvent->request == XCB_MAPPING_MODIFIER) { XMappingEvent xMappingEvent; memset(&xMappingEvent, 0, sizeof(xMappingEvent)); xMappingEvent.type = MappingNotify; xMappingEvent.display = m_dpy; if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD) { xMappingEvent.request = MappingKeyboard; - } - else { + } else { xMappingEvent.request = MappingModifier; } xMappingEvent.first_keycode = mappingNotifyEvent->first_keycode; @@ -263,13 +258,12 @@ QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist) // the window manager spec says we should read _NET_WM_NAME first, then fall back to WM_NAME - int retVal = XGetWindowProperty(m_dpy, window, m_atomNetWmName, 0, 1000, False, m_atomUtf8String, - &type, &format, &nitems, &after, &data); + int retVal = XGetWindowProperty( + m_dpy, window, m_atomNetWmName, 0, 1000, False, m_atomUtf8String, &type, &format, &nitems, &after, &data); if ((retVal == 0) && data) { title = QString::fromUtf8(reinterpret_cast(data)); - } - else { + } else { XTextProperty textProp; retVal = XGetTextProperty(m_dpy, window, &textProp, m_atomWmName); if ((retVal != 0) && textProp.value) { @@ -278,12 +272,10 @@ QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist) if (textProp.encoding == m_atomUtf8String) { title = QString::fromUtf8(reinterpret_cast(textProp.value)); - } - else if ((XmbTextPropertyToTextList(m_dpy, &textProp, &textList, &count) == 0) - && textList && (count > 0)) { + } else if ((XmbTextPropertyToTextList(m_dpy, &textProp, &textList, &count) == 0) && textList + && (count > 0)) { title = QString::fromLocal8Bit(textList[0]); - } - else if (textProp.encoding == m_atomString) { + } else if (textProp.encoding == m_atomString) { title = QString::fromLocal8Bit(reinterpret_cast(textProp.value)); } @@ -386,8 +378,8 @@ bool AutoTypePlatformX11::isTopLevelWindow(Window window) unsigned long nitems; unsigned long after; unsigned char* data = Q_NULLPTR; - int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 2, False, m_atomWmState, &type, &format, - &nitems, &after, &data); + int retVal = XGetWindowProperty( + m_dpy, window, m_atomWmState, 0, 2, False, m_atomWmState, &type, &format, &nitems, &after, &data); bool result = false; @@ -408,15 +400,12 @@ KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch) ushort unicode = ch.unicode(); /* first check for Latin-1 characters (1:1 mapping) */ - if ((unicode >= 0x0020 && unicode <= 0x007e) - || (unicode >= 0x00a0 && unicode <= 0x00ff)) { + if ((unicode >= 0x0020 && unicode <= 0x007e) || (unicode >= 0x00a0 && unicode <= 0x00ff)) { return unicode; } /* mapping table generated from keysymdef.h */ - const uint* match = Tools::binaryFind(m_unicodeToKeysymKeys, - m_unicodeToKeysymKeys + m_unicodeToKeysymLen, - unicode); + const uint* match = Tools::binaryFind(m_unicodeToKeysymKeys, m_unicodeToKeysymKeys + m_unicodeToKeysymLen, unicode); int index = match - m_unicodeToKeysymKeys; if (index != m_unicodeToKeysymLen) { return m_unicodeToKeysymValues[index]; @@ -483,8 +472,7 @@ KeySym AutoTypePlatformX11::keyToKeySym(Qt::Key key) default: if (key >= Qt::Key_F1 && key <= Qt::Key_F16) { return XK_F1 + (key - Qt::Key_F1); - } - else { + } else { return NoSymbol; } } @@ -493,13 +481,13 @@ KeySym AutoTypePlatformX11::keyToKeySym(Qt::Key key) /* * Update the keyboard and modifier mapping. * We need the KeyboardMapping for AddKeysym. - * Modifier mapping is required for clearing the modifiers. + * Modifier mapping is required for clearing the modifiers. */ void AutoTypePlatformX11::updateKeymap() { int keycode, inx; int mod_index, mod_key; - XModifierKeymap *modifiers; + XModifierKeymap* modifiers; if (m_xkb) { XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True); @@ -507,10 +495,9 @@ void AutoTypePlatformX11::updateKeymap() m_xkb = getKeyboard(); XDisplayKeycodes(m_dpy, &m_minKeycode, &m_maxKeycode); - if (m_keysymTable != NULL) XFree(m_keysymTable); - m_keysymTable = XGetKeyboardMapping(m_dpy, - m_minKeycode, m_maxKeycode - m_minKeycode + 1, - &m_keysymPerKeycode); + if (m_keysymTable != nullptr) + XFree(m_keysymTable); + m_keysymTable = XGetKeyboardMapping(m_dpy, m_minKeycode, m_maxKeycode - m_minKeycode + 1, &m_keysymPerKeycode); /* determine the keycode to use for remapped keys */ inx = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode; @@ -518,16 +505,16 @@ void AutoTypePlatformX11::updateKeymap() for (keycode = m_minKeycode; keycode <= m_maxKeycode; keycode++) { inx = (keycode - m_minKeycode) * m_keysymPerKeycode; if (m_keysymTable[inx] == NoSymbol) { - m_remapKeycode = keycode; - m_currentRemapKeysym = NoSymbol; - break; + m_remapKeycode = keycode; + m_currentRemapKeysym = NoSymbol; + break; } } } /* determine the keycode to use for modifiers */ modifiers = XGetModifierMapping(m_dpy); - for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) { + for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { m_modifier_keycode[mod_index] = 0; for (mod_key = 0; mod_key < modifiers->max_keypermod; mod_key++) { keycode = modifiers->modifiermap[mod_index * modifiers->max_keypermod + mod_key]; @@ -625,7 +612,7 @@ int AutoTypePlatformX11::AddKeysym(KeySym keysym) return 0; } - int inx = (m_remapKeycode- m_minKeycode) * m_keysymPerKeycode; + int inx = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode; m_keysymTable[inx] = keysym; m_currentRemapKeysym = keysym; @@ -644,7 +631,7 @@ int AutoTypePlatformX11::AddKeysym(KeySym keysym) void AutoTypePlatformX11::SendKeyEvent(unsigned keycode, bool press) { XSync(m_dpy, False); - int (*oldHandler) (Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler); + int (*oldHandler)(Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler); XTestFakeKeyEvent(m_dpy, keycode, press, 0); XFlush(m_dpy); @@ -659,7 +646,7 @@ void AutoTypePlatformX11::SendKeyEvent(unsigned keycode, bool press) void AutoTypePlatformX11::SendModifiers(unsigned int mask, bool press) { int mod_index; - for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) { + for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { if (mask & (1 << mod_index)) { SendKeyEvent(m_modifier_keycode[mod_index], press); } @@ -670,7 +657,7 @@ void AutoTypePlatformX11::SendModifiers(unsigned int mask, bool press) * Determines the keycode and modifier mask for the given * keysym. */ -int AutoTypePlatformX11::GetKeycode(KeySym keysym, unsigned int *mask) +int AutoTypePlatformX11::GetKeycode(KeySym keysym, unsigned int* mask) { int keycode = XKeysymToKeycode(m_dpy, keysym); @@ -688,15 +675,15 @@ int AutoTypePlatformX11::GetKeycode(KeySym keysym, unsigned int *mask) return 0; } -bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned int *mask) +bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned int* mask) { int shift, mod; unsigned int mods_rtrn; /* determine whether there is a combination of the modifiers (Mod1-Mod5) with or without shift which returns keysym */ - for (shift = 0; shift < 2; shift ++) { - for (mod = ControlMapIndex; mod <= Mod5MapIndex; mod ++) { + for (shift = 0; shift < 2; shift++) { + for (mod = ControlMapIndex; mod <= Mod5MapIndex; mod++) { KeySym keysym_rtrn; *mask = (mod == ControlMapIndex) ? shift : shift | (1 << mod); XkbTranslateKeyCode(m_xkb, keycode, *mask, &mods_rtrn, &keysym_rtrn); @@ -709,8 +696,6 @@ bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned i return false; } - - /* * Send sequence of KeyPressed/KeyReleased events to the focused * window to simulate keyboard. If modifiers (shift, control, etc) @@ -753,7 +738,7 @@ void AutoTypePlatformX11::SendKey(KeySym keysym, unsigned int modifiers) if (!modifiers) { // check every release_check_mask individually if it affects the keysym we would generate // if it doesn't we probably don't need to release it - for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) { + for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index++) { if (release_check_mask & (1 << mod_index)) { unsigned int mods_rtrn; KeySym keysym_rtrn; @@ -768,7 +753,8 @@ void AutoTypePlatformX11::SendKey(KeySym keysym, unsigned int modifiers) // finally check if the combination of pressed modifiers that we chose to ignore affects the keysym unsigned int mods_rtrn; KeySym keysym_rtrn; - XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn); + XkbTranslateKeyCode( + m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn); if (keysym_rtrn != keysym) { // oh well, release all the modifiers we don't want release_mask = release_check_mask; @@ -810,7 +796,6 @@ int AutoTypePlatformX11::MyErrorHandler(Display* my_dpy, XErrorEvent* event) return 0; } - AutoTypeExecutorX11::AutoTypeExecutorX11(AutoTypePlatformX11* platform) : m_platform(platform) { @@ -864,15 +849,12 @@ bool AutoTypePlatformX11::raiseWindow(WId window) QWidget* activeWindow = QApplication::activeWindow(); if (activeWindow) { event.xclient.data.l[2] = activeWindow->internalWinId(); - } - else { + } else { event.xclient.data.l[2] = 0; } event.xclient.data.l[3] = 0; event.xclient.data.l[4] = 0; - XSendEvent(m_dpy, m_rootWindow, False, - SubstructureRedirectMask | SubstructureNotifyMask, - &event); + XSendEvent(m_dpy, m_rootWindow, False, SubstructureRedirectMask | SubstructureNotifyMask, &event); XFlush(m_dpy); return true; diff --git a/src/autotype/xcb/AutoTypeXCB.h b/src/autotype/xcb/AutoTypeXCB.h index 4f1d9a3d6..221d2ba7b 100644 --- a/src/autotype/xcb/AutoTypeXCB.h +++ b/src/autotype/xcb/AutoTypeXCB.h @@ -22,16 +22,16 @@ #include #include -#include #include #include +#include +#include #include #include -#include -#include "autotype/AutoTypePlatformPlugin.h" #include "autotype/AutoTypeAction.h" +#include "autotype/AutoTypePlatformPlugin.h" #define N_MOD_INDICES (Mod5MapIndex + 1) @@ -80,8 +80,8 @@ private: void AddModifier(KeySym keysym); void SendKeyEvent(unsigned keycode, bool press); void SendModifiers(unsigned int mask, bool press); - int GetKeycode(KeySym keysym, unsigned int *mask); - bool keysymModifiers(KeySym keysym, int keycode, unsigned int *mask); + int GetKeycode(KeySym keysym, unsigned int* mask); + bool keysymModifiers(KeySym keysym, int keycode, unsigned int* mask); static int MyErrorHandler(Display* my_dpy, XErrorEvent* event); diff --git a/src/autotype/xcb/CMakeLists.txt b/src/autotype/xcb/CMakeLists.txt index 7e7f252d7..e41d4a099 100644 --- a/src/autotype/xcb/CMakeLists.txt +++ b/src/autotype/xcb/CMakeLists.txt @@ -1,8 +1,6 @@ include_directories(SYSTEM ${X11_X11_INCLUDE_PATH}) -set(autotype_XCB_SOURCES - AutoTypeXCB.cpp -) +set(autotype_XCB_SOURCES AutoTypeXCB.cpp) add_library(keepassx-autotype-xcb MODULE ${autotype_XCB_SOURCES}) target_link_libraries(keepassx-autotype-xcb keepassx_core Qt5::Core Qt5::Widgets Qt5::X11Extras ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) diff --git a/src/autotype/xcb/KeySymMap.h b/src/autotype/xcb/KeySymMap.h index 55022feb5..2e73da530 100644 --- a/src/autotype/xcb/KeySymMap.h +++ b/src/autotype/xcb/KeySymMap.h @@ -4,6 +4,7 @@ const int AutoTypePlatformX11::m_unicodeToKeysymLen = 632; +// clang-format off const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = { 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, @@ -167,3 +168,4 @@ const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = { 0x04ac, 0x04d4, 0x04ad, 0x04d5, 0x04ae, 0x04d6, 0x04d7, 0x04d8, 0x04d9, 0x04da, 0x04db, 0x04dc, 0x04a6, 0x04dd, 0x04a5, 0x04b0 }; +// clang-format on diff --git a/src/autotype/xcb/keysymmap.py b/src/autotype/xcb/keysymmap.py index a35971015..ed45ee7fe 100755 --- a/src/autotype/xcb/keysymmap.py +++ b/src/autotype/xcb/keysymmap.py @@ -39,23 +39,21 @@ else: keysymMap = {} -f = open(keysymdef, "r") -for line in f: - match = re.search(r'0x([0-9a-fA-F]+)\s+/\* U\+([0-9a-fA-F]+)', line) - if match: - keysym = int(match.group(1), 16) - unicodeVal = int(match.group(2), 16) +with open(keysymdef, "r") as fid: + for line in fid: + match = re.search(r'0x([0-9a-fA-F]+)\s+/\* U\+([0-9a-fA-F]+)', line) + if match: + keysym = int(match.group(1), 16) + unicodeVal = int(match.group(2), 16) - # ignore 1:1 mappings - if keysym >= 0x0020 and keysym <= 0x007e: - continue - if keysym >= 0x00a0 and keysym <= 0x00ff: - continue - # ignore unicode | 0x01000000 mappings - if keysym >= 0x1000000: - continue + # ignore 1:1 mappings + if 0x0020 <= keysym <= 0x007e or 0x00a0 <= keysym <= 0x00ff: + continue + # ignore unicode | 0x01000000 mappings + elif keysym >= 0x1000000: + continue - keysymMap[unicodeVal] = keysym + keysymMap[unicodeVal] = keysym keysymMap = collections.OrderedDict(sorted(keysymMap.items(), key=lambda t: t[0])) @@ -64,26 +62,24 @@ print("""/* */ """) -print("const int AutoTypePlatformX11::m_unicodeToKeysymLen = " + str(len(keysymMap)) + ";") +print("const int AutoTypePlatformX11::m_unicodeToKeysymLen = {0};".format(len(keysymMap))) print() print("const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = {") keys = keysymMap.keys() keyLen = len(keys) -i = 1 -for val in keys: +for idx, val in enumerate(keys, start=1): hexVal = "{0:#0{1}x}".format(val, 6) - if i == keyLen: + if idx == keyLen: print(hexVal) - elif (i % cols) == 0: + elif (idx % cols) == 0: print(hexVal + ",") - elif ((i - 1) % cols) == 0: + elif ((idx - 1) % cols) == 0: print(" " + hexVal + ", ", end="") else: print(hexVal + ", ", end="") - i += 1 print("};") print() @@ -91,17 +87,15 @@ print() print("const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = {") values = keysymMap.values() valuesLen = len(values) -i = 1 -for val in values: +for idx, val in enumerate(values, start=1): hexVal = "{0:#0{1}x}".format(val, 6) - if i == valuesLen: + if idx == valuesLen: print(hexVal) - elif (i % cols) == 0: + elif (idx % cols) == 0: print(hexVal + ",") - elif ((i - 1) % cols) == 0: + elif ((idx - 1) % cols) == 0: print(" " + hexVal + ", ", end="") else: print(hexVal + ", ", end="") - i += 1 print("};") diff --git a/src/browser/BrowserAccessControlDialog.cpp b/src/browser/BrowserAccessControlDialog.cpp old mode 100755 new mode 100644 index 7090a4d16..9a10e555f --- a/src/browser/BrowserAccessControlDialog.cpp +++ b/src/browser/BrowserAccessControlDialog.cpp @@ -1,34 +1,35 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #include "BrowserAccessControlDialog.h" #include "ui_BrowserAccessControlDialog.h" + #include "core/Entry.h" -BrowserAccessControlDialog::BrowserAccessControlDialog(QWidget* parent) : - QDialog(parent), - ui(new Ui::BrowserAccessControlDialog()) +BrowserAccessControlDialog::BrowserAccessControlDialog(QWidget* parent) + : QDialog(parent) + , m_ui(new Ui::BrowserAccessControlDialog()) { this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); - ui->setupUi(this); - connect(ui->allowButton, SIGNAL(clicked()), this, SLOT(accept())); - connect(ui->denyButton, SIGNAL(clicked()), this, SLOT(reject())); + m_ui->setupUi(this); + connect(m_ui->allowButton, SIGNAL(clicked()), this, SLOT(accept())); + connect(m_ui->denyButton, SIGNAL(clicked()), this, SLOT(reject())); } BrowserAccessControlDialog::~BrowserAccessControlDialog() @@ -37,23 +38,24 @@ BrowserAccessControlDialog::~BrowserAccessControlDialog() void BrowserAccessControlDialog::setUrl(const QString& url) { - ui->label->setText(QString(tr("%1 has requested access to passwords for the following item(s).\n" - "Please select whether you want to allow access.")).arg(QUrl(url).host())); + m_ui->label->setText(QString(tr("%1 has requested access to passwords for the following item(s).\n" + "Please select whether you want to allow access.")) + .arg(QUrl(url).host())); } void BrowserAccessControlDialog::setItems(const QList& items) { for (Entry* entry : items) { - ui->itemsList->addItem(entry->title() + " - " + entry->username()); + m_ui->itemsList->addItem(entry->title() + " - " + entry->username()); } } bool BrowserAccessControlDialog::remember() const { - return ui->rememberDecisionCheckBox->isChecked(); + return m_ui->rememberDecisionCheckBox->isChecked(); } void BrowserAccessControlDialog::setRemember(bool r) { - ui->rememberDecisionCheckBox->setChecked(r); + m_ui->rememberDecisionCheckBox->setChecked(r); } diff --git a/src/browser/BrowserAccessControlDialog.h b/src/browser/BrowserAccessControlDialog.h old mode 100755 new mode 100644 index d2a66ce0d..4c93a54fc --- a/src/browser/BrowserAccessControlDialog.h +++ b/src/browser/BrowserAccessControlDialog.h @@ -1,20 +1,20 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef BROWSERACCESSCONTROLDIALOG_H #define BROWSERACCESSCONTROLDIALOG_H @@ -24,8 +24,9 @@ class Entry; -namespace Ui { -class BrowserAccessControlDialog; +namespace Ui +{ + class BrowserAccessControlDialog; } class BrowserAccessControlDialog : public QDialog @@ -42,7 +43,7 @@ public: void setRemember(bool r); private: - QScopedPointer ui; + QScopedPointer m_ui; }; #endif // BROWSERACCESSCONTROLDIALOG_H diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp old mode 100755 new mode 100644 index 78ca53c1e..1a4cbf5ec --- a/src/browser/BrowserAction.cpp +++ b/src/browser/BrowserAction.cpp @@ -1,43 +1,43 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ -#include -#include #include "BrowserAction.h" #include "BrowserSettings.h" #include "NativeMessagingBase.h" -#include "sodium.h" -#include "sodium/crypto_box.h" -#include "sodium/randombytes.h" #include "config-keepassx.h" -BrowserAction::BrowserAction(BrowserService& browserService) : - m_mutex(QMutex::Recursive), - m_browserService(browserService), - m_associated(false) -{ +#include +#include +#include +#include +#include +BrowserAction::BrowserAction(BrowserService& browserService) + : m_mutex(QMutex::Recursive) + , m_browserService(browserService) + , m_associated(false) +{ } QJsonObject BrowserAction::readResponse(const QJsonObject& json) { if (json.isEmpty()) { - return QJsonObject(); + return getErrorReply("", ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED); } bool triggerUnlock = false; @@ -48,7 +48,7 @@ QJsonObject BrowserAction::readResponse(const QJsonObject& json) const QString action = json.value("action").toString(); if (action.isEmpty()) { - return QJsonObject(); + return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); } QMutexLocker locker(&m_mutex); @@ -63,16 +63,12 @@ QJsonObject BrowserAction::readResponse(const QJsonObject& json) return handleAction(json); } - // Private functions /////////////////////// QJsonObject BrowserAction::handleAction(const QJsonObject& json) { QString action = json.value("action").toString(); - if (action.isEmpty()) { - return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); - } if (action.compare("change-public-keys", Qt::CaseSensitive) == 0) { return handleChangePublicKeys(json, action); @@ -81,7 +77,7 @@ QJsonObject BrowserAction::handleAction(const QJsonObject& json) } else if (action.compare("associate", Qt::CaseSensitive) == 0) { return handleAssociate(json, action); } else if (action.compare("test-associate", Qt::CaseSensitive) == 0) { - return handleTestAssociate(json, action); + return handleTestAssociate(json, action); } else if (action.compare("get-logins", Qt::CaseSensitive) == 0) { return handleGetLogins(json, action); } else if (action.compare("generate-password", Qt::CaseSensitive) == 0) { @@ -90,6 +86,10 @@ QJsonObject BrowserAction::handleAction(const QJsonObject& json) return handleSetLogin(json, action); } else if (action.compare("lock-database", Qt::CaseSensitive) == 0) { return handleLockDatabase(json, action); + } else if (action.compare("get-database-groups", Qt::CaseSensitive) == 0) { + return handleGetDatabaseGroups(json, action); + } else if (action.compare("create-new-group", Qt::CaseSensitive) == 0) { + return handleCreateNewGroup(json, action); } // Action was not recognized @@ -113,6 +113,10 @@ QJsonObject BrowserAction::handleChangePublicKeys(const QJsonObject& json, const const QString publicKey = getBase64FromKey(pk, crypto_box_PUBLICKEYBYTES); const QString secretKey = getBase64FromKey(sk, crypto_box_SECRETKEYBYTES); + if (publicKey.isEmpty() || secretKey.isEmpty()) { + return getErrorReply(action, ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED); + } + m_clientPublicKey = clientPublicKey; m_publicKey = publicKey; m_secretKey = secretKey; @@ -129,7 +133,7 @@ QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const const QString hash = getDatabaseHash(); const QString nonce = json.value("nonce").toString(); const QString encrypted = json.value("message").toString(); - const QJsonObject decrypted = decryptMessage(encrypted, nonce, action); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); @@ -156,7 +160,7 @@ QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QStrin const QString hash = getDatabaseHash(); const QString nonce = json.value("nonce").toString(); const QString encrypted = json.value("message").toString(); - const QJsonObject decrypted = decryptMessage(encrypted, nonce, action); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); @@ -169,9 +173,10 @@ QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QStrin QMutexLocker locker(&m_mutex); if (key.compare(m_clientPublicKey, Qt::CaseSensitive) == 0) { - // Check for identification key. If it's not found, ensure backwards compatibility and use the current public key + // Check for identification key. If it's not found, ensure backwards compatibility and use the current public + // key const QString idKey = decrypted.value("idKey").toString(); - const QString id = m_browserService.storeKey((idKey.isEmpty() ? key: idKey)); + const QString id = m_browserService.storeKey((idKey.isEmpty() ? key : idKey)); if (id.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED); } @@ -193,7 +198,7 @@ QJsonObject BrowserAction::handleTestAssociate(const QJsonObject& json, const QS const QString hash = getDatabaseHash(); const QString nonce = json.value("nonce").toString(); const QString encrypted = json.value("message").toString(); - const QJsonObject decrypted = decryptMessage(encrypted, nonce, action); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); @@ -232,7 +237,7 @@ QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QStrin return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } - const QJsonObject decrypted = decryptMessage(encrypted, nonce, action); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } @@ -252,7 +257,9 @@ QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QStrin const QString id = decrypted.value("id").toString(); const QString submit = decrypted.value("submitUrl").toString(); - const QJsonArray users = m_browserService.findMatchingEntries(id, url, submit, "", keyList); + const QString auth = decrypted.value("httpAuth").toString(); + const bool httpAuth = auth.compare("true", Qt::CaseSensitive) == 0 ? true : false; + const QJsonArray users = m_browserService.findMatchingEntries(id, url, submit, "", keyList, httpAuth); if (users.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_NO_LOGINS_FOUND); @@ -272,8 +279,7 @@ QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QStrin QJsonObject BrowserAction::handleGeneratePassword(const QJsonObject& json, const QString& action) { const QString nonce = json.value("nonce").toString(); - const QString password = BrowserSettings::generatePassword(); - const QString bits = QString::number(BrowserSettings::getbits()); // For some reason this always returns 1140 bits? + const QString password = browserSettings()->generatePassword(); if (nonce.isEmpty() || password.isEmpty()) { return QJsonObject(); @@ -281,7 +287,7 @@ QJsonObject BrowserAction::handleGeneratePassword(const QJsonObject& json, const QJsonArray arr; QJsonObject passwd; - passwd["login"] = QString::number(password.length() * 8); //bits; + passwd["login"] = QString::number(password.length() * 8); // bits; passwd["password"] = password; arr.append(passwd); @@ -304,7 +310,7 @@ QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } - const QJsonObject decrypted = decryptMessage(encrypted, nonce, action); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } @@ -319,12 +325,14 @@ QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString const QString password = decrypted.value("password").toString(); const QString submitUrl = decrypted.value("submitUrl").toString(); const QString uuid = decrypted.value("uuid").toString(); + const QString group = decrypted.value("group").toString(); + const QString groupUuid = decrypted.value("groupUuid").toString(); const QString realm; if (uuid.isEmpty()) { - m_browserService.addEntry(id, login, password, url, submitUrl, realm); + m_browserService.addEntry(id, login, password, url, submitUrl, realm, group, groupUuid); } else { - m_browserService.updateEntry(id, uuid, login, password, url); + m_browserService.updateEntry(id, uuid, login, password, url, submitUrl); } const QString newNonce = incrementNonce(nonce); @@ -343,7 +351,7 @@ QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QSt const QString hash = getDatabaseHash(); const QString nonce = json.value("nonce").toString(); const QString encrypted = json.value("message").toString(); - const QJsonObject decrypted = decryptMessage(encrypted, nonce, action); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); @@ -367,6 +375,76 @@ QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QSt return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); } +QJsonObject BrowserAction::handleGetDatabaseGroups(const QJsonObject& json, const QString& action) +{ + const QString hash = getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + + QMutexLocker locker(&m_mutex); + if (!m_associated) { + return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); + } + + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { + return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); + } + + QString command = decrypted.value("action").toString(); + if (command.isEmpty() || command.compare("get-database-groups", Qt::CaseSensitive) != 0) { + return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); + } + + const QJsonObject groups = m_browserService.getDatabaseGroups(); + if (groups.isEmpty()) { + return getErrorReply(action, ERROR_KEEPASS_NO_GROUPS_FOUND); + } + + const QString newNonce = incrementNonce(nonce); + + QJsonObject message = buildMessage(newNonce); + message["groups"] = groups; + + return buildResponse(action, message, newNonce); +} + +QJsonObject BrowserAction::handleCreateNewGroup(const QJsonObject& json, const QString& action) +{ + const QString hash = getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + + QMutexLocker locker(&m_mutex); + if (!m_associated) { + return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); + } + + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { + return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); + } + + QString command = decrypted.value("action").toString(); + if (command.isEmpty() || command.compare("create-new-group", Qt::CaseSensitive) != 0) { + return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); + } + + QString group = decrypted.value("groupName").toString(); + const QJsonObject newGroup = m_browserService.createNewGroup(group); + if (newGroup.isEmpty() || newGroup["name"].toString().isEmpty() || newGroup["uuid"].toString().isEmpty()) { + return getErrorReply(action, ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP); + } + + const QString newNonce = incrementNonce(nonce); + + QJsonObject message = buildMessage(newNonce); + message["name"] = newGroup["name"]; + message["uuid"] = newGroup["uuid"]; + + return buildResponse(action, message, newNonce); +} + QJsonObject BrowserAction::getErrorReply(const QString& action, const int errorCode) const { QJsonObject response; @@ -379,7 +457,7 @@ QJsonObject BrowserAction::getErrorReply(const QString& action, const int errorC QJsonObject BrowserAction::buildMessage(const QString& nonce) const { QJsonObject message; - message["version"] = KEEPASSX_VERSION; + message["version"] = KEEPASSXC_VERSION; message["success"] = "true"; message["nonce"] = nonce; return message; @@ -388,8 +466,13 @@ QJsonObject BrowserAction::buildMessage(const QString& nonce) const QJsonObject BrowserAction::buildResponse(const QString& action, const QJsonObject& message, const QString& nonce) { QJsonObject response; + QString encryptedMessage = encryptMessage(message, nonce); + if (encryptedMessage.isEmpty()) { + return getErrorReply(action, ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE); + } + response["action"] = action; - response["message"] = encryptMessage(message, nonce); + response["message"] = encryptedMessage; response["nonce"] = nonce; return response; } @@ -397,31 +480,47 @@ QJsonObject BrowserAction::buildResponse(const QString& action, const QJsonObjec QString BrowserAction::getErrorMessage(const int errorCode) const { switch (errorCode) { - case ERROR_KEEPASS_DATABASE_NOT_OPENED: return QObject::tr("Database not opened"); - case ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED: return QObject::tr("Database hash not available"); - case ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED: return QObject::tr("Client public key not received"); - case ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE: return QObject::tr("Cannot decrypt message"); - case ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED: return QObject::tr("Timeout or cannot connect to KeePassXC"); - case ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED: return QObject::tr("Action cancelled or denied"); - case ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE: return QObject::tr("Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC?"); - case ERROR_KEEPASS_ASSOCIATION_FAILED: return QObject::tr("KeePassXC association failed, try again"); - case ERROR_KEEPASS_KEY_CHANGE_FAILED: return QObject::tr("Key change was not successful"); - case ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED: return QObject::tr("Encryption key is not recognized"); - case ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND: return QObject::tr("No saved databases found"); - case ERROR_KEEPASS_INCORRECT_ACTION: return QObject::tr("Incorrect action"); - case ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED: return QObject::tr("Empty message received"); - case ERROR_KEEPASS_NO_URL_PROVIDED: return QObject::tr("No URL provided"); - case ERROR_KEEPASS_NO_LOGINS_FOUND: return QObject::tr("No logins found"); - default: return QObject::tr("Unknown error"); + case ERROR_KEEPASS_DATABASE_NOT_OPENED: + return QObject::tr("Database not opened"); + case ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED: + return QObject::tr("Database hash not available"); + case ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED: + return QObject::tr("Client public key not received"); + case ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE: + return QObject::tr("Cannot decrypt message"); + case ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED: + return QObject::tr("Action cancelled or denied"); + case ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE: + return QObject::tr("Message encryption failed."); + case ERROR_KEEPASS_ASSOCIATION_FAILED: + return QObject::tr("KeePassXC association failed, try again"); + case ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED: + return QObject::tr("Encryption key is not recognized"); + case ERROR_KEEPASS_INCORRECT_ACTION: + return QObject::tr("Incorrect action"); + case ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED: + return QObject::tr("Empty message received"); + case ERROR_KEEPASS_NO_URL_PROVIDED: + return QObject::tr("No URL provided"); + case ERROR_KEEPASS_NO_LOGINS_FOUND: + return QObject::tr("No logins found"); + case ERROR_KEEPASS_NO_GROUPS_FOUND: + return QObject::tr("No groups found"); + case ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP: + return QObject::tr("Cannot create new group"); + default: + return QObject::tr("Unknown error"); } } QString BrowserAction::getDatabaseHash() { QMutexLocker locker(&m_mutex); - QByteArray hash = QCryptographicHash::hash( - (m_browserService.getDatabaseRootUuid() + m_browserService.getDatabaseRecycleBinUuid()).toUtf8(), - QCryptographicHash::Sha256).toHex(); + QByteArray hash = + QCryptographicHash::hash( + (m_browserService.getDatabaseRootUuid() + m_browserService.getDatabaseRecycleBinUuid()).toUtf8(), + QCryptographicHash::Sha256) + .toHex(); return QString(hash); } @@ -439,21 +538,21 @@ QString BrowserAction::encryptMessage(const QJsonObject& message, const QString& return QString(); } -QJsonObject BrowserAction::decryptMessage(const QString& message, const QString& nonce, const QString& action) +QJsonObject BrowserAction::decryptMessage(const QString& message, const QString& nonce) { if (message.isEmpty() || nonce.isEmpty()) { return QJsonObject(); } QByteArray ba = decrypt(message, nonce); - if (!ba.isEmpty()) { - return getJsonObject(ba); + if (ba.isEmpty()) { + return QJsonObject(); } - return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); + return getJsonObject(ba); } -QString BrowserAction::encrypt(const QString plaintext, const QString nonce) +QString BrowserAction::encrypt(const QString& plaintext, const QString& nonce) { QMutexLocker locker(&m_mutex); const QByteArray ma = plaintext.toUtf8(); @@ -474,14 +573,14 @@ QString BrowserAction::encrypt(const QString plaintext, const QString nonce) } if (crypto_box_easy(e.data(), m.data(), m.size(), n.data(), ck.data(), sk.data()) == 0) { - QByteArray res = getQByteArray(e.data(), (crypto_box_MACBYTES + ma.length())); - return res.toBase64(); + QByteArray res = getQByteArray(e.data(), (crypto_box_MACBYTES + ma.length())); + return res.toBase64(); } return QString(); } -QByteArray BrowserAction::decrypt(const QString encrypted, const QString nonce) +QByteArray BrowserAction::decrypt(const QString& encrypted, const QString& nonce) { QMutexLocker locker(&m_mutex); const QByteArray ma = base64Decode(encrypted); @@ -502,7 +601,7 @@ QByteArray BrowserAction::decrypt(const QString encrypted, const QString nonce) } if (crypto_box_open_easy(d.data(), m.data(), ma.length(), n.data(), ck.data(), sk.data()) == 0) { - return getQByteArray(d.data(), std::char_traits::length(reinterpret_cast(d.data()))); + return getQByteArray(d.data(), std::char_traits::length(reinterpret_cast(d.data()))); } return QByteArray(); @@ -531,14 +630,14 @@ QJsonObject BrowserAction::getJsonObject(const uchar* pArray, const uint len) co return doc.object(); } -QJsonObject BrowserAction::getJsonObject(const QByteArray ba) const +QJsonObject BrowserAction::getJsonObject(const QByteArray& ba) const { QJsonParseError err; QJsonDocument doc(QJsonDocument::fromJson(ba, &err)); return doc.object(); } -QByteArray BrowserAction::base64Decode(const QString str) +QByteArray BrowserAction::base64Decode(const QString& str) { return QByteArray::fromBase64(str.toUtf8()); } @@ -551,15 +650,3 @@ QString BrowserAction::incrementNonce(const QString& nonce) sodium_increment(n.data(), n.size()); return getQByteArray(n.data(), n.size()).toBase64(); } - -void BrowserAction::removeSharedEncryptionKeys() -{ - QMutexLocker locker(&m_mutex); - m_browserService.removeSharedEncryptionKeys(); -} - -void BrowserAction::removeStoredPermissions() -{ - QMutexLocker locker(&m_mutex); - m_browserService.removeStoredPermissions(); -} diff --git a/src/browser/BrowserAction.h b/src/browser/BrowserAction.h old mode 100755 new mode 100644 index c4d59d3c9..535170939 --- a/src/browser/BrowserAction.h +++ b/src/browser/BrowserAction.h @@ -1,50 +1,53 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef BROWSERACTION_H #define BROWSERACTION_H -#include -#include +#include "BrowserService.h" #include #include -#include "BrowserService.h" +#include +#include class BrowserAction : public QObject { Q_OBJECT - enum { - ERROR_KEEPASS_DATABASE_NOT_OPENED = 1, - ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED = 2, - ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED = 3, - ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE = 4, - ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED = 5, - ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED = 6, - ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE = 7, - ERROR_KEEPASS_ASSOCIATION_FAILED = 8, - ERROR_KEEPASS_KEY_CHANGE_FAILED = 9, - ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED = 10, - ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND = 11, - ERROR_KEEPASS_INCORRECT_ACTION = 12, - ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED = 13, - ERROR_KEEPASS_NO_URL_PROVIDED = 14, - ERROR_KEEPASS_NO_LOGINS_FOUND = 15 + enum + { + ERROR_KEEPASS_DATABASE_NOT_OPENED = 1, + ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED = 2, + ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED = 3, + ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE = 4, + ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED = 5, + ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED = 6, + ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE = 7, + ERROR_KEEPASS_ASSOCIATION_FAILED = 8, + ERROR_KEEPASS_KEY_CHANGE_FAILED = 9, + ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED = 10, + ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND = 11, + ERROR_KEEPASS_INCORRECT_ACTION = 12, + ERROR_KEEPASS_EMPTY_MESSAGE_RECEIVED = 13, + ERROR_KEEPASS_NO_URL_PROVIDED = 14, + ERROR_KEEPASS_NO_LOGINS_FOUND = 15, + ERROR_KEEPASS_NO_GROUPS_FOUND = 16, + ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP = 17 }; public: @@ -53,10 +56,6 @@ public: QJsonObject readResponse(const QJsonObject& json); -public slots: - void removeSharedEncryptionKeys(); - void removeStoredPermissions(); - private: QJsonObject handleAction(const QJsonObject& json); QJsonObject handleChangePublicKeys(const QJsonObject& json, const QString& action); @@ -67,32 +66,34 @@ private: QJsonObject handleGeneratePassword(const QJsonObject& json, const QString& action); QJsonObject handleSetLogin(const QJsonObject& json, const QString& action); QJsonObject handleLockDatabase(const QJsonObject& json, const QString& action); + QJsonObject handleGetDatabaseGroups(const QJsonObject& json, const QString& action); + QJsonObject handleCreateNewGroup(const QJsonObject& json, const QString& action); QJsonObject buildMessage(const QString& nonce) const; QJsonObject buildResponse(const QString& action, const QJsonObject& message, const QString& nonce); QJsonObject getErrorReply(const QString& action, const int errorCode) const; - QString getErrorMessage(const int errorCode) const; - QString getDatabaseHash(); + QString getErrorMessage(const int errorCode) const; + QString getDatabaseHash(); - QString encryptMessage(const QJsonObject& message, const QString& nonce); - QJsonObject decryptMessage(const QString& message, const QString& nonce, const QString& action = QString()); - QString encrypt(const QString plaintext, const QString nonce); - QByteArray decrypt(const QString encrypted, const QString nonce); + QString encryptMessage(const QJsonObject& message, const QString& nonce); + QJsonObject decryptMessage(const QString& message, const QString& nonce); + QString encrypt(const QString& plaintext, const QString& nonce); + QByteArray decrypt(const QString& encrypted, const QString& nonce); - QString getBase64FromKey(const uchar* array, const uint len); - QByteArray getQByteArray(const uchar* array, const uint len) const; + QString getBase64FromKey(const uchar* array, const uint len); + QByteArray getQByteArray(const uchar* array, const uint len) const; QJsonObject getJsonObject(const uchar* pArray, const uint len) const; - QJsonObject getJsonObject(const QByteArray ba) const; - QByteArray base64Decode(const QString str); - QString incrementNonce(const QString& nonce); + QJsonObject getJsonObject(const QByteArray& ba) const; + QByteArray base64Decode(const QString& str); + QString incrementNonce(const QString& nonce); private: - QMutex m_mutex; - BrowserService& m_browserService; - QString m_clientPublicKey; - QString m_publicKey; - QString m_secretKey; - bool m_associated; + QMutex m_mutex; + BrowserService& m_browserService; + QString m_clientPublicKey; + QString m_publicKey; + QString m_secretKey; + bool m_associated; }; #endif // BROWSERACTION_H diff --git a/src/browser/BrowserClients.cpp b/src/browser/BrowserClients.cpp old mode 100755 new mode 100644 index 9c47fdd46..083df3945 --- a/src/browser/BrowserClients.cpp +++ b/src/browser/BrowserClients.cpp @@ -1,28 +1,28 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ -#include -#include #include "BrowserClients.h" +#include +#include -BrowserClients::BrowserClients(BrowserService& browserService) : - m_mutex(QMutex::Recursive), - m_browserService(browserService) +BrowserClients::BrowserClients(BrowserService& browserService) + : m_mutex(QMutex::Recursive) + , m_browserService(browserService) { m_clients.reserve(1000); } @@ -63,7 +63,7 @@ QString BrowserClients::getClientID(const QJsonObject& json) const BrowserClients::ClientPtr BrowserClients::getClient(const QString& clientID) { QMutexLocker locker(&m_mutex); - for (const auto &i : m_clients) { + for (const auto& i : m_clients) { if (i->clientID.compare(clientID, Qt::CaseSensitive) == 0) { return i; } diff --git a/src/browser/BrowserClients.h b/src/browser/BrowserClients.h old mode 100755 new mode 100644 index f9052e7de..1fa3dfe17 --- a/src/browser/BrowserClients.h +++ b/src/browser/BrowserClients.h @@ -1,40 +1,45 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef BROWSERCLIENTS_H #define BROWSERCLIENTS_H -#include -#include -#include -#include -#include #include "BrowserAction.h" +#include +#include +#include +#include +#include class BrowserClients { - struct Client { - Client(const QString& id, QSharedPointer ba) : clientID(id), browserAction(ba) {} - QString clientID; - QSharedPointer browserAction; + struct Client + { + Client(const QString& id, QSharedPointer ba) + : clientID(id) + , browserAction(ba) + { + } + QString clientID; + QSharedPointer browserAction; }; - typedef QSharedPointer ClientPtr; + typedef QSharedPointer ClientPtr; public: BrowserClients(BrowserService& browserService); @@ -44,13 +49,13 @@ public: private: QJsonObject byteArrayToJson(const QByteArray& arr) const; - QString getClientID(const QJsonObject& json) const; - ClientPtr getClient(const QString& clientID); + QString getClientID(const QJsonObject& json) const; + ClientPtr getClient(const QString& clientID); private: - QMutex m_mutex; - QVector m_clients; - BrowserService& m_browserService; + QMutex m_mutex; + QVector m_clients; + BrowserService& m_browserService; }; #endif // BROWSERCLIENTS_H diff --git a/src/browser/BrowserEntryConfig.cpp b/src/browser/BrowserEntryConfig.cpp index 36d0c7339..a058b6a05 100644 --- a/src/browser/BrowserEntryConfig.cpp +++ b/src/browser/BrowserEntryConfig.cpp @@ -1,31 +1,30 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #include "BrowserEntryConfig.h" -#include #include "core/Entry.h" #include "core/EntryAttributes.h" +#include -static const char KEEPASSBROWSER_NAME[] = "KeePassXC-Browser Settings"; +static const char KEEPASSXCBROWSER_NAME[] = "KeePassXC-Browser Settings"; - -BrowserEntryConfig::BrowserEntryConfig(QObject* parent) : - QObject(parent) +BrowserEntryConfig::BrowserEntryConfig(QObject* parent) + : QObject(parent) { } @@ -83,7 +82,7 @@ void BrowserEntryConfig::setRealm(const QString& realm) bool BrowserEntryConfig::load(const Entry* entry) { - QString s = entry->attributes()->value(KEEPASSBROWSER_NAME); + QString s = entry->customData()->value(KEEPASSXCBROWSER_NAME); if (s.isEmpty()) { return false; } @@ -105,5 +104,5 @@ void BrowserEntryConfig::save(Entry* entry) QVariantMap v = qo2qv(this); QJsonObject o = QJsonObject::fromVariantMap(v); QByteArray json = QJsonDocument(o).toJson(QJsonDocument::Compact); - entry->attributes()->set(KEEPASSBROWSER_NAME, json); + entry->customData()->set(KEEPASSXCBROWSER_NAME, json); } diff --git a/src/browser/BrowserEntryConfig.h b/src/browser/BrowserEntryConfig.h index 0ffaf985b..183c492aa 100644 --- a/src/browser/BrowserEntryConfig.h +++ b/src/browser/BrowserEntryConfig.h @@ -1,29 +1,29 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef BROWSERENTRYCONFIG_H #define BROWSERENTRYCONFIG_H +#include "Variant.h" #include +#include #include #include -#include -#include "Variant.h" class Entry; @@ -31,11 +31,11 @@ class BrowserEntryConfig : public QObject { Q_OBJECT Q_PROPERTY(QStringList Allow READ allowedHosts WRITE setAllowedHosts) - Q_PROPERTY(QStringList Deny READ deniedHosts WRITE setDeniedHosts ) - Q_PROPERTY(QString Realm READ realm WRITE setRealm ) + Q_PROPERTY(QStringList Deny READ deniedHosts WRITE setDeniedHosts) + Q_PROPERTY(QString Realm READ realm WRITE setRealm) public: - BrowserEntryConfig(QObject* object = 0); + BrowserEntryConfig(QObject* object = nullptr); bool load(const Entry* entry); void save(Entry* entry); @@ -54,7 +54,7 @@ private: QSet m_allowedHosts; QSet m_deniedHosts; - QString m_realm; + QString m_realm; }; #endif // BROWSERENTRYCONFIG_H diff --git a/src/browser/BrowserEntrySaveDialog.cpp b/src/browser/BrowserEntrySaveDialog.cpp new file mode 100644 index 000000000..43d6c0c62 --- /dev/null +++ b/src/browser/BrowserEntrySaveDialog.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2018 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ + +#include "BrowserEntrySaveDialog.h" +#include "ui_BrowserEntrySaveDialog.h" + +#include "core/Database.h" +#include "gui/DatabaseWidget.h" + +BrowserEntrySaveDialog::BrowserEntrySaveDialog(QWidget* parent) + : QDialog(parent) + , m_ui(new Ui::BrowserEntrySaveDialog()) +{ + this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); + + m_ui->setupUi(this); + connect(m_ui->okButton, SIGNAL(clicked()), this, SLOT(accept())); + connect(m_ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject())); + + m_ui->itemsList->setSelectionMode(QAbstractItemView::SingleSelection); + m_ui->label->setText(QString(tr("You have multiple databases open.\n" + "Please select the correct database for saving credentials."))); +} + +BrowserEntrySaveDialog::~BrowserEntrySaveDialog() +{ +} + +int BrowserEntrySaveDialog::setItems(QList& databaseWidgets, DatabaseWidget* currentWidget) const +{ + uint counter = 0; + int activeIndex = -1; + for (const auto dbWidget : databaseWidgets) { + QString databaseName = dbWidget->database()->metadata()->name(); + QString databaseFileName = dbWidget->database()->filePath(); + + auto* item = new QListWidgetItem(); + item->setData(Qt::UserRole, counter); + + // Show database name (and filename if the name has been set in metadata) + if (databaseName == databaseFileName) { + item->setText(databaseFileName); + } else { + item->setText(QString("%1 (%2)").arg(databaseName, databaseFileName)); + } + + if (currentWidget == dbWidget) { + activeIndex = counter; + } + + m_ui->itemsList->addItem(item); + ++counter; + } + + // This must be done after the whole list is filled + if (activeIndex >= 0) { + m_ui->itemsList->item(activeIndex)->setSelected(true); + } + + m_ui->itemsList->selectAll(); + return databaseWidgets.length(); +} + +QList BrowserEntrySaveDialog::getSelected() const +{ + return m_ui->itemsList->selectedItems(); +} diff --git a/src/browser/BrowserEntrySaveDialog.h b/src/browser/BrowserEntrySaveDialog.h new file mode 100644 index 000000000..2e2378635 --- /dev/null +++ b/src/browser/BrowserEntrySaveDialog.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2018 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ + +#ifndef BROWSERENTRYSAVEDIALOG_H +#define BROWSERENTRYSAVEDIALOG_H + +#include "gui/DatabaseTabWidget.h" + +#include +#include +#include + +class Entry; + +namespace Ui +{ + class BrowserEntrySaveDialog; +} + +class BrowserEntrySaveDialog : public QDialog +{ + Q_OBJECT + +public: + explicit BrowserEntrySaveDialog(QWidget* parent = nullptr); + ~BrowserEntrySaveDialog() override; + + int setItems(QList& databaseWidgets, DatabaseWidget* currentWidget) const; + QList getSelected() const; + +private: + QScopedPointer m_ui; +}; + +#endif // BROWSERENTRYSAVEDIALOG_H diff --git a/src/http/AccessControlDialog.ui b/src/browser/BrowserEntrySaveDialog.ui old mode 100644 new mode 100755 similarity index 70% rename from src/http/AccessControlDialog.ui rename to src/browser/BrowserEntrySaveDialog.ui index 37d477eee..5beb6fab8 --- a/src/http/AccessControlDialog.ui +++ b/src/browser/BrowserEntrySaveDialog.ui @@ -1,7 +1,7 @@ - AccessControlDialog - + BrowserEntrySaveDialog + 0 @@ -11,7 +11,7 @@ - KeePassXC HTTP Confirm Access + KeePassXC-Browser Save Entry @@ -24,13 +24,6 @@ - - - - Remember this decision - - - @@ -47,16 +40,16 @@ - + - Allow + Ok - + - Deny + Cancel diff --git a/src/browser/BrowserOptionDialog.cpp b/src/browser/BrowserOptionDialog.cpp old mode 100755 new mode 100644 index 1bc17a278..dd91f1594 --- a/src/browser/BrowserOptionDialog.cpp +++ b/src/browser/BrowserOptionDialog.cpp @@ -1,45 +1,67 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #include "BrowserOptionDialog.h" #include "ui_BrowserOptionDialog.h" -#include "config-keepassx.h" + #include "BrowserSettings.h" +#include "config-keepassx.h" #include "core/FilePath.h" -#include #include -BrowserOptionDialog::BrowserOptionDialog(QWidget* parent) : - QWidget(parent), - m_ui(new Ui::BrowserOptionDialog()) +BrowserOptionDialog::BrowserOptionDialog(QWidget* parent) + : QWidget(parent) + , m_ui(new Ui::BrowserOptionDialog()) { m_ui->setupUi(this); - connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SIGNAL(removeSharedEncryptionKeys())); - connect(m_ui->removeStoredPermissions, SIGNAL(clicked()), this, SIGNAL(removeStoredPermissions())); + + // clang-format off + QString snapInstructions; +#if defined(KEEPASSXC_DIST_SNAP) + snapInstructions = "

    " + + tr("Due to Snap sandboxing, you must run a script to enable browser integration." + "
    " + "You can obtain this script from %1") + .arg("https://keepassxc.org"); +#endif m_ui->extensionLabel->setOpenExternalLinks(true); - m_ui->extensionLabel->setText(tr("KeePassXC-Browser is needed for the browser integration to work.
    Download it for %1 and %2.").arg( - "Firefox", - "Google Chrome / Chromium / Vivaldi")); + m_ui->extensionLabel->setText( + tr("KeePassXC-Browser is needed for the browser integration to work.
    Download it for %1 and %2. %3") + .arg("Firefox", + "" + "Google Chrome / Chromium / Vivaldi", + snapInstructions)); + // clang-format on - m_ui->warningWidget->showMessage(tr("Warning: The following options can be dangerous!"), MessageWidget::Warning); + m_ui->scriptWarningWidget->setVisible(false); + m_ui->scriptWarningWidget->setAutoHideTimeout(-1); + m_ui->scriptWarningWidget->showMessage( + tr("Warning, the keepassxc-proxy application was not found!" + "
    Please check the KeePassXC installation directory or confirm the custom path in advanced options." + "
    Browser integration WILL NOT WORK without the proxy application." + "
    Expected Path: "), + MessageWidget::Warning); + + m_ui->warningWidget->showMessage(tr("Warning: The following options can be dangerous!"), + MessageWidget::Warning); m_ui->warningWidget->setCloseButtonVisible(false); m_ui->warningWidget->setAutoHideTimeout(-1); @@ -56,6 +78,9 @@ BrowserOptionDialog::BrowserOptionDialog(QWidget* parent) : // Vivaldi uses Chrome's registry settings m_ui->vivaldiSupport->setHidden(true); m_ui->chromeSupport->setText("Chrome and Vivaldi"); + // Tor Browser uses Firefox's registry settings + m_ui->torBrowserSupport->setHidden(true); + m_ui->firefoxSupport->setText("Firefox and Tor Browser"); #endif m_ui->browserGlobalWarningWidget->setVisible(false); } @@ -66,84 +91,112 @@ BrowserOptionDialog::~BrowserOptionDialog() void BrowserOptionDialog::loadSettings() { - BrowserSettings settings; - m_ui->enableBrowserSupport->setChecked(settings.isEnabled()); + auto settings = browserSettings(); + m_ui->enableBrowserSupport->setChecked(settings->isEnabled()); - m_ui->showNotification->setChecked(settings.showNotification()); - m_ui->bestMatchOnly->setChecked(settings.bestMatchOnly()); - m_ui->unlockDatabase->setChecked(settings.unlockDatabase()); - m_ui->matchUrlScheme->setChecked(settings.matchUrlScheme()); + m_ui->showNotification->setChecked(settings->showNotification()); + m_ui->bestMatchOnly->setChecked(settings->bestMatchOnly()); + m_ui->unlockDatabase->setChecked(settings->unlockDatabase()); + m_ui->matchUrlScheme->setChecked(settings->matchUrlScheme()); // hide unimplemented options // TODO: fix this m_ui->showNotification->hide(); - if (settings.sortByUsername()) { + if (settings->sortByUsername()) { m_ui->sortByUsername->setChecked(true); } else { m_ui->sortByTitle->setChecked(true); } - m_ui->alwaysAllowAccess->setChecked(settings.alwaysAllowAccess()); - m_ui->alwaysAllowUpdate->setChecked(settings.alwaysAllowUpdate()); - m_ui->searchInAllDatabases->setChecked(settings.searchInAllDatabases()); - m_ui->supportKphFields->setChecked(settings.supportKphFields()); - m_ui->supportBrowserProxy->setChecked(settings.supportBrowserProxy()); - m_ui->useCustomProxy->setChecked(settings.useCustomProxy()); - m_ui->customProxyLocation->setText(settings.customProxyLocation()); - m_ui->updateBinaryPath->setChecked(settings.updateBinaryPath()); - m_ui->chromeSupport->setChecked(settings.chromeSupport()); - m_ui->chromiumSupport->setChecked(settings.chromiumSupport()); - m_ui->firefoxSupport->setChecked(settings.firefoxSupport()); - m_ui->vivaldiSupport->setChecked(settings.vivaldiSupport()); + m_ui->alwaysAllowAccess->setChecked(settings->alwaysAllowAccess()); + m_ui->alwaysAllowUpdate->setChecked(settings->alwaysAllowUpdate()); + m_ui->httpAuthPermission->setChecked(settings->httpAuthPermission()); + m_ui->searchInAllDatabases->setChecked(settings->searchInAllDatabases()); + m_ui->supportKphFields->setChecked(settings->supportKphFields()); + m_ui->supportBrowserProxy->setChecked(settings->supportBrowserProxy()); + m_ui->useCustomProxy->setChecked(settings->useCustomProxy()); + m_ui->customProxyLocation->setText(settings->customProxyLocation()); + m_ui->updateBinaryPath->setChecked(settings->updateBinaryPath()); + m_ui->chromeSupport->setChecked(settings->chromeSupport()); + m_ui->chromiumSupport->setChecked(settings->chromiumSupport()); + m_ui->firefoxSupport->setChecked(settings->firefoxSupport()); +#ifndef Q_OS_WIN + m_ui->vivaldiSupport->setChecked(settings->vivaldiSupport()); + m_ui->torBrowserSupport->setChecked(settings->torBrowserSupport()); +#endif #if defined(KEEPASSXC_DIST_APPIMAGE) m_ui->supportBrowserProxy->setChecked(true); m_ui->supportBrowserProxy->setEnabled(false); #elif defined(KEEPASSXC_DIST_SNAP) - m_ui->enableBrowserSupport->setChecked(false); - m_ui->enableBrowserSupport->setEnabled(false); - m_ui->browserGlobalWarningWidget->showMessage( - tr("We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment."), MessageWidget::Warning); + // Disable settings that will not work + m_ui->supportBrowserProxy->setChecked(true); + m_ui->supportBrowserProxy->setEnabled(false); + m_ui->useCustomProxy->setChecked(false); + m_ui->useCustomProxy->setEnabled(false); + m_ui->browsersGroupBox->setVisible(false); + m_ui->browsersGroupBox->setEnabled(false); + m_ui->updateBinaryPath->setChecked(false); + m_ui->updateBinaryPath->setEnabled(false); + // Show notice to user + m_ui->browserGlobalWarningWidget->showMessage(tr("Please see special instructions for browser extension use below"), + MessageWidget::Warning); m_ui->browserGlobalWarningWidget->setCloseButtonVisible(false); m_ui->browserGlobalWarningWidget->setAutoHideTimeout(-1); #endif + + // Check for native messaging host location errors + QString path; + if (!settings->checkIfProxyExists(path)) { + QString text = m_ui->scriptWarningWidget->text(); + text.append(path); + m_ui->scriptWarningWidget->setText(text); + m_ui->scriptWarningWidget->setVisible(true); + } else { + m_ui->scriptWarningWidget->setVisible(false); + } } void BrowserOptionDialog::saveSettings() { - BrowserSettings settings; - settings.setEnabled(m_ui->enableBrowserSupport->isChecked()); - settings.setShowNotification(m_ui->showNotification->isChecked()); - settings.setBestMatchOnly(m_ui->bestMatchOnly->isChecked()); - settings.setUnlockDatabase(m_ui->unlockDatabase->isChecked()); - settings.setMatchUrlScheme(m_ui->matchUrlScheme->isChecked()); - settings.setSortByUsername(m_ui->sortByUsername->isChecked()); + auto settings = browserSettings(); + settings->setEnabled(m_ui->enableBrowserSupport->isChecked()); + settings->setShowNotification(m_ui->showNotification->isChecked()); + settings->setBestMatchOnly(m_ui->bestMatchOnly->isChecked()); + settings->setUnlockDatabase(m_ui->unlockDatabase->isChecked()); + settings->setMatchUrlScheme(m_ui->matchUrlScheme->isChecked()); + settings->setSortByUsername(m_ui->sortByUsername->isChecked()); - settings.setSupportBrowserProxy(m_ui->supportBrowserProxy->isChecked()); - settings.setUseCustomProxy(m_ui->useCustomProxy->isChecked()); - settings.setCustomProxyLocation(m_ui->customProxyLocation->text()); + settings->setSupportBrowserProxy(m_ui->supportBrowserProxy->isChecked()); + settings->setUseCustomProxy(m_ui->useCustomProxy->isChecked()); + settings->setCustomProxyLocation(m_ui->customProxyLocation->text()); - settings.setUpdateBinaryPath(m_ui->updateBinaryPath->isChecked()); - settings.setAlwaysAllowAccess(m_ui->alwaysAllowAccess->isChecked()); - settings.setAlwaysAllowUpdate(m_ui->alwaysAllowUpdate->isChecked()); - settings.setSearchInAllDatabases(m_ui->searchInAllDatabases->isChecked()); - settings.setSupportKphFields(m_ui->supportKphFields->isChecked()); + settings->setUpdateBinaryPath(m_ui->updateBinaryPath->isChecked()); + settings->setAlwaysAllowAccess(m_ui->alwaysAllowAccess->isChecked()); + settings->setAlwaysAllowUpdate(m_ui->alwaysAllowUpdate->isChecked()); + settings->setHttpAuthPermission(m_ui->httpAuthPermission->isChecked()); + settings->setSearchInAllDatabases(m_ui->searchInAllDatabases->isChecked()); + settings->setSupportKphFields(m_ui->supportKphFields->isChecked()); - settings.setChromeSupport(m_ui->chromeSupport->isChecked()); - settings.setChromiumSupport(m_ui->chromiumSupport->isChecked()); - settings.setFirefoxSupport(m_ui->firefoxSupport->isChecked()); - settings.setVivaldiSupport(m_ui->vivaldiSupport->isChecked()); + settings->setChromeSupport(m_ui->chromeSupport->isChecked()); + settings->setChromiumSupport(m_ui->chromiumSupport->isChecked()); + settings->setFirefoxSupport(m_ui->firefoxSupport->isChecked()); +#ifndef Q_OS_WIN + settings->setVivaldiSupport(m_ui->vivaldiSupport->isChecked()); + settings->setTorBrowserSupport(m_ui->torBrowserSupport->isChecked()); +#endif } void BrowserOptionDialog::showProxyLocationFileDialog() { #ifdef Q_OS_WIN - QString fileTypeFilter(tr("Executable Files (*.exe);;All Files (*.*)")); + QString fileTypeFilter(QString("%1 (*.exe);;%2 (*.*)").arg(tr("Executable Files"), tr("All Files"))); #else - QString fileTypeFilter(tr("Executable Files (*)")); + QString fileTypeFilter(QString("%1 (*)").arg(tr("Executable Files"))); #endif - auto proxyLocation = QFileDialog::getOpenFileName(this, tr("Select custom proxy location"), + auto proxyLocation = QFileDialog::getOpenFileName(this, + tr("Select custom proxy location"), QFileInfo(QCoreApplication::applicationDirPath()).filePath(), fileTypeFilter); m_ui->customProxyLocation->setText(proxyLocation); diff --git a/src/browser/BrowserOptionDialog.h b/src/browser/BrowserOptionDialog.h old mode 100755 new mode 100644 index b562f6c18..5efb808e5 --- a/src/browser/BrowserOptionDialog.h +++ b/src/browser/BrowserOptionDialog.h @@ -1,30 +1,32 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef BROWSEROPTIONDIALOG_H #define BROWSEROPTIONDIALOG_H -#include +#include #include +#include -namespace Ui { -class BrowserOptionDialog; +namespace Ui +{ + class BrowserOptionDialog; } class BrowserOptionDialog : public QWidget @@ -39,10 +41,6 @@ public slots: void loadSettings(); void saveSettings(); -signals: - void removeSharedEncryptionKeys(); - void removeStoredPermissions(); - private slots: void showProxyLocationFileDialog(); diff --git a/src/browser/BrowserOptionDialog.ui b/src/browser/BrowserOptionDialog.ui index 24589c147..2b32bb9e8 100755 --- a/src/browser/BrowserOptionDialog.ui +++ b/src/browser/BrowserOptionDialog.ui @@ -50,9 +50,18 @@ - + + + + 0 + 0 + + + + + @@ -78,6 +87,19 @@ 40 + + + + Qt::Horizontal + + + + 179 + 20 + + + + @@ -98,19 +120,6 @@ - - - - Qt::Horizontal - - - - 179 - 20 - - - - @@ -131,11 +140,21 @@ + + + + &Tor Browser + + + false + + +
    - + Qt::Vertical @@ -204,52 +223,6 @@
    - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 10 - - - - - - - - - - - 0 - 0 - - - - &Disconnect all browsers - - - - - - - - 0 - 0 - - - - Forget all remembered &permissions - - - - - @@ -294,6 +267,13 @@ + + + + Do not ask permission for HTTP &Basic Auth + + + @@ -366,7 +346,7 @@ - + Qt::Vertical diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index 80e2ba051..9c06c2487 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -1,58 +1,72 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ -#include #include -#include +#include #include +#include +#include + +#include "BrowserAccessControlDialog.h" +#include "BrowserEntryConfig.h" +#include "BrowserEntrySaveDialog.h" #include "BrowserService.h" #include "BrowserSettings.h" -#include "BrowserEntryConfig.h" -#include "BrowserAccessControlDialog.h" #include "core/Database.h" -#include "core/Group.h" #include "core/EntrySearcher.h" +#include "core/Group.h" #include "core/Metadata.h" -#include "core/Uuid.h" #include "core/PasswordGenerator.h" +#include "core/Tools.h" #include "gui/MainWindow.h" +#include "gui/MessageBox.h" +#ifdef Q_OS_MACOS +#include "gui/macutils/MacUtils.h" +#endif - -// de887cc3-0363-43b8-974b-5911b8816224 -static const unsigned char KEEPASSXCBROWSER_UUID_DATA[] = { - 0xde, 0x88, 0x7c, 0xc3, 0x03, 0x63, 0x43, 0xb8, - 0x97, 0x4b, 0x59, 0x11, 0xb8, 0x81, 0x62, 0x24 -}; -static const Uuid KEEPASSXCBROWSER_UUID = Uuid(QByteArray::fromRawData(reinterpret_cast(KEEPASSXCBROWSER_UUID_DATA), sizeof(KEEPASSXCBROWSER_UUID_DATA))); -static const char KEEPASSXCBROWSER_NAME[] = "KeePassXC-Browser Settings"; -static const char ASSOCIATE_KEY_PREFIX[] = "Public Key: "; +const char BrowserService::KEEPASSXCBROWSER_NAME[] = "KeePassXC-Browser Settings"; +const char BrowserService::KEEPASSXCBROWSER_OLD_NAME[] = "keepassxc-browser Settings"; +const char BrowserService::ASSOCIATE_KEY_PREFIX[] = "KPXC_BROWSER_"; static const char KEEPASSXCBROWSER_GROUP_NAME[] = "KeePassXC-Browser Passwords"; -static int KEEPASSXCBROWSER_DEFAULT_ICON = 1; +static int KEEPASSXCBROWSER_DEFAULT_ICON = 1; +// These are for the settings and password conversion +const char BrowserService::LEGACY_ASSOCIATE_KEY_PREFIX[] = "Public Key: "; +static const char KEEPASSHTTP_NAME[] = "KeePassHttp Settings"; +static const char KEEPASSHTTP_GROUP_NAME[] = "KeePassHttp Passwords"; -BrowserService::BrowserService(DatabaseTabWidget* parent) : - m_dbTabWidget(parent), - m_dialogActive(false), - m_bringToFrontRequested(false) +BrowserService::BrowserService(DatabaseTabWidget* parent) + : m_dbTabWidget(parent) + , m_dialogActive(false) + , m_bringToFrontRequested(false) + , m_prevWindowState(WindowState::Normal) + , m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224")) { - connect(m_dbTabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), this, SLOT(databaseLocked(DatabaseWidget*))); - connect(m_dbTabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), this, SLOT(databaseUnlocked(DatabaseWidget*))); - connect(m_dbTabWidget, SIGNAL(activateDatabaseChanged(DatabaseWidget*)), this, SLOT(activateDatabaseChanged(DatabaseWidget*))); + // Don't connect the signals when used from DatabaseSettingsWidgetBrowser (parent is nullptr) + if (m_dbTabWidget) { + connect(m_dbTabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), this, SLOT(databaseLocked(DatabaseWidget*))); + connect( + m_dbTabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), this, SLOT(databaseUnlocked(DatabaseWidget*))); + connect(m_dbTabWidget, + SIGNAL(activateDatabaseChanged(DatabaseWidget*)), + this, + SLOT(activateDatabaseChanged(DatabaseWidget*))); + } } bool BrowserService::isDatabaseOpened() const @@ -62,13 +76,13 @@ bool BrowserService::isDatabaseOpened() const return false; } - return dbWidget->currentMode() == DatabaseWidget::ViewMode || dbWidget->currentMode() == DatabaseWidget::EditMode; - + return dbWidget->currentMode() == DatabaseWidget::Mode::ViewMode + || dbWidget->currentMode() == DatabaseWidget::Mode::EditMode; } bool BrowserService::openDatabase(bool triggerUnlock) { - if (!BrowserSettings::unlockDatabase()) { + if (!browserSettings()->unlockDatabase()) { return false; } @@ -77,13 +91,14 @@ bool BrowserService::openDatabase(bool triggerUnlock) return false; } - if (dbWidget->currentMode() == DatabaseWidget::ViewMode || dbWidget->currentMode() == DatabaseWidget::EditMode) { + if (dbWidget->currentMode() == DatabaseWidget::Mode::ViewMode + || dbWidget->currentMode() == DatabaseWidget::Mode::EditMode) { return true; } if (triggerUnlock) { - KEEPASSXC_MAIN_WINDOW->bringToFront(); m_bringToFrontRequested = true; + raiseWindow(true); } return false; @@ -100,68 +115,165 @@ void BrowserService::lockDatabase() return; } - if (dbWidget->currentMode() == DatabaseWidget::ViewMode || dbWidget->currentMode() == DatabaseWidget::EditMode) { + if (dbWidget->currentMode() == DatabaseWidget::Mode::ViewMode + || dbWidget->currentMode() == DatabaseWidget::Mode::EditMode) { dbWidget->lock(); } } QString BrowserService::getDatabaseRootUuid() { - Database* db = getDatabase(); + auto db = getDatabase(); if (!db) { - return QString(); + return {}; } Group* rootGroup = db->rootGroup(); if (!rootGroup) { - return QString(); + return {}; } - return rootGroup->uuid().toHex(); + return rootGroup->uuidToHex(); } QString BrowserService::getDatabaseRecycleBinUuid() { - Database* db = getDatabase(); + auto db = getDatabase(); if (!db) { - return QString(); + return {}; } Group* recycleBin = db->metadata()->recycleBin(); if (!recycleBin) { - return QString(); + return {}; } - return recycleBin->uuid().toHex(); + return recycleBin->uuidToHex(); } -Entry* BrowserService::getConfigEntry(bool create) +QJsonArray BrowserService::getChildrenFromGroup(Group* group) { - Entry* entry = nullptr; - Database* db = getDatabase(); - if (!db) { - return nullptr; + QJsonArray groupList; + + if (!group) { + return groupList; } - entry = db->resolveEntry(KEEPASSXCBROWSER_UUID); - if (!entry && create) { - entry = new Entry(); - entry->setTitle(QLatin1String(KEEPASSXCBROWSER_NAME)); - entry->setUuid(KEEPASSXCBROWSER_UUID); - entry->setAutoTypeEnabled(false); - entry->setGroup(db->rootGroup()); - return entry; - } - - if (entry && entry->group() == db->metadata()->recycleBin()) { - if (!create) { - return nullptr; - } else { - entry->setGroup(db->rootGroup()); - return entry; + for (const auto& c : group->children()) { + if (c == group->database()->metadata()->recycleBin()) { + continue; } + + QJsonObject jsonGroup; + jsonGroup["name"] = c->name(); + jsonGroup["uuid"] = Tools::uuidToHex(c->uuid()); + jsonGroup["children"] = getChildrenFromGroup(c); + groupList.push_back(jsonGroup); + } + return groupList; +} + +QJsonObject BrowserService::getDatabaseGroups() +{ + auto db = getDatabase(); + if (!db) { + return {}; } - return entry; + Group* rootGroup = db->rootGroup(); + if (!rootGroup) { + return {}; + } + + QJsonObject root; + root["name"] = rootGroup->name(); + root["uuid"] = Tools::uuidToHex(rootGroup->uuid()); + root["children"] = getChildrenFromGroup(rootGroup); + + QJsonArray groups; + groups.push_back(root); + + QJsonObject result; + result["groups"] = groups; + + return result; +} + +QJsonObject BrowserService::createNewGroup(const QString& groupName) +{ + QJsonObject result; + if (thread() != QThread::currentThread()) { + QMetaObject::invokeMethod(this, + "createNewGroup", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QJsonObject, result), + Q_ARG(QString, groupName)); + return result; + } + + auto db = getDatabase(); + if (!db) { + return {}; + } + + Group* rootGroup = db->rootGroup(); + if (!rootGroup) { + return {}; + } + + auto group = rootGroup->findGroupByPath(groupName); + + // Group already exists + if (group) { + result["name"] = group->name(); + result["uuid"] = Tools::uuidToHex(group->uuid()); + return result; + } + + auto dialogResult = MessageBox::warning(nullptr, + tr("KeePassXC: Create a new group"), + tr("A request for creating a new group \"%1\" has been received.\n" + "Do you want to create this group?\n") + .arg(groupName), + MessageBox::Yes | MessageBox::No); + + if (dialogResult != MessageBox::Yes) { + return result; + } + + QString name, uuid; + Group* previousGroup = rootGroup; + auto groups = groupName.split("/"); + + // Returns the group name based on depth + auto getGroupName = [&](int depth) { + QString gName; + for (int i = 0; i < depth + 1; ++i) { + gName.append((i == 0 ? "" : "/") + groups[i]); + } + return gName; + }; + + // Create new group(s) always when the path is not found + for (int i = 0; i < groups.length(); ++i) { + QString gName = getGroupName(i); + auto tempGroup = rootGroup->findGroupByPath(gName); + if (!tempGroup) { + Group* newGroup = new Group(); + newGroup->setName(groups[i]); + newGroup->setUuid(QUuid::createUuid()); + newGroup->setParent(previousGroup); + name = newGroup->name(); + uuid = Tools::uuidToHex(newGroup->uuid()); + previousGroup = newGroup; + continue; + } + + previousGroup = tempGroup; + } + + result["name"] = name; + result["uuid"] = uuid; + return result; } QString BrowserService::storeKey(const QString& key) @@ -169,28 +281,28 @@ QString BrowserService::storeKey(const QString& key) QString id; if (thread() != QThread::currentThread()) { - QMetaObject::invokeMethod(this, "storeKey", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(QString, id), - Q_ARG(const QString&, key)); + QMetaObject::invokeMethod( + this, "storeKey", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QString, id), Q_ARG(QString, key)); return id; } - Entry* config = getConfigEntry(true); - if (!config) { + auto db = getDatabase(); + if (!db) { return {}; } bool contains; - QMessageBox::StandardButton dialogResult = QMessageBox::No; + MessageBox::Button dialogResult = MessageBox::Cancel; do { QInputDialog keyDialog; keyDialog.setWindowTitle(tr("KeePassXC: New key association request")); keyDialog.setLabelText(tr("You have received an association request for the above key.\n\n" - "If you would like to allow it access to your KeePassXC database,\n" - "give it a unique name to identify and accept it.")); + "If you would like to allow it access to your KeePassXC database,\n" + "give it a unique name to identify and accept it.")); keyDialog.setOkButtonText(tr("Save and allow access")); keyDialog.setWindowFlags(keyDialog.windowFlags() | Qt::WindowStaysOnTopHint); + raiseWindow(); keyDialog.show(); keyDialog.activateWindow(); keyDialog.raise(); @@ -199,48 +311,61 @@ QString BrowserService::storeKey(const QString& key) id = keyDialog.textValue(); if (ok != QDialog::Accepted || id.isEmpty()) { + hideWindow(); return {}; } - contains = config->attributes()->contains(QLatin1String(ASSOCIATE_KEY_PREFIX) + id); + contains = db->metadata()->customData()->contains(QLatin1String(ASSOCIATE_KEY_PREFIX) + id); if (contains) { - dialogResult = QMessageBox::warning(nullptr, tr("KeePassXC: Overwrite existing key?"), - tr("A shared encryption key with the name \"%1\" " - "already exists.\nDo you want to overwrite it?") - .arg(id), - QMessageBox::Yes | QMessageBox::No); + dialogResult = MessageBox::warning(nullptr, + tr("KeePassXC: Overwrite existing key?"), + tr("A shared encryption key with the name \"%1\" " + "already exists.\nDo you want to overwrite it?") + .arg(id), + MessageBox::Overwrite | MessageBox::Cancel, + MessageBox::Cancel); } - } while (contains && dialogResult == QMessageBox::No); + } while (contains && dialogResult == MessageBox::Cancel); - config->attributes()->set(QLatin1String(ASSOCIATE_KEY_PREFIX) + id, key, true); + hideWindow(); + db->metadata()->customData()->set(QLatin1String(ASSOCIATE_KEY_PREFIX) + id, key); return id; } QString BrowserService::getKey(const QString& id) { - Entry* config = getConfigEntry(); - if (!config) { - return QString(); + auto db = getDatabase(); + if (!db) { + return {}; } - return config->attributes()->value(QLatin1String(ASSOCIATE_KEY_PREFIX) + id); + return db->metadata()->customData()->value(QLatin1String(ASSOCIATE_KEY_PREFIX) + id); } -QJsonArray BrowserService::findMatchingEntries(const QString& id, const QString& url, const QString& submitUrl, const QString& realm, const StringPairList& keyList) +QJsonArray BrowserService::findMatchingEntries(const QString& id, + const QString& url, + const QString& submitUrl, + const QString& realm, + const StringPairList& keyList, + const bool httpAuth) { QJsonArray result; if (thread() != QThread::currentThread()) { - QMetaObject::invokeMethod(this, "findMatchingEntries", Qt::BlockingQueuedConnection, + QMetaObject::invokeMethod(this, + "findMatchingEntries", + Qt::BlockingQueuedConnection, Q_RETURN_ARG(QJsonArray, result), - Q_ARG(const QString&, id), - Q_ARG(const QString&, url), - Q_ARG(const QString&, submitUrl), - Q_ARG(const QString&, realm), - Q_ARG(const StringPairList&, keyList)); + Q_ARG(QString, id), + Q_ARG(QString, url), + Q_ARG(QString, submitUrl), + Q_ARG(QString, realm), + Q_ARG(StringPairList, keyList), + Q_ARG(bool, httpAuth)); return result; } - const bool alwaysAllowAccess = BrowserSettings::alwaysAllowAccess(); + const bool alwaysAllowAccess = browserSettings()->alwaysAllowAccess(); + const bool ignoreHttpAuth = browserSettings()->httpAuthPermission(); const QString host = QUrl(url).host(); const QString submitHost = QUrl(submitUrl).host(); @@ -248,6 +373,12 @@ QJsonArray BrowserService::findMatchingEntries(const QString& id, const QString& QList pwEntriesToConfirm; QList pwEntries; for (Entry* entry : searchEntries(url, keyList)) { + // HTTP Basic Auth always needs a confirmation + if (!ignoreHttpAuth && httpAuth) { + pwEntriesToConfirm.append(entry); + continue; + } + switch (checkAccess(entry, host, submitHost, realm)) { case Denied: continue; @@ -286,21 +417,59 @@ QJsonArray BrowserService::findMatchingEntries(const QString& id, const QString& return result; } -void BrowserService::addEntry(const QString&, const QString& login, const QString& password, const QString& url, const QString& submitUrl, const QString& realm) +void BrowserService::addEntry(const QString& id, + const QString& login, + const QString& password, + const QString& url, + const QString& submitUrl, + const QString& realm, + const QString& group, + const QString& groupUuid, + const QSharedPointer& selectedDb) { - Group* group = findCreateAddEntryGroup(); - if (!group) { + if (thread() != QThread::currentThread()) { + QMetaObject::invokeMethod(this, + "addEntry", + Qt::BlockingQueuedConnection, + Q_ARG(QString, id), + Q_ARG(QString, login), + Q_ARG(QString, password), + Q_ARG(QString, url), + Q_ARG(QString, submitUrl), + Q_ARG(QString, realm), + Q_ARG(QString, group), + Q_ARG(QString, groupUuid), + Q_ARG(QSharedPointer, selectedDb)); + } + + auto db = selectedDb ? selectedDb : selectedDatabase(); + if (!db) { return; } - Entry* entry = new Entry(); - entry->setUuid(Uuid::random()); + auto* addEntryGroup = findCreateAddEntryGroup(db); + if (!addEntryGroup) { + return; + } + + auto* entry = new Entry(); + entry->setUuid(QUuid::createUuid()); entry->setTitle(QUrl(url).host()); entry->setUrl(url); entry->setIcon(KEEPASSXCBROWSER_DEFAULT_ICON); entry->setUsername(login); entry->setPassword(password); - entry->setGroup(group); + entry->setGroup(addEntryGroup); + + // Select a group for the entry + if (!group.isEmpty()) { + if (db->rootGroup()) { + auto selectedGroup = db->rootGroup()->findGroupByUuid(Tools::hexToUuid(groupUuid)); + if (selectedGroup && selectedGroup->name() == group) { + entry->setGroup(selectedGroup); + } + } + } const QString host = QUrl(url).host(); const QString submitHost = QUrl(submitUrl).host(); @@ -316,79 +485,106 @@ void BrowserService::addEntry(const QString&, const QString& login, const QStrin config.save(entry); } -void BrowserService::updateEntry(const QString& id, const QString& uuid, const QString& login, const QString& password, const QString& url) +void BrowserService::updateEntry(const QString& id, + const QString& uuid, + const QString& login, + const QString& password, + const QString& url, + const QString& submitUrl) { if (thread() != QThread::currentThread()) { - QMetaObject::invokeMethod(this, "updateEntry", Qt::BlockingQueuedConnection, - Q_ARG(const QString&, id), - Q_ARG(const QString&, uuid), - Q_ARG(const QString&, login), - Q_ARG(const QString&, password), - Q_ARG(const QString&, url)); + QMetaObject::invokeMethod(this, + "updateEntry", + Qt::BlockingQueuedConnection, + Q_ARG(QString, id), + Q_ARG(QString, uuid), + Q_ARG(QString, login), + Q_ARG(QString, password), + Q_ARG(QString, url), + Q_ARG(QString, submitUrl)); } - Database* db = getDatabase(); + auto db = selectedDatabase(); if (!db) { return; } - Entry* entry = db->resolveEntry(Uuid::fromHex(uuid)); + Entry* entry = db->rootGroup()->findEntryByUuid(Tools::hexToUuid(uuid)); if (!entry) { + // If entry is not found for update, add a new one to the selected database + addEntry(id, login, password, url, submitUrl, "", "", "", db); return; } + // Check if the entry password is a reference. If so, update the original entry instead + while (entry->attributes()->isReference(EntryAttributes::PasswordKey)) { + const QUuid referenceUuid = entry->attributes()->referenceUuid(EntryAttributes::PasswordKey); + if (!referenceUuid.isNull()) { + entry = db->rootGroup()->findEntryByUuid(referenceUuid); + if (!entry) { + return; + } + } + } + QString username = entry->username(); if (username.isEmpty()) { return; } - if (username.compare(login, Qt::CaseSensitive) != 0 || entry->password().compare(password, Qt::CaseSensitive) != 0) { - int dialogResult = QMessageBox::No; - if (!BrowserSettings::alwaysAllowUpdate()) { - QMessageBox msgBox; - msgBox.setWindowTitle(tr("KeePassXC: Update Entry")); - msgBox.setText(tr("Do you want to update the information in %1 - %2?").arg(QUrl(url).host()).arg(username)); - msgBox.setStandardButtons(QMessageBox::Yes); - msgBox.addButton(QMessageBox::No); - msgBox.setDefaultButton(QMessageBox::No); - msgBox.setWindowFlags(Qt::WindowStaysOnTopHint); - msgBox.activateWindow(); - msgBox.raise(); - dialogResult = msgBox.exec(); + if (username.compare(login, Qt::CaseSensitive) != 0 + || entry->password().compare(password, Qt::CaseSensitive) != 0) { + MessageBox::Button dialogResult = MessageBox::No; + if (!browserSettings()->alwaysAllowUpdate()) { + raiseWindow(); + dialogResult = MessageBox::question( + nullptr, + tr("KeePassXC: Update Entry"), + tr("Do you want to update the information in %1 - %2?").arg(QUrl(url).host(), username), + MessageBox::Save | MessageBox::Cancel, + MessageBox::Cancel, + MessageBox::Raise); } - if (BrowserSettings::alwaysAllowUpdate() || dialogResult == QMessageBox::Yes) { + if (browserSettings()->alwaysAllowUpdate() || dialogResult == MessageBox::Save) { entry->beginUpdate(); - entry->setUsername(login); + if (!entry->attributes()->isReference(EntryAttributes::UserNameKey)) { + entry->setUsername(login); + } entry->setPassword(password); entry->endUpdate(); } + + hideWindow(); } } -QList BrowserService::searchEntries(Database* db, const QString& hostname, const QString& url) +QList +BrowserService::searchEntries(const QSharedPointer& db, const QString& hostname, const QString& url) { QList entries; - Group* rootGroup = db->rootGroup(); + auto* rootGroup = db->rootGroup(); if (!rootGroup) { return entries; } - for (Entry* entry : EntrySearcher().search(hostname, rootGroup, Qt::CaseInsensitive)) { + for (Entry* entry : EntrySearcher().search(baseDomain(hostname), rootGroup)) { QString entryUrl = entry->url(); QUrl entryQUrl(entryUrl); QString entryScheme = entryQUrl.scheme(); QUrl qUrl(url); - // Ignore entry if port or scheme defined in the URL doesn't match - if ((entryQUrl.port() > 0 && entryQUrl.port() != qUrl.port()) || entryScheme.compare(qUrl.scheme()) != 0) { + // Ignore entry if port or scheme defined in the URL doesn't match + if ((entryQUrl.port() > 0 && entryQUrl.port() != qUrl.port()) + || (browserSettings()->matchUrlScheme() && !entryScheme.isEmpty() + && entryScheme.compare(qUrl.scheme()) != 0)) { continue; } // Filter to match hostname in URL field if ((!entryUrl.isEmpty() && hostname.contains(entryUrl)) || (matchUrlScheme(entryUrl) && hostname.endsWith(entryQUrl.host()))) { - entries.append(entry); + entries.append(entry); } } @@ -398,26 +594,24 @@ QList BrowserService::searchEntries(Database* db, const QString& hostnam QList BrowserService::searchEntries(const QString& url, const StringPairList& keyList) { // Get the list of databases to search - QList databases; - if (BrowserSettings::searchInAllDatabases()) { + QList> databases; + if (browserSettings()->searchInAllDatabases()) { const int count = m_dbTabWidget->count(); for (int i = 0; i < count; ++i) { - if (DatabaseWidget* dbWidget = qobject_cast(m_dbTabWidget->widget(i))) { - if (Database* db = dbWidget->database()) { - // Check if database is connected with KeePassXC-Browser - for (const StringPair keyPair : keyList) { - Entry* entry = db->resolveEntry(KEEPASSXCBROWSER_UUID); - if (entry) { - QString key = entry->attributes()->value(QLatin1String(ASSOCIATE_KEY_PREFIX) + keyPair.first); - if (!key.isEmpty() && keyPair.second == key) { - databases << db; - } + if (auto* dbWidget = qobject_cast(m_dbTabWidget->widget(i))) { + if (const auto& db = dbWidget->database()) { + // Check if database is connected with KeePassXC-Browser + for (const StringPair& keyPair : keyList) { + QString key = + db->metadata()->customData()->value(QLatin1String(ASSOCIATE_KEY_PREFIX) + keyPair.first); + if (!key.isEmpty() && keyPair.second == key) { + databases << db; } } } } } - } else if (Database* db = getDatabase()) { + } else if (const auto& db = getDatabase()) { databases << db; } @@ -425,7 +619,7 @@ QList BrowserService::searchEntries(const QString& url, const StringPair QString hostname = QUrl(url).host(); QList entries; do { - for (Database* db : databases) { + for (const auto& db : databases) { entries << searchEntries(db, hostname, url); } } while (entries.isEmpty() && removeFirstDomain(hostname)); @@ -433,95 +627,80 @@ QList BrowserService::searchEntries(const QString& url, const StringPair return entries; } -void BrowserService::removeSharedEncryptionKeys() +void BrowserService::convertAttributesToCustomData(const QSharedPointer& currentDb) { - if (!isDatabaseOpened()) { - QMessageBox::critical(0, tr("KeePassXC: Database locked!"), - tr("The active database is locked!\n" - "Please unlock the selected database or choose another one which is unlocked."), - QMessageBox::Ok); - return; - } - - Entry* entry = getConfigEntry(); - if (!entry) { - QMessageBox::information(0, tr("KeePassXC: Settings not available!"), - tr("The active database does not contain a settings entry."), - QMessageBox::Ok); - return; - } - - QStringList keysToRemove; - for (const QString& key : entry->attributes()->keys()) { - if (key.startsWith(ASSOCIATE_KEY_PREFIX)) { - keysToRemove << key; - } - } - - if (keysToRemove.isEmpty()) { - QMessageBox::information(0, tr("KeePassXC: No keys found"), - tr("No shared encryption keys found in KeePassXC Settings."), - QMessageBox::Ok); - return; - } - - entry->beginUpdate(); - for (const QString& key : keysToRemove) { - entry->attributes()->remove(key); - } - entry->endUpdate(); - - const int count = keysToRemove.count(); - QMessageBox::information(0, tr("KeePassXC: Removed keys from database"), - tr("Successfully removed %n encryption key(s) from KeePassXC settings.", "", count), - QMessageBox::Ok); - -} - -void BrowserService::removeStoredPermissions() -{ - if (!isDatabaseOpened()) { - QMessageBox::critical(0, tr("KeePassXC: Database locked!"), - tr("The active database is locked!\n" - "Please unlock the selected database or choose another one which is unlocked."), - QMessageBox::Ok); - return; - } - - Database* db = m_dbTabWidget->currentDatabaseWidget()->database(); + auto db = currentDb ? currentDb : getDatabase(); if (!db) { return; } QList entries = db->rootGroup()->entriesRecursive(); - - QProgressDialog progress(tr("Removing stored permissions…"), tr("Abort"), 0, entries.count()); + QProgressDialog progress(tr("Converting attributes to custom data…"), tr("Abort"), 0, entries.count()); progress.setWindowModality(Qt::WindowModal); - uint counter = 0; + int counter = 0; + int keyCounter = 0; for (Entry* entry : entries) { if (progress.wasCanceled()) { return; } - if (entry->attributes()->contains(KEEPASSXCBROWSER_NAME)) { - entry->beginUpdate(); - entry->attributes()->remove(KEEPASSXCBROWSER_NAME); - entry->endUpdate(); + if (moveSettingsToCustomData(entry, KEEPASSHTTP_NAME)) { ++counter; } + + if (moveSettingsToCustomData(entry, KEEPASSXCBROWSER_OLD_NAME)) { + ++counter; + } + + if (moveSettingsToCustomData(entry, KEEPASSXCBROWSER_NAME)) { + ++counter; + } + + if (entry->title() == KEEPASSHTTP_NAME || entry->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive)) { + keyCounter += moveKeysToCustomData(entry, db); + delete entry; + } + progress.setValue(progress.value() + 1); } progress.reset(); if (counter > 0) { - QMessageBox::information(0, tr("KeePassXC: Removed permissions"), - tr("Successfully removed permissions from %n entry(s).", "", counter), - QMessageBox::Ok); + MessageBox::information(nullptr, + tr("KeePassXC: Converted KeePassHTTP attributes"), + tr("Successfully converted attributes from %1 entry(s).\n" + "Moved %2 keys to custom data.", + "") + .arg(counter) + .arg(keyCounter), + MessageBox::Ok); + } else if (counter == 0 && keyCounter > 0) { + MessageBox::information(nullptr, + tr("KeePassXC: Converted KeePassHTTP attributes"), + tr("Successfully moved %n keys to custom data.", "", keyCounter), + MessageBox::Ok); } else { - QMessageBox::information(0, tr("KeePassXC: No entry with permissions found!"), - tr("The active database does not contain an entry with permissions."), - QMessageBox::Ok); + MessageBox::information(nullptr, + tr("KeePassXC: No entry with KeePassHTTP attributes found!"), + tr("The active database does not contain an entry with KeePassHTTP attributes."), + MessageBox::Ok); + } + + // Rename password groupName + Group* rootGroup = db->rootGroup(); + if (!rootGroup) { + return; + } + + const QString keePassBrowserGroupName = QLatin1String(KEEPASSXCBROWSER_GROUP_NAME); + const QString keePassHttpGroupName = QLatin1String(KEEPASSHTTP_GROUP_NAME); + + for (Group* g : rootGroup->groupsRecursive(true)) { + if (g->name() == keePassHttpGroupName) { + g->setName(keePassBrowserGroupName); + break; + } } } @@ -529,11 +708,12 @@ QList BrowserService::sortEntries(QList& pwEntries, const QStrin { QUrl url(entryUrl); if (url.scheme().isEmpty()) { - url.setScheme("http"); + url.setScheme("https"); } const QString submitUrl = url.toString(QUrl::StripTrailingSlash); - const QString baseSubmitUrl = url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment); + const QString baseSubmitUrl = + url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment); // Build map of prioritized entries QMultiMap priorities; @@ -542,18 +722,23 @@ QList BrowserService::sortEntries(QList& pwEntries, const QStrin } QList results; - QString field = BrowserSettings::sortByTitle() ? "Title" : "UserName"; + QString field = browserSettings()->sortByTitle() ? "Title" : "UserName"; for (int i = 100; i >= 0; i -= 5) { if (priorities.count(i) > 0) { // Sort same priority entries by Title or UserName auto entries = priorities.values(i); - std::sort(entries.begin(), entries.end(), [&priorities, &field](Entry* left, Entry* right) { - return (QString::localeAwareCompare(left->attributes()->value(field), right->attributes()->value(field)) < 0) || - ((QString::localeAwareCompare(left->attributes()->value(field), right->attributes()->value(field)) == 0) && - (QString::localeAwareCompare(left->attributes()->value("UserName"), right->attributes()->value("UserName")) < 0)); + std::sort(entries.begin(), entries.end(), [&field](Entry* left, Entry* right) { + return (QString::localeAwareCompare(left->attributes()->value(field), right->attributes()->value(field)) + < 0) + || ((QString::localeAwareCompare(left->attributes()->value(field), + right->attributes()->value(field)) + == 0) + && (QString::localeAwareCompare(left->attributes()->value("UserName"), + right->attributes()->value("UserName")) + < 0)); }); results << entries; - if (BrowserSettings::bestMatchOnly() && !pwEntries.isEmpty()) { + if (browserSettings()->bestMatchOnly() && !pwEntries.isEmpty()) { // Early out once we find the highest batch of matches break; } @@ -563,7 +748,11 @@ QList BrowserService::sortEntries(QList& pwEntries, const QStrin return results; } -bool BrowserService::confirmEntries(QList& pwEntriesToConfirm, const QString& url, const QString& host, const QString& submitHost, const QString& realm) +bool BrowserService::confirmEntries(QList& pwEntriesToConfirm, + const QString& url, + const QString& host, + const QString& submitHost, + const QString& realm) { if (pwEntriesToConfirm.isEmpty() || m_dialogActive) { return false; @@ -574,6 +763,11 @@ bool BrowserService::confirmEntries(QList& pwEntriesToConfirm, const QSt accessControlDialog.setUrl(url); accessControlDialog.setItems(pwEntriesToConfirm); + raiseWindow(); + accessControlDialog.show(); + accessControlDialog.activateWindow(); + accessControlDialog.raise(); + int res = accessControlDialog.exec(); if (accessControlDialog.remember()) { for (Entry* entry : pwEntriesToConfirm) { @@ -597,6 +791,7 @@ bool BrowserService::confirmEntries(QList& pwEntriesToConfirm, const QSt } m_dialogActive = false; + hideWindow(); if (res == QDialog::Accepted) { return true; } @@ -610,9 +805,13 @@ QJsonObject BrowserService::prepareEntry(const Entry* entry) res["login"] = entry->resolveMultiplePlaceholders(entry->username()); res["password"] = entry->resolveMultiplePlaceholders(entry->password()); res["name"] = entry->resolveMultiplePlaceholders(entry->title()); - res["uuid"] = entry->resolveMultiplePlaceholders(entry->uuid().toHex()); + res["uuid"] = entry->resolveMultiplePlaceholders(entry->uuidToHex()); - if (BrowserSettings::supportKphFields()) { + if (entry->hasTotp()) { + res["totp"] = entry->totp(); + } + + if (browserSettings()->supportKphFields()) { const EntryAttributes* attr = entry->attributes(); QJsonArray stringFields; for (const QString& key : attr->keys()) { @@ -627,7 +826,8 @@ QJsonObject BrowserService::prepareEntry(const Entry* entry) return res; } -BrowserService::Access BrowserService::checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm) +BrowserService::Access +BrowserService::checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm) { BrowserEntryConfig config; if (!config.load(entry)) { @@ -648,42 +848,47 @@ BrowserService::Access BrowserService::checkAccess(const Entry* entry, const QSt return Unknown; } -Group* BrowserService::findCreateAddEntryGroup() +Group* BrowserService::findCreateAddEntryGroup(const QSharedPointer& selectedDb) { - Database* db = getDatabase(); + auto db = selectedDb ? selectedDb : getDatabase(); if (!db) { return nullptr; } - Group* rootGroup = db->rootGroup(); + auto* rootGroup = db->rootGroup(); if (!rootGroup) { return nullptr; } - const QString groupName = QLatin1String(KEEPASSXCBROWSER_GROUP_NAME); //TODO: setting to decide where new keys are created + const QString groupName = + QLatin1String(KEEPASSXCBROWSER_GROUP_NAME); // TODO: setting to decide where new keys are created - for (const Group* g : rootGroup->groupsRecursive(true)) { - if (g->name() == groupName) { - return db->resolveGroup(g->uuid()); + for (auto* g : rootGroup->groupsRecursive(true)) { + if (g->name() == groupName && !g->isRecycled()) { + return db->rootGroup()->findGroupByUuid(g->uuid()); } } - Group* group = new Group(); - group->setUuid(Uuid::random()); + auto* group = new Group(); + group->setUuid(QUuid::createUuid()); group->setName(groupName); group->setIcon(KEEPASSXCBROWSER_DEFAULT_ICON); group->setParent(rootGroup); return group; } -int BrowserService::sortPriority(const Entry* entry, const QString& host, const QString& submitUrl, const QString& baseSubmitUrl) const +int BrowserService::sortPriority(const Entry* entry, + const QString& host, + const QString& submitUrl, + const QString& baseSubmitUrl) const { QUrl url(entry->url()); if (url.scheme().isEmpty()) { url.setScheme("http"); } const QString entryURL = url.toString(QUrl::StripTrailingSlash); - const QString baseEntryURL = url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment); + const QString baseEntryURL = + url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment); if (submitUrl == entryURL) { return 100; @@ -744,14 +949,186 @@ bool BrowserService::removeFirstDomain(QString& hostname) return false; } -Database* BrowserService::getDatabase() +/** + * Gets the base domain of URL. + * + * Returns the base domain, e.g. https://another.example.co.uk -> example.co.uk + */ +QString BrowserService::baseDomain(const QString& url) const +{ + QUrl qurl = QUrl::fromUserInput(url); + QString hostname = qurl.host(); + + if (hostname.isEmpty() || !hostname.contains(qurl.topLevelDomain())) { + return {}; + } + + // Remove the top level domain part from the hostname, e.g. https://another.example.co.uk -> https://another.example + hostname.chop(qurl.topLevelDomain().length()); + // Split the URL and select the last part, e.g. https://another.example -> example + QString baseDomain = hostname.split('.').last(); + // Append the top level domain back to the URL, e.g. example -> example.co.uk + baseDomain.append(qurl.topLevelDomain()); + return baseDomain; +} + +QSharedPointer BrowserService::getDatabase() { if (DatabaseWidget* dbWidget = m_dbTabWidget->currentDatabaseWidget()) { - if (Database* db = dbWidget->database()) { + if (const auto& db = dbWidget->database()) { return db; } } - return nullptr; + return {}; +} + +QSharedPointer BrowserService::selectedDatabase() +{ + QList databaseWidgets; + for (int i = 0;; ++i) { + auto* dbWidget = m_dbTabWidget->databaseWidgetFromIndex(i); + // Add only open databases + if (dbWidget && dbWidget->database()->hasKey() + && (dbWidget->currentMode() == DatabaseWidget::Mode::ViewMode + || dbWidget->currentMode() == DatabaseWidget::Mode::EditMode)) { + databaseWidgets.push_back(dbWidget); + continue; + } + + // Break out if dbStruct.dbWidget is nullptr + break; + } + + BrowserEntrySaveDialog browserEntrySaveDialog; + int openDatabaseCount = browserEntrySaveDialog.setItems(databaseWidgets, m_dbTabWidget->currentDatabaseWidget()); + if (openDatabaseCount > 1) { + int res = browserEntrySaveDialog.exec(); + if (res == QDialog::Accepted) { + const auto selectedDatabase = browserEntrySaveDialog.getSelected(); + if (selectedDatabase.length() > 0) { + int index = selectedDatabase[0]->data(Qt::UserRole).toUInt(); + return databaseWidgets[index]->database(); + } + } else { + return {}; + } + } + + // Return current database + return getDatabase(); +} + +bool BrowserService::moveSettingsToCustomData(Entry* entry, const QString& name) const +{ + if (entry->attributes()->contains(name)) { + QString attr = entry->attributes()->value(name); + entry->beginUpdate(); + if (!attr.isEmpty()) { + entry->customData()->set(KEEPASSXCBROWSER_NAME, attr); + } + entry->attributes()->remove(name); + entry->endUpdate(); + return true; + } + return false; +} + +int BrowserService::moveKeysToCustomData(Entry* entry, const QSharedPointer& db) const +{ + int keyCounter = 0; + for (const auto& key : entry->attributes()->keys()) { + if (key.contains(LEGACY_ASSOCIATE_KEY_PREFIX)) { + QString publicKey = key; + publicKey.remove(LEGACY_ASSOCIATE_KEY_PREFIX); + + // Add key to database custom data + if (db && !db->metadata()->customData()->contains(QLatin1String(ASSOCIATE_KEY_PREFIX) + publicKey)) { + db->metadata()->customData()->set(QLatin1String(ASSOCIATE_KEY_PREFIX) + publicKey, + entry->attributes()->value(key)); + ++keyCounter; + } + } + } + + return keyCounter; +} + +bool BrowserService::checkLegacySettings() +{ + auto db = getDatabase(); + if (!db) { + return false; + } + + bool legacySettingsFound = false; + QList entries = db->rootGroup()->entriesRecursive(); + for (const auto& e : entries) { + if ((e->attributes()->contains(KEEPASSHTTP_NAME) || e->attributes()->contains(KEEPASSXCBROWSER_NAME)) + || (e->title() == KEEPASSHTTP_NAME || e->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive))) { + legacySettingsFound = true; + break; + } + } + + if (!legacySettingsFound) { + return false; + } + + auto dialogResult = + MessageBox::warning(nullptr, + tr("KeePassXC: Legacy browser integration settings detected"), + tr("Your KeePassXC-Browser settings need to be moved into the database settings.\n" + "This is necessary to maintain your current browser connections.\n" + "Would you like to migrate your existing settings now?"), + MessageBox::Yes | MessageBox::No); + + return dialogResult == MessageBox::Yes; +} + +void BrowserService::hideWindow() const +{ + if (m_prevWindowState == WindowState::Minimized) { + getMainWindow()->showMinimized(); + } else { +#ifdef Q_OS_MACOS + if (m_prevWindowState == WindowState::Hidden) { + macUtils()->hideOwnWindow(); + } else { + macUtils()->raiseLastActiveWindow(); + } +#else + if (m_prevWindowState == WindowState::Hidden) { + getMainWindow()->hideWindow(); + } else { + getMainWindow()->lower(); + } +#endif + } +} + +void BrowserService::raiseWindow(const bool force) +{ + m_prevWindowState = WindowState::Normal; + if (getMainWindow()->isMinimized()) { + m_prevWindowState = WindowState::Minimized; + } +#ifdef Q_OS_MACOS + Q_UNUSED(force); + + if (macUtils()->isHidden()) { + m_prevWindowState = WindowState::Hidden; + } + macUtils()->raiseOwnWindow(); + Tools::wait(500); +#else + if (getMainWindow()->isHidden()) { + m_prevWindowState = WindowState::Hidden; + } + + if (force) { + getMainWindow()->bringToFront(); + } +#endif } void BrowserService::databaseLocked(DatabaseWidget* dbWidget) @@ -765,10 +1142,14 @@ void BrowserService::databaseUnlocked(DatabaseWidget* dbWidget) { if (dbWidget) { if (m_bringToFrontRequested) { - KEEPASSXC_MAIN_WINDOW->lower(); + hideWindow(); m_bringToFrontRequested = false; } emit databaseUnlocked(); + + if (checkLegacySettings()) { + convertAttributesToCustomData(); + } } } @@ -776,7 +1157,7 @@ void BrowserService::activateDatabaseChanged(DatabaseWidget* dbWidget) { if (dbWidget) { auto currentMode = dbWidget->currentMode(); - if (currentMode == DatabaseWidget::ViewMode || currentMode == DatabaseWidget::EditMode) { + if (currentMode == DatabaseWidget::Mode::ViewMode || currentMode == DatabaseWidget::Mode::EditMode) { emit databaseUnlocked(); } else { emit databaseLocked(); diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h index f65f6af59..a8f04262f 100644 --- a/src/browser/BrowserService.h +++ b/src/browser/BrowserService.h @@ -1,84 +1,140 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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 2 or (at your option) -* version 3 of the License. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ #ifndef BROWSERSERVICE_H #define BROWSERSERVICE_H -#include -#include -#include "gui/DatabaseTabWidget.h" #include "core/Entry.h" +#include "gui/DatabaseTabWidget.h" +#include +#include typedef QPair StringPair; typedef QList StringPairList; +enum +{ + max_length = 16 * 1024 +}; + class BrowserService : public QObject { Q_OBJECT public: - explicit BrowserService(DatabaseTabWidget* parent); + explicit BrowserService(DatabaseTabWidget* parent); - bool isDatabaseOpened() const; - bool openDatabase(bool triggerUnlock); - QString getDatabaseRootUuid(); - QString getDatabaseRecycleBinUuid(); - Entry* getConfigEntry(bool create = false); - QString getKey(const QString& id); - void addEntry(const QString& id, const QString& login, const QString& password, const QString& url, const QString& submitUrl, const QString& realm); - QList searchEntries(Database* db, const QString& hostname, const QString& url); - QList searchEntries(const QString& url, const StringPairList& keyList); - void removeSharedEncryptionKeys(); - void removeStoredPermissions(); + bool isDatabaseOpened() const; + bool openDatabase(bool triggerUnlock); + QString getDatabaseRootUuid(); + QString getDatabaseRecycleBinUuid(); + QJsonObject getDatabaseGroups(); + QJsonObject createNewGroup(const QString& groupName); + QString getKey(const QString& id); + void addEntry(const QString& id, + const QString& login, + const QString& password, + const QString& url, + const QString& submitUrl, + const QString& realm, + const QString& group, + const QString& groupUuid, + const QSharedPointer& selectedDb = {}); + QList searchEntries(const QSharedPointer& db, const QString& hostname, const QString& url); + QList searchEntries(const QString& url, const StringPairList& keyList); + void convertAttributesToCustomData(const QSharedPointer& currentDb = {}); + +public: + static const char KEEPASSXCBROWSER_NAME[]; + static const char KEEPASSXCBROWSER_OLD_NAME[]; + static const char ASSOCIATE_KEY_PREFIX[]; + static const char LEGACY_ASSOCIATE_KEY_PREFIX[]; public slots: - QJsonArray findMatchingEntries(const QString& id, const QString& url, const QString& submitUrl, const QString& realm, const StringPairList& keyList); - QString storeKey(const QString& key); - void updateEntry(const QString& id, const QString& uuid, const QString& login, const QString& password, const QString& url); - void databaseLocked(DatabaseWidget* dbWidget); - void databaseUnlocked(DatabaseWidget* dbWidget); - void activateDatabaseChanged(DatabaseWidget* dbWidget); - void lockDatabase(); + QJsonArray findMatchingEntries(const QString& id, + const QString& url, + const QString& submitUrl, + const QString& realm, + const StringPairList& keyList, + const bool httpAuth = false); + QString storeKey(const QString& key); + void updateEntry(const QString& id, + const QString& uuid, + const QString& login, + const QString& password, + const QString& url, + const QString& submitUrl); + void databaseLocked(DatabaseWidget* dbWidget); + void databaseUnlocked(DatabaseWidget* dbWidget); + void activateDatabaseChanged(DatabaseWidget* dbWidget); + void lockDatabase(); signals: - void databaseLocked(); - void databaseUnlocked(); - void databaseChanged(); + void databaseLocked(); + void databaseUnlocked(); + void databaseChanged(); private: - enum Access { Denied, Unknown, Allowed}; + enum Access + { + Denied, + Unknown, + Allowed + }; + + enum WindowState + { + Normal, + Minimized, + Hidden + }; private: - QList sortEntries(QList& pwEntries, const QString& host, const QString& submitUrl); - bool confirmEntries(QList& pwEntriesToConfirm, const QString& url, const QString& host, const QString& submitHost, const QString& realm); - QJsonObject prepareEntry(const Entry* entry); - Access checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm); - Group* findCreateAddEntryGroup(); - int sortPriority(const Entry* entry, const QString &host, const QString& submitUrl, const QString& baseSubmitUrl) const; - bool matchUrlScheme(const QString& url); - bool removeFirstDomain(QString& hostname); - Database* getDatabase(); + QList sortEntries(QList& pwEntries, const QString& host, const QString& submitUrl); + bool confirmEntries(QList& pwEntriesToConfirm, + const QString& url, + const QString& host, + const QString& submitHost, + const QString& realm); + QJsonObject prepareEntry(const Entry* entry); + Access checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm); + Group* findCreateAddEntryGroup(const QSharedPointer& selectedDb = {}); + int + sortPriority(const Entry* entry, const QString& host, const QString& submitUrl, const QString& baseSubmitUrl) const; + bool matchUrlScheme(const QString& url); + bool removeFirstDomain(QString& hostname); + QString baseDomain(const QString& url) const; + QSharedPointer getDatabase(); + QSharedPointer selectedDatabase(); + QJsonArray getChildrenFromGroup(Group* group); + bool moveSettingsToCustomData(Entry* entry, const QString& name) const; + int moveKeysToCustomData(Entry* entry, const QSharedPointer& db) const; + bool checkLegacySettings(); + void hideWindow() const; + void raiseWindow(const bool force = false); private: - DatabaseTabWidget* const m_dbTabWidget; - bool m_dialogActive; - bool m_bringToFrontRequested; + DatabaseTabWidget* const m_dbTabWidget; + bool m_dialogActive; + bool m_bringToFrontRequested; + WindowState m_prevWindowState; + QUuid m_keepassBrowserUUID; }; #endif // BROWSERSERVICE_H diff --git a/src/browser/BrowserSettings.cpp b/src/browser/BrowserSettings.cpp old mode 100755 new mode 100644 index ecaf8e23e..9aab68f7e --- a/src/browser/BrowserSettings.cpp +++ b/src/browser/BrowserSettings.cpp @@ -1,28 +1,35 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #include "BrowserSettings.h" #include "core/Config.h" -PasswordGenerator BrowserSettings::m_passwordGenerator; -PassphraseGenerator BrowserSettings::m_passPhraseGenerator; -HostInstaller BrowserSettings::m_hostInstaller; +BrowserSettings* BrowserSettings::m_instance(nullptr); + +BrowserSettings* BrowserSettings::instance() +{ + if (!m_instance) { + m_instance = new BrowserSettings(); + } + + return m_instance; +} bool BrowserSettings::isEnabled() { @@ -114,6 +121,16 @@ void BrowserSettings::setAlwaysAllowUpdate(bool alwaysAllowUpdate) config()->set("Browser/AlwaysAllowUpdate", alwaysAllowUpdate); } +bool BrowserSettings::httpAuthPermission() +{ + return config()->get("Browser/HttpAuthPermission", false).toBool(); +} + +void BrowserSettings::setHttpAuthPermission(bool httpAuthPermission) +{ + config()->set("Browser/HttpAuthPermission", httpAuthPermission); +} + bool BrowserSettings::searchInAllDatabases() { return config()->get("Browser/SearchInAllDatabases", false).toBool(); @@ -162,14 +179,14 @@ QString BrowserSettings::customProxyLocation() return config()->get("Browser/CustomProxyLocation", "").toString(); } -void BrowserSettings::setCustomProxyLocation(QString location) +void BrowserSettings::setCustomProxyLocation(const QString& location) { config()->set("Browser/CustomProxyLocation", location); } bool BrowserSettings::updateBinaryPath() { - return config()->get("Browser/UpdateBinaryPath", false).toBool(); + return config()->get("Browser/UpdateBinaryPath", true).toBool(); } void BrowserSettings::setUpdateBinaryPath(bool enabled) @@ -177,36 +194,59 @@ void BrowserSettings::setUpdateBinaryPath(bool enabled) config()->set("Browser/UpdateBinaryPath", enabled); } -bool BrowserSettings::chromeSupport() { +bool BrowserSettings::chromeSupport() +{ return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::CHROME); } -void BrowserSettings::setChromeSupport(bool enabled) { - m_hostInstaller.installBrowser(HostInstaller::SupportedBrowsers::CHROME, enabled, supportBrowserProxy(), customProxyLocation()); +void BrowserSettings::setChromeSupport(bool enabled) +{ + m_hostInstaller.installBrowser( + HostInstaller::SupportedBrowsers::CHROME, enabled, supportBrowserProxy(), customProxyLocation()); } -bool BrowserSettings::chromiumSupport() { +bool BrowserSettings::chromiumSupport() +{ return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::CHROMIUM); } -void BrowserSettings::setChromiumSupport(bool enabled) { - m_hostInstaller.installBrowser(HostInstaller::SupportedBrowsers::CHROMIUM, enabled, supportBrowserProxy(), customProxyLocation()); +void BrowserSettings::setChromiumSupport(bool enabled) +{ + m_hostInstaller.installBrowser( + HostInstaller::SupportedBrowsers::CHROMIUM, enabled, supportBrowserProxy(), customProxyLocation()); } -bool BrowserSettings::firefoxSupport() { +bool BrowserSettings::firefoxSupport() +{ return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::FIREFOX); } -void BrowserSettings::setFirefoxSupport(bool enabled) { - m_hostInstaller.installBrowser(HostInstaller::SupportedBrowsers::FIREFOX, enabled, supportBrowserProxy(), customProxyLocation()); +void BrowserSettings::setFirefoxSupport(bool enabled) +{ + m_hostInstaller.installBrowser( + HostInstaller::SupportedBrowsers::FIREFOX, enabled, supportBrowserProxy(), customProxyLocation()); } -bool BrowserSettings::vivaldiSupport() { +bool BrowserSettings::vivaldiSupport() +{ return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::VIVALDI); } -void BrowserSettings::setVivaldiSupport(bool enabled) { - m_hostInstaller.installBrowser(HostInstaller::SupportedBrowsers::VIVALDI, enabled, supportBrowserProxy(), customProxyLocation()); +void BrowserSettings::setVivaldiSupport(bool enabled) +{ + m_hostInstaller.installBrowser( + HostInstaller::SupportedBrowsers::VIVALDI, enabled, supportBrowserProxy(), customProxyLocation()); +} + +bool BrowserSettings::torBrowserSupport() +{ + return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::TOR_BROWSER); +} + +void BrowserSettings::setTorBrowserSupport(bool enabled) +{ + m_hostInstaller.installBrowser( + HostInstaller::SupportedBrowsers::TOR_BROWSER, enabled, supportBrowserProxy(), customProxyLocation()); } bool BrowserSettings::passwordUseNumbers() @@ -249,6 +289,66 @@ void BrowserSettings::setPasswordUseSpecial(bool useSpecial) config()->set("generator/SpecialChars", useSpecial); } +bool BrowserSettings::passwordUseBraces() +{ + return config()->get("generator/Braces", PasswordGenerator::DefaultBraces).toBool(); +} + +void BrowserSettings::setPasswordUseBraces(bool useBraces) +{ + config()->set("generator/Braces", useBraces); +} + +bool BrowserSettings::passwordUsePunctuation() +{ + return config()->get("generator/Punctuation", PasswordGenerator::DefaultQuotes).toBool(); +} + +void BrowserSettings::setPasswordUsePunctuation(bool usePunctuation) +{ + config()->set("generator/Punctuation", usePunctuation); +} + +bool BrowserSettings::passwordUseQuotes() +{ + return config()->get("generator/Quotes", PasswordGenerator::DefaultQuotes).toBool(); +} + +void BrowserSettings::setPasswordUseQuotes(bool useQuotes) +{ + config()->set("generator/Quotes", useQuotes); +} + +bool BrowserSettings::passwordUseDashes() +{ + return config()->get("generator/Dashes", PasswordGenerator::DefaultDashes).toBool(); +} + +void BrowserSettings::setPasswordUseDashes(bool useDashes) +{ + config()->set("generator/Dashes", useDashes); +} + +bool BrowserSettings::passwordUseMath() +{ + return config()->get("generator/Math", PasswordGenerator::DefaultMath).toBool(); +} + +void BrowserSettings::setPasswordUseMath(bool useMath) +{ + config()->set("generator/Math", useMath); +} + +bool BrowserSettings::passwordUseLogograms() +{ + return config()->get("generator/Logograms", PasswordGenerator::DefaultLogograms).toBool(); +} + +void BrowserSettings::setPasswordUseLogograms(bool useLogograms) +{ + config()->set("generator/Logograms", useLogograms); +} + bool BrowserSettings::passwordUseEASCII() { return config()->get("generator/EASCII", PasswordGenerator::DefaultEASCII).toBool(); @@ -259,6 +359,26 @@ void BrowserSettings::setPasswordUseEASCII(bool useEASCII) config()->set("generator/EASCII", useEASCII); } +bool BrowserSettings::advancedMode() +{ + return config()->get("generator/AdvancedMode", PasswordGenerator::DefaultAdvancedMode).toBool(); +} + +void BrowserSettings::setAdvancedMode(bool advancedMode) +{ + config()->set("generator/AdvancedMode", advancedMode); +} + +QString BrowserSettings::passwordExcludedChars() +{ + return config()->get("generator/ExcludedChars", PasswordGenerator::DefaultExcludedChars).toString(); +} + +void BrowserSettings::setPasswordExcludedChars(const QString& chars) +{ + config()->set("generator/ExcludedChars", chars); +} + int BrowserSettings::passPhraseWordCount() { return config()->get("generator/WordCount", PassphraseGenerator::DefaultWordCount).toInt(); @@ -274,7 +394,7 @@ QString BrowserSettings::passPhraseWordSeparator() return config()->get("generator/WordSeparator", PassphraseGenerator::DefaultSeparator).toString(); } -void BrowserSettings::setPassPhraseWordSeparator(QString separator) +void BrowserSettings::setPassPhraseWordSeparator(const QString& separator) { config()->set("generator/WordSeparator", separator); } @@ -335,6 +455,24 @@ PasswordGenerator::CharClasses BrowserSettings::passwordCharClasses() if (passwordUseSpecial()) { classes |= PasswordGenerator::SpecialCharacters; } + if (passwordUseBraces()) { + classes |= PasswordGenerator::Braces; + } + if (passwordUsePunctuation()) { + classes |= PasswordGenerator::Punctuation; + } + if (passwordUseQuotes()) { + classes |= PasswordGenerator::Quotes; + } + if (passwordUseDashes()) { + classes |= PasswordGenerator::Dashes; + } + if (passwordUseMath()) { + classes |= PasswordGenerator::Math; + } + if (passwordUseLogograms()) { + classes |= PasswordGenerator::Logograms; + } if (passwordUseEASCII()) { classes |= PasswordGenerator::EASCII; } @@ -368,13 +506,13 @@ QString BrowserSettings::generatePassword() } } -int BrowserSettings::getbits() -{ - return m_passwordGenerator.getbits(); -} - -void BrowserSettings::updateBinaryPaths(QString customProxyLocation) +void BrowserSettings::updateBinaryPaths(const QString& customProxyLocation) { bool isProxy = supportBrowserProxy(); m_hostInstaller.updateBinaryPaths(isProxy, customProxyLocation); } + +bool BrowserSettings::checkIfProxyExists(QString& path) +{ + return m_hostInstaller.checkIfProxyExists(supportBrowserProxy(), customProxyLocation(), path); +} diff --git a/src/browser/BrowserSettings.h b/src/browser/BrowserSettings.h old mode 100755 new mode 100644 index 7047d22b3..b00c75b71 --- a/src/browser/BrowserSettings.h +++ b/src/browser/BrowserSettings.h @@ -1,105 +1,135 @@ /* -* Copyright (C) 2013 Francois Ferrand -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef BROWSERSETTINGS_H #define BROWSERSETTINGS_H -#include "core/PasswordGenerator.h" -#include "core/PassphraseGenerator.h" #include "HostInstaller.h" +#include "core/PassphraseGenerator.h" +#include "core/PasswordGenerator.h" class BrowserSettings { public: - static bool isEnabled(); - static void setEnabled(bool enabled); + explicit BrowserSettings() = default; + static BrowserSettings* instance(); - static bool showNotification(); //TODO!! - static void setShowNotification(bool showNotification); - static bool bestMatchOnly(); - static void setBestMatchOnly(bool bestMatchOnly); - static bool unlockDatabase(); - static void setUnlockDatabase(bool unlockDatabase); - static bool matchUrlScheme(); - static void setMatchUrlScheme(bool matchUrlScheme); - static bool sortByUsername(); - static void setSortByUsername(bool sortByUsername = true); - static bool sortByTitle(); - static void setSortByTitle(bool sortByUsertitle = true); - static bool alwaysAllowAccess(); - static void setAlwaysAllowAccess(bool alwaysAllowAccess); - static bool alwaysAllowUpdate(); - static void setAlwaysAllowUpdate(bool alwaysAllowUpdate); - static bool searchInAllDatabases(); - static void setSearchInAllDatabases(bool searchInAllDatabases); - static bool supportKphFields(); - static void setSupportKphFields(bool supportKphFields); + bool isEnabled(); + void setEnabled(bool enabled); - static bool supportBrowserProxy(); - static void setSupportBrowserProxy(bool enabled); - static bool useCustomProxy(); - static void setUseCustomProxy(bool enabled); - static QString customProxyLocation(); - static void setCustomProxyLocation(QString location); - static bool updateBinaryPath(); - static void setUpdateBinaryPath(bool enabled); - static bool chromeSupport(); - static void setChromeSupport(bool enabled); - static bool chromiumSupport(); - static void setChromiumSupport(bool enabled); - static bool firefoxSupport(); - static void setFirefoxSupport(bool enabled); - static bool vivaldiSupport(); - static void setVivaldiSupport(bool enabled); + bool showNotification(); // TODO!! + void setShowNotification(bool showNotification); + bool bestMatchOnly(); + void setBestMatchOnly(bool bestMatchOnly); + bool unlockDatabase(); + void setUnlockDatabase(bool unlockDatabase); + bool matchUrlScheme(); + void setMatchUrlScheme(bool matchUrlScheme); + bool sortByUsername(); + void setSortByUsername(bool sortByUsername = true); + bool sortByTitle(); + void setSortByTitle(bool sortByUsertitle = true); + bool alwaysAllowAccess(); + void setAlwaysAllowAccess(bool alwaysAllowAccess); + bool alwaysAllowUpdate(); + void setAlwaysAllowUpdate(bool alwaysAllowUpdate); + bool searchInAllDatabases(); + void setSearchInAllDatabases(bool searchInAllDatabases); + bool httpAuthPermission(); + void setHttpAuthPermission(bool httpAuthPermission); + bool supportKphFields(); + void setSupportKphFields(bool supportKphFields); - static bool passwordUseNumbers(); - static void setPasswordUseNumbers(bool useNumbers); - static bool passwordUseLowercase(); - static void setPasswordUseLowercase(bool useLowercase); - static bool passwordUseUppercase(); - static void setPasswordUseUppercase(bool useUppercase); - static bool passwordUseSpecial(); - static void setPasswordUseSpecial(bool useSpecial); - static bool passwordUseEASCII(); - static void setPasswordUseEASCII(bool useEASCII); - static int passPhraseWordCount(); - static void setPassPhraseWordCount(int wordCount); - static QString passPhraseWordSeparator(); - static void setPassPhraseWordSeparator(QString separator); - static int generatorType(); - static void setGeneratorType(int type); - static bool passwordEveryGroup(); - static void setPasswordEveryGroup(bool everyGroup); - static bool passwordExcludeAlike(); - static void setPasswordExcludeAlike(bool excludeAlike); - static int passwordLength(); - static void setPasswordLength(int length); - static PasswordGenerator::CharClasses passwordCharClasses(); - static PasswordGenerator::GeneratorFlags passwordGeneratorFlags(); - static QString generatePassword(); - static int getbits(); - static void updateBinaryPaths(QString customProxyLocation = QString()); + bool supportBrowserProxy(); + void setSupportBrowserProxy(bool enabled); + bool useCustomProxy(); + void setUseCustomProxy(bool enabled); + QString customProxyLocation(); + void setCustomProxyLocation(const QString& location); + bool updateBinaryPath(); + void setUpdateBinaryPath(bool enabled); + bool chromeSupport(); + void setChromeSupport(bool enabled); + bool chromiumSupport(); + void setChromiumSupport(bool enabled); + bool firefoxSupport(); + void setFirefoxSupport(bool enabled); + bool vivaldiSupport(); + void setVivaldiSupport(bool enabled); + bool torBrowserSupport(); + void setTorBrowserSupport(bool enabled); + + bool passwordUseNumbers(); + void setPasswordUseNumbers(bool useNumbers); + bool passwordUseLowercase(); + void setPasswordUseLowercase(bool useLowercase); + bool passwordUseUppercase(); + void setPasswordUseUppercase(bool useUppercase); + bool passwordUseSpecial(); + void setPasswordUseSpecial(bool useSpecial); + bool passwordUseBraces(); + void setPasswordUseBraces(bool useBraces); + bool passwordUsePunctuation(); + void setPasswordUsePunctuation(bool usePunctuation); + bool passwordUseQuotes(); + void setPasswordUseQuotes(bool useQuotes); + bool passwordUseDashes(); + void setPasswordUseDashes(bool useDashes); + bool passwordUseMath(); + void setPasswordUseMath(bool useMath); + bool passwordUseLogograms(); + void setPasswordUseLogograms(bool useLogograms); + bool passwordUseEASCII(); + void setPasswordUseEASCII(bool useEASCII); + bool advancedMode(); + void setAdvancedMode(bool advancedMode); + QString passwordExcludedChars(); + void setPasswordExcludedChars(const QString& chars); + int passPhraseWordCount(); + void setPassPhraseWordCount(int wordCount); + QString passPhraseWordSeparator(); + void setPassPhraseWordSeparator(const QString& separator); + int generatorType(); + void setGeneratorType(int type); + bool passwordEveryGroup(); + void setPasswordEveryGroup(bool everyGroup); + bool passwordExcludeAlike(); + void setPasswordExcludeAlike(bool excludeAlike); + int passwordLength(); + void setPasswordLength(int length); + PasswordGenerator::CharClasses passwordCharClasses(); + PasswordGenerator::GeneratorFlags passwordGeneratorFlags(); + QString generatePassword(); + void updateBinaryPaths(const QString& customProxyLocation = QString()); + bool checkIfProxyExists(QString& path); private: - static PasswordGenerator m_passwordGenerator; - static PassphraseGenerator m_passPhraseGenerator; - static HostInstaller m_hostInstaller; + static BrowserSettings* m_instance; + + PasswordGenerator m_passwordGenerator; + PassphraseGenerator m_passPhraseGenerator; + HostInstaller m_hostInstaller; }; +inline BrowserSettings* browserSettings() +{ + return BrowserSettings::instance(); +} + #endif // BROWSERSETTINGS_H diff --git a/src/browser/CMakeLists.txt b/src/browser/CMakeLists.txt index 61215c181..10189d931 100755 --- a/src/browser/CMakeLists.txt +++ b/src/browser/CMakeLists.txt @@ -19,18 +19,18 @@ if(WITH_XC_BROWSER) find_package(sodium 1.0.12 REQUIRED) set(keepassxcbrowser_SOURCES - BrowserAccessControlDialog.cpp - BrowserAction.cpp - BrowserClients.cpp - BrowserEntryConfig.cpp - BrowserOptionDialog.cpp - BrowserService.cpp - BrowserSettings.cpp - HostInstaller.cpp - NativeMessagingBase.cpp - NativeMessagingHost.cpp - Variant.cpp - ) + BrowserAccessControlDialog.cpp + BrowserAction.cpp + BrowserClients.cpp + BrowserEntryConfig.cpp + BrowserEntrySaveDialog.cpp + BrowserOptionDialog.cpp + BrowserService.cpp + BrowserSettings.cpp + HostInstaller.cpp + NativeMessagingBase.cpp + NativeMessagingHost.cpp + Variant.cpp) add_library(keepassxcbrowser STATIC ${keepassxcbrowser_SOURCES}) target_link_libraries(keepassxcbrowser Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network sodium) diff --git a/src/browser/HostInstaller.cpp b/src/browser/HostInstaller.cpp index 9b27ab1cf..08782fa16 100644 --- a/src/browser/HostInstaller.cpp +++ b/src/browser/HostInstaller.cpp @@ -1,62 +1,68 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #include "HostInstaller.h" #include "config-keepassx.h" + +#include #include #include -#include #include #include -#include -#include #include - -const QString HostInstaller::HOST_NAME = "org.keepassxc.keepassxc_browser"; -const QStringList HostInstaller::ALLOWED_ORIGINS = QStringList() - << "chrome-extension://iopaggbpplllidnfmcghoonnokmjoicf/" - << "chrome-extension://oboonakemofpalcgghocfoadofidjkkk/"; - -const QStringList HostInstaller::ALLOWED_EXTENSIONS = QStringList() - << "keepassxc-browser@keepassxc.org"; - -#if defined(Q_OS_OSX) - const QString HostInstaller::TARGET_DIR_CHROME = "/Library/Application Support/Google/Chrome/NativeMessagingHosts"; - const QString HostInstaller::TARGET_DIR_CHROMIUM = "/Library/Application Support/Chromium/NativeMessagingHosts"; - const QString HostInstaller::TARGET_DIR_FIREFOX = "/Library/Application Support/Mozilla/NativeMessagingHosts"; - const QString HostInstaller::TARGET_DIR_VIVALDI = "/Library/Application Support/Vivaldi/NativeMessagingHosts"; -#elif defined(Q_OS_LINUX) - const QString HostInstaller::TARGET_DIR_CHROME = "/.config/google-chrome/NativeMessagingHosts"; - const QString HostInstaller::TARGET_DIR_CHROMIUM = "/.config/chromium/NativeMessagingHosts"; - const QString HostInstaller::TARGET_DIR_FIREFOX = "/.mozilla/native-messaging-hosts"; - const QString HostInstaller::TARGET_DIR_VIVALDI = "/.config/vivaldi/NativeMessagingHosts"; -#elif defined(Q_OS_WIN) - const QString HostInstaller::TARGET_DIR_CHROME = "HKEY_CURRENT_USER\\Software\\Google\\Chrome\\NativeMessagingHosts\\" + HostInstaller::HOST_NAME; - const QString HostInstaller::TARGET_DIR_CHROMIUM = "HKEY_CURRENT_USER\\Software\\Chromium\\NativeMessagingHosts\\" + HostInstaller::HOST_NAME; - const QString HostInstaller::TARGET_DIR_FIREFOX = "HKEY_CURRENT_USER\\Software\\Mozilla\\NativeMessagingHosts\\" + HostInstaller::HOST_NAME; - const QString HostInstaller::TARGET_DIR_VIVALDI = "HKEY_CURRENT_USER\\Software\\Vivaldi\\NativeMessagingHosts\\" + HostInstaller::HOST_NAME; -#endif +#include +#include HostInstaller::HostInstaller() + : HOST_NAME("org.keepassxc.keepassxc_browser") + , ALLOWED_EXTENSIONS(QStringList() << "keepassxc-browser@keepassxc.org") + , ALLOWED_ORIGINS(QStringList() << "chrome-extension://iopaggbpplllidnfmcghoonnokmjoicf/" + << "chrome-extension://oboonakemofpalcgghocfoadofidjkkk/") +#if defined(Q_OS_MACOS) + , TARGET_DIR_CHROME("/Library/Application Support/Google/Chrome/NativeMessagingHosts") + , TARGET_DIR_CHROMIUM("/Library/Application Support/Chromium/NativeMessagingHosts") + , TARGET_DIR_FIREFOX("/Library/Application Support/Mozilla/NativeMessagingHosts") + , TARGET_DIR_VIVALDI("/Library/Application Support/Vivaldi/NativeMessagingHosts") + , TARGET_DIR_TOR_BROWSER("/Library/Application Support/TorBrowser-Data/Browser/Mozilla/NativeMessagingHosts") +#elif defined(Q_OS_LINUX) + , TARGET_DIR_CHROME("/.config/google-chrome/NativeMessagingHosts") + , TARGET_DIR_CHROMIUM("/.config/chromium/NativeMessagingHosts") + , TARGET_DIR_FIREFOX("/.mozilla/native-messaging-hosts") + , TARGET_DIR_VIVALDI("/.config/vivaldi/NativeMessagingHosts") + , TARGET_DIR_TOR_BROWSER("/.tor-browser/app/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts") +#elif defined(Q_OS_WIN) + // clang-format off + , TARGET_DIR_CHROME("HKEY_CURRENT_USER\\Software\\Google\\Chrome\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser") + , TARGET_DIR_CHROMIUM("HKEY_CURRENT_USER\\Software\\Chromium\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser") + // clang-format on + , TARGET_DIR_FIREFOX("HKEY_CURRENT_USER\\Software\\Mozilla\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser") + , TARGET_DIR_VIVALDI(TARGET_DIR_CHROME) + , TARGET_DIR_TOR_BROWSER(TARGET_DIR_FIREFOX) +#endif { - } +/** + * Checks if the selected browser has native messaging host properly installed + * + * @param browser Selected browser + * @return bool Script is installed correctly + */ bool HostInstaller::checkIfInstalled(SupportedBrowsers browser) { QString fileName = getPath(browser); @@ -68,36 +74,70 @@ bool HostInstaller::checkIfInstalled(SupportedBrowsers browser) #endif } -void HostInstaller::installBrowser(SupportedBrowsers browser, const bool& enabled, const bool& proxy, const QString& location) +/** + * Checks if keepassxc-proxy location is found + * + * @param proxy Is keepassxc-proxy enabled + * @param location Custom proxy location + * @param path The path is set here and returned to the caller + * @return bool + */ +bool HostInstaller::checkIfProxyExists(const bool& proxy, const QString& location, QString& path) const { - if (enabled) { - #ifdef Q_OS_WIN - // Create a registry key - QSettings settings(getTargetPath(browser), QSettings::NativeFormat); - if (!registryEntryFound(settings)) { - settings.setValue("Default", getPath(browser)); - } - #endif - // Always create the script file - QJsonObject script = constructFile(browser, proxy, location); - if (!saveFile(browser, script)) { - QMessageBox::critical(0, tr("KeePassXC: Cannot save file!"), - tr("Cannot save the native messaging script file."), QMessageBox::Ok); - } - } else { - // Remove the script file - QString fileName = getPath(browser); - QFile::remove(fileName); - #ifdef Q_OS_WIN - // Remove the registry entry - QSettings settings(getTargetPath(browser), QSettings::NativeFormat); - if (registryEntryFound(settings)) { - settings.remove("Default"); - } - #endif - } + QString fileName = getProxyPath(proxy, location); + path = fileName; + return QFile::exists(fileName); } +/** + * Installs native messaging JSON script for the selected browser + * + * @param browser Selected browser + * @param enabled Is browser integration enabled + * @param proxy Is keepassxc-proxy enabled + * @param location Custom proxy location + */ +void HostInstaller::installBrowser(SupportedBrowsers browser, + const bool& enabled, + const bool& proxy, + const QString& location) +{ + if (enabled) { +#ifdef Q_OS_WIN + // Create a registry key + QSettings settings(getTargetPath(browser), QSettings::NativeFormat); + if (!registryEntryFound(settings)) { + settings.setValue("Default", getPath(browser)); + } +#endif + // Always create the script file + QJsonObject script = constructFile(browser, proxy, location); + if (!saveFile(browser, script)) { + QMessageBox::critical(nullptr, + tr("KeePassXC: Cannot save file!"), + tr("Cannot save the native messaging script file."), + QMessageBox::Ok); + } + } else { + // Remove the script file + QString fileName = getPath(browser); + QFile::remove(fileName); +#ifdef Q_OS_WIN + // Remove the registry entry + QSettings settings(getTargetPath(browser), QSettings::NativeFormat); + if (registryEntryFound(settings)) { + settings.remove("Default"); + } +#endif + } +} + +/** + * Updates the paths to native messaging host for each browser that has been enabled + * + * @param proxy Is keepassxc-proxy enabled + * @param location Custom proxy location + */ void HostInstaller::updateBinaryPaths(const bool& proxy, const QString& location) { for (int i = 0; i < 4; ++i) { @@ -107,28 +147,61 @@ void HostInstaller::updateBinaryPaths(const bool& proxy, const QString& location } } +/** + * Returns the target path for each browser. Windows uses a registry path instead of a file path + * + * @param browser Selected browser + * @return QString Current target path for the selected browser + */ QString HostInstaller::getTargetPath(SupportedBrowsers browser) const { switch (browser) { - case SupportedBrowsers::CHROME: return HostInstaller::TARGET_DIR_CHROME; - case SupportedBrowsers::CHROMIUM: return HostInstaller::TARGET_DIR_CHROMIUM; - case SupportedBrowsers::FIREFOX: return HostInstaller::TARGET_DIR_FIREFOX; - case SupportedBrowsers::VIVALDI: return HostInstaller::TARGET_DIR_VIVALDI; - default: return QString(); + case SupportedBrowsers::CHROME: + return TARGET_DIR_CHROME; + case SupportedBrowsers::CHROMIUM: + return TARGET_DIR_CHROMIUM; + case SupportedBrowsers::FIREFOX: + return TARGET_DIR_FIREFOX; + case SupportedBrowsers::VIVALDI: + return TARGET_DIR_VIVALDI; + case SupportedBrowsers::TOR_BROWSER: + return TARGET_DIR_TOR_BROWSER; + default: + return QString(); } } +/** + * Returns the browser name + * Needed for Windows to separate Chromium- or Firefox-based scripts + * + * @param browser Selected browser + * @return QString Name of the selected browser + */ QString HostInstaller::getBrowserName(SupportedBrowsers browser) const { switch (browser) { - case SupportedBrowsers::CHROME: return "chrome"; - case SupportedBrowsers::CHROMIUM: return "chromium"; - case SupportedBrowsers::FIREFOX: return "firefox"; - case SupportedBrowsers::VIVALDI: return "vivaldi"; - default: return QString(); + case SupportedBrowsers::CHROME: + return "chrome"; + case SupportedBrowsers::CHROMIUM: + return "chromium"; + case SupportedBrowsers::FIREFOX: + return "firefox"; + case SupportedBrowsers::VIVALDI: + return "vivaldi"; + case SupportedBrowsers::TOR_BROWSER: + return "tor-browser"; + default: + return QString(); } } +/** + * Returns the path of native messaging JSON script for the selected browser + * + * @param browser Selected browser + * @return QString JSON script path for the selected browser + */ QString HostInstaller::getPath(SupportedBrowsers browser) const { #ifdef Q_OS_WIN @@ -141,15 +214,21 @@ QString HostInstaller::getPath(SupportedBrowsers browser) const userPath = QDir::fromNativeSeparators(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); } - QString winPath = QString("%1/%2_%3.json").arg(userPath, HostInstaller::HOST_NAME, getBrowserName(browser)); - winPath.replace("/","\\"); + QString winPath = QString("%1/%2_%3.json").arg(userPath, HOST_NAME, getBrowserName(browser)); + winPath.replace("/", "\\"); return winPath; #else QString path = getTargetPath(browser); - return QString("%1%2/%3.json").arg(QDir::homePath(), path, HostInstaller::HOST_NAME); + return QString("%1%2/%3.json").arg(QDir::homePath(), path, HOST_NAME); #endif } +/** + * Gets the installation directory for JSON script file (application install path) + * + * @param browser Selected browser + * @return QString Install path + */ QString HostInstaller::getInstallDir(SupportedBrowsers browser) const { QString path = getTargetPath(browser); @@ -160,7 +239,14 @@ QString HostInstaller::getInstallDir(SupportedBrowsers browser) const #endif } -QJsonObject HostInstaller::constructFile(SupportedBrowsers browser, const bool& proxy, const QString& location) +/** + * Gets the path to keepassxc-proxy binary + * + * @param proxy Is keepassxc-proxy used with KeePassXC + * @param location Custom proxy path + * @return path Path to keepassxc-proxy + */ +QString HostInstaller::getProxyPath(const bool& proxy, const QString& location) const { QString path; #ifdef KEEPASSXC_DIST_APPIMAGE @@ -184,25 +270,39 @@ QJsonObject HostInstaller::constructFile(SupportedBrowsers browser, const bool& path = QFileInfo(QCoreApplication::applicationFilePath()).absoluteFilePath(); } #ifdef Q_OS_WIN - path.replace("/","\\"); + path.replace("/", "\\"); #endif -#endif // #ifdef KEEPASSXC_DIST_APPIMAGE +#endif // #ifdef KEEPASSXC_DIST_APPIMAGE + return path; +} + +/** + * Constructs the JSON script file used with native messaging + * + * @param browser Browser (Chromium- and Firefox-based browsers need a different parameters for the script) + * @param proxy Is keepassxc-proxy used with KeePassXC + * @param location Custom proxy location + * @return script The JSON script file + */ +QJsonObject HostInstaller::constructFile(SupportedBrowsers browser, const bool& proxy, const QString& location) +{ + QString path = getProxyPath(proxy, location); QJsonObject script; - script["name"] = HostInstaller::HOST_NAME; - script["description"] = "KeePassXC integration with native messaging support"; - script["path"] = path; - script["type"] = "stdio"; + script["name"] = HOST_NAME; + script["description"] = "KeePassXC integration with native messaging support"; + script["path"] = path; + script["type"] = "stdio"; QJsonArray arr; - if (browser == SupportedBrowsers::FIREFOX) { - for (const QString extension : HostInstaller::ALLOWED_EXTENSIONS) { + if (browser == SupportedBrowsers::FIREFOX || browser == SupportedBrowsers::TOR_BROWSER) { + for (const QString& extension : ALLOWED_EXTENSIONS) { arr.append(extension); } script["allowed_extensions"] = arr; } else { - for (const QString origin : HostInstaller::ALLOWED_ORIGINS) { + for (const QString& origin : ALLOWED_ORIGINS) { arr.append(origin); } script["allowed_origins"] = arr; @@ -211,11 +311,24 @@ QJsonObject HostInstaller::constructFile(SupportedBrowsers browser, const bool& return script; } +/** + * Checks if a registry setting is found with default value + * + * @param settings Registry path + * @return bool Is the registry value found + */ bool HostInstaller::registryEntryFound(const QSettings& settings) { return !settings.value("Default").isNull(); } +/** + * Saves a JSON script file + * + * @param browser Selected browser + * @param script JSON native messaging script object + * @return bool Write succeeds + */ bool HostInstaller::saveFile(SupportedBrowsers browser, const QJsonObject& script) { QString path = getPath(browser); @@ -231,10 +344,5 @@ bool HostInstaller::saveFile(SupportedBrowsers browser, const QJsonObject& scrip } QJsonDocument doc(script); - qint64 bytesWritten = scriptFile.write(doc.toJson()); - if (bytesWritten < 0) { - return false; - } - - return true; + return scriptFile.write(doc.toJson()) >= 0; } diff --git a/src/browser/HostInstaller.h b/src/browser/HostInstaller.h index c3fc85620..ea0c4bd2f 100644 --- a/src/browser/HostInstaller.h +++ b/src/browser/HostInstaller.h @@ -1,26 +1,26 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef HOSTINSTALLER_H #define HOSTINSTALLER_H -#include #include +#include #include class HostInstaller : public QObject @@ -28,36 +28,44 @@ class HostInstaller : public QObject Q_OBJECT public: - enum SupportedBrowsers : int { - CHROME = 0, - CHROMIUM = 1, - FIREFOX = 2, - VIVALDI = 3 + enum SupportedBrowsers : int + { + CHROME = 0, + CHROMIUM = 1, + FIREFOX = 2, + VIVALDI = 3, + TOR_BROWSER = 4 }; public: HostInstaller(); bool checkIfInstalled(SupportedBrowsers browser); - void installBrowser(SupportedBrowsers browser, const bool& enabled, const bool& proxy = false, const QString& location = ""); + bool checkIfProxyExists(const bool& proxy, const QString& location, QString& path) const; + void installBrowser(SupportedBrowsers browser, + const bool& enabled, + const bool& proxy = false, + const QString& location = ""); void updateBinaryPaths(const bool& proxy, const QString& location = ""); private: - QString getTargetPath(SupportedBrowsers browser) const; - QString getBrowserName(SupportedBrowsers browser) const; - QString getPath(SupportedBrowsers browser) const; - QString getInstallDir(SupportedBrowsers browser) const; + QString getTargetPath(SupportedBrowsers browser) const; + QString getBrowserName(SupportedBrowsers browser) const; + QString getPath(SupportedBrowsers browser) const; + QString getInstallDir(SupportedBrowsers browser) const; + QString getProxyPath(const bool& proxy, const QString& location) const; QJsonObject constructFile(SupportedBrowsers browser, const bool& proxy, const QString& location); - bool registryEntryFound(const QSettings& settings); - bool saveFile(SupportedBrowsers browser, const QJsonObject& script); + bool registryEntryFound(const QSettings& settings); + bool saveFile(SupportedBrowsers browser, const QJsonObject& script); private: - static const QString HOST_NAME; - static const QStringList ALLOWED_EXTENSIONS; - static const QStringList ALLOWED_ORIGINS; - static const QString TARGET_DIR_CHROME; - static const QString TARGET_DIR_CHROMIUM; - static const QString TARGET_DIR_FIREFOX; - static const QString TARGET_DIR_VIVALDI; + const QString HOST_NAME; + const QStringList ALLOWED_EXTENSIONS; + const QStringList ALLOWED_ORIGINS; + const QString TARGET_DIR_CHROME; + const QString TARGET_DIR_CHROMIUM; + const QString TARGET_DIR_FIREFOX; + const QString TARGET_DIR_VIVALDI; + const QString TARGET_DIR_TOR_BROWSER; }; #endif // HOSTINSTALLER_H diff --git a/src/browser/NativeMessagingBase.cpp b/src/browser/NativeMessagingBase.cpp index e696af90d..a6b8d97c0 100644 --- a/src/browser/NativeMessagingBase.cpp +++ b/src/browser/NativeMessagingBase.cpp @@ -1,28 +1,28 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #include "NativeMessagingBase.h" #include #if defined(Q_OS_UNIX) && !defined(Q_OS_LINUX) -#include #include #include +#include #include #endif @@ -54,7 +54,7 @@ void NativeMessagingBase::newNativeMessage() { #if defined(Q_OS_UNIX) && !defined(Q_OS_LINUX) struct kevent ev[1]; - struct timespec ts = { 5, 0 }; + struct timespec ts = {5, 0}; int fd = kqueue(); if (fd == -1) { @@ -65,6 +65,7 @@ void NativeMessagingBase::newNativeMessage() EV_SET(ev, fileno(stdin), EVFILT_READ, EV_ADD, 0, 0, nullptr); if (kevent(fd, ev, 1, nullptr, 0, &ts) == -1) { m_notifier->setEnabled(false); + ::close(fd); return; } @@ -81,6 +82,7 @@ void NativeMessagingBase::newNativeMessage() event.data.fd = 0; if (epoll_ctl(fd, EPOLL_CTL_ADD, 0, &event) != 0) { m_notifier->setEnabled(false); + ::close(fd); return; } @@ -126,20 +128,23 @@ void NativeMessagingBase::sendReply(const QString& reply) if (!reply.isEmpty()) { QByteArray bytes = reply.toUtf8(); uint len = bytes.size(); - std::cout << char(((len>>0) & 0xFF)) << char(((len>>8) & 0xFF)) << char(((len>>16) & 0xFF)) << char(((len>>24) & 0xFF)); + std::cout << char(((len >> 0) & 0xFF)) << char(((len >> 8) & 0xFF)) << char(((len >> 16) & 0xFF)) + << char(((len >> 24) & 0xFF)); std::cout << reply.toStdString() << std::flush; } } QString NativeMessagingBase::getLocalServerPath() const { -#if defined(Q_OS_WIN) - return QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/kpxc_server"; -#elif defined(Q_OS_UNIX) && !defined(Q_OS_MAC) - // Use XDG_RUNTIME_DIR instead of /tmp/ if it's available - QString path = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation) + "/kpxc_server"; - return path.isEmpty() ? "/tmp/kpxc_server" : path; -#else // Q_OS_MAC and others - return "/tmp/kpxc_server"; + const QString serverPath = "/kpxc_server"; +#if defined(KEEPASSXC_DIST_SNAP) + return QProcessEnvironment::systemEnvironment().value("SNAP_COMMON") + serverPath; +#elif defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) + // Use XDG_RUNTIME_DIR instead of /tmp if it's available + QString path = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); + return path.isEmpty() ? QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverPath + : path + serverPath; +#else // Q_OS_MACOS, Q_OS_WIN and others + return QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverPath; #endif } diff --git a/src/browser/NativeMessagingBase.h b/src/browser/NativeMessagingBase.h index 44a0f1768..7a099a4ac 100644 --- a/src/browser/NativeMessagingBase.h +++ b/src/browser/NativeMessagingBase.h @@ -1,43 +1,43 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef NATIVEMESSAGINGBASE_H #define NATIVEMESSAGINGBASE_H -#include -#include -#include +#include #include -#include -#include -#include +#include +#include #include #include -#include +#include +#include +#include +#include #include #include #ifndef Q_OS_WIN +#include #include -#include #endif -static const int NATIVE_MSG_MAX_LENGTH = 1024*1024; +static const int NATIVE_MSG_MAX_LENGTH = 1024 * 1024; class NativeMessagingBase : public QObject { @@ -48,21 +48,21 @@ public: ~NativeMessagingBase() = default; protected slots: - void newNativeMessage(); + void newNativeMessage(); protected: - virtual void readLength() = 0; - virtual bool readStdIn(const quint32 length) = 0; - void readNativeMessages(); - QString jsonToString(const QJsonObject& json) const; - void sendReply(const QJsonObject& json); - void sendReply(const QString& reply); - QString getLocalServerPath() const; + virtual void readLength() = 0; + virtual bool readStdIn(const quint32 length) = 0; + virtual void readNativeMessages(); + QString jsonToString(const QJsonObject& json) const; + void sendReply(const QJsonObject& json); + void sendReply(const QString& reply); + QString getLocalServerPath() const; protected: - QAtomicInteger m_running; + QAtomicInteger m_running; QSharedPointer m_notifier; - QFuture m_future; + QFuture m_future; }; -#endif // NATIVEMESSAGINGBASE_H +#endif // NATIVEMESSAGINGBASE_H diff --git a/src/browser/NativeMessagingHost.cpp b/src/browser/NativeMessagingHost.cpp old mode 100755 new mode 100644 index 7d14c9d30..5d2383b2b --- a/src/browser/NativeMessagingHost.cpp +++ b/src/browser/NativeMessagingHost.cpp @@ -1,43 +1,43 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ +#include "NativeMessagingHost.h" +#include "BrowserSettings.h" +#include "sodium.h" #include #include #include -#include "sodium.h" -#include "NativeMessagingHost.h" -#include "BrowserSettings.h" #ifdef Q_OS_WIN #include #endif -NativeMessagingHost::NativeMessagingHost(DatabaseTabWidget* parent, const bool enabled) : - NativeMessagingBase(enabled), - m_mutex(QMutex::Recursive), - m_browserClients(m_browserService), - m_browserService(parent) +NativeMessagingHost::NativeMessagingHost(DatabaseTabWidget* parent, const bool enabled) + : NativeMessagingBase(enabled) + , m_mutex(QMutex::Recursive) + , m_browserService(parent) + , m_browserClients(m_browserService) { m_localServer.reset(new QLocalServer(this)); m_localServer->setSocketOptions(QLocalServer::UserAccessOption); m_running.store(false); - if (BrowserSettings::isEnabled() && !m_running) { + if (browserSettings()->isEnabled() && !m_running) { run(); } @@ -64,16 +64,18 @@ void NativeMessagingHost::run() } // Update KeePassXC/keepassxc-proxy binary paths to Native Messaging scripts - if (BrowserSettings::updateBinaryPath()) { - BrowserSettings::updateBinaryPaths(BrowserSettings::useCustomProxy() ? BrowserSettings::customProxyLocation() : ""); + if (browserSettings()->updateBinaryPath()) { + browserSettings()->updateBinaryPaths( + browserSettings()->useCustomProxy() ? browserSettings()->customProxyLocation() : ""); } m_running.store(true); #ifdef Q_OS_WIN - m_future = QtConcurrent::run(this, static_cast(&NativeMessagingHost::readNativeMessages)); + m_future = + QtConcurrent::run(this, static_cast(&NativeMessagingHost::readNativeMessages)); #endif - if (BrowserSettings::supportBrowserProxy()) { + if (browserSettings()->supportBrowserProxy()) { QString serverPath = getLocalServerPath(); QFile::remove(serverPath); @@ -110,7 +112,7 @@ void NativeMessagingHost::readLength() if (!std::cin.eof() && length > 0) { readStdIn(length); } else { - m_notifier->setEnabled(false); + m_notifier->setEnabled(false); } } @@ -205,18 +207,6 @@ void NativeMessagingHost::disconnectSocket() } } -void NativeMessagingHost::removeSharedEncryptionKeys() -{ - QMutexLocker locker(&m_mutex); - m_browserService.removeSharedEncryptionKeys(); -} - -void NativeMessagingHost::removeStoredPermissions() -{ - QMutexLocker locker(&m_mutex); - m_browserService.removeStoredPermissions(); -} - void NativeMessagingHost::databaseLocked() { QJsonObject response; diff --git a/src/browser/NativeMessagingHost.h b/src/browser/NativeMessagingHost.h old mode 100755 new mode 100644 index 29096d311..9ce1dab60 --- a/src/browser/NativeMessagingHost.h +++ b/src/browser/NativeMessagingHost.h @@ -1,27 +1,27 @@ /* -* Copyright (C) 2017 Sami Vänttinen -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef NATIVEMESSAGINGHOST_H #define NATIVEMESSAGINGHOST_H -#include "NativeMessagingBase.h" #include "BrowserClients.h" #include "BrowserService.h" +#include "NativeMessagingBase.h" #include "gui/DatabaseTabWidget.h" class NativeMessagingHost : public NativeMessagingBase @@ -31,37 +31,33 @@ class NativeMessagingHost : public NativeMessagingBase typedef QList SocketList; public: - explicit NativeMessagingHost(DatabaseTabWidget* parent = 0, const bool enabled = false); - ~NativeMessagingHost(); - int init(); - void run(); - void stop(); - -public slots: - void removeSharedEncryptionKeys(); - void removeStoredPermissions(); + explicit NativeMessagingHost(DatabaseTabWidget* parent = nullptr, const bool enabled = false); + ~NativeMessagingHost() override; + int init(); + void run(); + void stop(); signals: - void quit(); + void quit(); private: - void readLength(); - bool readStdIn(const quint32 length); - void sendReplyToAllClients(const QJsonObject& json); + void readLength() override; + bool readStdIn(const quint32 length) override; + void sendReplyToAllClients(const QJsonObject& json); private slots: - void databaseLocked(); - void databaseUnlocked(); - void newLocalConnection(); - void newLocalMessage(); - void disconnectSocket(); + void databaseLocked(); + void databaseUnlocked(); + void newLocalConnection(); + void newLocalMessage(); + void disconnectSocket(); private: - QMutex m_mutex; - BrowserClients m_browserClients; - BrowserService m_browserService; - QSharedPointer m_localServer; - SocketList m_socketList; + QMutex m_mutex; + BrowserService m_browserService; + BrowserClients m_browserClients; + QSharedPointer m_localServer; + SocketList m_socketList; }; #endif // NATIVEMESSAGINGHOST_H diff --git a/src/browser/Variant.cpp b/src/browser/Variant.cpp index 2d42ac4ec..64231736f 100644 --- a/src/browser/Variant.cpp +++ b/src/browser/Variant.cpp @@ -1,19 +1,19 @@ /* -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #include "Variant.h" diff --git a/src/browser/Variant.h b/src/browser/Variant.h index e467b4211..76211cdc9 100644 --- a/src/browser/Variant.h +++ b/src/browser/Variant.h @@ -1,25 +1,26 @@ /* -* Copyright (C) 2017 KeePassXC Team -* -* This program 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. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2017 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ #ifndef VARIANT_H #define VARIANT_H #include -QVariantMap qo2qv(const QObject* object, const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName")))); +QVariantMap qo2qv(const QObject* object, + const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName")))); #endif // VARIANT_H diff --git a/src/cli/Add.cpp b/src/cli/Add.cpp index 5c97299b8..dd9d0b50c 100644 --- a/src/cli/Add.cpp +++ b/src/cli/Add.cpp @@ -21,8 +21,8 @@ #include "Add.h" #include -#include +#include "cli/TextStream.h" #include "cli/Utils.h" #include "core/Database.h" #include "core/Entry.h" @@ -41,19 +41,15 @@ Add::~Add() int Add::execute(const QStringList& arguments) { - - QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); + TextStream inputTextStream(Utils::STDIN, QIODevice::ReadOnly); + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("database", QObject::tr("Path of the database.")); - - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); + parser.addOption(Command::QuietOption); + parser.addOption(Command::KeyFileOption); QCommandLineOption username(QStringList() << "u" << "username", @@ -81,19 +77,24 @@ int Add::execute(const QStringList& arguments) parser.addOption(length); parser.addPositionalArgument("entry", QObject::tr("Path of the entry to add.")); + + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 2) { - outputTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli add"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli add"); return EXIT_FAILURE; } - QString databasePath = args.at(0); - QString entryPath = args.at(1); + const QString& databasePath = args.at(0); + const QString& entryPath = args.at(1); - Database* db = Database::unlockFromStdin(databasePath, parser.value(keyFile)); - if (db == nullptr) { + auto db = Utils::unlockDatabase(databasePath, + parser.value(Command::KeyFileOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); + if (!db) { return EXIT_FAILURE; } @@ -101,13 +102,13 @@ int Add::execute(const QStringList& arguments) // the entry. QString passwordLength = parser.value(length); if (!passwordLength.isEmpty() && !passwordLength.toInt()) { - qCritical("Invalid value for password length %s.", qPrintable(passwordLength)); + errorTextStream << QObject::tr("Invalid value for password length %1.").arg(passwordLength) << endl; return EXIT_FAILURE; } Entry* entry = db->rootGroup()->addEntryWithPath(entryPath); if (!entry) { - qCritical("Could not create entry with path %s.", qPrintable(entryPath)); + errorTextStream << QObject::tr("Could not create entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -120,9 +121,10 @@ int Add::execute(const QStringList& arguments) } if (parser.isSet(prompt)) { - outputTextStream << "Enter password for new entry: "; - outputTextStream.flush(); - QString password = Utils::getPassword(); + if (!parser.isSet(Command::QuietOption)) { + outputTextStream << QObject::tr("Enter password for new entry: ") << flush; + } + QString password = Utils::getPassword(parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT); entry->setPassword(password); } else if (parser.isSet(generate)) { PasswordGenerator passwordGenerator; @@ -139,12 +141,14 @@ int Add::execute(const QStringList& arguments) entry->setPassword(password); } - QString errorMessage = db->saveToFile(databasePath); - if (!errorMessage.isEmpty()) { - qCritical("Writing the database failed %s.", qPrintable(errorMessage)); + QString errorMessage; + if (!db->save(databasePath, &errorMessage, true, false)) { + errorTextStream << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; return EXIT_FAILURE; } - outputTextStream << "Successfully added entry " << entry->title() << "." << endl; + if (!parser.isSet(Command::QuietOption)) { + outputTextStream << QObject::tr("Successfully added entry %1.").arg(entry->title()) << endl; + } return EXIT_SUCCESS; } diff --git a/src/cli/Add.h b/src/cli/Add.h index 5769249c9..dd0c3d8b5 100644 --- a/src/cli/Add.h +++ b/src/cli/Add.h @@ -25,7 +25,7 @@ class Add : public Command public: Add(); ~Add(); - int execute(const QStringList& arguments); + int execute(const QStringList& arguments) override; }; #endif // KEEPASSXC_ADD_H diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index a5126f999..e59a911a5 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -14,51 +14,84 @@ # along with this program. If not, see . set(cli_SOURCES - Add.cpp - Add.h - Clip.cpp - Clip.h - Command.cpp - Command.h - Diceware.cpp - Diceware.h - Edit.cpp - Edit.h - Estimate.cpp - Estimate.h - Extract.cpp - Extract.h - Generate.cpp - Generate.h - List.cpp - List.h - Locate.cpp - Locate.h - Merge.cpp - Merge.h - Remove.cpp - Remove.h - Show.cpp - Show.h) + Add.cpp + Clip.cpp + Create.cpp + Command.cpp + Diceware.cpp + Edit.cpp + Estimate.cpp + Extract.cpp + Generate.cpp + List.cpp + Locate.cpp + Merge.cpp + Remove.cpp + Show.cpp) add_library(cli STATIC ${cli_SOURCES}) target_link_libraries(cli Qt5::Core Qt5::Widgets) add_executable(keepassxc-cli keepassxc-cli.cpp) target_link_libraries(keepassxc-cli - cli - keepassx_core - Qt5::Core - ${GCRYPT_LIBRARIES} - ${ARGON2_LIBRARIES} - ${GPGERROR_LIBRARIES} - ${ZLIB_LIBRARIES} - ${ZXCVBN_LIBRARIES}) + cli + keepassx_core + Qt5::Core + ${GCRYPT_LIBRARIES} + ${ARGON2_LIBRARIES} + ${GPGERROR_LIBRARIES} + ${ZLIB_LIBRARIES} + ${ZXCVBN_LIBRARIES}) install(TARGETS keepassxc-cli BUNDLE DESTINATION . COMPONENT Runtime RUNTIME DESTINATION ${CLI_INSTALL_DIR} COMPONENT Runtime) +if(APPLE AND WITH_APP_BUNDLE) + add_custom_command(TARGET keepassxc-cli + POST_BUILD + COMMAND ${CMAKE_INSTALL_NAME_TOOL} + -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore + "@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore" + -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui + "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" + -change /usr/local/opt/qt/lib/QtMacExtras.framework/Versions/5/QtMacExtras + "@executable_path/../Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras" + -change /usr/local/opt/qt/lib/QtConcurrent.framework/Versions/5/QtConcurrent + "@executable_path/../Frameworks/QtConcurrent.framework/Versions/5/QtConcurrent" + -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore + "@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore" + -change /usr/local/opt/qt/lib/QtNetwork.framework/Versions/5/QtNetwork + "@executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork" + -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets + "@executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets" + -change /usr/local/opt/qt/lib/QtSvg.framework/Versions/5/QtSvg + "@executable_path/../Frameworks/QtSvg.framework/Versions/5/QtSvg" + -change /usr/local/opt/libgcrypt/lib/libgcrypt.20.dylib + "@executable_path/../Frameworks/libgcrypt.20.dylib" + -change /usr/local/opt/argon2/lib/libargon2.1.dylib + "@executable_path/../Frameworks/libargon2.1.dylib" + -change /usr/local/opt/libgpg-error/lib/libgpg-error.0.dylib + "@executable_path/../Frameworks/libgpg-error.0.dylib" + -change /usr/local/opt/libsodium/lib/libsodium.23.dylib + "@executable_path/../Frameworks/libsodium.23.dylib" + -change /usr/local/opt/qrencode/lib/libqrencode.4.dylib + "@executable_path/../Frameworks/libqrencode.4.dylib" + -change /usr/local/opt/libyubikey/lib/libyubikey.0.dylib + "@executable_path/../Frameworks/libyubikey.0.dylib" + -change /usr/local/opt/ykpers/lib/libykpers-1.1.dylib + "@executable_path/../Frameworks/libykpers-1.1.dylib" + keepassxc-cli + COMMENT "Changing linking of keepassxc-cli") + + # Copy app to staging directory for pre-install testing + set(CLI_APP_DIR "${CMAKE_BINARY_DIR}/src/${CLI_INSTALL_DIR}") + add_custom_command(TARGET keepassxc-cli + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy keepassxc-cli ${CLI_APP_DIR}/keepassxc-cli + COMMENT "Copying keepassxc-cli inside the application") +endif() + if(APPLE OR UNIX) install(FILES keepassxc-cli.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/) execute_process(COMMAND mandb -q) diff --git a/src/cli/Clip.cpp b/src/cli/Clip.cpp index 886f8ecc7..6e346f25c 100644 --- a/src/cli/Clip.cpp +++ b/src/cli/Clip.cpp @@ -23,8 +23,8 @@ #include "Clip.h" #include -#include +#include "cli/TextStream.h" #include "cli/Utils.h" #include "core/Database.h" #include "core/Entry.h" @@ -42,73 +42,102 @@ Clip::~Clip() int Clip::execute(const QStringList& arguments) { - - QTextStream out(stdout); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("database", QObject::tr("Path of the database.")); - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); + parser.addOption(Command::QuietOption); + parser.addOption(Command::KeyFileOption); + + QCommandLineOption totp(QStringList() << "t" + << "totp", + QObject::tr("Copy the current TOTP to the clipboard.")); + parser.addOption(totp); parser.addPositionalArgument("entry", QObject::tr("Path of the entry to clip.", "clip = copy to clipboard")); parser.addPositionalArgument( - "timeout", QObject::tr("Timeout in seconds before clearing the clipboard."), QString("[timeout]")); + "timeout", QObject::tr("Timeout in seconds before clearing the clipboard."), "[timeout]"); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 2 && args.size() != 3) { - out << parser.helpText().replace("keepassxc-cli", "keepassxc-cli clip"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli clip"); return EXIT_FAILURE; } - Database* db = Database::unlockFromStdin(args.at(0), parser.value(keyFile)); + auto db = Utils::unlockDatabase(args.at(0), + parser.value(Command::KeyFileOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); if (!db) { return EXIT_FAILURE; } - return this->clipEntry(db, args.at(1), args.value(2)); + return clipEntry(db, args.at(1), args.value(2), parser.isSet(totp), parser.isSet(Command::QuietOption)); } -int Clip::clipEntry(Database* database, QString entryPath, QString timeout) +int Clip::clipEntry(const QSharedPointer& database, + const QString& entryPath, + const QString& timeout, + bool clipTotp, + bool silent) { + TextStream errorTextStream(Utils::STDERR); int timeoutSeconds = 0; if (!timeout.isEmpty() && !timeout.toInt()) { - qCritical("Invalid timeout value %s.", qPrintable(timeout)); + errorTextStream << QObject::tr("Invalid timeout value %1.").arg(timeout) << endl; return EXIT_FAILURE; } else if (!timeout.isEmpty()) { timeoutSeconds = timeout.toInt(); } - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); - Entry* entry = database->rootGroup()->findEntry(entryPath); + TextStream outputTextStream(silent ? Utils::DEVNULL : Utils::STDOUT, QIODevice::WriteOnly); + Entry* entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - qCritical("Entry %s not found.", qPrintable(entryPath)); + errorTextStream << QObject::tr("Entry %1 not found.").arg(entryPath) << endl; return EXIT_FAILURE; } - int exitCode = Utils::clipText(entry->password()); + QString value; + if (clipTotp) { + if (!entry->hasTotp()) { + errorTextStream << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl; + return EXIT_FAILURE; + } + + value = entry->totp(); + } else { + value = entry->password(); + } + + int exitCode = Utils::clipText(value); if (exitCode != EXIT_SUCCESS) { return exitCode; } - outputTextStream << "Entry's password copied to the clipboard!" << endl; + if (clipTotp) { + outputTextStream << QObject::tr("Entry's current TOTP copied to the clipboard!") << endl; + } else { + outputTextStream << QObject::tr("Entry's password copied to the clipboard!") << endl; + } if (!timeoutSeconds) { return exitCode; } + QString lastLine = ""; while (timeoutSeconds > 0) { - outputTextStream << "\rClearing the clipboard in " << timeoutSeconds << " seconds..."; - outputTextStream.flush(); + outputTextStream << '\r' << QString(lastLine.size(), ' ') << '\r'; + lastLine = QObject::tr("Clearing the clipboard in %1 second(s)...", "", timeoutSeconds).arg(timeoutSeconds); + outputTextStream << lastLine << flush; std::this_thread::sleep_for(std::chrono::milliseconds(1000)); - timeoutSeconds--; + --timeoutSeconds; } Utils::clipText(""); - outputTextStream << "\nClipboard cleared!" << endl; + outputTextStream << '\r' << QString(lastLine.size(), ' ') << '\r'; + outputTextStream << QObject::tr("Clipboard cleared!") << endl; return EXIT_SUCCESS; } diff --git a/src/cli/Clip.h b/src/cli/Clip.h index e94231236..65a616955 100644 --- a/src/cli/Clip.h +++ b/src/cli/Clip.h @@ -25,8 +25,12 @@ class Clip : public Command public: Clip(); ~Clip(); - int execute(const QStringList& arguments); - int clipEntry(Database* database, QString entryPath, QString timeout); + int execute(const QStringList& arguments) override; + int clipEntry(const QSharedPointer& database, + const QString& entryPath, + const QString& timeout, + bool clipTotp, + bool silent); }; #endif // KEEPASSXC_CLIP_H diff --git a/src/cli/Command.cpp b/src/cli/Command.cpp index ef6948888..79d56c360 100644 --- a/src/cli/Command.cpp +++ b/src/cli/Command.cpp @@ -24,6 +24,7 @@ #include "Add.h" #include "Clip.h" +#include "Create.h" #include "Diceware.h" #include "Edit.h" #include "Estimate.h" @@ -35,25 +36,30 @@ #include "Remove.h" #include "Show.h" +const QCommandLineOption Command::QuietOption = + QCommandLineOption(QStringList() << "q" + << "quiet", + QObject::tr("Silence password prompt and other secondary outputs.")); + +const QCommandLineOption Command::KeyFileOption = QCommandLineOption(QStringList() << "k" + << "key-file", + QObject::tr("Key file of the database."), + QObject::tr("path")); + QMap commands; Command::~Command() { } -int Command::execute(const QStringList&) -{ - return EXIT_FAILURE; -} - QString Command::getDescriptionLine() { - QString response = this->name; + QString response = name; QString space(" "); - QString spaces = space.repeated(15 - this->name.length()); + QString spaces = space.repeated(15 - name.length()); response = response.append(spaces); - response = response.append(this->description); + response = response.append(description); response = response.append("\n"); return response; } @@ -63,6 +69,7 @@ void populateCommands() if (commands.isEmpty()) { commands.insert(QString("add"), new Add()); commands.insert(QString("clip"), new Clip()); + commands.insert(QString("create"), new Create()); commands.insert(QString("diceware"), new Diceware()); commands.insert(QString("edit"), new Edit()); commands.insert(QString("estimate"), new Estimate()); @@ -76,7 +83,7 @@ void populateCommands() } } -Command* Command::getCommand(QString commandName) +Command* Command::getCommand(const QString& commandName) { populateCommands(); if (commands.contains(commandName)) { diff --git a/src/cli/Command.h b/src/cli/Command.h index 2ebdd77b9..b74a312df 100644 --- a/src/cli/Command.h +++ b/src/cli/Command.h @@ -18,6 +18,7 @@ #ifndef KEEPASSXC_COMMAND_H #define KEEPASSXC_COMMAND_H +#include #include #include #include @@ -29,13 +30,16 @@ class Command { public: virtual ~Command(); - virtual int execute(const QStringList& arguments); + virtual int execute(const QStringList& arguments) = 0; QString name; QString description; QString getDescriptionLine(); static QList getCommands(); - static Command* getCommand(QString commandName); + static Command* getCommand(const QString& commandName); + + static const QCommandLineOption QuietOption; + static const QCommandLineOption KeyFileOption; }; #endif // KEEPASSXC_COMMAND_H diff --git a/src/cli/Create.cpp b/src/cli/Create.cpp new file mode 100644 index 000000000..b8c094f90 --- /dev/null +++ b/src/cli/Create.cpp @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#include +#include + +#include +#include +#include +#include + +#include "Create.h" +#include "Utils.h" + +#include "core/Database.h" + +#include "keys/CompositeKey.h" +#include "keys/Key.h" + +Create::Create() +{ + name = QString("create"); + description = QObject::tr("Create a new database."); +} + +Create::~Create() +{ +} + +/** + * Create a database file using the command line. A key file and/or + * password can be specified to encrypt the password. If none is + * specified the function will fail. + * + * If a key file is specified but it can't be loaded, the function will + * fail. + * + * If the database is being saved in a non existant directory, the + * function will fail. + * + * @return EXIT_SUCCESS on success, or EXIT_FAILURE on failure + */ +int Create::execute(const QStringList& arguments) +{ + QTextStream out(Utils::STDOUT, QIODevice::WriteOnly); + QTextStream err(Utils::STDERR, QIODevice::WriteOnly); + + QCommandLineParser parser; + + parser.setApplicationDescription(description); + parser.addPositionalArgument("database", QObject::tr("Path of the database.")); + parser.addOption(Command::KeyFileOption); + + parser.addHelpOption(); + parser.process(arguments); + + const QStringList args = parser.positionalArguments(); + if (args.size() < 1) { + out << parser.helpText().replace("keepassxc-cli", "keepassxc-cli create"); + return EXIT_FAILURE; + } + + const QString& databaseFilename = args.at(0); + if (QFileInfo::exists(databaseFilename)) { + err << QObject::tr("File %1 already exists.").arg(databaseFilename) << endl; + return EXIT_FAILURE; + } + + auto key = QSharedPointer::create(); + + auto password = getPasswordFromStdin(); + if (!password.isNull()) { + key->addKey(password); + } + + QSharedPointer fileKey; + if (parser.isSet(Command::KeyFileOption)) { + if (!loadFileKey(parser.value(Command::KeyFileOption), fileKey)) { + err << QObject::tr("Loading the key file failed") << endl; + return EXIT_FAILURE; + } + } + + if (!fileKey.isNull()) { + key->addKey(fileKey); + } + + if (key->isEmpty()) { + err << QObject::tr("No key is set. Aborting database creation.") << endl; + return EXIT_FAILURE; + } + + Database db; + db.setKey(key); + + QString errorMessage; + if (!db.save(databaseFilename, &errorMessage, true, false)) { + err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl; + return EXIT_FAILURE; + } + + out << QObject::tr("Successfully created new database.") << endl; + return EXIT_SUCCESS; +} + +/** + * Read optional password from stdin. + * + * @return Pointer to the PasswordKey or null if passwordkey is skipped + * by user + */ +QSharedPointer Create::getPasswordFromStdin() +{ + QSharedPointer passwordKey; + QTextStream out(Utils::STDOUT, QIODevice::WriteOnly); + + out << QObject::tr("Insert password to encrypt database (Press enter to leave blank): "); + out.flush(); + QString password = Utils::getPassword(); + + if (!password.isEmpty()) { + passwordKey = QSharedPointer(new PasswordKey(password)); + } + + return passwordKey; +} + +/** + * Load a key file from disk. When the path specified does not exist a + * new file will be generated. No folders will be generated so the parent + * folder of the specified file nees to exist + * + * If the key file cannot be loaded or created the function will fail. + * + * @param path Path to the key file to be loaded + * @param fileKey Resulting fileKey + * @return true if the key file was loaded succesfully + */ +bool Create::loadFileKey(const QString& path, QSharedPointer& fileKey) +{ + QTextStream err(Utils::STDERR, QIODevice::WriteOnly); + + QString error; + fileKey = QSharedPointer(new FileKey()); + + if (!QFileInfo::exists(path)) { + fileKey->create(path, &error); + + if (!error.isEmpty()) { + err << QObject::tr("Creating KeyFile %1 failed: %2").arg(path, error) << endl; + return false; + } + } + + if (!fileKey->load(path, &error)) { + err << QObject::tr("Loading KeyFile %1 failed: %2").arg(path, error) << endl; + return false; + } + + return true; +} diff --git a/src/cli/Create.h b/src/cli/Create.h new file mode 100644 index 000000000..85993eaeb --- /dev/null +++ b/src/cli/Create.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#ifndef KEEPASSXC_CREATE_H +#define KEEPASSXC_CREATE_H + +#include "Command.h" + +#include "keys/FileKey.h" +#include "keys/PasswordKey.h" + +class Create : public Command +{ +public: + Create(); + ~Create(); + int execute(const QStringList& arguments); + +private: + QSharedPointer getPasswordFromStdin(); + QSharedPointer getFileKeyFromStdin(); + bool loadFileKey(const QString& path, QSharedPointer& fileKey); +}; + +#endif // KEEPASSXC_CREATE_H diff --git a/src/cli/Diceware.cpp b/src/cli/Diceware.cpp index c71b57d7e..f11347344 100644 --- a/src/cli/Diceware.cpp +++ b/src/cli/Diceware.cpp @@ -21,8 +21,9 @@ #include "Diceware.h" #include -#include +#include "Utils.h" +#include "cli/TextStream.h" #include "core/PassphraseGenerator.h" Diceware::Diceware() @@ -37,25 +38,27 @@ Diceware::~Diceware() int Diceware::execute(const QStringList& arguments) { - QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); - QCommandLineOption words(QStringList() << "W" << "words", - QObject::tr("Word count for the diceware passphrase."), - QObject::tr("count")); + parser.setApplicationDescription(description); + QCommandLineOption words(QStringList() << "W" + << "words", + QObject::tr("Word count for the diceware passphrase."), + QObject::tr("count", "CLI parameter")); parser.addOption(words); QCommandLineOption wordlistFile(QStringList() << "w" - << "word-list", - QObject::tr("Wordlist for the diceware generator.\n[Default: EFF English]"), - QObject::tr("path")); + << "word-list", + QObject::tr("Wordlist for the diceware generator.\n[Default: EFF English]"), + QObject::tr("path")); parser.addOption(wordlistFile); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (!args.isEmpty()) { - outputTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli diceware"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli diceware"); return EXIT_FAILURE; } @@ -78,7 +81,7 @@ int Diceware::execute(const QStringList& arguments) outputTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli diceware"); return EXIT_FAILURE; } - + QString password = dicewareGenerator.generatePassphrase(); outputTextStream << password << endl; diff --git a/src/cli/Diceware.h b/src/cli/Diceware.h index 61fe724ca..f439681b7 100644 --- a/src/cli/Diceware.h +++ b/src/cli/Diceware.h @@ -25,7 +25,7 @@ class Diceware : public Command public: Diceware(); ~Diceware(); - int execute(const QStringList& arguments); + int execute(const QStringList& arguments) override; }; #endif // KEEPASSXC_DICEWARE_H diff --git a/src/cli/Edit.cpp b/src/cli/Edit.cpp index 967ddd8ed..7954648ce 100644 --- a/src/cli/Edit.cpp +++ b/src/cli/Edit.cpp @@ -21,8 +21,8 @@ #include "Edit.h" #include -#include +#include "cli/TextStream.h" #include "cli/Utils.h" #include "core/Database.h" #include "core/Entry.h" @@ -41,19 +41,14 @@ Edit::~Edit() int Edit::execute(const QStringList& arguments) { - - QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("database", QObject::tr("Path of the database.")); - - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); + parser.addOption(Command::QuietOption); + parser.addOption(Command::KeyFileOption); QCommandLineOption username(QStringList() << "u" << "username", @@ -87,37 +82,41 @@ int Edit::execute(const QStringList& arguments) parser.addOption(length); parser.addPositionalArgument("entry", QObject::tr("Path of the entry to edit.")); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 2) { - outputTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli edit"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli edit"); return EXIT_FAILURE; } - QString databasePath = args.at(0); - QString entryPath = args.at(1); + const QString& databasePath = args.at(0); + const QString& entryPath = args.at(1); - Database* db = Database::unlockFromStdin(databasePath, parser.value(keyFile)); - if (db == nullptr) { + auto db = Utils::unlockDatabase(databasePath, + parser.value(Command::KeyFileOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); + if (!db) { return EXIT_FAILURE; } QString passwordLength = parser.value(length); if (!passwordLength.isEmpty() && !passwordLength.toInt()) { - qCritical("Invalid value for password length %s.", qPrintable(passwordLength)); + errorTextStream << QObject::tr("Invalid value for password length: %1").arg(passwordLength) << endl; return EXIT_FAILURE; } Entry* entry = db->rootGroup()->findEntryByPath(entryPath); if (!entry) { - qCritical("Could not find entry with path %s.", qPrintable(entryPath)); + errorTextStream << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } - if (parser.value("username").isEmpty() && parser.value("url").isEmpty() && parser.value("title").isEmpty() && - !parser.isSet(prompt) && !parser.isSet(generate)) { - qCritical("Not changing any field for entry %s.", qPrintable(entryPath)); + if (parser.value("username").isEmpty() && parser.value("url").isEmpty() && parser.value("title").isEmpty() + && !parser.isSet(prompt) && !parser.isSet(generate)) { + errorTextStream << QObject::tr("Not changing any field for entry %1.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -136,9 +135,10 @@ int Edit::execute(const QStringList& arguments) } if (parser.isSet(prompt)) { - outputTextStream << "Enter new password for entry: "; - outputTextStream.flush(); - QString password = Utils::getPassword(); + if (!parser.isSet(Command::QuietOption)) { + outputTextStream << QObject::tr("Enter new password for entry: ") << flush; + } + QString password = Utils::getPassword(parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT); entry->setPassword(password); } else if (parser.isSet(generate)) { PasswordGenerator passwordGenerator; @@ -146,7 +146,7 @@ int Edit::execute(const QStringList& arguments) if (passwordLength.isEmpty()) { passwordGenerator.setLength(PasswordGenerator::DefaultLength); } else { - passwordGenerator.setLength(passwordLength.toInt()); + passwordGenerator.setLength(static_cast(passwordLength.toInt())); } passwordGenerator.setCharClasses(PasswordGenerator::DefaultCharset); @@ -157,12 +157,14 @@ int Edit::execute(const QStringList& arguments) entry->endUpdate(); - QString errorMessage = db->saveToFile(databasePath); - if (!errorMessage.isEmpty()) { - qCritical("Writing the database failed %s.", qPrintable(errorMessage)); + QString errorMessage; + if (!db->save(databasePath, &errorMessage, true, false)) { + errorTextStream << QObject::tr("Writing the database failed: %1").arg(errorMessage) << endl; return EXIT_FAILURE; } - outputTextStream << "Successfully edited entry " << entry->title() << "." << endl; + if (!parser.isSet(Command::QuietOption)) { + outputTextStream << QObject::tr("Successfully edited entry %1.").arg(entry->title()) << endl; + } return EXIT_SUCCESS; } diff --git a/src/cli/Edit.h b/src/cli/Edit.h index 2c413bea0..001b5abaf 100644 --- a/src/cli/Edit.h +++ b/src/cli/Edit.h @@ -25,7 +25,7 @@ class Edit : public Command public: Edit(); ~Edit(); - int execute(const QStringList& arguments); + int execute(const QStringList& arguments) override; }; #endif // KEEPASSXC_EDIT_H diff --git a/src/cli/Estimate.cpp b/src/cli/Estimate.cpp index 9a2ab0b0f..7064963f4 100644 --- a/src/cli/Estimate.cpp +++ b/src/cli/Estimate.cpp @@ -16,10 +16,11 @@ */ #include "Estimate.h" +#include "cli/Utils.h" #include -#include +#include "cli/TextStream.h" #include #include #include @@ -44,117 +45,133 @@ Estimate::~Estimate() static void estimate(const char* pwd, bool advanced) { - double e; - int len = strlen(pwd); + TextStream out(Utils::STDOUT, QIODevice::WriteOnly); + + double e = 0.0; + int len = static_cast(strlen(pwd)); if (!advanced) { - e = ZxcvbnMatch(pwd, 0, 0); - printf("Length %d\tEntropy %.3f\tLog10 %.3f\n", len, e, e * 0.301029996); + e = ZxcvbnMatch(pwd, nullptr, nullptr); + // clang-format off + out << QObject::tr("Length %1").arg(len, 0) << '\t' + << QObject::tr("Entropy %1").arg(e, 0, 'f', 3) << '\t' + << QObject::tr("Log10 %1").arg(e * 0.301029996, 0, 'f', 3) << endl; + // clang-format on } else { - int ChkLen; + int ChkLen = 0; ZxcMatch_t *info, *p; double m = 0.0; - e = ZxcvbnMatch(pwd, 0, &info); + e = ZxcvbnMatch(pwd, nullptr, &info); for (p = info; p; p = p->Next) { m += p->Entrpy; } m = e - m; - printf("Length %d\tEntropy %.3f\tLog10 %.3f\n Multi-word extra bits %.1f\n", len, e, e * 0.301029996, m); + // clang-format off + out << QObject::tr("Length %1").arg(len) << '\t' + << QObject::tr("Entropy %1").arg(e, 0, 'f', 3) << '\t' + << QObject::tr("Log10 %1").arg(e * 0.301029996, 0, 'f', 3) << "\n " + << QObject::tr("Multi-word extra bits %1").arg(m, 0, 'f', 1) << endl; + // clang-format on p = info; ChkLen = 0; while (p) { int n; switch (static_cast(p->Type)) { case BRUTE_MATCH: - printf(" Type: Bruteforce "); + out << " " << QObject::tr("Type: Bruteforce") << " "; break; case DICTIONARY_MATCH: - printf(" Type: Dictionary "); + out << " " << QObject::tr("Type: Dictionary") << " "; break; case DICT_LEET_MATCH: - printf(" Type: Dict+Leet "); + out << " " << QObject::tr("Type: Dict+Leet") << " "; break; case USER_MATCH: - printf(" Type: User Words "); + out << " " << QObject::tr("Type: User Words") << " "; break; case USER_LEET_MATCH: - printf(" Type: User+Leet "); + out << " " << QObject::tr("Type: User+Leet") << " "; break; case REPEATS_MATCH: - printf(" Type: Repeated "); + out << " " << QObject::tr("Type: Repeated") << " "; break; case SEQUENCE_MATCH: - printf(" Type: Sequence "); + out << " " << QObject::tr("Type: Sequence") << " "; break; case SPATIAL_MATCH: - printf(" Type: Spatial "); + out << " " << QObject::tr("Type: Spatial") << " "; break; case DATE_MATCH: - printf(" Type: Date "); + out << " " << QObject::tr("Type: Date") << " "; break; case BRUTE_MATCH + MULTIPLE_MATCH: - printf(" Type: Bruteforce(Rep)"); + out << " " << QObject::tr("Type: Bruteforce(Rep)") << " "; break; case DICTIONARY_MATCH + MULTIPLE_MATCH: - printf(" Type: Dictionary(Rep)"); + out << " " << QObject::tr("Type: Dictionary(Rep)") << " "; break; case DICT_LEET_MATCH + MULTIPLE_MATCH: - printf(" Type: Dict+Leet(Rep) "); + out << " " << QObject::tr("Type: Dict+Leet(Rep)") << " "; break; case USER_MATCH + MULTIPLE_MATCH: - printf(" Type: User Words(Rep)"); + out << " " << QObject::tr("Type: User Words(Rep)") << " "; break; case USER_LEET_MATCH + MULTIPLE_MATCH: - printf(" Type: User+Leet(Rep) "); + out << " " << QObject::tr("Type: User+Leet(Rep)") << " "; break; case REPEATS_MATCH + MULTIPLE_MATCH: - printf(" Type: Repeated(Rep) "); + out << " " << QObject::tr("Type: Repeated(Rep)") << " "; break; case SEQUENCE_MATCH + MULTIPLE_MATCH: - printf(" Type: Sequence(Rep) "); + out << " " << QObject::tr("Type: Sequence(Rep)") << " "; break; case SPATIAL_MATCH + MULTIPLE_MATCH: - printf(" Type: Spatial(Rep) "); + out << " " << QObject::tr("Type: Spatial(Rep)") << " "; break; case DATE_MATCH + MULTIPLE_MATCH: - printf(" Type: Date(Rep) "); + out << " " << QObject::tr("Type: Date(Rep)") << " "; break; default: - printf(" Type: Unknown%d ", p->Type); + out << " " << QObject::tr("Type: Unknown%1").arg(p->Type) << " "; break; } ChkLen += p->Length; - printf(" Length %d Entropy %6.3f (%.2f) ", p->Length, p->Entrpy, p->Entrpy * 0.301029996); + // clang-format off + out << QObject::tr("Length %1").arg(p->Length) << '\t' + << QObject::tr("Entropy %1 (%2)").arg(p->Entrpy, 6, 'f', 3).arg(p->Entrpy * 0.301029996, 0, 'f', 2) << '\t'; + // clang-format on for (n = 0; n < p->Length; ++n, ++pwd) { - printf("%c", *pwd); + out << *pwd; } - printf("\n"); + out << endl; p = p->Next; } ZxcvbnFreeInfo(info); if (ChkLen != len) { - printf("*** Password length (%d) != sum of length of parts (%d) ***\n", len, ChkLen); + out << QObject::tr("*** Password length (%1) != sum of length of parts (%2) ***").arg(len).arg(ChkLen) + << endl; } } } int Estimate::execute(const QStringList& arguments) { - QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); + TextStream inputTextStream(Utils::STDIN, QIODevice::ReadOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("password", QObject::tr("Password for which to estimate the entropy."), "[password]"); QCommandLineOption advancedOption(QStringList() << "a" << "advanced", QObject::tr("Perform advanced analysis on the password.")); parser.addOption(advancedOption); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() > 1) { - outputTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli estimate"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli estimate"); return EXIT_FAILURE; } diff --git a/src/cli/Estimate.h b/src/cli/Estimate.h index 15f922752..c15fed9b3 100644 --- a/src/cli/Estimate.h +++ b/src/cli/Estimate.h @@ -25,7 +25,7 @@ class Estimate : public Command public: Estimate(); ~Estimate(); - int execute(const QStringList& arguments); + int execute(const QStringList& arguments) override; }; #endif // KEEPASSXC_ESTIMATE_H diff --git a/src/cli/Extract.cpp b/src/cli/Extract.cpp index b48d5a6aa..be5abb920 100644 --- a/src/cli/Extract.cpp +++ b/src/cli/Extract.cpp @@ -22,8 +22,8 @@ #include #include -#include +#include "cli/TextStream.h" #include "cli/Utils.h" #include "core/Database.h" #include "format/KeePass2Reader.h" @@ -43,83 +43,83 @@ Extract::~Extract() int Extract::execute(const QStringList& arguments) { - QTextStream out(stdout); - QTextStream errorTextStream(stderr); + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("database", QObject::tr("Path of the database to extract.")); - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); + parser.addOption(Command::QuietOption); + parser.addOption(Command::KeyFileOption); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 1) { - out << parser.helpText().replace("keepassxc-cli", "keepassxc-cli extract"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli extract"); return EXIT_FAILURE; } - out << QObject::tr("Insert password to unlock %1: ").arg(args.at(0)); - out.flush(); + if (!parser.isSet(Command::QuietOption)) { + outputTextStream << QObject::tr("Insert password to unlock %1: ").arg(args.at(0)) << flush; + } - CompositeKey compositeKey; + auto compositeKey = QSharedPointer::create(); - QString line = Utils::getPassword(); - PasswordKey passwordKey; - passwordKey.setPassword(line); - compositeKey.addKey(passwordKey); + QString line = Utils::getPassword(parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT); + auto passwordKey = QSharedPointer::create(); + passwordKey->setPassword(line); + compositeKey->addKey(passwordKey); - QString keyFilePath = parser.value(keyFile); + QString keyFilePath = parser.value(Command::KeyFileOption); if (!keyFilePath.isEmpty()) { - FileKey fileKey; + // LCOV_EXCL_START + auto fileKey = QSharedPointer::create(); QString errorMsg; - if (!fileKey.load(keyFilePath, &errorMsg)) { - errorTextStream << QObject::tr("Failed to load key file %1 : %2").arg(keyFilePath).arg(errorMsg); - errorTextStream << endl; + if (!fileKey->load(keyFilePath, &errorMsg)) { + errorTextStream << QObject::tr("Failed to load key file %1: %2").arg(keyFilePath, errorMsg) << endl; return EXIT_FAILURE; } - if (fileKey.type() != FileKey::Hashed) { + if (fileKey->type() != FileKey::Hashed) { errorTextStream << QObject::tr("WARNING: You are using a legacy key file format which may become\n" - "unsupported in the future.\n\n" - "Please consider generating a new key file."); - errorTextStream << endl; + "unsupported in the future.\n\n" + "Please consider generating a new key file.") + << endl; } + // LCOV_EXCL_STOP - compositeKey.addKey(fileKey); + compositeKey->addKey(fileKey); } - QString databaseFilename = args.at(0); + const QString& databaseFilename = args.at(0); QFile dbFile(databaseFilename); if (!dbFile.exists()) { - qCritical("File %s does not exist.", qPrintable(databaseFilename)); + errorTextStream << QObject::tr("File %1 does not exist.").arg(databaseFilename) << endl; return EXIT_FAILURE; } if (!dbFile.open(QIODevice::ReadOnly)) { - qCritical("Unable to open file %s.", qPrintable(databaseFilename)); + errorTextStream << QObject::tr("Unable to open file %1.").arg(databaseFilename) << endl; return EXIT_FAILURE; } KeePass2Reader reader; reader.setSaveXml(true); - Database* db = reader.readDatabase(&dbFile, compositeKey); - delete db; + auto db = QSharedPointer::create(); + reader.readDatabase(&dbFile, compositeKey, db.data()); QByteArray xmlData = reader.reader()->xmlData(); if (reader.hasError()) { if (xmlData.isEmpty()) { - qCritical("Error while reading the database:\n%s", qPrintable(reader.errorString())); + errorTextStream << QObject::tr("Error while reading the database:\n%1").arg(reader.errorString()) << endl; } else { - qWarning("Error while parsing the database:\n%s\n", qPrintable(reader.errorString())); + errorTextStream << QObject::tr("Error while parsing the database:\n%1").arg(reader.errorString()) << endl; } return EXIT_FAILURE; } - out << xmlData.constData() << "\n"; + outputTextStream << xmlData.constData() << endl; return EXIT_SUCCESS; } diff --git a/src/cli/Extract.h b/src/cli/Extract.h index 2939afddb..1a4f6288b 100644 --- a/src/cli/Extract.h +++ b/src/cli/Extract.h @@ -25,7 +25,7 @@ class Extract : public Command public: Extract(); ~Extract(); - int execute(const QStringList& arguments); + int execute(const QStringList& arguments) override; }; #endif // KEEPASSXC_EXTRACT_H diff --git a/src/cli/Generate.cpp b/src/cli/Generate.cpp index eb8fea5e8..5f0ad98ac 100644 --- a/src/cli/Generate.cpp +++ b/src/cli/Generate.cpp @@ -19,10 +19,11 @@ #include #include "Generate.h" +#include "cli/Utils.h" #include -#include +#include "cli/TextStream.h" #include "core/PasswordGenerator.h" Generate::Generate() @@ -37,35 +38,53 @@ Generate::~Generate() int Generate::execute(const QStringList& arguments) { - QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); - QCommandLineOption len(QStringList() << "L" << "length", - QObject::tr("Length of the generated password."), - QObject::tr("length")); + parser.setApplicationDescription(description); + QCommandLineOption len(QStringList() << "L" + << "length", + QObject::tr("Length of the generated password"), + QObject::tr("length")); parser.addOption(len); - QCommandLineOption lower(QStringList() << "l", - QObject::tr("Use lowercase characters in the generated password.")); + QCommandLineOption lower(QStringList() << "l" + << "lower", + QObject::tr("Use lowercase characters")); parser.addOption(lower); - QCommandLineOption upper(QStringList() << "u", - QObject::tr("Use uppercase characters in the generated password.")); + QCommandLineOption upper(QStringList() << "u" + << "upper", + QObject::tr("Use uppercase characters")); parser.addOption(upper); - QCommandLineOption numeric(QStringList() << "n", - QObject::tr("Use numbers in the generated password.")); + QCommandLineOption numeric(QStringList() << "n" + << "numeric", + QObject::tr("Use numbers.")); parser.addOption(numeric); - QCommandLineOption special(QStringList() << "s", - QObject::tr("Use special characters in the generated password.")); + QCommandLineOption special(QStringList() << "s" + << "special", + QObject::tr("Use special characters")); parser.addOption(special); - QCommandLineOption extended(QStringList() << "e", - QObject::tr("Use extended ASCII in the generated password.")); + QCommandLineOption extended(QStringList() << "e" + << "extended", + QObject::tr("Use extended ASCII")); parser.addOption(extended); + QCommandLineOption exclude(QStringList() << "x" + << "exclude", + QObject::tr("Exclude character set"), + QObject::tr("chars")); + parser.addOption(exclude); + QCommandLineOption exclude_similar(QStringList() << "exclude-similar", + QObject::tr("Exclude similar looking characters")); + parser.addOption(exclude_similar); + QCommandLineOption every_group(QStringList() << "every-group", + QObject::tr("Include characters from every selected group")); + parser.addOption(every_group); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (!args.isEmpty()) { - outputTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli generate"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli generate"); return EXIT_FAILURE; } @@ -74,33 +93,42 @@ int Generate::execute(const QStringList& arguments) if (parser.value(len).isEmpty()) { passwordGenerator.setLength(PasswordGenerator::DefaultLength); } else { - int length = parser.value(len).toInt(); - passwordGenerator.setLength(length); + passwordGenerator.setLength(parser.value(len).toInt()); } PasswordGenerator::CharClasses classes = 0x0; if (parser.isSet(lower)) { - classes |= PasswordGenerator::LowerLetters; + classes |= PasswordGenerator::LowerLetters; } if (parser.isSet(upper)) { - classes |= PasswordGenerator::UpperLetters; + classes |= PasswordGenerator::UpperLetters; } if (parser.isSet(numeric)) { - classes |= PasswordGenerator::Numbers; + classes |= PasswordGenerator::Numbers; } if (parser.isSet(special)) { - classes |= PasswordGenerator::SpecialCharacters; + classes |= PasswordGenerator::SpecialCharacters; } if (parser.isSet(extended)) { - classes |= PasswordGenerator::EASCII; + classes |= PasswordGenerator::EASCII; + } + + PasswordGenerator::GeneratorFlags flags = 0x0; + + if (parser.isSet(exclude_similar)) { + flags |= PasswordGenerator::ExcludeLookAlike; + } + if (parser.isSet(every_group)) { + flags |= PasswordGenerator::CharFromEveryGroup; } passwordGenerator.setCharClasses(classes); - passwordGenerator.setFlags(PasswordGenerator::DefaultFlags); + passwordGenerator.setFlags(flags); + passwordGenerator.setExcludedChars(parser.value(exclude)); if (!passwordGenerator.isValid()) { - outputTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli generate"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli generate"); return EXIT_FAILURE; } diff --git a/src/cli/Generate.h b/src/cli/Generate.h index 607fc105c..64ef81623 100644 --- a/src/cli/Generate.h +++ b/src/cli/Generate.h @@ -25,7 +25,7 @@ class Generate : public Command public: Generate(); ~Generate(); - int execute(const QStringList& arguments); + int execute(const QStringList& arguments) override; }; #endif // KEEPASSXC_GENERATE_H diff --git a/src/cli/List.cpp b/src/cli/List.cpp index bdedaf210..11650d405 100644 --- a/src/cli/List.cpp +++ b/src/cli/List.cpp @@ -19,10 +19,11 @@ #include #include "List.h" +#include "cli/Utils.h" #include -#include +#include "cli/TextStream.h" #include "core/Database.h" #include "core/Entry.h" #include "core/Group.h" @@ -39,52 +40,60 @@ List::~List() int List::execute(const QStringList& arguments) { - QTextStream out(stdout); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("database", QObject::tr("Path of the database.")); - parser.addPositionalArgument("group", QObject::tr("Path of the group to list. Default is /"), QString("[group]")); - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); + parser.addPositionalArgument("group", QObject::tr("Path of the group to list. Default is /"), "[group]"); + parser.addOption(Command::QuietOption); + parser.addOption(Command::KeyFileOption); + + QCommandLineOption recursiveOption(QStringList() << "R" + << "recursive", + QObject::tr("Recursively list the elements of the group.")); + parser.addOption(recursiveOption); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 1 && args.size() != 2) { - out << parser.helpText().replace("keepassxc-cli", "keepassxc-cli ls"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli ls"); return EXIT_FAILURE; } - Database* db = Database::unlockFromStdin(args.at(0), parser.value(keyFile)); - if (db == nullptr) { + bool recursive = parser.isSet(recursiveOption); + + auto db = Utils::unlockDatabase(args.at(0), + parser.value(Command::KeyFileOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); + if (!db) { return EXIT_FAILURE; } if (args.size() == 2) { - return this->listGroup(db, args.at(1)); + return listGroup(db.data(), recursive, args.at(1)); } - return this->listGroup(db); + return listGroup(db.data(), recursive); } -int List::listGroup(Database* database, QString groupPath) +int List::listGroup(Database* database, bool recursive, const QString& groupPath) { - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); + if (groupPath.isEmpty()) { - outputTextStream << database->rootGroup()->print(); - outputTextStream.flush(); + outputTextStream << database->rootGroup()->print(recursive) << flush; return EXIT_SUCCESS; } Group* group = database->rootGroup()->findGroupByPath(groupPath); - if (group == nullptr) { - qCritical("Cannot find group %s.", qPrintable(groupPath)); + if (!group) { + errorTextStream << QObject::tr("Cannot find group %1.").arg(groupPath) << endl; return EXIT_FAILURE; } - outputTextStream << group->print(); - outputTextStream.flush(); + outputTextStream << group->print(recursive) << flush; return EXIT_SUCCESS; } diff --git a/src/cli/List.h b/src/cli/List.h index 98b8b5a45..92ade262b 100644 --- a/src/cli/List.h +++ b/src/cli/List.h @@ -25,8 +25,8 @@ class List : public Command public: List(); ~List(); - int execute(const QStringList& arguments); - int listGroup(Database* database, QString groupPath = QString("")); + int execute(const QStringList& arguments) override; + int listGroup(Database* database, bool recursive, const QString& groupPath = {}); }; #endif // KEEPASSXC_LIST_H diff --git a/src/cli/Locate.cpp b/src/cli/Locate.cpp index f80372885..f25ce79af 100644 --- a/src/cli/Locate.cpp +++ b/src/cli/Locate.cpp @@ -22,11 +22,12 @@ #include #include -#include +#include "cli/TextStream.h" #include "cli/Utils.h" #include "core/Database.h" #include "core/Entry.h" +#include "core/Global.h" #include "core/Group.h" Locate::Locate() @@ -41,45 +42,46 @@ Locate::~Locate() int Locate::execute(const QStringList& arguments) { - - QTextStream out(stdout); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("database", QObject::tr("Path of the database.")); parser.addPositionalArgument("term", QObject::tr("Search term.")); - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); + parser.addOption(Command::QuietOption); + parser.addOption(Command::KeyFileOption); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 2) { - out << parser.helpText().replace("keepassxc-cli", "keepassxc-cli locate"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli locate"); return EXIT_FAILURE; } - Database* db = Database::unlockFromStdin(args.at(0), parser.value(keyFile)); + auto db = Utils::unlockDatabase(args.at(0), + parser.value(Command::KeyFileOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); if (!db) { return EXIT_FAILURE; } - return this->locateEntry(db, args.at(1)); + return locateEntry(db.data(), args.at(1)); } -int Locate::locateEntry(Database* database, QString searchTerm) +int Locate::locateEntry(Database* database, const QString& searchTerm) { + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); QStringList results = database->rootGroup()->locate(searchTerm); if (results.isEmpty()) { - outputTextStream << "No results for that search term" << endl; - return EXIT_SUCCESS; + errorTextStream << "No results for that search term." << endl; + return EXIT_FAILURE; } - for (QString result : results) { + for (const QString& result : asConst(results)) { outputTextStream << result << endl; } return EXIT_SUCCESS; diff --git a/src/cli/Locate.h b/src/cli/Locate.h index 3677a034d..ae32951b9 100644 --- a/src/cli/Locate.h +++ b/src/cli/Locate.h @@ -25,8 +25,8 @@ class Locate : public Command public: Locate(); ~Locate(); - int execute(const QStringList& arguments); - int locateEntry(Database* database, QString searchTerm); + int execute(const QStringList& arguments) override; + int locateEntry(Database* database, const QString& searchTerm); }; #endif // KEEPASSXC_LOCATE_H diff --git a/src/cli/Merge.cpp b/src/cli/Merge.cpp index 6b114bff3..b0e4cabca 100644 --- a/src/cli/Merge.cpp +++ b/src/cli/Merge.cpp @@ -15,14 +15,16 @@ * along with this program. If not, see . */ -#include - #include "Merge.h" #include -#include +#include "cli/TextStream.h" +#include "cli/Utils.h" #include "core/Database.h" +#include "core/Merger.h" + +#include Merge::Merge() { @@ -36,60 +38,77 @@ Merge::~Merge() int Merge::execute(const QStringList& arguments) { - QTextStream out(stdout); + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("database1", QObject::tr("Path of the database to merge into.")); parser.addPositionalArgument("database2", QObject::tr("Path of the database to merge from.")); + parser.addOption(Command::QuietOption); QCommandLineOption samePasswordOption(QStringList() << "s" << "same-credentials", QObject::tr("Use the same credentials for both database files.")); - - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); - QCommandLineOption keyFileFrom(QStringList() << "f" - << "key-file-from", - QObject::tr("Key file of the database to merge from."), - QObject::tr("path")); - parser.addOption(keyFileFrom); - parser.addOption(samePasswordOption); + parser.addOption(Command::KeyFileOption); + + QCommandLineOption keyFileFromOption(QStringList() << "f" + << "key-file-from", + QObject::tr("Key file of the database to merge from."), + QObject::tr("path")); + parser.addOption(keyFileFromOption); + + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 2) { - out << parser.helpText().replace("keepassxc-cli", "keepassxc-cli merge"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli merge"); return EXIT_FAILURE; } - Database* db1 = Database::unlockFromStdin(args.at(0), parser.value(keyFile)); - if (db1 == nullptr) { + auto db1 = Utils::unlockDatabase(args.at(0), + parser.value(Command::KeyFileOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); + if (!db1) { return EXIT_FAILURE; } - Database* db2; + QSharedPointer db2; if (!parser.isSet("same-credentials")) { - db2 = Database::unlockFromStdin(args.at(1), parser.value(keyFileFrom)); + db2 = Utils::unlockDatabase(args.at(1), + parser.value(keyFileFromOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); + if (!db2) { + return EXIT_FAILURE; + } } else { - db2 = Database::openDatabaseFile(args.at(1), *(db1->key().clone())); - } - if (db2 == nullptr) { - return EXIT_FAILURE; + db2 = QSharedPointer::create(); + QString errorMessage; + if (!db2->open(args.at(1), db1->key(), &errorMessage, false)) { + errorTextStream << QObject::tr("Error reading merge file:\n%1").arg(errorMessage); + return EXIT_FAILURE; + } } - db1->merge(db2); + Merger merger(db2.data(), db1.data()); + bool databaseChanged = merger.merge(); - QString errorMessage = db1->saveToFile(args.at(0)); - if (!errorMessage.isEmpty()) { - qCritical("Unable to save database to file : %s", qPrintable(errorMessage)); - return EXIT_FAILURE; + if (databaseChanged) { + QString errorMessage; + if (!db1->save(args.at(0), &errorMessage, true, false)) { + errorTextStream << QObject::tr("Unable to save database to file : %1").arg(errorMessage) << endl; + return EXIT_FAILURE; + } + if (!parser.isSet(Command::QuietOption)) { + outputTextStream << "Successfully merged the database files." << endl; + } + } else if (!parser.isSet(Command::QuietOption)) { + outputTextStream << "Database was not modified by merge operation." << endl; } - out << "Successfully merged the database files.\n"; return EXIT_SUCCESS; } diff --git a/src/cli/Merge.h b/src/cli/Merge.h index 496c66b86..1f138b65f 100644 --- a/src/cli/Merge.h +++ b/src/cli/Merge.h @@ -25,7 +25,7 @@ class Merge : public Command public: Merge(); ~Merge(); - int execute(const QStringList& arguments); + int execute(const QStringList& arguments) override; }; #endif // KEEPASSXC_MERGE_H diff --git a/src/cli/Remove.cpp b/src/cli/Remove.cpp index 64a5976e9..4663d83ec 100644 --- a/src/cli/Remove.cpp +++ b/src/cli/Remove.cpp @@ -23,8 +23,8 @@ #include #include #include -#include +#include "cli/TextStream.h" #include "cli/Utils.h" #include "core/Database.h" #include "core/Entry.h" @@ -44,62 +44,65 @@ Remove::~Remove() int Remove::execute(const QStringList& arguments) { - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(QCoreApplication::translate("main", "Remove an entry from the database.")); - parser.addPositionalArgument("database", QCoreApplication::translate("main", "Path of the database.")); - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); - parser.addPositionalArgument("entry", QCoreApplication::translate("main", "Path of the entry to remove.")); + parser.setApplicationDescription(QObject::tr("Remove an entry from the database.")); + parser.addPositionalArgument("database", QObject::tr("Path of the database.")); + parser.addOption(Command::QuietOption); + parser.addOption(Command::KeyFileOption); + parser.addPositionalArgument("entry", QObject::tr("Path of the entry to remove.")); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 2) { - outputTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli rm"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli rm"); return EXIT_FAILURE; } - Database* db = Database::unlockFromStdin(args.at(0), parser.value(keyFile)); - if (db == nullptr) { + auto db = Utils::unlockDatabase(args.at(0), + parser.value(Command::KeyFileOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); + if (!db) { return EXIT_FAILURE; } - return this->removeEntry(db, args.at(0), args.at(1)); + return removeEntry(db.data(), args.at(0), args.at(1), parser.isSet(Command::QuietOption)); } -int Remove::removeEntry(Database* database, QString databasePath, QString entryPath) +int Remove::removeEntry(Database* database, const QString& databasePath, const QString& entryPath, bool quiet) { + TextStream outputTextStream(quiet ? Utils::DEVNULL : Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); - Entry* entry = database->rootGroup()->findEntryByPath(entryPath); + QPointer entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - qCritical("Entry %s not found.", qPrintable(entryPath)); + errorTextStream << QObject::tr("Entry %1 not found.").arg(entryPath) << endl; return EXIT_FAILURE; } QString entryTitle = entry->title(); bool recycled = true; - if (Tools::hasChild(database->metadata()->recycleBin(), entry) || !database->metadata()->recycleBinEnabled()) { + auto* recycleBin = database->metadata()->recycleBin(); + if (!database->metadata()->recycleBinEnabled() || (recycleBin && recycleBin->findEntryByUuid(entry->uuid()))) { delete entry; recycled = false; } else { database->recycleEntry(entry); }; - QString errorMessage = database->saveToFile(databasePath); - if (!errorMessage.isEmpty()) { - qCritical("Unable to save database to file : %s", qPrintable(errorMessage)); + QString errorMessage; + if (!database->save(databasePath, &errorMessage, true, false)) { + errorTextStream << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl; return EXIT_FAILURE; } if (recycled) { - outputTextStream << "Successfully recycled entry " << entryTitle << "." << endl; + outputTextStream << QObject::tr("Successfully recycled entry %1.").arg(entryTitle) << endl; } else { - outputTextStream << "Successfully deleted entry " << entryTitle << "." << endl; + outputTextStream << QObject::tr("Successfully deleted entry %1.").arg(entryTitle) << endl; } return EXIT_SUCCESS; diff --git a/src/cli/Remove.h b/src/cli/Remove.h index 5465530ed..fa8bc7bd6 100644 --- a/src/cli/Remove.h +++ b/src/cli/Remove.h @@ -27,8 +27,8 @@ class Remove : public Command public: Remove(); ~Remove(); - int execute(const QStringList& arguments); - int removeEntry(Database* database, QString databasePath, QString entryPath); + int execute(const QStringList& arguments) override; + int removeEntry(Database* database, const QString& databasePath, const QString& entryPath, bool quiet); }; #endif // KEEPASSXC_REMOVE_H diff --git a/src/cli/Show.cpp b/src/cli/Show.cpp index 54561b1f7..9ae3f4d0f 100644 --- a/src/cli/Show.cpp +++ b/src/cli/Show.cpp @@ -15,16 +15,18 @@ * along with this program. If not, see . */ +#include "Show.h" + #include #include -#include "Show.h" - #include -#include +#include "Utils.h" +#include "cli/TextStream.h" #include "core/Database.h" #include "core/Entry.h" +#include "core/Global.h" #include "core/Group.h" Show::Show() @@ -39,64 +41,75 @@ Show::~Show() int Show::execute(const QStringList& arguments) { - QTextStream out(stdout); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); QCommandLineParser parser; - parser.setApplicationDescription(this->description); + parser.setApplicationDescription(description); parser.addPositionalArgument("database", QObject::tr("Path of the database.")); - QCommandLineOption keyFile(QStringList() << "k" - << "key-file", - QObject::tr("Key file of the database."), - QObject::tr("path")); - parser.addOption(keyFile); - QCommandLineOption attributes(QStringList() << "a" - << "attributes", - QObject::tr("Names of the attributes to show. " - "This option can be specified more than once, with each attribute shown one-per-line in the given order. " - "If no attributes are specified, a summary of the default attributes is given."), - QObject::tr("attribute")); + parser.addOption(Command::QuietOption); + parser.addOption(Command::KeyFileOption); + QCommandLineOption totp(QStringList() << "t" + << "totp", + QObject::tr("Show the entry's current TOTP.")); + parser.addOption(totp); + QCommandLineOption attributes( + QStringList() << "a" + << "attributes", + QObject::tr( + "Names of the attributes to show. " + "This option can be specified more than once, with each attribute shown one-per-line in the given order. " + "If no attributes are specified, a summary of the default attributes is given."), + QObject::tr("attribute")); parser.addOption(attributes); parser.addPositionalArgument("entry", QObject::tr("Name of the entry to show.")); + parser.addHelpOption(); parser.process(arguments); const QStringList args = parser.positionalArguments(); if (args.size() != 2) { - out << parser.helpText().replace("keepassxc-cli", "keepassxc-cli show"); + errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli show"); return EXIT_FAILURE; } - Database* db = Database::unlockFromStdin(args.at(0), parser.value(keyFile)); - if (db == nullptr) { + auto db = Utils::unlockDatabase(args.at(0), + parser.value(Command::KeyFileOption), + parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT, + Utils::STDERR); + if (!db) { return EXIT_FAILURE; } - return this->showEntry(db, parser.values(attributes), args.at(1)); + return showEntry(db.data(), parser.values(attributes), parser.isSet(totp), args.at(1)); } -int Show::showEntry(Database* database, QStringList attributes, QString entryPath) +int Show::showEntry(Database* database, QStringList attributes, bool showTotp, const QString& entryPath) { + TextStream outputTextStream(Utils::STDOUT, QIODevice::WriteOnly); + TextStream errorTextStream(Utils::STDERR, QIODevice::WriteOnly); - QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - QTextStream outputTextStream(stdout, QIODevice::WriteOnly); - - Entry* entry = database->rootGroup()->findEntry(entryPath); + Entry* entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - qCritical("Could not find entry with path %s.", qPrintable(entryPath)); + errorTextStream << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; + return EXIT_FAILURE; + } + + if (showTotp && !entry->hasTotp()) { + errorTextStream << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl; return EXIT_FAILURE; } // If no attributes specified, output the default attribute set. - bool showAttributeNames = attributes.isEmpty(); - if (attributes.isEmpty()) { + bool showAttributeNames = attributes.isEmpty() && !showTotp; + if (attributes.isEmpty() && !showTotp) { attributes = EntryAttributes::DefaultAttributes; } // Iterate over the attributes and output them line-by-line. bool sawUnknownAttribute = false; - for (QString attribute : attributes) { + for (const QString& attribute : asConst(attributes)) { if (!entry->attributes()->contains(attribute)) { sawUnknownAttribute = true; - qCritical("ERROR: unknown attribute '%s'.", qPrintable(attribute)); + errorTextStream << QObject::tr("ERROR: unknown attribute %1.").arg(attribute) << endl; continue; } if (showAttributeNames) { @@ -104,5 +117,13 @@ int Show::showEntry(Database* database, QStringList attributes, QString entryPat } outputTextStream << entry->resolveMultiplePlaceholders(entry->attributes()->value(attribute)) << endl; } + + if (showTotp) { + if (showAttributeNames) { + outputTextStream << "TOTP: "; + } + outputTextStream << entry->totp() << endl; + } + return sawUnknownAttribute ? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/src/cli/Show.h b/src/cli/Show.h index 18b6d7049..32dab7efb 100644 --- a/src/cli/Show.h +++ b/src/cli/Show.h @@ -25,8 +25,8 @@ class Show : public Command public: Show(); ~Show(); - int execute(const QStringList& arguments); - int showEntry(Database* database, QStringList attributes, QString entryPath); + int execute(const QStringList& arguments) override; + int showEntry(Database* database, QStringList attributes, bool showTotp, const QString& entryPath); }; #endif // KEEPASSXC_SHOW_H diff --git a/src/cli/TextStream.cpp b/src/cli/TextStream.cpp new file mode 100644 index 000000000..d75cb74a9 --- /dev/null +++ b/src/cli/TextStream.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#include "TextStream.h" + +#include +#include + +TextStream::TextStream() +{ + detectCodec(); +} + +TextStream::TextStream(QIODevice* device) + : QTextStream(device) +{ + detectCodec(); +} + +TextStream::TextStream(FILE* fileHandle, QIODevice::OpenMode openMode) + : QTextStream(fileHandle, openMode) +{ + detectCodec(); +} + +TextStream::TextStream(QString* string, QIODevice::OpenMode openMode) + : QTextStream(string, openMode) +{ + detectCodec(); +} + +TextStream::TextStream(QByteArray* array, QIODevice::OpenMode openMode) + : QTextStream(array, openMode) +{ + detectCodec(); +} + +TextStream::TextStream(const QByteArray& array, QIODevice::OpenMode openMode) + : QTextStream(array, openMode) +{ + detectCodec(); +} + +void TextStream::detectCodec() +{ + QString codecName = "UTF-8"; + auto env = QProcessEnvironment::systemEnvironment(); +#ifdef Q_OS_WIN + if (!env.contains("SHELL")) { + // native shell (no Msys or cygwin) + codecName = "Windows-850"; + } +#endif + codecName = env.value("ENCODING_OVERRIDE", codecName); + auto* codec = QTextCodec::codecForName(codecName.toLatin1()); + if (codec) { + setCodec(codec); + } +} diff --git a/src/cli/TextStream.h b/src/cli/TextStream.h new file mode 100644 index 000000000..2dc116352 --- /dev/null +++ b/src/cli/TextStream.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#ifndef KEEPASSXC_TEXTSTREAM_H +#define KEEPASSXC_TEXTSTREAM_H + +#include + +/** + * QTextStream with codec fixes for the Windows command line. + * + * QTextStream uses the system default locale, but this breaks in various + * situations: (1) It does not work on the native Windows shell (cmd.exe, Powershell), + * since the default Windows locale is Windows-1252, but the shell uses Windows-850. + * (2) It also breaks on *nix systems where the locale is Latin1 or C, which + * is the case for most CI systems or build servers. + * + * We allow overriding the detected codec by setting the ENCODING_OVERRIDE + * environment variable, but otherwise prefer Windows-850 on Windows and UTF-8 + * on any other system, even if LANG is set to something else. + */ +class TextStream : public QTextStream +{ +public: + TextStream(); + explicit TextStream(QIODevice* device); + explicit TextStream(FILE* fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite); + explicit TextStream(QString* string, QIODevice::OpenMode openMode = QIODevice::ReadWrite); + explicit TextStream(QByteArray* array, QIODevice::OpenMode openMode = QIODevice::ReadWrite); + explicit TextStream(const QByteArray& array, QIODevice::OpenMode openMode = QIODevice::ReadOnly); + +private: + void detectCodec(); +}; + +#endif // KEEPASSXC_TEXTSTREAM_H diff --git a/src/cli/Utils.cpp b/src/cli/Utils.cpp index 35e7cce38..344e2b7f7 100644 --- a/src/cli/Utils.cpp +++ b/src/cli/Utils.cpp @@ -25,98 +25,202 @@ #endif #include -#include -void Utils::setStdinEcho(bool enable = true) +namespace Utils { -#ifdef Q_OS_WIN - HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); - DWORD mode; - GetConsoleMode(hIn, &mode); + /** + * STDOUT file handle for the CLI. + */ + FILE* STDOUT = stdout; - if (enable) { - mode |= ENABLE_ECHO_INPUT; - } else { - mode &= ~ENABLE_ECHO_INPUT; - } + /** + * STDERR file handle for the CLI. + */ + FILE* STDERR = stderr; - SetConsoleMode(hIn, mode); + /** + * STDIN file handle for the CLI. + */ + FILE* STDIN = stdin; -#else - struct termios t; - tcgetattr(STDIN_FILENO, &t); - - if (enable) { - t.c_lflag |= ECHO; - } else { - t.c_lflag &= ~ECHO; - } - - tcsetattr(STDIN_FILENO, TCSANOW, &t); -#endif -} - -QString Utils::getPassword() -{ - static QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - static QTextStream outputTextStream(stdout, QIODevice::WriteOnly); - - setStdinEcho(false); - QString line = inputTextStream.readLine(); - setStdinEcho(true); - - // The new line was also not echoed, but we do want to echo it. - outputTextStream << "\n"; - outputTextStream.flush(); - - return line; -} - -/* - * A valid and running event loop is needed to use the global QClipboard, - * so we need to use this from the CLI. +/** + * DEVNULL file handle for the CLI. */ -int Utils::clipText(const QString& text) -{ +#ifdef Q_OS_WIN + FILE* DEVNULL = fopen("nul", "w"); +#else + FILE* DEVNULL = fopen("/dev/null", "w"); +#endif - QString programName = ""; - QStringList arguments; + void setStdinEcho(bool enable = true) + { +#ifdef Q_OS_WIN + HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); + DWORD mode; + GetConsoleMode(hIn, &mode); + + if (enable) { + mode |= ENABLE_ECHO_INPUT; + } else { + mode &= ~ENABLE_ECHO_INPUT; + } + + SetConsoleMode(hIn, mode); +#else + struct termios t; + tcgetattr(STDIN_FILENO, &t); + + if (enable) { + t.c_lflag |= ECHO; + } else { + t.c_lflag &= ~ECHO; + } + + tcsetattr(STDIN_FILENO, TCSANOW, &t); +#endif + } + + namespace Test + { + QStringList nextPasswords = {}; + + /** + * Set the next password returned by \link getPassword() instead of reading it from STDIN. + * Multiple calls to this method will fill a queue of passwords. + * This function is intended for testing purposes. + * + * @param password password to return next + */ + void setNextPassword(const QString& password) + { + nextPasswords.append(password); + } + } // namespace Test + + QSharedPointer unlockDatabase(const QString& databaseFilename, + const QString& keyFilename, + FILE* outputDescriptor, + FILE* errorDescriptor) + { + auto compositeKey = QSharedPointer::create(); + TextStream out(outputDescriptor); + TextStream err(errorDescriptor); + + out << QObject::tr("Insert password to unlock %1: ").arg(databaseFilename) << flush; + + QString line = Utils::getPassword(outputDescriptor); + auto passwordKey = QSharedPointer::create(); + passwordKey->setPassword(line); + compositeKey->addKey(passwordKey); + + if (!keyFilename.isEmpty()) { + auto fileKey = QSharedPointer::create(); + QString errorMessage; + // LCOV_EXCL_START + if (!fileKey->load(keyFilename, &errorMessage)) { + err << QObject::tr("Failed to load key file %1: %2").arg(keyFilename, errorMessage) << endl; + return {}; + } + + if (fileKey->type() != FileKey::Hashed) { + err << QObject::tr("WARNING: You are using a legacy key file format which may become\n" + "unsupported in the future.\n\n" + "Please consider generating a new key file.") + << endl; + } + // LCOV_EXCL_STOP + + compositeKey->addKey(fileKey); + } + + auto db = QSharedPointer::create(); + QString error; + if (db->open(databaseFilename, compositeKey, &error, false)) { + return db; + } else { + err << error << endl; + return {}; + } + } + + /** + * Read a user password from STDIN or return a password previously + * set by \link setNextPassword(). + * + * @return the password + */ + QString getPassword(FILE* outputDescriptor) + { + TextStream out(outputDescriptor, QIODevice::WriteOnly); + + // return preset password if one is set + if (!Test::nextPasswords.isEmpty()) { + auto password = Test::nextPasswords.takeFirst(); + // simulate user entering newline + out << endl; + return password; + } + + TextStream in(STDIN, QIODevice::ReadOnly); + + setStdinEcho(false); + QString line = in.readLine(); + setStdinEcho(true); + out << endl; + + return line; + } + + /** + * A valid and running event loop is needed to use the global QClipboard, + * so we need to use this from the CLI. + */ + int clipText(const QString& text) + { + TextStream err(Utils::STDERR); + + QString programName = ""; + QStringList arguments; #ifdef Q_OS_UNIX - programName = "xclip"; - arguments << "-i" - << "-selection" - << "clipboard"; + programName = "xclip"; + arguments << "-i" + << "-selection" + << "clipboard"; #endif #ifdef Q_OS_MACOS - programName = "pbcopy"; + programName = "pbcopy"; #endif #ifdef Q_OS_WIN - programName = "clip"; + programName = "clip"; #endif - if (programName.isEmpty()) { - qCritical("No program defined for clipboard manipulation"); - return EXIT_FAILURE; + if (programName.isEmpty()) { + err << QObject::tr("No program defined for clipboard manipulation"); + err.flush(); + return EXIT_FAILURE; + } + + auto* clipProcess = new QProcess(nullptr); + clipProcess->start(programName, arguments); + clipProcess->waitForStarted(); + + if (clipProcess->state() != QProcess::Running) { + err << QObject::tr("Unable to start program %1").arg(programName); + err.flush(); + return EXIT_FAILURE; + } + + if (clipProcess->write(text.toLatin1()) == -1) { + qDebug("Unable to write to process : %s", qPrintable(clipProcess->errorString())); + } + clipProcess->waitForBytesWritten(); + clipProcess->closeWriteChannel(); + clipProcess->waitForFinished(); + + return clipProcess->exitCode(); } - QProcess* clipProcess = new QProcess(nullptr); - clipProcess->start(programName, arguments); - clipProcess->waitForStarted(); - - if (clipProcess->state() != QProcess::Running) { - qCritical("Unable to start program %s", qPrintable(programName)); - return EXIT_FAILURE; - } - - if (clipProcess->write(text.toLatin1()) == -1) { - qDebug("Unable to write to process : %s", qPrintable(clipProcess->errorString())); - } - clipProcess->waitForBytesWritten(); - clipProcess->closeWriteChannel(); - clipProcess->waitForFinished(); - - return clipProcess->exitCode(); -} +} // namespace Utils diff --git a/src/cli/Utils.h b/src/cli/Utils.h index 1f8051183..bb4d8f09a 100644 --- a/src/cli/Utils.h +++ b/src/cli/Utils.h @@ -18,14 +18,32 @@ #ifndef KEEPASSXC_UTILS_H #define KEEPASSXC_UTILS_H +#include "cli/TextStream.h" +#include "core/Database.h" +#include "keys/CompositeKey.h" +#include "keys/FileKey.h" +#include "keys/PasswordKey.h" #include -class Utils +namespace Utils { -public: - static void setStdinEcho(bool enable); - static QString getPassword(); - static int clipText(const QString& text); -}; + extern FILE* STDOUT; + extern FILE* STDERR; + extern FILE* STDIN; + extern FILE* DEVNULL; + + void setStdinEcho(bool enable); + QString getPassword(FILE* outputDescriptor = STDOUT); + int clipText(const QString& text); + QSharedPointer unlockDatabase(const QString& databaseFilename, + const QString& keyFilename = {}, + FILE* outputDescriptor = STDOUT, + FILE* errorDescriptor = STDERR); + + namespace Test + { + void setNextPassword(const QString& password); + } +}; // namespace Utils #endif // KEEPASSXC_UTILS_H diff --git a/src/cli/keepassxc-cli.1 b/src/cli/keepassxc-cli.1 index cd428e105..22cf88a3a 100644 --- a/src/cli/keepassxc-cli.1 +++ b/src/cli/keepassxc-cli.1 @@ -1,4 +1,4 @@ -.TH KEEPASSXC-CLI 1 "Jan 19, 2018" +.TH KEEPASSXC-CLI 1 "Nov 04, 2018" .SH NAME keepassxc-cli \- command line interface for the \fBKeePassXC\fP password manager. @@ -17,7 +17,10 @@ keepassxc-cli \- command line interface for the \fBKeePassXC\fP password manager Adds a new entry to a database. A password can be generated (\fI-g\fP option), or a prompt can be displayed to input the password (\fI-p\fP option). .IP "clip [options] [timeout]" -Copies the password of a database entry to the clipboard. If multiple entries with the same name exist in different groups, only the password for the first one is going to be copied. For copying the password of an entry in a specific group, the group path to the entry should be specified as well, instead of just the name. Optionally, a timeout in seconds can be specified to automatically clear the clipboard. +Copies the password or the current TOTP (\fI-t\fP option) of a database entry to the clipboard. If multiple entries with the same name exist in different groups, only the password for the first one is going to be copied. For copying the password of an entry in a specific group, the group path to the entry should be specified as well, instead of just the name. Optionally, a timeout in seconds can be specified to automatically clear the clipboard. + +.IP "create [options] " +Creates a new database with a key file and/or password. The key file will be created if the file that is referred to does not exist. If both the key file and password are empty, no database will be created. .IP "diceware [options]" Generate a random diceware passphrase. @@ -47,7 +50,7 @@ Merges two databases together. The first database file is going to be replaced b Removes an entry from a database. If the database has a recycle bin, the entry will be moved there. If the entry is already in the recycle bin, it will be removed permanently. .IP "show [options] " -Shows the title, username, password, URL and notes of a database entry. Regarding the occurrence of multiple entries with the same name in different groups, everything stated in the \fIclip\fP command section also applies here. +Shows the title, username, password, URL and notes of a database entry. Can also show the current TOTP. Regarding the occurrence of multiple entries with the same name in different groups, everything stated in the \fIclip\fP command section also applies here. .SH OPTIONS @@ -56,6 +59,9 @@ Shows the title, username, password, URL and notes of a database entry. Regardin .IP "-k, --key-file " Specifies a path to a key file for unlocking the database. In a merge operation this option is used to specify the key file path for the first database. +.IP "-q, --quiet " +Silence password prompt and other secondary outputs. + .IP "-h, --help" Displays help information. @@ -102,12 +108,23 @@ Specify the title of the entry. Perform advanced analysis on the password. +.SS "Clip options" + +.IP "-t, --totp" +Copy the current TOTP instead of current password to clipboard. Will report an error +if no TOTP is configured for the entry. + + .SS "Show options" .IP "-a, --attributes ..." Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are -specified, a summary of the default attributes is given. +specified and \fI-t\fP is not specified, a summary of the default attributes is given. + +.IP "-t, --totp" +Also show the current TOTP. Will report an error if no TOTP is configured for the +entry. .SS "Diceware options" @@ -121,6 +138,12 @@ otherwise the program will fail. If the wordlist has < 4000 words a warning will be printed to STDERR. +.SS "List options" + +.IP "-R, --recursive" +Recursively list the elements of the group. + + .SS "Generate options" .IP "-L, --length " @@ -147,4 +170,5 @@ Use extended ASCII characters for the generated password. [Default: Disabled] Bugs and feature requests can be reported on GitHub at https://github.com/keepassxreboot/keepassxc/issues. .SH AUTHOR -This manual page was written by Manolis Agkopian . +This manual page was originally written by Manolis Agkopian , +and is maintained by the KeePassXC Team . diff --git a/src/cli/keepassxc-cli.cpp b/src/cli/keepassxc-cli.cpp index 1462f92b9..b9e3853f2 100644 --- a/src/cli/keepassxc-cli.cpp +++ b/src/cli/keepassxc-cli.cpp @@ -20,12 +20,12 @@ #include #include #include -#include +#include "cli/TextStream.h" #include #include "config-keepassx.h" -#include "core/Tools.h" +#include "core/Bootstrap.h" #include "crypto/Crypto.h" #if defined(WITH_ASAN) && defined(WITH_LSAN) @@ -34,19 +34,17 @@ int main(int argc, char** argv) { -#ifdef QT_NO_DEBUG - Tools::disableCoreDumps(); -#endif - if (!Crypto::init()) { qFatal("Fatal error while testing the cryptographic functions:\n%s", qPrintable(Crypto::errorString())); return EXIT_FAILURE; } QCoreApplication app(argc, argv); - app.setApplicationVersion(KEEPASSX_VERSION); + QCoreApplication::setApplicationVersion(KEEPASSXC_VERSION); - QTextStream out(stdout); + Bootstrap::bootstrap(); + + TextStream out(stdout); QStringList arguments; for (int i = 0; i < argc; ++i) { arguments << QString(argv[i]); @@ -69,10 +67,10 @@ int main(int argc, char** argv) // recognized by this parser. parser.parse(arguments); - if (parser.positionalArguments().size() < 1) { + if (parser.positionalArguments().empty()) { if (parser.isSet("version")) { // Switch to parser.showVersion() when available (QT 5.4). - out << KEEPASSX_VERSION << endl; + out << KEEPASSXC_VERSION << endl; return EXIT_SUCCESS; } parser.showHelp(); diff --git a/src/config-keepassx.h.cmake b/src/config-keepassx.h.cmake index 9f3952b04..7d7018861 100644 --- a/src/config-keepassx.h.cmake +++ b/src/config-keepassx.h.cmake @@ -3,7 +3,7 @@ #ifndef KEEPASSX_CONFIG_KEEPASSX_H #define KEEPASSX_CONFIG_KEEPASSX_H -#define KEEPASSX_VERSION "@KEEPASSXC_VERSION@" +#define KEEPASSXC_VERSION "@KEEPASSXC_VERSION@" #define KEEPASSX_SOURCE_DIR "@CMAKE_SOURCE_DIR@" #define KEEPASSX_BINARY_DIR "@CMAKE_BINARY_DIR@" @@ -15,9 +15,12 @@ #cmakedefine WITH_XC_AUTOTYPE #cmakedefine WITH_XC_NETWORKING #cmakedefine WITH_XC_BROWSER -#cmakedefine WITH_XC_HTTP #cmakedefine WITH_XC_YUBIKEY #cmakedefine WITH_XC_SSHAGENT +#cmakedefine WITH_XC_KEESHARE +#cmakedefine WITH_XC_KEESHARE_INSECURE +#cmakedefine WITH_XC_KEESHARE_SECURE +#cmakedefine WITH_XC_TOUCHID #cmakedefine KEEPASSXC_BUILD_TYPE "@KEEPASSXC_BUILD_TYPE@" #cmakedefine KEEPASSXC_BUILD_TYPE_RELEASE diff --git a/src/core/AsyncTask.h b/src/core/AsyncTask.h index 67cab1609..f74d7c738 100644 --- a/src/core/AsyncTask.h +++ b/src/core/AsyncTask.h @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . -*/ + */ #ifndef KEEPASSXC_ASYNCTASK_HPP #define KEEPASSXC_ASYNCTASK_HPP @@ -22,42 +22,42 @@ #include #include - /** * Asynchronously run computations outside the GUI thread. */ namespace AsyncTask { -/** - * Wait for the given future without blocking the event loop. - * - * @param future future to wait for - * @return async task result - */ -template -typename std::result_of::type waitForFuture(QFuture::type> future) -{ - QEventLoop loop; - QFutureWatcher::type> watcher; - QObject::connect(&watcher, SIGNAL(finished()), &loop, SLOT(quit())); - watcher.setFuture(future); - loop.exec(); - return future.result(); -} + /** + * Wait for the given future without blocking the event loop. + * + * @param future future to wait for + * @return async task result + */ + template + typename std::result_of::type + waitForFuture(QFuture::type> future) + { + QEventLoop loop; + QFutureWatcher::type> watcher; + QObject::connect(&watcher, SIGNAL(finished()), &loop, SLOT(quit())); + watcher.setFuture(future); + loop.exec(); + return future.result(); + } -/** - * Run a given task and wait for it to finish without blocking the event loop. - * - * @param task std::function object to run - * @return async task result - */ -template -typename std::result_of::type runAndWaitForFuture(FunctionObject task) -{ - return waitForFuture(QtConcurrent::run(task)); -} + /** + * Run a given task and wait for it to finish without blocking the event loop. + * + * @param task std::function object to run + * @return async task result + */ + template + typename std::result_of::type runAndWaitForFuture(FunctionObject task) + { + return waitForFuture(QtConcurrent::run(task)); + } -}; // namespace AsyncTask +}; // namespace AsyncTask -#endif //KEEPASSXC_ASYNCTASK_HPP +#endif // KEEPASSXC_ASYNCTASK_HPP diff --git a/src/core/AutoTypeAssociations.cpp b/src/core/AutoTypeAssociations.cpp index 04221733f..a9ecc0db1 100644 --- a/src/core/AutoTypeAssociations.cpp +++ b/src/core/AutoTypeAssociations.cpp @@ -27,7 +27,6 @@ bool AutoTypeAssociations::Association::operator!=(const AutoTypeAssociations::A return window != other.window || sequence != other.sequence; } - AutoTypeAssociations::AutoTypeAssociations(QObject* parent) : QObject(parent) { @@ -106,7 +105,7 @@ int AutoTypeAssociations::size() const int AutoTypeAssociations::associationsSize() const { int size = 0; - for (const Association &association : m_associations) { + for (const Association& association : m_associations) { size += association.sequence.toUtf8().size() + association.window.toUtf8().size(); } return size; @@ -116,3 +115,21 @@ void AutoTypeAssociations::clear() { m_associations.clear(); } + +bool AutoTypeAssociations::operator==(const AutoTypeAssociations& other) const +{ + if (m_associations.count() != other.m_associations.count()) { + return false; + } + for (int i = 0; i < m_associations.count(); ++i) { + if (m_associations[i] != other.m_associations[i]) { + return false; + } + } + return true; +} + +bool AutoTypeAssociations::operator!=(const AutoTypeAssociations& other) const +{ + return !(*this == other); +} diff --git a/src/core/AutoTypeAssociations.h b/src/core/AutoTypeAssociations.h index 31e58cda0..17d5c3bcd 100644 --- a/src/core/AutoTypeAssociations.h +++ b/src/core/AutoTypeAssociations.h @@ -46,6 +46,9 @@ public: int associationsSize() const; void clear(); + bool operator==(const AutoTypeAssociations& other) const; + bool operator!=(const AutoTypeAssociations& other) const; + private: QList m_associations; diff --git a/src/core/AutoTypeMatch.cpp b/src/core/AutoTypeMatch.cpp index c1faab9e6..13b037bb6 100644 --- a/src/core/AutoTypeMatch.cpp +++ b/src/core/AutoTypeMatch.cpp @@ -18,15 +18,19 @@ #include "AutoTypeMatch.h" +#include + AutoTypeMatch::AutoTypeMatch() - : entry(nullptr), - sequence() -{} + : entry(nullptr) + , sequence() +{ +} AutoTypeMatch::AutoTypeMatch(Entry* entry, QString sequence) - : entry(entry), - sequence(sequence) -{} + : entry(entry) + , sequence(std::move(sequence)) +{ +} bool AutoTypeMatch::operator==(const AutoTypeMatch& other) const { diff --git a/src/core/Bootstrap.cpp b/src/core/Bootstrap.cpp new file mode 100644 index 000000000..1950735ae --- /dev/null +++ b/src/core/Bootstrap.cpp @@ -0,0 +1,281 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#include "Bootstrap.h" +#include "config-keepassx.h" +#include "core/Config.h" +#include "core/Translator.h" +#include "gui/MessageBox.h" + +#ifdef Q_OS_WIN +#include // for createWindowsDACL() +#include // for Sleep(), SetDllDirectoryA(), SetSearchPathMode(), ... +#undef MessageBox +#endif + +#if defined(HAVE_RLIMIT_CORE) +#include +#endif + +#if defined(HAVE_PR_SET_DUMPABLE) +#include +#endif + +#ifdef HAVE_PT_DENY_ATTACH +// clang-format off +#include +#include +// clang-format on +#endif + +namespace Bootstrap +{ + /** + * When QNetworkAccessManager is instantiated it regularly starts polling + * all network interfaces to see if anything changes and if so, what. This + * creates a latency spike every 10 seconds on Mac OS 10.12+ and Windows 7 >= + * when on a wifi connection. + * So here we disable it for lack of better measure. + * This will also cause this message: QObject::startTimer: Timers cannot + * have negative intervals + * For more info see: + * - https://bugreports.qt.io/browse/QTBUG-40332 + * - https://bugreports.qt.io/browse/QTBUG-46015 + */ + static inline void applyEarlyQNetworkAccessManagerWorkaround() + { + qputenv("QT_BEARER_POLL_TIMEOUT", QByteArray::number(-1)); + } + + /** + * Perform early application bootstrapping that does not rely on a QApplication + * being present. + */ + void bootstrap() + { +#ifdef QT_NO_DEBUG + disableCoreDumps(); +#endif + setupSearchPaths(); + applyEarlyQNetworkAccessManagerWorkaround(); + Translator::installTranslators(); + } + + /** + * Perform early application bootstrapping such as setting up search paths, + * configuration OS security properties, and loading translators. + * A QApplication object has to be instantiated before calling this function. + */ + void bootstrapApplication() + { + bootstrap(); + MessageBox::initializeButtonDefs(); + +#ifdef Q_OS_MACOS + // Don't show menu icons on OSX + QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); +#endif + } + + /** + * Restore the main window's state after launch + * + * @param mainWindow the main window whose state to restore + */ + void restoreMainWindowState(MainWindow& mainWindow) + { + // start minimized if configured + if (config()->get("GUI/MinimizeOnStartup").toBool()) { + mainWindow.showMinimized(); + } else { + mainWindow.bringToFront(); + } + + if (config()->get("OpenPreviousDatabasesOnStartup").toBool()) { + const QStringList fileNames = config()->get("LastOpenedDatabases").toStringList(); + for (const QString& filename : fileNames) { + if (!filename.isEmpty() && QFile::exists(filename)) { + mainWindow.openDatabase(filename); + } + } + } + } + + // LCOV_EXCL_START + void disableCoreDumps() + { + // default to true + // there is no point in printing a warning if this is not implemented on the platform + bool success = true; + +#if defined(HAVE_RLIMIT_CORE) + struct rlimit limit; + limit.rlim_cur = 0; + limit.rlim_max = 0; + success = success && (setrlimit(RLIMIT_CORE, &limit) == 0); +#endif + +#if defined(HAVE_PR_SET_DUMPABLE) + success = success && (prctl(PR_SET_DUMPABLE, 0) == 0); +#endif + +// Mac OS X +#ifdef HAVE_PT_DENY_ATTACH + success = success && (ptrace(PT_DENY_ATTACH, 0, 0, 0) == 0); +#endif + +#ifdef Q_OS_WIN + success = success && createWindowsDACL(); +#endif + + if (!success) { + qWarning("Unable to disable core dumps."); + } + } + + // + // This function grants the user associated with the process token minimal access rights and + // denies everything else on Windows. This includes PROCESS_QUERY_INFORMATION and + // PROCESS_VM_READ access rights that are required for MiniDumpWriteDump() or ReadProcessMemory(). + // We do this using a discretionary access control list (DACL). Effectively this prevents + // crash dumps and disallows other processes from accessing our memory. This works as long + // as you do not have admin privileges, since then you are able to grant yourself the + // SeDebugPrivilege or SeTakeOwnershipPrivilege and circumvent the DACL. + // + bool createWindowsDACL() + { + bool bSuccess = false; + +#ifdef Q_OS_WIN + // Process token and user + HANDLE hToken = nullptr; + PTOKEN_USER pTokenUser = nullptr; + DWORD cbBufferSize = 0; + PSID pLocalSystemSid = nullptr; + DWORD pLocalSystemSidSize = SECURITY_MAX_SID_SIZE; + + // Access control list + PACL pACL = nullptr; + DWORD cbACL = 0; + + // Open the access token associated with the calling process + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { + goto Cleanup; + } + + // Retrieve the token information in a TOKEN_USER structure + GetTokenInformation(hToken, TokenUser, nullptr, 0, &cbBufferSize); + + pTokenUser = static_cast(HeapAlloc(GetProcessHeap(), 0, cbBufferSize)); + if (pTokenUser == nullptr) { + goto Cleanup; + } + + if (!GetTokenInformation(hToken, TokenUser, pTokenUser, cbBufferSize, &cbBufferSize)) { + goto Cleanup; + } + + if (!IsValidSid(pTokenUser->User.Sid)) { + goto Cleanup; + } + + // Retrieve LocalSystem account SID + pLocalSystemSid = static_cast(HeapAlloc(GetProcessHeap(), 0, pLocalSystemSidSize)); + if (pLocalSystemSid == nullptr) { + goto Cleanup; + } + + if (!CreateWellKnownSid(WinLocalSystemSid, nullptr, pLocalSystemSid, &pLocalSystemSidSize)) { + goto Cleanup; + } + + // Calculate the amount of memory that must be allocated for the DACL + cbACL = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pTokenUser->User.Sid) + + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pLocalSystemSid); + + // Create and initialize an ACL + pACL = static_cast(HeapAlloc(GetProcessHeap(), 0, cbACL)); + if (pACL == nullptr) { + goto Cleanup; + } + + if (!InitializeAcl(pACL, cbACL, ACL_REVISION)) { + goto Cleanup; + } + + // Add allowed access control entries, everything else is denied + if (!AddAccessAllowedAce( + pACL, + ACL_REVISION, + SYNCHRONIZE | PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_TERMINATE, // same as protected process + pTokenUser->User.Sid // pointer to the trustee's SID + )) { + goto Cleanup; + } + +#ifdef WITH_XC_SSHAGENT + // OpenSSH for Windows ssh-agent service is running as LocalSystem + if (!AddAccessAllowedAce(pACL, + ACL_REVISION, + PROCESS_QUERY_INFORMATION | PROCESS_DUP_HANDLE, // just enough for ssh-agent + pLocalSystemSid // known LocalSystem sid + )) { + goto Cleanup; + } +#endif + + // Set discretionary access control list + bSuccess = ERROR_SUCCESS + == SetSecurityInfo(GetCurrentProcess(), // object handle + SE_KERNEL_OBJECT, // type of object + DACL_SECURITY_INFORMATION, // change only the objects DACL + nullptr, + nullptr, // do not change owner or group + pACL, // DACL specified + nullptr // do not change SACL + ); + + Cleanup: + + if (pACL != nullptr) { + HeapFree(GetProcessHeap(), 0, pACL); + } + if (pLocalSystemSid != nullptr) { + HeapFree(GetProcessHeap(), 0, pLocalSystemSid); + } + if (pTokenUser != nullptr) { + HeapFree(GetProcessHeap(), 0, pTokenUser); + } + if (hToken != nullptr) { + CloseHandle(hToken); + } +#endif + + return bSuccess; + } + // LCOV_EXCL_STOP + + void setupSearchPaths() + { +#ifdef Q_OS_WIN + // Make sure Windows doesn't load DLLs from the current working directory + SetDllDirectoryA(""); + SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE); +#endif + } + +} // namespace Bootstrap diff --git a/src/core/Bootstrap.h b/src/core/Bootstrap.h new file mode 100644 index 000000000..de1a4d836 --- /dev/null +++ b/src/core/Bootstrap.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#ifndef KEEPASSXC_BOOTSTRAP_H +#define KEEPASSXC_BOOTSTRAP_H + +#include "gui/MainWindow.h" + +namespace Bootstrap +{ + void bootstrap(); + void bootstrapApplication(); + void restoreMainWindowState(MainWindow& mainWindow); + void disableCoreDumps(); + bool createWindowsDACL(); + void setupSearchPaths(); +}; // namespace Bootstrap + +#endif // KEEPASSXC_BOOTSTRAP_H diff --git a/src/core/Clock.cpp b/src/core/Clock.cpp new file mode 100644 index 000000000..88ac4fb77 --- /dev/null +++ b/src/core/Clock.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ +#include "Clock.h" + +QSharedPointer Clock::m_instance; + +QDateTime Clock::currentDateTimeUtc() +{ + return instance().currentDateTimeUtcImpl(); +} + +QDateTime Clock::currentDateTime() +{ + return instance().currentDateTimeImpl(); +} + +uint Clock::currentSecondsSinceEpoch() +{ + return instance().currentDateTimeImpl().toTime_t(); +} + +QDateTime Clock::serialized(const QDateTime& dateTime) +{ + auto time = dateTime.time(); + if (time.isValid() && time.msec() != 0) { + return dateTime.addMSecs(-time.msec()); + } + return dateTime; +} + +QDateTime Clock::datetimeUtc(int year, int month, int day, int hour, int min, int second) +{ + return QDateTime(QDate(year, month, day), QTime(hour, min, second), Qt::UTC); +} + +QDateTime Clock::datetime(int year, int month, int day, int hour, int min, int second) +{ + return QDateTime(QDate(year, month, day), QTime(hour, min, second), Qt::LocalTime); +} + +QDateTime Clock::datetimeUtc(qint64 msecSinceEpoch) +{ + return QDateTime::fromMSecsSinceEpoch(msecSinceEpoch, Qt::UTC); +} + +QDateTime Clock::datetime(qint64 msecSinceEpoch) +{ + return QDateTime::fromMSecsSinceEpoch(msecSinceEpoch, Qt::LocalTime); +} + +QDateTime Clock::parse(const QString& text, Qt::DateFormat format) +{ + return QDateTime::fromString(text, format); +} + +QDateTime Clock::parse(const QString& text, const QString& format) +{ + return QDateTime::fromString(text, format); +} + +Clock::~Clock() +{ +} + +Clock::Clock() +{ +} + +QDateTime Clock::currentDateTimeUtcImpl() const +{ + return QDateTime::currentDateTimeUtc(); +} + +QDateTime Clock::currentDateTimeImpl() const +{ + return QDateTime::currentDateTime(); +} + +void Clock::resetInstance() +{ + m_instance.reset(); +} + +void Clock::setInstance(Clock* clock) +{ + m_instance = QSharedPointer(clock); +} + +const Clock& Clock::instance() +{ + if (!m_instance) { + m_instance = QSharedPointer(new Clock()); + } + return *m_instance; +} diff --git a/src/core/Clock.h b/src/core/Clock.h new file mode 100644 index 000000000..8f81b0961 --- /dev/null +++ b/src/core/Clock.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#ifndef KEEPASSXC_CLOCK_H +#define KEEPASSXC_CLOCK_H + +#include +#include + +class Clock +{ +public: + static QDateTime currentDateTimeUtc(); + static QDateTime currentDateTime(); + + static uint currentSecondsSinceEpoch(); + + static QDateTime serialized(const QDateTime& dateTime); + + static QDateTime datetimeUtc(int year, int month, int day, int hour, int min, int second); + static QDateTime datetime(int year, int month, int day, int hour, int min, int second); + + static QDateTime datetimeUtc(qint64 msecSinceEpoch); + static QDateTime datetime(qint64 msecSinceEpoch); + + static QDateTime parse(const QString& text, Qt::DateFormat format = Qt::TextDate); + static QDateTime parse(const QString& text, const QString& format); + + virtual ~Clock(); + +protected: + Clock(); + virtual QDateTime currentDateTimeUtcImpl() const; + virtual QDateTime currentDateTimeImpl() const; + + static void resetInstance(); + static void setInstance(Clock* clock); + static const Clock& instance(); + +private: + static QSharedPointer m_instance; +}; + +#endif // KEEPASSX_ENTRY_H diff --git a/src/core/Compare.cpp b/src/core/Compare.cpp new file mode 100644 index 000000000..12e5029b7 --- /dev/null +++ b/src/core/Compare.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ +#include "Compare.h" + +#include + +bool operator<(const QColor& lhs, const QColor& rhs) +{ + const QColor adaptedLhs = lhs.toCmyk(); + const QColor adaptedRhs = rhs.toCmyk(); + const int iCyan = compare(adaptedLhs.cyanF(), adaptedRhs.cyanF()); + if (iCyan != 0) { + return iCyan; + } + const int iMagenta = compare(adaptedLhs.magentaF(), adaptedRhs.magentaF()); + if (iMagenta != 0) { + return iMagenta; + } + const int iYellow = compare(adaptedLhs.yellowF(), adaptedRhs.yellowF()); + if (iYellow != 0) { + return iYellow; + } + return compare(adaptedLhs.blackF(), adaptedRhs.blackF()) < 0; +} diff --git a/src/core/Compare.h b/src/core/Compare.h new file mode 100644 index 000000000..5124caf6e --- /dev/null +++ b/src/core/Compare.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#ifndef KEEPASSXC_COMPARE_H +#define KEEPASSXC_COMPARE_H + +#include + +#include "core/Clock.h" + +enum CompareItemOption +{ + CompareItemDefault = 0, + CompareItemIgnoreMilliseconds = 0x4, + CompareItemIgnoreStatistics = 0x8, + CompareItemIgnoreDisabled = 0x10, + CompareItemIgnoreHistory = 0x20, + CompareItemIgnoreLocation = 0x40, +}; +Q_DECLARE_FLAGS(CompareItemOptions, CompareItemOption) +Q_DECLARE_OPERATORS_FOR_FLAGS(CompareItemOptions) + +class QColor; +/*! + * \return true when both color match + * + * Comparison converts both into the cmyk-model + */ +bool operator<(const QColor& lhs, const QColor& rhs); + +template inline short compareGeneric(const Type& lhs, const Type& rhs, CompareItemOptions) +{ + if (lhs != rhs) { + return lhs < rhs ? -1 : +1; + } + return 0; +} + +template +inline short compare(const Type& lhs, const Type& rhs, CompareItemOptions options = CompareItemDefault) +{ + return compareGeneric(lhs, rhs, options); +} + +template <> inline short compare(const QDateTime& lhs, const QDateTime& rhs, CompareItemOptions options) +{ + if (!options.testFlag(CompareItemIgnoreMilliseconds)) { + return compareGeneric(lhs, rhs, options); + } + return compareGeneric(Clock::serialized(lhs), Clock::serialized(rhs), options); +} + +template +inline short compare(bool enabled, const Type& lhs, const Type& rhs, CompareItemOptions options = CompareItemDefault) +{ + if (!enabled) { + return 0; + } + return compare(lhs, rhs, options); +} + +template +inline short compare(bool lhsEnabled, + const Type& lhs, + bool rhsEnabled, + const Type& rhs, + CompareItemOptions options = CompareItemDefault) +{ + const short enabled = compareGeneric(lhsEnabled, rhsEnabled, options); + if (enabled == 0 && (!options.testFlag(CompareItemIgnoreDisabled) || (lhsEnabled && rhsEnabled))) { + return compare(lhs, rhs, options); + } + return enabled; +} + +#endif // KEEPASSX_COMPARE_H diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 614aee0c4..86ed04e38 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -21,8 +21,25 @@ #include #include #include -#include #include +#include + +/* + * Map of configuration file settings that are either deprecated, or have + * had their name changed. Entries in the map are of the form + * {oldName, newName} + * Set newName to empty string to remove the setting from the file. + */ +static const QMap deprecationMap = { + // >2.3.4 + {QStringLiteral("security/hidepassworddetails"), QStringLiteral("security/HidePasswordPreviewPanel")}, + // >2.3.4 + {QStringLiteral("GUI/HideDetailsView"), QStringLiteral("GUI/HidePreviewPanel")}, + // >2.3.4 + {QStringLiteral("GUI/DetailSplitterState"), QStringLiteral("GUI/PreviewSplitterState")}, + // >2.3.4 + {QStringLiteral("security/IconDownloadFallbackToGoogle"), QStringLiteral("security/IconDownloadFallback")}, +}; Config* Config::m_instance(nullptr); @@ -48,7 +65,16 @@ QString Config::getFileName() void Config::set(const QString& key, const QVariant& value) { + if (m_settings->contains(key) && m_settings->value(key) == value) { + return; + } + const bool surpressSignal = !m_settings->contains(key) && m_defaults.value(key) == value; + m_settings->setValue(key, value); + + if (!surpressSignal) { + emit changed(key); + } } /** @@ -63,6 +89,25 @@ void Config::sync() m_settings->sync(); } +void Config::upgrade() +{ + const auto keys = deprecationMap.keys(); + for (const auto& setting : keys) { + if (m_settings->contains(setting)) { + if (!deprecationMap.value(setting).isEmpty()) { + // Add entry with new name and old entry's value + m_settings->setValue(deprecationMap.value(setting), m_settings->value(setting)); + } + m_settings->remove(setting); + } + } + + // > 2.3.4 + if (m_settings->value("AutoSaveAfterEveryChange").toBool()) { + m_settings->setValue("AutoSaveOnExit", true); + } +} + Config::Config(const QString& fileName, QObject* parent) : QObject(parent) { @@ -80,7 +125,7 @@ Config::Config(QObject* parent) QString userPath; QString homePath = QDir::homePath(); - #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) // we can't use QStandardPaths on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME QByteArray env = qgetenv("XDG_CONFIG_HOME"); if (env.isEmpty()) { @@ -95,17 +140,17 @@ Config::Config(QObject* parent) } userPath += "/keepassxc/"; - #else +#else userPath = QDir::fromNativeSeparators(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); // storageLocation() appends the application name ("/keepassxc") to the end userPath += "/"; - #endif +#endif - #ifdef QT_DEBUG +#ifdef QT_DEBUG userPath += "keepassxc_debug.ini"; - #else +#else userPath += "keepassxc.ini"; - #endif +#endif init(userPath); } @@ -118,15 +163,17 @@ Config::~Config() void Config::init(const QString& fileName) { m_settings.reset(new QSettings(fileName, QSettings::IniFormat)); + upgrade(); connect(qApp, &QCoreApplication::aboutToQuit, this, &Config::sync); m_defaults.insert("SingleInstance", true); m_defaults.insert("RememberLastDatabases", true); + m_defaults.insert("NumberOfRememberedLastDatabases", 5); m_defaults.insert("RememberLastKeyFiles", true); m_defaults.insert("OpenPreviousDatabasesOnStartup", true); m_defaults.insert("AutoSaveAfterEveryChange", true); m_defaults.insert("AutoReloadOnChange", true); - m_defaults.insert("AutoSaveOnExit", false); + m_defaults.insert("AutoSaveOnExit", true); m_defaults.insert("BackupBeforeSave", false); m_defaults.insert("UseAtomicSaves", true); m_defaults.insert("SearchLimitGroup", false); @@ -146,16 +193,24 @@ void Config::init(const QString& fileName) m_defaults.insert("security/lockdatabasescreenlock", true); m_defaults.insert("security/passwordsrepeat", false); m_defaults.insert("security/passwordscleartext", false); - m_defaults.insert("security/hidepassworddetails", true); + m_defaults.insert("security/passwordemptynodots", true); + m_defaults.insert("security/HidePasswordPreviewPanel", true); m_defaults.insert("security/autotypeask", true); - m_defaults.insert("security/IconDownloadFallbackToGoogle", false); + m_defaults.insert("security/IconDownloadFallback", false); + m_defaults.insert("security/resettouchid", false); + m_defaults.insert("security/resettouchidtimeout", 30); + m_defaults.insert("security/resettouchidscreenlock", true); m_defaults.insert("GUI/Language", "system"); + m_defaults.insert("GUI/HideToolbar", false); + m_defaults.insert("GUI/MovableToolbar", false); + m_defaults.insert("GUI/ToolButtonStyle", Qt::ToolButtonIconOnly); m_defaults.insert("GUI/ShowTrayIcon", false); m_defaults.insert("GUI/DarkTrayIcon", false); m_defaults.insert("GUI/MinimizeToTray", false); m_defaults.insert("GUI/MinimizeOnClose", false); m_defaults.insert("GUI/HideUsernames", false); m_defaults.insert("GUI/HidePasswords", true); + m_defaults.insert("GUI/AdvancedSettings", false); } Config* Config::instance() diff --git a/src/core/Config.h b/src/core/Config.h index eb7978622..ca77e0c0a 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -26,7 +26,7 @@ class QSettings; class Config : public QObject { -Q_OBJECT + Q_OBJECT public: Q_DISABLE_COPY(Config) @@ -43,10 +43,14 @@ public: static void createConfigFromFile(const QString& file); static void createTempFileInstance(); +signals: + void changed(const QString& key); + private: Config(const QString& fileName, QObject* parent); explicit Config(QObject* parent); void init(const QString& fileName); + void upgrade(); static Config* m_instance; @@ -54,7 +58,8 @@ private: QHash m_defaults; }; -inline Config* config() { +inline Config* config() +{ return Config::instance(); } diff --git a/src/core/CsvParser.cpp b/src/core/CsvParser.cpp index 6a963fc45..7e4929481 100644 --- a/src/core/CsvParser.cpp +++ b/src/core/CsvParser.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2016 Enrico Mariotti * Copyright (C) 2017 KeePassXC Team * @@ -18,8 +18,8 @@ #include "CsvParser.h" -#include #include +#include #include "core/Tools.h" @@ -44,21 +44,24 @@ CsvParser::CsvParser() m_ts.setCodec("UTF-8"); } -CsvParser::~CsvParser() { +CsvParser::~CsvParser() +{ m_csv.close(); } -bool CsvParser::isFileLoaded() { +bool CsvParser::isFileLoaded() +{ return m_isFileLoaded; } -bool CsvParser::reparse() { +bool CsvParser::reparse() +{ reset(); return parseFile(); } - -bool CsvParser::parse(QFile *device) { +bool CsvParser::parse(QFile* device) +{ clear(); if (nullptr == device) { appendStatusMsg(QObject::tr("NULL device"), true); @@ -69,7 +72,8 @@ bool CsvParser::parse(QFile *device) { return parseFile(); } -bool CsvParser::readFile(QFile *device) { +bool CsvParser::readFile(QFile* device) +{ if (device->isOpen()) device->close(); @@ -77,20 +81,20 @@ bool CsvParser::readFile(QFile *device) { if (!Tools::readAllFromDevice(device, m_array)) { appendStatusMsg(QObject::tr("error reading from device"), true); m_isFileLoaded = false; - } - else { + } else { device->close(); m_array.replace("\r\n", "\n"); m_array.replace("\r", "\n"); if (0 == m_array.size()) - appendStatusMsg(QObject::tr("file empty !\n")); + appendStatusMsg(QObject::tr("file empty").append("\n")); m_isFileLoaded = true; } return m_isFileLoaded; } -void CsvParser::reset() { +void CsvParser::reset() +{ m_ch = 0; m_currCol = 1; m_currRow = 1; @@ -101,21 +105,23 @@ void CsvParser::reset() { m_statusMsg = ""; m_ts.seek(0); m_table.clear(); - //the following are users' concern :) - //m_comment = '#'; - //m_backslashSyntax = false; - //m_comment = '#'; - //m_qualifier = '"'; - //m_separator = ','; + // the following are users' concern :) + // m_comment = '#'; + // m_backslashSyntax = false; + // m_comment = '#'; + // m_qualifier = '"'; + // m_separator = ','; } -void CsvParser::clear() { +void CsvParser::clear() +{ reset(); m_isFileLoaded = false; m_array.clear(); } -bool CsvParser::parseFile() { +bool CsvParser::parseFile() +{ parseRecord(); while (!m_isEof) { if (!skipEndline()) @@ -128,7 +134,8 @@ bool CsvParser::parseFile() { return m_isGood; } -void CsvParser::parseRecord() { +void CsvParser::parseRecord() +{ CsvRow row; if (isComment()) { skipLine(); @@ -151,19 +158,21 @@ void CsvParser::parseRecord() { m_currCol++; } -void CsvParser::parseField(CsvRow& row) { +void CsvParser::parseField(CsvRow& row) +{ QString field; peek(m_ch); if (!isTerminator(m_ch)) { if (isQualifier(m_ch)) - parseQuoted(field); + parseQuoted(field); else parseSimple(field); } row.push_back(field); } -void CsvParser::parseSimple(QString &s) { +void CsvParser::parseSimple(QString& s) +{ QChar c; getChar(c); while ((isText(c)) && (!m_isEof)) { @@ -174,16 +183,18 @@ void CsvParser::parseSimple(QString &s) { ungetChar(); } -void CsvParser::parseQuoted(QString &s) { - //read and discard initial qualifier (e.g. quote) +void CsvParser::parseQuoted(QString& s) +{ + // read and discard initial qualifier (e.g. quote) getChar(m_ch); parseEscaped(s); - //getChar(m_ch); + // getChar(m_ch); if (!isQualifier(m_ch)) appendStatusMsg(QObject::tr("missing closing quote"), true); } -void CsvParser::parseEscaped(QString &s) { +void CsvParser::parseEscaped(QString& s) +{ parseEscapedText(s); while (processEscapeMark(s, m_ch)) parseEscapedText(s); @@ -191,7 +202,8 @@ void CsvParser::parseEscaped(QString &s) { ungetChar(); } -void CsvParser::parseEscapedText(QString &s) { +void CsvParser::parseEscapedText(QString& s) +{ getChar(m_ch); while ((!isQualifier(m_ch)) && !m_isEof) { s.append(m_ch); @@ -199,19 +211,20 @@ void CsvParser::parseEscapedText(QString &s) { } } -bool CsvParser::processEscapeMark(QString &s, QChar c) { +bool CsvParser::processEscapeMark(QString& s, QChar c) +{ QChar buf; peek(buf); QChar c2; if (true == m_isBackslashSyntax) { - //escape-character syntax, e.g. \" + // escape-character syntax, e.g. \" if (c != '\\') { return false; } - //consume (and append) second qualifier + // consume (and append) second qualifier getChar(c2); if (m_isEof) { - c2='\\'; + c2 = '\\'; s.append('\\'); return false; } else { @@ -219,11 +232,11 @@ bool CsvParser::processEscapeMark(QString &s, QChar c) { return true; } } else { - //double quote syntax, e.g. "" + // double quote syntax, e.g. "" if (!isQualifier(c)) return false; peek(c2); - if (!m_isEof) { //not EOF, can read one char + if (!m_isEof) { // not EOF, can read one char if (isQualifier(c2)) { s.append(c2); getChar(c2); @@ -234,10 +247,11 @@ bool CsvParser::processEscapeMark(QString &s, QChar c) { } } -void CsvParser::fillColumns() { - //fill shorter rows with empty placeholder columns +void CsvParser::fillColumns() +{ + // fill shorter rows with empty placeholder columns for (int i = 0; i < m_table.size(); ++i) { - int gap = m_maxCols-m_table.at(i).size(); + int gap = m_maxCols - m_table.at(i).size(); if (gap > 0) { CsvRow r = m_table.at(i); for (int j = 0; j < gap; ++j) { @@ -248,18 +262,20 @@ void CsvParser::fillColumns() { } } -void CsvParser::skipLine() { +void CsvParser::skipLine() +{ m_ts.readLine(); m_ts.seek(m_ts.pos() - 1); } -bool CsvParser::skipEndline() { +bool CsvParser::skipEndline() +{ getChar(m_ch); return (m_ch == '\n'); } - -void CsvParser::getChar(QChar& c) { +void CsvParser::getChar(QChar& c) +{ m_isEof = m_ts.atEnd(); if (!m_isEof) { m_lastPos = m_ts.pos(); @@ -267,32 +283,37 @@ void CsvParser::getChar(QChar& c) { } } -void CsvParser::ungetChar() { +void CsvParser::ungetChar() +{ if (!m_ts.seek(m_lastPos)) { qWarning("CSV Parser: unget lower bound exceeded"); m_isGood = false; } } -void CsvParser::peek(QChar& c) { +void CsvParser::peek(QChar& c) +{ getChar(c); if (!m_isEof) ungetChar(); } -bool CsvParser::isQualifier(const QChar &c) const { +bool CsvParser::isQualifier(const QChar& c) const +{ if (true == m_isBackslashSyntax && (c != m_qualifier)) return (c == '\\'); else return (c == m_qualifier); } -bool CsvParser::isComment() { +bool CsvParser::isComment() +{ bool result = false; QChar c2; qint64 pos = m_ts.pos(); - do getChar(c2); + do + getChar(c2); while ((isSpace(c2) || isTab(c2)) && (!m_isEof)); if (c2 == m_comment) @@ -301,86 +322,101 @@ bool CsvParser::isComment() { return result; } -bool CsvParser::isText(QChar c) const { - return !( (isCRLF(c)) || (isSeparator(c)) ); +bool CsvParser::isText(QChar c) const +{ + return !((isCRLF(c)) || (isSeparator(c))); } -bool CsvParser::isEmptyRow(CsvRow row) const { +bool CsvParser::isEmptyRow(const CsvRow& row) const +{ CsvRow::const_iterator it = row.constBegin(); for (; it != row.constEnd(); ++it) - if ( ((*it) != "\n") && ((*it) != "") ) + if (((*it) != "\n") && ((*it) != "")) return false; return true; } -bool CsvParser::isCRLF(const QChar &c) const { +bool CsvParser::isCRLF(const QChar& c) const +{ return (c == '\n'); } -bool CsvParser::isSpace(const QChar &c) const { +bool CsvParser::isSpace(const QChar& c) const +{ return (c == ' '); } -bool CsvParser::isTab(const QChar &c) const { +bool CsvParser::isTab(const QChar& c) const +{ return (c == '\t'); } -bool CsvParser::isSeparator(const QChar &c) const { +bool CsvParser::isSeparator(const QChar& c) const +{ return (c == m_separator); } -bool CsvParser::isTerminator(const QChar &c) const { +bool CsvParser::isTerminator(const QChar& c) const +{ return (isSeparator(c) || (c == '\n') || (c == '\r')); } -void CsvParser::setBackslashSyntax(bool set) { +void CsvParser::setBackslashSyntax(bool set) +{ m_isBackslashSyntax = set; } -void CsvParser::setComment(const QChar &c) { +void CsvParser::setComment(const QChar& c) +{ m_comment = c.unicode(); } -void CsvParser::setCodec(const QString &s) { +void CsvParser::setCodec(const QString& s) +{ m_ts.setCodec(QTextCodec::codecForName(s.toLocal8Bit())); } -void CsvParser::setFieldSeparator(const QChar &c) { +void CsvParser::setFieldSeparator(const QChar& c) +{ m_separator = c.unicode(); } -void CsvParser::setTextQualifier(const QChar &c) { +void CsvParser::setTextQualifier(const QChar& c) +{ m_qualifier = c.unicode(); } -int CsvParser::getFileSize() const { +int CsvParser::getFileSize() const +{ return m_csv.size(); } -const CsvTable CsvParser::getCsvTable() const { +const CsvTable CsvParser::getCsvTable() const +{ return m_table; } -QString CsvParser::getStatus() const { +QString CsvParser::getStatus() const +{ return m_statusMsg; } -int CsvParser::getCsvCols() const { - if ((m_table.size() > 0) && (m_table.at(0).size() > 0)) +int CsvParser::getCsvCols() const +{ + if (!m_table.isEmpty() && !m_table.at(0).isEmpty()) { return m_table.at(0).size(); - else return 0; + } else { + return 0; + } } -int CsvParser::getCsvRows() const { +int CsvParser::getCsvRows() const +{ return m_table.size(); } - -void CsvParser::appendStatusMsg(QString s, bool isCritical) { - m_statusMsg += s - .append(": (row,col) " + QString::number(m_currRow)) - .append(",") - .append(QString::number(m_currCol)) - .append("\n"); +void CsvParser::appendStatusMsg(const QString& s, bool isCritical) +{ + m_statusMsg += QObject::tr("%1: (row, col) %2,%3").arg(s, m_currRow, m_currCol).append("\n"); m_isGood = !isCritical; } diff --git a/src/core/CsvParser.h b/src/core/CsvParser.h index 3ab31bf67..d90e8300a 100644 --- a/src/core/CsvParser.h +++ b/src/core/CsvParser.h @@ -19,28 +19,29 @@ #ifndef KEEPASSX_CSVPARSER_H #define KEEPASSX_CSVPARSER_H -#include #include +#include #include #include typedef QStringList CsvRow; typedef QList CsvTable; -class CsvParser { +class CsvParser +{ public: CsvParser(); ~CsvParser(); - //read data from device and parse it - bool parse(QFile *device); + // read data from device and parse it + bool parse(QFile* device); bool isFileLoaded(); - //reparse the same buffer (device is not opened again) + // reparse the same buffer (device is not opened again) bool reparse(); - void setCodec(const QString &s); - void setComment(const QChar &c); - void setFieldSeparator(const QChar &c); - void setTextQualifier(const QChar &c); + void setCodec(const QString& s); + void setComment(const QChar& c); + void setFieldSeparator(const QChar& c); + void setTextQualifier(const QChar& c); void setBackslashSyntax(bool set); int getFileSize() const; int getCsvRows() const; @@ -52,51 +53,50 @@ protected: CsvTable m_table; private: - QByteArray m_array; - QBuffer m_csv; - QChar m_ch; - QChar m_comment; + QByteArray m_array; + QBuffer m_csv; + QChar m_ch; + QChar m_comment; unsigned int m_currCol; unsigned int m_currRow; - bool m_isBackslashSyntax; - bool m_isEof; - bool m_isFileLoaded; - bool m_isGood; - qint64 m_lastPos; - int m_maxCols; - QChar m_qualifier; - QChar m_separator; - QString m_statusMsg; - QTextStream m_ts; + bool m_isBackslashSyntax; + bool m_isEof; + bool m_isFileLoaded; + bool m_isGood; + qint64 m_lastPos; + int m_maxCols; + QChar m_qualifier; + QChar m_separator; + QString m_statusMsg; + QTextStream m_ts; - void getChar(QChar &c); + void getChar(QChar& c); void ungetChar(); - void peek(QChar &c); + void peek(QChar& c); void fillColumns(); - bool isTerminator(const QChar &c) const; - bool isSeparator(const QChar &c) const; - bool isQualifier(const QChar &c) const; - bool processEscapeMark(QString &s, QChar c); + bool isTerminator(const QChar& c) const; + bool isSeparator(const QChar& c) const; + bool isQualifier(const QChar& c) const; + bool processEscapeMark(QString& s, QChar c); bool isText(QChar c) const; bool isComment(); - bool isCRLF(const QChar &c) const; - bool isSpace(const QChar &c) const; - bool isTab(const QChar &c) const; - bool isEmptyRow(CsvRow row) const; + bool isCRLF(const QChar& c) const; + bool isSpace(const QChar& c) const; + bool isTab(const QChar& c) const; + bool isEmptyRow(const CsvRow& row) const; bool parseFile(); void parseRecord(); - void parseField(CsvRow &row); - void parseSimple(QString &s); - void parseQuoted(QString &s); - void parseEscaped(QString &s); - void parseEscapedText(QString &s); - bool readFile(QFile *device); + void parseField(CsvRow& row); + void parseSimple(QString& s); + void parseQuoted(QString& s); + void parseEscaped(QString& s); + void parseEscapedText(QString& s); + bool readFile(QFile* device); void reset(); void clear(); bool skipEndline(); void skipLine(); - void appendStatusMsg(QString s, bool isCritical = false); + void appendStatusMsg(const QString& s, bool isCritical = false); }; -#endif //CSVPARSER_H - +#endif // CSVPARSER_H diff --git a/src/core/CustomData.cpp b/src/core/CustomData.cpp index 61ac2980e..86adae158 100644 --- a/src/core/CustomData.cpp +++ b/src/core/CustomData.cpp @@ -17,6 +17,8 @@ #include "CustomData.h" +#include "core/Global.h" + CustomData::CustomData(QObject* parent) : QObject(parent) { @@ -44,7 +46,7 @@ bool CustomData::contains(const QString& key) const bool CustomData::containsValue(const QString& value) const { - return m_data.values().contains(value); + return asConst(m_data).values().contains(value); } void CustomData::set(const QString& key, const QString& value) @@ -54,11 +56,11 @@ void CustomData::set(const QString& key, const QString& value) if (addAttribute) { emit aboutToBeAdded(key); - } + } if (addAttribute || changeValue) { m_data.insert(key, value); - emit modified(); + emit customDataModified(); } if (addAttribute) { @@ -73,7 +75,7 @@ void CustomData::remove(const QString& key) m_data.remove(key); emit removed(key); - emit modified(); + emit customDataModified(); } void CustomData::rename(const QString& oldKey, const QString& newKey) @@ -92,7 +94,7 @@ void CustomData::rename(const QString& oldKey, const QString& newKey) m_data.remove(oldKey); m_data.insert(newKey, data); - emit modified(); + emit customDataModified(); emit renamed(oldKey, newKey); } @@ -107,7 +109,7 @@ void CustomData::copyDataFrom(const CustomData* other) m_data = other->m_data; emit reset(); - emit modified(); + emit customDataModified(); } bool CustomData::operator==(const CustomData& other) const { @@ -126,7 +128,7 @@ void CustomData::clear() m_data.clear(); emit reset(); - emit modified(); + emit customDataModified(); } bool CustomData::isEmpty() const diff --git a/src/core/CustomData.h b/src/core/CustomData.h index 3a6b64bce..d085c9409 100644 --- a/src/core/CustomData.h +++ b/src/core/CustomData.h @@ -25,7 +25,7 @@ class CustomData : public QObject { -Q_OBJECT + Q_OBJECT public: explicit CustomData(QObject* parent = nullptr); @@ -45,9 +45,8 @@ public: bool operator==(const CustomData& other) const; bool operator!=(const CustomData& other) const; - signals: - void modified(); + void customDataModified(); void aboutToBeAdded(const QString& key); void added(const QString& key); void aboutToBeRemoved(const QString& key); diff --git a/src/core/Database.cpp b/src/core/Database.cpp index 8fe8d04c7..22484cb80 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -1,6 +1,6 @@ /* + * Copyright (C) 2018 KeePassXC Team * Copyright (C) 2010 Felix Geyer - * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,473 +18,166 @@ #include "Database.h" +#include "core/Clock.h" +#include "core/Group.h" +#include "core/Merger.h" +#include "core/Metadata.h" +#include "format/KeePass2Reader.h" +#include "format/KeePass2Writer.h" +#include "keys/FileKey.h" +#include "keys/PasswordKey.h" + #include +#include #include #include -#include #include #include -#include "cli/Utils.h" -#include "core/Group.h" -#include "core/Metadata.h" -#include "crypto/kdf/AesKdf.h" -#include "format/KeePass2.h" -#include "format/KeePass2Reader.h" -#include "format/KeePass2Writer.h" -#include "keys/PasswordKey.h" -#include "keys/FileKey.h" - -QHash Database::m_uuidMap; +QHash> Database::s_uuidMap; +QHash> Database::s_filePathMap; Database::Database() : m_metadata(new Metadata(this)) + , m_data() + , m_rootGroup(nullptr) , m_timer(new QTimer(this)) , m_emitModified(false) - , m_uuid(Uuid::random()) + , m_uuid(QUuid::createUuid()) { - m_data.cipher = KeePass2::CIPHER_AES; - m_data.compressionAlgo = CompressionGZip; - - // instantiate default AES-KDF with legacy KDBX3 flag set - // KDBX4+ will re-initialize the KDF using parameters read from the KDBX file - m_data.kdf = QSharedPointer::create(true); - m_data.kdf->randomizeSeed(); - m_data.hasKey = false; - setRootGroup(new Group()); - rootGroup()->setUuid(Uuid::random()); + rootGroup()->setUuid(QUuid::createUuid()); + rootGroup()->setName(tr("Root", "Root group name")); m_timer->setSingleShot(true); - m_uuidMap.insert(m_uuid, this); + s_uuidMap.insert(m_uuid, this); - connect(m_metadata, SIGNAL(modified()), this, SIGNAL(modifiedImmediate())); - connect(m_metadata, SIGNAL(nameTextChanged()), this, SIGNAL(nameTextChanged())); - connect(this, SIGNAL(modifiedImmediate()), this, SLOT(startModifiedTimer())); - connect(m_timer, SIGNAL(timeout()), SIGNAL(modified())); + connect(m_metadata, SIGNAL(metadataModified()), this, SLOT(markAsModified())); + connect(m_timer, SIGNAL(timeout()), SIGNAL(databaseModified())); + + m_modified = false; + m_emitModified = true; +} + +Database::Database(const QString& filePath) + : Database() +{ + setFilePath(filePath); } Database::~Database() { - m_uuidMap.remove(m_uuid); -} + s_uuidMap.remove(m_uuid); -Group* Database::rootGroup() -{ - return m_rootGroup; -} - -const Group* Database::rootGroup() const -{ - return m_rootGroup; -} - -void Database::setRootGroup(Group* group) -{ - Q_ASSERT(group); - - m_rootGroup = group; - m_rootGroup->setParent(this); -} - -Metadata* Database::metadata() -{ - return m_metadata; -} - -const Metadata* Database::metadata() const -{ - return m_metadata; -} - -Entry* Database::resolveEntry(const Uuid& uuid) -{ - return findEntryRecursive(uuid, m_rootGroup); -} - -Entry* Database::resolveEntry(const QString& text, EntryReferenceType referenceType) -{ - return findEntryRecursive(text, referenceType, m_rootGroup); -} - -Entry* Database::findEntryRecursive(const Uuid& uuid, Group* group) -{ - const QList entryList = group->entries(); - for (Entry* entry : entryList) { - if (entry->uuid() == uuid) { - return entry; - } - } - - const QList children = group->children(); - for (Group* child : children) { - Entry* result = findEntryRecursive(uuid, child); - if (result) { - return result; - } - } - - return nullptr; -} - -Entry* Database::findEntryRecursive(const QString& text, EntryReferenceType referenceType, Group* group) -{ - Q_ASSERT_X(referenceType != EntryReferenceType::Unknown, "Database::findEntryRecursive", - "Can't search entry with \"referenceType\" parameter equal to \"Unknown\""); - - bool found = false; - const QList entryList = group->entries(); - for (Entry* entry : entryList) { - switch (referenceType) { - case EntryReferenceType::Unknown: - return nullptr; - case EntryReferenceType::Title: - found = entry->title() == text; - break; - case EntryReferenceType::UserName: - found = entry->username() == text; - break; - case EntryReferenceType::Password: - found = entry->password() == text; - break; - case EntryReferenceType::Url: - found = entry->url() == text; - break; - case EntryReferenceType::Notes: - found = entry->notes() == text; - break; - case EntryReferenceType::Uuid: - found = entry->uuid() == Uuid::fromHex(text); - break; - case EntryReferenceType::CustomAttributes: - found = entry->attributes()->containsValue(text); - break; - } - - if (found) { - return entry; - } - } - - const QList children = group->children(); - for (Group* child : children) { - Entry* result = findEntryRecursive(text, referenceType, child); - if (result) { - return result; - } - } - - return nullptr; -} - -Group* Database::resolveGroup(const Uuid& uuid) -{ - return findGroupRecursive(uuid, m_rootGroup); -} - -Group* Database::findGroupRecursive(const Uuid& uuid, Group* group) -{ - if (group->uuid() == uuid) { - return group; - } - - const QList children = group->children(); - for (Group* child : children) { - Group* result = findGroupRecursive(uuid, child); - if (result) { - return result; - } - } - - return nullptr; -} - -QList Database::deletedObjects() -{ - return m_deletedObjects; -} - -void Database::addDeletedObject(const DeletedObject& delObj) -{ - Q_ASSERT(delObj.deletionTime.timeSpec() == Qt::UTC); - m_deletedObjects.append(delObj); -} - -void Database::addDeletedObject(const Uuid& uuid) -{ - DeletedObject delObj; - delObj.deletionTime = QDateTime::currentDateTimeUtc(); - delObj.uuid = uuid; - - addDeletedObject(delObj); -} - -Uuid Database::cipher() const -{ - return m_data.cipher; -} - -Database::CompressionAlgorithm Database::compressionAlgo() const -{ - return m_data.compressionAlgo; -} - -QByteArray Database::transformedMasterKey() const -{ - return m_data.transformedMasterKey; -} - -QByteArray Database::challengeResponseKey() const -{ - return m_data.challengeResponseKey; -} - -bool Database::challengeMasterSeed(const QByteArray& masterSeed) -{ - m_data.masterSeed = masterSeed; - return m_data.key.challenge(masterSeed, m_data.challengeResponseKey); -} - -void Database::setCipher(const Uuid& cipher) -{ - Q_ASSERT(!cipher.isNull()); - - m_data.cipher = cipher; -} - -void Database::setCompressionAlgo(Database::CompressionAlgorithm algo) -{ - Q_ASSERT(static_cast(algo) <= CompressionAlgorithmMax); - - m_data.compressionAlgo = algo; -} - -/** - * Set and transform a new encryption key. - * - * @param key key to set and transform - * @param updateChangedTime true to update database change time - * @param updateTransformSalt true to update the transform salt - * @return true on success - */ -bool Database::setKey(const CompositeKey& key, bool updateChangedTime, bool updateTransformSalt) -{ - if (updateTransformSalt) { - m_data.kdf->randomizeSeed(); - Q_ASSERT(!m_data.kdf->seed().isEmpty()); - } - - QByteArray oldTransformedMasterKey = m_data.transformedMasterKey; - QByteArray transformedMasterKey; - if (!key.transform(*m_data.kdf, transformedMasterKey)) { - return false; - } - - m_data.key = key; - m_data.transformedMasterKey = transformedMasterKey; - m_data.hasKey = true; - if (updateChangedTime) { - m_metadata->setMasterKeyChanged(QDateTime::currentDateTimeUtc()); - } - - if (oldTransformedMasterKey != m_data.transformedMasterKey) { - emit modifiedImmediate(); - } - - return true; -} - -bool Database::hasKey() const -{ - return m_data.hasKey; -} - -bool Database::verifyKey(const CompositeKey& key) const -{ - Q_ASSERT(hasKey()); - - if (!m_data.challengeResponseKey.isEmpty()) { - QByteArray result; - - if (!key.challenge(m_data.masterSeed, result)) { - // challenge failed, (YubiKey?) removed? - return false; - } - - if (m_data.challengeResponseKey != result) { - // wrong response from challenged device(s) - return false; - } - } - - return (m_data.key.rawKey() == key.rawKey()); -} - -QVariantMap& Database::publicCustomData() -{ - return m_data.publicCustomData; -} - -const QVariantMap& Database::publicCustomData() const -{ - return m_data.publicCustomData; -} - -void Database::setPublicCustomData(const QVariantMap& customData) -{ - m_data.publicCustomData = customData; -} - - -void Database::createRecycleBin() -{ - Group* recycleBin = Group::createRecycleBin(); - recycleBin->setParent(rootGroup()); - m_metadata->setRecycleBin(recycleBin); -} - -void Database::recycleEntry(Entry* entry) -{ - if (m_metadata->recycleBinEnabled()) { - if (!m_metadata->recycleBin()) { - createRecycleBin(); - } - entry->setGroup(metadata()->recycleBin()); - } else { - delete entry; + if (m_modified) { + emit databaseDiscarded(); } } -void Database::recycleGroup(Group* group) -{ - if (m_metadata->recycleBinEnabled()) { - if (!m_metadata->recycleBin()) { - createRecycleBin(); - } - group->setParent(metadata()->recycleBin()); - } else { - delete group; - } -} - -void Database::emptyRecycleBin() -{ - if (m_metadata->recycleBinEnabled() && m_metadata->recycleBin()) { - // destroying direct entries of the recycle bin - QList subEntries = m_metadata->recycleBin()->entries(); - for (Entry* entry : subEntries) { - delete entry; - } - // destroying direct subgroups of the recycle bin - QList subGroups = m_metadata->recycleBin()->children(); - for (Group* group : subGroups) { - delete group; - } - } -} - -void Database::merge(const Database* other) -{ - m_rootGroup->merge(other->rootGroup()); - - for (Uuid customIconId : other->metadata()->customIcons().keys()) { - QImage customIcon = other->metadata()->customIcon(customIconId); - if (!this->metadata()->containsCustomIcon(customIconId)) { - qDebug("Adding custom icon %s to database.", qPrintable(customIconId.toHex())); - this->metadata()->addCustomIcon(customIconId, customIcon); - } - } - - emit modified(); -} - -void Database::setEmitModified(bool value) -{ - if (m_emitModified && !value) { - m_timer->stop(); - } - - m_emitModified = value; -} - - -Uuid Database::uuid() +QUuid Database::uuid() const { return m_uuid; } -Database* Database::databaseByUuid(const Uuid& uuid) +/** + * Open the database from a previously specified file. + * Unless `readOnly` is set to false, the database will be opened in + * read-write mode and fall back to read-only if that is not possible. + * + * @param key composite key for unlocking the database + * @param readOnly open in read-only mode + * @param error error message in case of failure + * @return true on success + */ +bool Database::open(QSharedPointer key, QString* error, bool readOnly) { - return m_uuidMap.value(uuid, 0); + Q_ASSERT(!m_data.filePath.isEmpty()); + if (m_data.filePath.isEmpty()) { + return false; + } + return open(m_data.filePath, std::move(key), error, readOnly); } -void Database::startModifiedTimer() +/** + * Open the database from a file. + * Unless `readOnly` is set to false, the database will be opened in + * read-write mode and fall back to read-only if that is not possible. + * + * @param filePath path to the file + * @param key composite key for unlocking the database + * @param readOnly open in read-only mode + * @param error error message in case of failure + * @return true on success + */ +bool Database::open(const QString& filePath, QSharedPointer key, QString* error, bool readOnly) { - if (!m_emitModified) { - return; + if (isInitialized() && m_modified) { + emit databaseDiscarded(); } - if (m_timer->isActive()) { - m_timer->stop(); - } - m_timer->start(150); -} + setEmitModified(false); -const CompositeKey& Database::key() const -{ - return m_data.key; -} - -Database* Database::openDatabaseFile(QString fileName, CompositeKey key) -{ - - QFile dbFile(fileName); + QFile dbFile(filePath); if (!dbFile.exists()) { - qCritical("File %s does not exist.", qPrintable(fileName)); - return nullptr; + if (error) { + *error = tr("File %1 does not exist.").arg(filePath); + } + return false; } - if (!dbFile.open(QIODevice::ReadOnly)) { - qCritical("Unable to open file %s.", qPrintable(fileName)); - return nullptr; + + if (!readOnly && !dbFile.open(QIODevice::ReadWrite)) { + readOnly = true; + } + + if (!dbFile.isOpen() && !dbFile.open(QIODevice::ReadOnly)) { + if (error) { + *error = tr("Unable to open file %1.").arg(filePath); + } + return false; } KeePass2Reader reader; - Database* db = reader.readDatabase(&dbFile, key); - + bool ok = reader.readDatabase(&dbFile, std::move(key), this); if (reader.hasError()) { - qCritical("Error while parsing the database: %s", qPrintable(reader.errorString())); - return nullptr; + if (error) { + *error = tr("Error while reading the database: %1").arg(reader.errorString()); + } + return false; } - return db; + setReadOnly(readOnly); + setFilePath(filePath); + dbFile.close(); + + setInitialized(ok); + markAsClean(); + + setEmitModified(true); + return ok; } -Database* Database::unlockFromStdin(QString databaseFilename, QString keyFilename) +/** + * Save the database back to the file is has been opened from. + * This method behaves the same as its overloads. + * + * @see Database::save(const QString&, bool, bool, QString*) + * + * @param atomic Use atomic file transactions + * @param backup Backup the existing database file, if exists + * @param error error message in case of failure + * @return true on success + */ +bool Database::save(QString* error, bool atomic, bool backup) { - CompositeKey compositeKey; - QTextStream outputTextStream(stdout); - QTextStream errorTextStream(stderr); - - outputTextStream << QObject::tr("Insert password to unlock %1: ").arg(databaseFilename); - outputTextStream.flush(); - - QString line = Utils::getPassword(); - PasswordKey passwordKey; - passwordKey.setPassword(line); - compositeKey.addKey(passwordKey); - - if (!keyFilename.isEmpty()) { - FileKey fileKey; - QString errorMessage; - if (!fileKey.load(keyFilename, &errorMessage)) { - errorTextStream << QObject::tr("Failed to load key file %1 : %2").arg(keyFilename, errorMessage); - errorTextStream << endl; - return nullptr; + Q_ASSERT(!m_data.filePath.isEmpty()); + if (m_data.filePath.isEmpty()) { + if (error) { + *error = tr("Could not save, database has no file name."); } - compositeKey.addKey(fileKey); + return false; } - return Database::openDatabaseFile(databaseFilename, compositeKey); + return save(m_data.filePath, error, atomic, backup); } /** @@ -501,18 +194,22 @@ Database* Database::unlockFromStdin(QString databaseFilename, QString keyFilenam * @param filePath Absolute path of the file to save * @param atomic Use atomic file transactions * @param backup Backup the existing database file, if exists - * @return error string, if any + * @param error error message in case of failure + * @return true on success */ -QString Database::saveToFile(QString filePath, bool atomic, bool backup) +bool Database::save(const QString& filePath, QString* error, bool atomic, bool backup) { - QString error; + Q_ASSERT(!m_data.isReadOnly); + if (m_data.isReadOnly) { + return false; + } + if (atomic) { QSaveFile saveFile(filePath); if (saveFile.open(QIODevice::WriteOnly)) { // write the database to the file - error = writeDatabase(&saveFile); - if (!error.isEmpty()) { - return error; + if (!writeDatabase(&saveFile, error)) { + return false; } if (backup) { @@ -521,17 +218,19 @@ QString Database::saveToFile(QString filePath, bool atomic, bool backup) if (saveFile.commit()) { // successfully saved database file - return {}; + setFilePath(filePath); + return true; } } - error = saveFile.errorString(); + if (error) { + *error = saveFile.errorString(); + } } else { QTemporaryFile tempFile; if (tempFile.open()) { // write the database to the file - error = writeDatabase(&tempFile); - if (!error.isEmpty()) { - return error; + if (!writeDatabase(&tempFile, error)) { + return false; } tempFile.close(); // flush to disk @@ -546,24 +245,37 @@ QString Database::saveToFile(QString filePath, bool atomic, bool backup) // workaround to make this workaround work, see: https://bugreports.qt.io/browse/QTBUG-64008 if (tempFile.copy(filePath)) { // successfully saved database file - return {}; + return true; } #else if (tempFile.rename(filePath)) { // successfully saved database file tempFile.setAutoRemove(false); - return {}; + setFilePath(filePath); + return true; } #endif } - error = tempFile.errorString(); + if (error) { + *error = tempFile.errorString(); + } } + // Saving failed - return error; + return false; } -QString Database::writeDatabase(QIODevice* device) +bool Database::writeDatabase(QIODevice* device, QString* error) { + Q_ASSERT(!m_data.isReadOnly); + if (m_data.isReadOnly) { + if (error) { + *error = tr("File cannot be written as it is opened in read-only mode."); + } + return false; + } + + QByteArray oldTransformedKey = m_data.transformedMasterKey; KeePass2Writer writer; setEmitModified(false); writer.writeDatabase(device, this); @@ -571,28 +283,443 @@ QString Database::writeDatabase(QIODevice* device) if (writer.hasError()) { // the writer failed - return writer.errorString(); + if (error) { + *error = writer.errorString(); + } + return false; } - return {}; + + Q_ASSERT(!m_data.transformedMasterKey.isEmpty()); + Q_ASSERT(m_data.transformedMasterKey != oldTransformedKey); + if (m_data.transformedMasterKey.isEmpty() || m_data.transformedMasterKey == oldTransformedKey) { + if (error) { + *error = tr("Key not transformed. This is a bug, please report it to the developers!"); + } + return false; + } + + markAsClean(); + return true; } /** * Remove the old backup and replace it with a new one - * backups are named .old.kdbx + * backups are named .old. * * @param filePath Path to the file to backup - * @return + * @return true on success */ - -bool Database::backupDatabase(QString filePath) +bool Database::backupDatabase(const QString& filePath) { - QString backupFilePath = filePath; - auto re = QRegularExpression("\\.kdbx$|(?setParent(this); +} + +Metadata* Database::metadata() +{ + return m_metadata; +} + +const Metadata* Database::metadata() const +{ + return m_metadata; +} + +QString Database::filePath() const +{ + return m_data.filePath; +} + +void Database::setFilePath(const QString& filePath) +{ + if (filePath == m_data.filePath) { + return; + } + + if (s_filePathMap.contains(m_data.filePath)) { + s_filePathMap.remove(m_data.filePath); + } + QString oldPath = m_data.filePath; + m_data.filePath = filePath; + s_filePathMap.insert(m_data.filePath, this); + + emit filePathChanged(oldPath, filePath); +} + +QList Database::deletedObjects() +{ + return m_deletedObjects; +} + +const QList& Database::deletedObjects() const +{ + return m_deletedObjects; +} + +bool Database::containsDeletedObject(const QUuid& uuid) const +{ + for (const DeletedObject& currentObject : m_deletedObjects) { + if (currentObject.uuid == uuid) { + return true; + } + } + return false; +} + +bool Database::containsDeletedObject(const DeletedObject& object) const +{ + for (const DeletedObject& currentObject : m_deletedObjects) { + if (currentObject.uuid == object.uuid) { + return true; + } + } + return false; +} + +void Database::setDeletedObjects(const QList& delObjs) +{ + if (m_deletedObjects == delObjs) { + return; + } + m_deletedObjects = delObjs; +} + +void Database::addDeletedObject(const DeletedObject& delObj) +{ + Q_ASSERT(delObj.deletionTime.timeSpec() == Qt::UTC); + m_deletedObjects.append(delObj); +} + +void Database::addDeletedObject(const QUuid& uuid) +{ + DeletedObject delObj; + delObj.deletionTime = Clock::currentDateTimeUtc(); + delObj.uuid = uuid; + + addDeletedObject(delObj); +} + +const QUuid& Database::cipher() const +{ + return m_data.cipher; +} + +Database::CompressionAlgorithm Database::compressionAlgorithm() const +{ + return m_data.compressionAlgorithm; +} + +QByteArray Database::transformedMasterKey() const +{ + return m_data.transformedMasterKey; +} + +QByteArray Database::challengeResponseKey() const +{ + return m_data.challengeResponseKey; +} + +bool Database::challengeMasterSeed(const QByteArray& masterSeed) +{ + if (m_data.key) { + m_data.masterSeed = masterSeed; + return m_data.key->challenge(masterSeed, m_data.challengeResponseKey); + } + return false; +} + +void Database::setCipher(const QUuid& cipher) +{ + Q_ASSERT(!cipher.isNull()); + + m_data.cipher = cipher; +} + +void Database::setCompressionAlgorithm(Database::CompressionAlgorithm algo) +{ + Q_ASSERT(static_cast(algo) <= CompressionAlgorithmMax); + + m_data.compressionAlgorithm = algo; +} + +/** + * Set and transform a new encryption key. + * + * @param key key to set and transform or nullptr to reset the key + * @param updateChangedTime true to update database change time + * @param updateTransformSalt true to update the transform salt + * @param transformKey trigger the KDF after setting the key + * @return true on success + */ +bool Database::setKey(const QSharedPointer& key, + bool updateChangedTime, + bool updateTransformSalt, + bool transformKey) +{ + Q_ASSERT(!m_data.isReadOnly); + + if (!key) { + m_data.key.reset(); + m_data.transformedMasterKey = {}; + m_data.hasKey = false; + return true; + } + + if (updateTransformSalt) { + m_data.kdf->randomizeSeed(); + Q_ASSERT(!m_data.kdf->seed().isEmpty()); + } + + QByteArray oldTransformedMasterKey = m_data.transformedMasterKey; + QByteArray transformedMasterKey; + if (!transformKey) { + transformedMasterKey = oldTransformedMasterKey; + } else if (!key->transform(*m_data.kdf, transformedMasterKey)) { + return false; + } + + m_data.key = key; + m_data.transformedMasterKey = transformedMasterKey; + m_data.hasKey = true; + if (updateChangedTime) { + m_metadata->setMasterKeyChanged(Clock::currentDateTimeUtc()); + } + + if (oldTransformedMasterKey != m_data.transformedMasterKey) { + markAsModified(); + } + + return true; +} + +bool Database::hasKey() const +{ + return m_data.hasKey; +} + +bool Database::verifyKey(const QSharedPointer& key) const +{ + Q_ASSERT(hasKey()); + + if (!m_data.challengeResponseKey.isEmpty()) { + QByteArray result; + + if (!key->challenge(m_data.masterSeed, result)) { + // challenge failed, (YubiKey?) removed? + return false; + } + + if (m_data.challengeResponseKey != result) { + // wrong response from challenged device(s) + return false; + } + } + + return (m_data.key->rawKey() == key->rawKey()); +} + +QVariantMap& Database::publicCustomData() +{ + return m_data.publicCustomData; +} + +const QVariantMap& Database::publicCustomData() const +{ + return m_data.publicCustomData; +} + +void Database::setPublicCustomData(const QVariantMap& customData) +{ + Q_ASSERT(!m_data.isReadOnly); + m_data.publicCustomData = customData; +} + +void Database::createRecycleBin() +{ + Q_ASSERT(!m_data.isReadOnly); + Group* recycleBin = Group::createRecycleBin(); + recycleBin->setParent(rootGroup()); + m_metadata->setRecycleBin(recycleBin); +} + +void Database::recycleEntry(Entry* entry) +{ + Q_ASSERT(!m_data.isReadOnly); + if (m_metadata->recycleBinEnabled()) { + if (!m_metadata->recycleBin()) { + createRecycleBin(); + } + entry->setGroup(metadata()->recycleBin()); + } else { + delete entry; + } +} + +void Database::recycleGroup(Group* group) +{ + Q_ASSERT(!m_data.isReadOnly); + if (m_metadata->recycleBinEnabled()) { + if (!m_metadata->recycleBin()) { + createRecycleBin(); + } + group->setParent(metadata()->recycleBin()); + } else { + delete group; + } +} + +void Database::emptyRecycleBin() +{ + Q_ASSERT(!m_data.isReadOnly); + if (m_metadata->recycleBinEnabled() && m_metadata->recycleBin()) { + // destroying direct entries of the recycle bin + QList subEntries = m_metadata->recycleBin()->entries(); + for (Entry* entry : subEntries) { + delete entry; + } + // destroying direct subgroups of the recycle bin + QList subGroups = m_metadata->recycleBin()->children(); + for (Group* group : subGroups) { + delete group; + } + } +} + +void Database::setEmitModified(bool value) +{ + if (m_emitModified && !value) { + m_timer->stop(); + } + + m_emitModified = value; +} + +bool Database::isModified() const +{ + return m_modified; +} + +void Database::markAsModified() +{ + if (isReadOnly()) { + return; + } + + m_modified = true; + if (m_emitModified) { + startModifiedTimer(); + } +} + +void Database::markAsClean() +{ + bool emitSignal = m_modified; + m_modified = false; + if (emitSignal) { + emit databaseSaved(); + } +} + +/** + * @param uuid UUID of the database + * @return pointer to the database or nullptr if no such database exists + */ +Database* Database::databaseByUuid(const QUuid& uuid) +{ + return s_uuidMap.value(uuid, nullptr); +} + +/** + * @param filePath file path of the database + * @return pointer to the database or nullptr if the database has not been opened + */ +Database* Database::databaseByFilePath(const QString& filePath) +{ + return s_filePathMap.value(filePath, nullptr); +} + +void Database::startModifiedTimer() +{ + Q_ASSERT(!m_data.isReadOnly); + + if (!m_emitModified) { + return; + } + + if (m_timer->isActive()) { + m_timer->stop(); + } + m_timer->start(150); +} + +QSharedPointer Database::key() const +{ + return m_data.key; +} + QSharedPointer Database::kdf() const { return m_data.kdf; @@ -600,20 +727,26 @@ QSharedPointer Database::kdf() const void Database::setKdf(QSharedPointer kdf) { + Q_ASSERT(!m_data.isReadOnly); m_data.kdf = std::move(kdf); } -bool Database::changeKdf(QSharedPointer kdf) +bool Database::changeKdf(const QSharedPointer& kdf) { + Q_ASSERT(!m_data.isReadOnly); + kdf->randomizeSeed(); QByteArray transformedMasterKey; - if (!m_data.key.transform(*kdf, transformedMasterKey)) { + if (!m_data.key) { + m_data.key = QSharedPointer::create(); + } + if (!m_data.key->transform(*kdf, transformedMasterKey)) { return false; } setKdf(kdf); m_data.transformedMasterKey = transformedMasterKey; - emit modifiedImmediate(); + markAsModified(); return true; } diff --git a/src/core/Database.h b/src/core/Database.h index 583ed3cac..8df2b9317 100644 --- a/src/core/Database.h +++ b/src/core/Database.h @@ -1,6 +1,6 @@ /* + * Copyright (C) 2018 KeePassXC Team * Copyright (C) 2010 Felix Geyer - * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,9 +22,12 @@ #include #include #include +#include +#include "config-keepassx.h" +#include "crypto/kdf/AesKdf.h" #include "crypto/kdf/Kdf.h" -#include "core/Uuid.h" +#include "format/KeePass2.h" #include "keys/CompositeKey.h" class Entry; @@ -36,8 +39,12 @@ class QIODevice; struct DeletedObject { - Uuid uuid; + QUuid uuid; QDateTime deletionTime; + bool operator==(const DeletedObject& other) const + { + return uuid == other.uuid && deletionTime == other.deletionTime; + } }; Q_DECLARE_TYPEINFO(DeletedObject, Q_MOVABLE_TYPE); @@ -54,78 +61,77 @@ public: }; static const quint32 CompressionAlgorithmMax = CompressionGZip; - struct DatabaseData - { - Uuid cipher; - CompressionAlgorithm compressionAlgo; - QByteArray transformedMasterKey; - QSharedPointer kdf; - CompositeKey key; - bool hasKey; - QByteArray masterSeed; - QByteArray challengeResponseKey; - QVariantMap publicCustomData; - }; - Database(); + explicit Database(const QString& filePath); ~Database() override; - Group* rootGroup(); - const Group* rootGroup() const; - /** - * Sets group as the root group and takes ownership of it. - * Warning: Be careful when calling this method as it doesn't - * emit any notifications so e.g. models aren't updated. - * The caller is responsible for cleaning up the previous - root group. - */ - void setRootGroup(Group* group); + bool open(QSharedPointer key, QString* error = nullptr, bool readOnly = false); + bool open(const QString& filePath, + QSharedPointer key, + QString* error = nullptr, + bool readOnly = false); + bool save(QString* error = nullptr, bool atomic = true, bool backup = false); + bool save(const QString& filePath, QString* error = nullptr, bool atomic = true, bool backup = false); + + bool isInitialized() const; + void setInitialized(bool initialized); + bool isModified() const; + void setEmitModified(bool value); + bool isReadOnly() const; + void setReadOnly(bool readOnly); + + QUuid uuid() const; + QString filePath() const; + void setFilePath(const QString& filePath); Metadata* metadata(); const Metadata* metadata() const; - Entry* resolveEntry(const Uuid& uuid); - Entry* resolveEntry(const QString& text, EntryReferenceType referenceType); - Group* resolveGroup(const Uuid& uuid); - QList deletedObjects(); - void addDeletedObject(const DeletedObject& delObj); - void addDeletedObject(const Uuid& uuid); - - Uuid cipher() const; - Database::CompressionAlgorithm compressionAlgo() const; - QSharedPointer kdf() const; - QByteArray transformedMasterKey() const; - const CompositeKey& key() const; - QByteArray challengeResponseKey() const; - bool challengeMasterSeed(const QByteArray& masterSeed); - - void setCipher(const Uuid& cipher); - void setCompressionAlgo(Database::CompressionAlgorithm algo); - void setKdf(QSharedPointer kdf); - bool setKey(const CompositeKey& key, bool updateChangedTime = true, - bool updateTransformSalt = false); - bool hasKey() const; - bool verifyKey(const CompositeKey& key) const; + Group* rootGroup(); + const Group* rootGroup() const; + void setRootGroup(Group* group); QVariantMap& publicCustomData(); const QVariantMap& publicCustomData() const; void setPublicCustomData(const QVariantMap& customData); - void recycleEntry(Entry* entry); + void recycleGroup(Group* group); + void recycleEntry(Entry* entry); void emptyRecycleBin(); - void setEmitModified(bool value); - void merge(const Database* other); - QString saveToFile(QString filePath, bool atomic = true, bool backup = false); + QList deletedObjects(); + const QList& deletedObjects() const; + void addDeletedObject(const DeletedObject& delObj); + void addDeletedObject(const QUuid& uuid); + bool containsDeletedObject(const QUuid& uuid) const; + bool containsDeletedObject(const DeletedObject& uuid) const; + void setDeletedObjects(const QList& delObjs); - /** - * Returns a unique id that is only valid as long as the Database exists. - */ - Uuid uuid(); - bool changeKdf(QSharedPointer kdf); + bool hasKey() const; + QSharedPointer key() const; + bool setKey(const QSharedPointer& key, + bool updateChangedTime = true, + bool updateTransformSalt = false, + bool transformKey = true); + QByteArray challengeResponseKey() const; + bool challengeMasterSeed(const QByteArray& masterSeed); + bool verifyKey(const QSharedPointer& key) const; + const QUuid& cipher() const; + void setCipher(const QUuid& cipher); + Database::CompressionAlgorithm compressionAlgorithm() const; + void setCompressionAlgorithm(Database::CompressionAlgorithm algo); - static Database* databaseByUuid(const Uuid& uuid); - static Database* openDatabaseFile(QString fileName, CompositeKey key); - static Database* unlockFromStdin(QString databaseFilename, QString keyFilename = QString("")); + QSharedPointer kdf() const; + void setKdf(QSharedPointer kdf); + bool changeKdf(const QSharedPointer& kdf); + QByteArray transformedMasterKey() const; + + static Database* databaseByUuid(const QUuid& uuid); + static Database* databaseByFilePath(const QString& filePath); + +public slots: + void markAsModified(); + void markAsClean(); signals: + void filePathChanged(const QString& oldPath, const QString& newPath); void groupDataChanged(Group* group); void groupAboutToAdd(Group* group, int index); void groupAdded(); @@ -133,31 +139,51 @@ signals: void groupRemoved(); void groupAboutToMove(Group* group, Group* toGroup, int index); void groupMoved(); - void nameTextChanged(); - void modified(); - void modifiedImmediate(); + void databaseModified(); + void databaseSaved(); + void databaseDiscarded(); private slots: void startModifiedTimer(); private: - Entry* findEntryRecursive(const Uuid& uuid, Group* group); - Entry* findEntryRecursive(const QString& text, EntryReferenceType referenceType, Group* group); - Group* findGroupRecursive(const Uuid& uuid, Group* group); + struct DatabaseData + { + QString filePath; + bool isReadOnly = false; + QUuid cipher = KeePass2::CIPHER_AES256; + CompressionAlgorithm compressionAlgorithm = CompressionGZip; + QByteArray transformedMasterKey; + QSharedPointer kdf = QSharedPointer::create(true); + QSharedPointer key; + bool hasKey = false; + QByteArray masterSeed; + QByteArray challengeResponseKey; + QVariantMap publicCustomData; + + DatabaseData() + { + kdf->randomizeSeed(); + } + }; void createRecycleBin(); - QString writeDatabase(QIODevice* device); - bool backupDatabase(QString filePath); + + bool writeDatabase(QIODevice* device, QString* error = nullptr); + bool backupDatabase(const QString& filePath); Metadata* const m_metadata; + DatabaseData m_data; Group* m_rootGroup; QList m_deletedObjects; - QTimer* m_timer; - DatabaseData m_data; + QPointer m_timer; + bool m_initialized = false; + bool m_modified = false; bool m_emitModified; - Uuid m_uuid; - static QHash m_uuidMap; + QUuid m_uuid; + static QHash> s_uuidMap; + static QHash> s_filePathMap; }; #endif // KEEPASSX_DATABASE_H diff --git a/src/core/DatabaseIcons.cpp b/src/core/DatabaseIcons.cpp index 4e62f79e4..6219d41f5 100644 --- a/src/core/DatabaseIcons.cpp +++ b/src/core/DatabaseIcons.cpp @@ -22,6 +22,10 @@ DatabaseIcons* DatabaseIcons::m_instance(nullptr); const int DatabaseIcons::IconCount(69); const int DatabaseIcons::ExpiredIconIndex(45); +const int DatabaseIcons::SharedIconIndex(1); +const int DatabaseIcons::UnsharedIconIndex(45); + +// clang-format off const char* const DatabaseIcons::m_indexToName[] = { "C00_Password.png", "C01_Package_Network.png", @@ -93,6 +97,7 @@ const char* const DatabaseIcons::m_indexToName[] = { "C67_Certificate.png", "C68_BlackBerry.png" }; +// clang-format on QImage DatabaseIcons::icon(int index) { @@ -103,8 +108,7 @@ QImage DatabaseIcons::icon(int index) if (!m_iconCache[index].isNull()) { return m_iconCache[index]; - } - else { + } else { QString iconPath = QString("icons/database/").append(m_indexToName[index]); QImage icon(filePath()->dataPath(iconPath)); diff --git a/src/core/DatabaseIcons.h b/src/core/DatabaseIcons.h index a1d9480b6..ecd38fd8a 100644 --- a/src/core/DatabaseIcons.h +++ b/src/core/DatabaseIcons.h @@ -33,6 +33,8 @@ public: static const int IconCount; static const int ExpiredIconIndex; + static const int SharedIconIndex; + static const int UnsharedIconIndex; private: DatabaseIcons(); @@ -46,7 +48,8 @@ private: Q_DISABLE_COPY(DatabaseIcons) }; -inline DatabaseIcons* databaseIcons() { +inline DatabaseIcons* databaseIcons() +{ return DatabaseIcons::instance(); } diff --git a/src/core/Endian.h b/src/core/Endian.h index cd01eb483..c2d87ee3f 100644 --- a/src/core/Endian.h +++ b/src/core/Endian.h @@ -20,59 +20,55 @@ #define KEEPASSX_ENDIAN_H #include +#include #include #include -#include namespace Endian { -template -SizedQInt bytesToSizedInt(const QByteArray& ba, QSysInfo::Endian byteOrder) -{ - Q_ASSERT(ba.size() == sizeof(SizedQInt)); + template SizedQInt bytesToSizedInt(const QByteArray& ba, QSysInfo::Endian byteOrder) + { + Q_ASSERT(ba.size() == sizeof(SizedQInt)); - if (byteOrder == QSysInfo::LittleEndian) { - return qFromLittleEndian(reinterpret_cast(ba.constData())); - } - return qFromBigEndian(reinterpret_cast(ba.constData())); -} - -template -SizedQInt readSizedInt(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) -{ - QByteArray ba = device->read(sizeof(SizedQInt)); - - if (ba.size() != sizeof(SizedQInt)) { - *ok = false; - return 0; - } - *ok = true; - return bytesToSizedInt(ba, byteOrder); -} - -template -QByteArray sizedIntToBytes(SizedQInt num, QSysInfo::Endian byteOrder) -{ - QByteArray ba; - ba.resize(sizeof(SizedQInt)); - - if (byteOrder == QSysInfo::LittleEndian) { - qToLittleEndian(num, reinterpret_cast(ba.data())); - } else { - qToBigEndian(num, reinterpret_cast(ba.data())); + if (byteOrder == QSysInfo::LittleEndian) { + return qFromLittleEndian(reinterpret_cast(ba.constData())); + } + return qFromBigEndian(reinterpret_cast(ba.constData())); } - return ba; -} + template SizedQInt readSizedInt(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) + { + QByteArray ba = device->read(sizeof(SizedQInt)); -template -bool writeSizedInt(SizedQInt num, QIODevice* device, QSysInfo::Endian byteOrder) -{ - QByteArray ba = sizedIntToBytes(num, byteOrder); - qint64 bytesWritten = device->write(ba); - return (bytesWritten == ba.size()); -} + if (ba.size() != sizeof(SizedQInt)) { + *ok = false; + return 0; + } + *ok = true; + return bytesToSizedInt(ba, byteOrder); + } + + template QByteArray sizedIntToBytes(SizedQInt num, QSysInfo::Endian byteOrder) + { + QByteArray ba; + ba.resize(sizeof(SizedQInt)); + + if (byteOrder == QSysInfo::LittleEndian) { + qToLittleEndian(num, reinterpret_cast(ba.data())); + } else { + qToBigEndian(num, reinterpret_cast(ba.data())); + } + + return ba; + } + + template bool writeSizedInt(SizedQInt num, QIODevice* device, QSysInfo::Endian byteOrder) + { + QByteArray ba = sizedIntToBytes(num, byteOrder); + qint64 bytesWritten = device->write(ba); + return (bytesWritten == ba.size()); + } } // namespace Endian diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index 800de0b06..2ad73b055 100644 --- a/src/core/Entry.cpp +++ b/src/core/Entry.cpp @@ -19,48 +19,49 @@ #include "config-keepassx.h" +#include "core/Clock.h" #include "core/Database.h" #include "core/DatabaseIcons.h" #include "core/Group.h" #include "core/Metadata.h" +#include "core/Tools.h" #include "totp/totp.h" +#include #include +#include const int Entry::DefaultIconNumber = 0; const int Entry::ResolveMaximumDepth = 10; const QString Entry::AutoTypeSequenceUsername = "{USERNAME}{ENTER}"; const QString Entry::AutoTypeSequencePassword = "{PASSWORD}{ENTER}"; - Entry::Entry() : m_attributes(new EntryAttributes(this)) , m_attachments(new EntryAttachments(this)) , m_autoTypeAssociations(new AutoTypeAssociations(this)) , m_customData(new CustomData(this)) - , m_tmpHistoryItem(nullptr) , m_modifiedSinceBegin(false) , m_updateTimeinfo(true) { m_data.iconNumber = DefaultIconNumber; m_data.autoTypeEnabled = true; m_data.autoTypeObfuscation = 0; - m_data.totpStep = Totp::defaultStep; - m_data.totpDigits = Totp::defaultDigits; - connect(m_attributes, SIGNAL(modified()), SLOT(updateTotp())); - connect(m_attributes, SIGNAL(modified()), this, SIGNAL(modified())); + connect(m_attributes, SIGNAL(entryAttributesModified()), SLOT(updateTotp())); + connect(m_attributes, SIGNAL(entryAttributesModified()), this, SIGNAL(entryModified())); connect(m_attributes, SIGNAL(defaultKeyModified()), SLOT(emitDataChanged())); - connect(m_attachments, SIGNAL(modified()), this, SIGNAL(modified())); - connect(m_autoTypeAssociations, SIGNAL(modified()), SIGNAL(modified())); - connect(m_customData, SIGNAL(modified()), this, SIGNAL(modified())); + connect(m_attachments, SIGNAL(entryAttachmentsModified()), this, SIGNAL(entryModified())); + connect(m_autoTypeAssociations, SIGNAL(modified()), SIGNAL(entryModified())); + connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(entryModified())); - connect(this, SIGNAL(modified()), SLOT(updateTimeinfo())); - connect(this, SIGNAL(modified()), SLOT(updateModifiedSinceBegin())); + connect(this, SIGNAL(entryModified()), SLOT(updateTimeinfo())); + connect(this, SIGNAL(entryModified()), SLOT(updateModifiedSinceBegin())); } Entry::~Entry() { + setUpdateTimeinfo(false); if (m_group) { m_group->removeEntry(this); @@ -76,27 +77,56 @@ template inline bool Entry::set(T& property, const T& value) { if (property != value) { property = value; - emit modified(); + emit entryModified(); return true; } - else { - return false; - } + return false; } void Entry::updateTimeinfo() { if (m_updateTimeinfo) { - m_data.timeInfo.setLastModificationTime(QDateTime::currentDateTimeUtc()); - m_data.timeInfo.setLastAccessTime(QDateTime::currentDateTimeUtc()); + m_data.timeInfo.setLastModificationTime(Clock::currentDateTimeUtc()); + m_data.timeInfo.setLastAccessTime(Clock::currentDateTimeUtc()); } } +bool Entry::canUpdateTimeinfo() const +{ + return m_updateTimeinfo; +} + void Entry::setUpdateTimeinfo(bool value) { m_updateTimeinfo = value; } +QString Entry::buildReference(const QUuid& uuid, const QString& field) +{ + Q_ASSERT(EntryAttributes::DefaultAttributes.count(field) > 0); + + QString uuidStr = Tools::uuidToHex(uuid).toUpper(); + QString shortField; + + if (field == EntryAttributes::TitleKey) { + shortField = "T"; + } else if (field == EntryAttributes::UserNameKey) { + shortField = "U"; + } else if (field == EntryAttributes::PasswordKey) { + shortField = "P"; + } else if (field == EntryAttributes::URLKey) { + shortField = "A"; + } else if (field == EntryAttributes::NotesKey) { + shortField = "N"; + } + + if (shortField.isEmpty()) { + return {}; + } + + return QString("{REF:%1@I:%2}").arg(shortField, uuidStr); +} + EntryReferenceType Entry::referenceType(const QString& referenceStr) { const QString referenceLowerStr = referenceStr.toLower(); @@ -112,7 +142,7 @@ EntryReferenceType Entry::referenceType(const QString& referenceStr) } else if (referenceLowerStr == QLatin1String("n")) { result = EntryReferenceType::Notes; } else if (referenceLowerStr == QLatin1String("i")) { - result = EntryReferenceType::Uuid; + result = EntryReferenceType::QUuid; } else if (referenceLowerStr == QLatin1String("o")) { result = EntryReferenceType::CustomAttributes; } @@ -120,23 +150,26 @@ EntryReferenceType Entry::referenceType(const QString& referenceStr) return result; } -Uuid Entry::uuid() const +const QUuid& Entry::uuid() const { return m_uuid; } +const QString Entry::uuidToHex() const +{ + return Tools::uuidToHex(m_uuid); +} + QImage Entry::icon() const { if (m_data.customIcon.isNull()) { return databaseIcons()->icon(m_data.iconNumber); - } - else { + } else { Q_ASSERT(database()); if (database()) { return database()->metadata()->customIcon(m_data.customIcon); - } - else { + } else { return QImage(); } } @@ -147,16 +180,12 @@ QPixmap Entry::iconPixmap() const if (m_data.customIcon.isNull()) { return databaseIcons()->iconPixmap(m_data.iconNumber); } - else { - Q_ASSERT(database()); - if (database()) { - return database()->metadata()->customIconPixmap(m_data.customIcon); - } - else { - return QPixmap(); - } + Q_ASSERT(database()); + if (database()) { + return database()->metadata()->customIconPixmap(m_data.customIcon); } + return QPixmap(); } QPixmap Entry::iconScaledPixmap() const @@ -165,11 +194,8 @@ QPixmap Entry::iconScaledPixmap() const // built-in icons are 16x16 so don't need to be scaled return databaseIcons()->iconPixmap(m_data.iconNumber); } - else { - Q_ASSERT(database()); - - return database()->metadata()->customIconScaledPixmap(m_data.customIcon); - } + Q_ASSERT(database()); + return database()->metadata()->customIconScaledPixmap(m_data.customIcon); } int Entry::iconNumber() const @@ -177,7 +203,7 @@ int Entry::iconNumber() const return m_data.iconNumber; } -Uuid Entry::iconUuid() const +const QUuid& Entry::iconUuid() const { return m_data.customIcon; } @@ -202,7 +228,7 @@ QString Entry::tags() const return m_data.tags; } -TimeInfo Entry::timeInfo() const +const TimeInfo& Entry::timeInfo() const { return m_data.timeInfo; } @@ -305,9 +331,23 @@ QString Entry::notes() const return m_attributes->value(EntryAttributes::NotesKey); } +QString Entry::attribute(const QString& key) const +{ + return m_attributes->value(key); +} + bool Entry::isExpired() const { - return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < QDateTime::currentDateTimeUtc(); + return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Clock::currentDateTimeUtc(); +} + +bool Entry::isAttributeReferenceOf(const QString& key, const QUuid& uuid) const +{ + if (!m_attributes->isReference(key)) { + return false; + } + + return m_attributes->value(key).contains(Tools::uuidToHex(uuid), Qt::CaseInsensitive); } bool Entry::hasReferences() const @@ -321,6 +361,26 @@ bool Entry::hasReferences() const return false; } +bool Entry::hasReferencesTo(const QUuid& uuid) const +{ + const QList keyList = EntryAttributes::DefaultAttributes; + for (const QString& key : keyList) { + if (isAttributeReferenceOf(key, uuid)) { + return true; + } + } + return false; +} + +void Entry::replaceReferencesWithValues(const Entry* other) +{ + for (const QString& key : EntryAttributes::DefaultAttributes) { + if (isAttributeReferenceOf(key, other->uuid())) { + setDefaultAttribute(key, other->attribute(key)); + } + } +} + EntryAttributes* Entry::attributes() { return m_attributes; @@ -353,77 +413,55 @@ const CustomData* Entry::customData() const bool Entry::hasTotp() const { - return m_attributes->hasKey("TOTP Seed") || m_attributes->hasKey("otp"); + return !m_data.totpSettings.isNull(); } QString Entry::totp() const { if (hasTotp()) { - QString seed = totpSeed(); - quint64 time = QDateTime::currentDateTime().toTime_t(); - QString output = Totp::generateTotp(seed.toLatin1(), time, m_data.totpDigits, m_data.totpStep); - - return QString(output); + return Totp::generateTotp(m_data.totpSettings); } return {}; } -void Entry::setTotp(const QString& seed, quint8& step, quint8& digits) +void Entry::setTotp(QSharedPointer settings) { beginUpdate(); - if (step == 0) { - step = Totp::defaultStep; - } - - if (digits == 0) { - digits = Totp::defaultDigits; - } - QString data; - - const Totp::Encoder & enc = Totp::encoders.value(digits, Totp::defaultEncoder); - - if (m_attributes->hasKey("otp")) { - data = QString("key=%1&step=%2&size=%3").arg(seed).arg(step).arg(enc.digits == 0 ? digits : enc.digits); - if (!enc.name.isEmpty()) { - data.append("&enocder=").append(enc.name); - } - m_attributes->set("otp", data, true); + if (settings->key.isEmpty()) { + m_data.totpSettings.reset(); + m_attributes->remove(Totp::ATTRIBUTE_OTP); + m_attributes->remove(Totp::ATTRIBUTE_SEED); + m_attributes->remove(Totp::ATTRIBUTE_SETTINGS); } else { - m_attributes->set("TOTP Seed", seed, true); - if (!enc.shortName.isEmpty()) { - data = QString("%1;%2").arg(step).arg(enc.shortName); + m_data.totpSettings = std::move(settings); + + auto text = Totp::writeSettings(m_data.totpSettings, title(), username()); + if (m_attributes->hasKey(Totp::ATTRIBUTE_OTP)) { + m_attributes->set(Totp::ATTRIBUTE_OTP, text, true); } else { - data = QString("%1;%2").arg(step).arg(digits); + m_attributes->set(Totp::ATTRIBUTE_SEED, m_data.totpSettings->key, true); + m_attributes->set(Totp::ATTRIBUTE_SETTINGS, text); } - m_attributes->set("TOTP Settings", data); } endUpdate(); } -QString Entry::totpSeed() const +void Entry::updateTotp() { - QString secret = ""; - - if (m_attributes->hasKey("otp")) { - secret = m_attributes->value("otp"); - } else if (m_attributes->hasKey("TOTP Seed")) { - secret = m_attributes->value("TOTP Seed"); + if (m_attributes->contains(Totp::ATTRIBUTE_SETTINGS)) { + m_data.totpSettings = Totp::parseSettings(m_attributes->value(Totp::ATTRIBUTE_SETTINGS), + m_attributes->value(Totp::ATTRIBUTE_SEED)); + } else if (m_attributes->contains(Totp::ATTRIBUTE_OTP)) { + m_data.totpSettings = Totp::parseSettings(m_attributes->value(Totp::ATTRIBUTE_OTP)); } - - return Totp::parseOtpString(secret, m_data.totpDigits, m_data.totpStep); } -quint8 Entry::totpStep() const +QSharedPointer Entry::totpSettings() const { - return m_data.totpStep; + return m_data.totpSettings; } -quint8 Entry::totpDigits() const -{ - return m_data.totpDigits; -} - -void Entry::setUuid(const Uuid& uuid) +void Entry::setUuid(const QUuid& uuid) { Q_ASSERT(!uuid.isNull()); set(m_uuid, uuid); @@ -435,14 +473,14 @@ void Entry::setIcon(int iconNumber) if (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull()) { m_data.iconNumber = iconNumber; - m_data.customIcon = Uuid(); + m_data.customIcon = QUuid(); - emit modified(); + emit entryModified(); emitDataChanged(); } } -void Entry::setIcon(const Uuid& uuid) +void Entry::setIcon(const QUuid& uuid) { Q_ASSERT(!uuid.isNull()); @@ -450,7 +488,7 @@ void Entry::setIcon(const Uuid& uuid) m_data.customIcon = uuid; m_data.iconNumber = 0; - emit modified(); + emit entryModified(); emitDataChanged(); } } @@ -502,9 +540,9 @@ void Entry::setTitle(const QString& title) void Entry::setUrl(const QString& url) { - bool remove = url != m_attributes->value(EntryAttributes::URLKey) && - (m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "1" || - m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "0"); + bool remove = url != m_attributes->value(EntryAttributes::URLKey) + && (m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "1" + || m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "0"); if (remove) { m_attributes->remove(EntryAttributes::RememberCmdExecAttr); } @@ -526,11 +564,22 @@ void Entry::setNotes(const QString& notes) m_attributes->set(EntryAttributes::NotesKey, notes, m_attributes->isProtected(EntryAttributes::NotesKey)); } +void Entry::setDefaultAttribute(const QString& attribute, const QString& value) +{ + Q_ASSERT(EntryAttributes::isDefaultAttribute(attribute)); + + if (!EntryAttributes::isDefaultAttribute(attribute)) { + return; + } + + m_attributes->set(attribute, value, m_attributes->isProtected(attribute)); +} + void Entry::setExpires(const bool& value) { if (m_data.timeInfo.expires() != value) { m_data.timeInfo.setExpires(value); - emit modified(); + emit entryModified(); } } @@ -538,7 +587,7 @@ void Entry::setExpiryTime(const QDateTime& dateTime) { if (m_data.timeInfo.expiryTime() != dateTime) { m_data.timeInfo.setExpiryTime(dateTime); - emit modified(); + emit entryModified(); } } @@ -557,7 +606,7 @@ void Entry::addHistoryItem(Entry* entry) Q_ASSERT(!entry->parent()); m_history.append(entry); - emit modified(); + emit entryModified(); } void Entry::removeHistoryItems(const QList& historyEntries) @@ -568,14 +617,14 @@ void Entry::removeHistoryItems(const QList& historyEntries) for (Entry* entry : historyEntries) { Q_ASSERT(!entry->parent()); - Q_ASSERT(entry->uuid() == uuid()); + Q_ASSERT(entry->uuid().isNull() || entry->uuid() == uuid()); Q_ASSERT(m_history.contains(entry)); m_history.removeOne(entry); delete entry; } - emit modified(); + emit entryModified(); } void Entry::truncateHistory() @@ -633,14 +682,49 @@ void Entry::truncateHistory() } } +bool Entry::equals(const Entry* other, CompareItemOptions options) const +{ + if (!other) { + return false; + } + if (m_uuid != other->uuid()) { + return false; + } + if (!m_data.equals(other->m_data, options)) { + return false; + } + if (*m_customData != *other->m_customData) { + return false; + } + if (*m_attributes != *other->m_attributes) { + return false; + } + if (*m_attachments != *other->m_attachments) { + return false; + } + if (*m_autoTypeAssociations != *other->m_autoTypeAssociations) { + return false; + } + if (!options.testFlag(CompareItemIgnoreHistory)) { + if (m_history.count() != other->m_history.count()) { + return false; + } + for (int i = 0; i < m_history.count(); ++i) { + if (!m_history[i]->equals(other->m_history[i], options)) { + return false; + } + } + } + return true; +} + Entry* Entry::clone(CloneFlags flags) const { Entry* entry = new Entry(); entry->setUpdateTimeinfo(false); if (flags & CloneNewUuid) { - entry->m_uuid = Uuid::random(); - } - else { + entry->m_uuid = QUuid::createUuid(); + } else { entry->m_uuid = m_uuid; } entry->m_data = m_data; @@ -649,14 +733,15 @@ Entry* Entry::clone(CloneFlags flags) const entry->m_attachments->copyDataFrom(m_attachments); if (flags & CloneUserAsRef) { - // Build the username reference - QString username = "{REF:U@I:" + m_uuid.toHex() + "}"; - entry->m_attributes->set(EntryAttributes::UserNameKey, username.toUpper(), m_attributes->isProtected(EntryAttributes::UserNameKey)); + entry->m_attributes->set(EntryAttributes::UserNameKey, + buildReference(uuid(), EntryAttributes::UserNameKey), + m_attributes->isProtected(EntryAttributes::UserNameKey)); } if (flags & ClonePassAsRef) { - QString password = "{REF:P@I:" + m_uuid.toHex() + "}"; - entry->m_attributes->set(EntryAttributes::PasswordKey, password.toUpper(), m_attributes->isProtected(EntryAttributes::PasswordKey)); + entry->m_attributes->set(EntryAttributes::PasswordKey, + buildReference(uuid(), EntryAttributes::PasswordKey), + m_attributes->isProtected(EntryAttributes::PasswordKey)); } entry->m_autoTypeAssociations->copyDataFrom(m_autoTypeAssociations); @@ -672,7 +757,7 @@ Entry* Entry::clone(CloneFlags flags) const entry->setUpdateTimeinfo(true); if (flags & CloneResetTimeInfo) { - QDateTime now = QDateTime::currentDateTimeUtc(); + QDateTime now = Clock::currentDateTimeUtc(); entry->m_data.timeInfo.setCreationTime(now); entry->m_data.timeInfo.setLastModificationTime(now); entry->m_data.timeInfo.setLastAccessTime(now); @@ -680,7 +765,7 @@ Entry* Entry::clone(CloneFlags flags) const } if (flags & CloneRenameTitle) - entry->setTitle(entry->title() + tr(" - Clone", "Suffix added to cloned entries")); + entry->setTitle(tr("%1 - Clone").arg(entry->title())); return entry; } @@ -698,9 +783,9 @@ void Entry::copyDataFrom(const Entry* other) void Entry::beginUpdate() { - Q_ASSERT(!m_tmpHistoryItem); + Q_ASSERT(m_tmpHistoryItem.isNull()); - m_tmpHistoryItem = new Entry(); + m_tmpHistoryItem.reset(new Entry()); m_tmpHistoryItem->setUpdateTimeinfo(false); m_tmpHistoryItem->m_uuid = m_uuid; m_tmpHistoryItem->m_data = m_data; @@ -713,17 +798,14 @@ void Entry::beginUpdate() bool Entry::endUpdate() { - Q_ASSERT(m_tmpHistoryItem); + Q_ASSERT(!m_tmpHistoryItem.isNull()); if (m_modifiedSinceBegin) { m_tmpHistoryItem->setUpdateTimeinfo(true); - addHistoryItem(m_tmpHistoryItem); + addHistoryItem(m_tmpHistoryItem.take()); truncateHistory(); } - else { - delete m_tmpHistoryItem; - } - m_tmpHistoryItem = nullptr; + m_tmpHistoryItem.reset(); return m_modifiedSinceBegin; } @@ -733,37 +815,10 @@ void Entry::updateModifiedSinceBegin() m_modifiedSinceBegin = true; } -/** - * Update TOTP data whenever entry attributes have changed. - */ -void Entry::updateTotp() -{ - m_data.totpDigits = Totp::defaultDigits; - m_data.totpStep = Totp::defaultStep; - - if (!m_attributes->hasKey("TOTP Settings")) { - return; - } - - // this regex must be kept in sync with the set of allowed short names Totp::shortNameToEncoder - QRegularExpression rx(QString("(\\d+);((?:\\d+)|S)")); - QRegularExpressionMatch m = rx.match(m_attributes->value("TOTP Settings")); - if (!m.hasMatch()) { - return; - } - - m_data.totpStep = static_cast(m.captured(1).toUInt()); - if (Totp::shortNameToEncoder.contains(m.captured(2))) { - m_data.totpDigits = Totp::shortNameToEncoder[m.captured(2)]; - } else { - m_data.totpDigits = static_cast(m.captured(2).toUInt()); - } -} - QString Entry::resolveMultiplePlaceholdersRecursive(const QString& str, int maxDepth) const { if (maxDepth <= 0) { - qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", qPrintable(uuid().toHex())); + qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); return str; } @@ -787,7 +842,7 @@ QString Entry::resolveMultiplePlaceholdersRecursive(const QString& str, int maxD QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDepth) const { if (maxDepth <= 0) { - qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", qPrintable(uuid().toHex())); + qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); return placeholder; } @@ -851,7 +906,7 @@ QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDe QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder, int maxDepth) const { if (maxDepth <= 0) { - qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", qPrintable(uuid().toHex())); + qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); return placeholder; } @@ -871,7 +926,7 @@ QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder, Q_ASSERT(m_group); Q_ASSERT(m_group->database()); - const Entry* refEntry = m_group->database()->resolveEntry(searchText, searchInType); + const Entry* refEntry = m_group->database()->rootGroup()->findEntryBySearchTerm(searchText, searchInType); if (refEntry) { const QString wantedField = match.captured(EntryAttributes::WantedFieldGroupName); @@ -899,8 +954,8 @@ QString Entry::referenceFieldValue(EntryReferenceType referenceType) const return url(); case EntryReferenceType::Notes: return notes(); - case EntryReferenceType::Uuid: - return uuid().toHex(); + case EntryReferenceType::QUuid: + return uuidToHex(); default: break; } @@ -932,8 +987,8 @@ void Entry::setGroup(Group* group) // copy custom icon to the new database if (!iconUuid().isNull() && group->database() - && m_group->database()->metadata()->containsCustomIcon(iconUuid()) - && !group->database()->metadata()->containsCustomIcon(iconUuid())) { + && m_group->database()->metadata()->containsCustomIcon(iconUuid()) + && !group->database()->metadata()->containsCustomIcon(iconUuid())) { group->database()->metadata()->addCustomIcon(iconUuid(), icon()); } } @@ -945,13 +1000,13 @@ void Entry::setGroup(Group* group) QObject::setParent(group); if (m_updateTimeinfo) { - m_data.timeInfo.setLocationChanged(QDateTime::currentDateTimeUtc()); + m_data.timeInfo.setLocationChanged(Clock::currentDateTimeUtc()); } } void Entry::emitDataChanged() { - emit dataChanged(this); + emit entryDataChanged(this); } const Database* Entry::database() const @@ -959,9 +1014,15 @@ const Database* Entry::database() const if (m_group) { return m_group->database(); } - else { - return nullptr; + return nullptr; +} + +Database* Entry::database() +{ + if (m_group) { + return m_group->database(); } + return nullptr; } QString Entry::maskPasswordPlaceholders(const QString& str) const @@ -971,6 +1032,20 @@ QString Entry::maskPasswordPlaceholders(const QString& str) const return result; } +Entry* Entry::resolveReference(const QString& str) const +{ + QRegularExpressionMatch match = EntryAttributes::matchReference(str); + if (!match.hasMatch()) { + return nullptr; + } + + const QString searchIn = match.captured(EntryAttributes::SearchInGroupName); + const QString searchText = match.captured(EntryAttributes::SearchTextGroupName); + + const EntryReferenceType searchInType = Entry::referenceType(searchIn); + return m_group->database()->rootGroup()->findEntryBySearchTerm(searchText, searchInType); +} + QString Entry::resolveMultiplePlaceholders(const QString& str) const { return resolveMultiplePlaceholdersRecursive(str, ResolveMaximumDepth); @@ -1021,32 +1096,33 @@ Entry::PlaceholderType Entry::placeholderType(const QString& placeholder) const { if (!placeholder.startsWith(QLatin1Char('{')) || !placeholder.endsWith(QLatin1Char('}'))) { return PlaceholderType::NotPlaceholder; - } else if (placeholder.startsWith(QLatin1Literal("{S:"))) { + } + if (placeholder.startsWith(QLatin1Literal("{S:"))) { return PlaceholderType::CustomAttribute; - } else if (placeholder.startsWith(QLatin1Literal("{REF:"))) { + } + if (placeholder.startsWith(QLatin1Literal("{REF:"))) { return PlaceholderType::Reference; } - static const QMap placeholders { - { QStringLiteral("{TITLE}"), PlaceholderType::Title }, - { QStringLiteral("{USERNAME}"), PlaceholderType::UserName }, - { QStringLiteral("{PASSWORD}"), PlaceholderType::Password }, - { QStringLiteral("{NOTES}"), PlaceholderType::Notes }, - { QStringLiteral("{TOTP}"), PlaceholderType::Totp }, - { QStringLiteral("{URL}"), PlaceholderType::Url }, - { QStringLiteral("{URL:RMVSCM}"), PlaceholderType::UrlWithoutScheme }, - { QStringLiteral("{URL:WITHOUTSCHEME}"), PlaceholderType::UrlWithoutScheme }, - { QStringLiteral("{URL:SCM}"), PlaceholderType::UrlScheme }, - { QStringLiteral("{URL:SCHEME}"), PlaceholderType::UrlScheme }, - { QStringLiteral("{URL:HOST}"), PlaceholderType::UrlHost }, - { QStringLiteral("{URL:PORT}"), PlaceholderType::UrlPort }, - { QStringLiteral("{URL:PATH}"), PlaceholderType::UrlPath }, - { QStringLiteral("{URL:QUERY}"), PlaceholderType::UrlQuery }, - { QStringLiteral("{URL:FRAGMENT}"), PlaceholderType::UrlFragment }, - { QStringLiteral("{URL:USERINFO}"), PlaceholderType::UrlUserInfo }, - { QStringLiteral("{URL:USERNAME}"), PlaceholderType::UrlUserName }, - { QStringLiteral("{URL:PASSWORD}"), PlaceholderType::UrlPassword } - }; + static const QMap placeholders{ + {QStringLiteral("{TITLE}"), PlaceholderType::Title}, + {QStringLiteral("{USERNAME}"), PlaceholderType::UserName}, + {QStringLiteral("{PASSWORD}"), PlaceholderType::Password}, + {QStringLiteral("{NOTES}"), PlaceholderType::Notes}, + {QStringLiteral("{TOTP}"), PlaceholderType::Totp}, + {QStringLiteral("{URL}"), PlaceholderType::Url}, + {QStringLiteral("{URL:RMVSCM}"), PlaceholderType::UrlWithoutScheme}, + {QStringLiteral("{URL:WITHOUTSCHEME}"), PlaceholderType::UrlWithoutScheme}, + {QStringLiteral("{URL:SCM}"), PlaceholderType::UrlScheme}, + {QStringLiteral("{URL:SCHEME}"), PlaceholderType::UrlScheme}, + {QStringLiteral("{URL:HOST}"), PlaceholderType::UrlHost}, + {QStringLiteral("{URL:PORT}"), PlaceholderType::UrlPort}, + {QStringLiteral("{URL:PATH}"), PlaceholderType::UrlPath}, + {QStringLiteral("{URL:QUERY}"), PlaceholderType::UrlQuery}, + {QStringLiteral("{URL:FRAGMENT}"), PlaceholderType::UrlFragment}, + {QStringLiteral("{URL:USERINFO}"), PlaceholderType::UrlUserInfo}, + {QStringLiteral("{URL:USERNAME}"), PlaceholderType::UrlUserName}, + {QStringLiteral("{URL:PASSWORD}"), PlaceholderType::UrlPassword}}; return placeholders.value(placeholder.toUpper(), PlaceholderType::Unknown); } @@ -1054,14 +1130,15 @@ Entry::PlaceholderType Entry::placeholderType(const QString& placeholder) const QString Entry::resolveUrl(const QString& url) const { QString newUrl = url; - if (!url.isEmpty() && !url.contains("://")) { - // URL doesn't have a protocol, add https by default - newUrl.prepend("https://"); - } - if (newUrl.startsWith("cmd://")) { + QRegExp fileRegEx("^([a-z]:)?[\\\\/]", Qt::CaseInsensitive, QRegExp::RegExp2); + if (fileRegEx.indexIn(newUrl) != -1) { + // Match possible file paths without the scheme and convert it to a file URL + newUrl = QDir::fromNativeSeparators(newUrl); + newUrl = QUrl::fromLocalFile(newUrl).toString(); + } else if (newUrl.startsWith("cmd://")) { QStringList cmdList = newUrl.split(" "); - for (int i=1; i < cmdList.size(); ++i) { + for (int i = 1; i < cmdList.size(); ++i) { // Don't pass arguments to the resolveUrl function (they look like URL's) if (!cmdList[i].startsWith("-") && !cmdList[i].startsWith("/")) { return resolveUrl(cmdList[i].remove(QRegExp("'|\""))); @@ -1072,12 +1149,79 @@ QString Entry::resolveUrl(const QString& url) const return QString(""); } + if (!newUrl.isEmpty() && !newUrl.contains("://")) { + // URL doesn't have a protocol, add https by default + newUrl.prepend("https://"); + } + // Validate the URL QUrl tempUrl = QUrl(newUrl); - if (tempUrl.isValid() && (tempUrl.scheme() == "http" || tempUrl.scheme() == "https")) { + if (tempUrl.isValid() + && (tempUrl.scheme() == "http" || tempUrl.scheme() == "https" || tempUrl.scheme() == "file")) { return tempUrl.url(); } // No valid http URL's found return QString(""); } + +bool EntryData::operator==(const EntryData& other) const +{ + return equals(other, CompareItemDefault); +} + +bool EntryData::operator!=(const EntryData& other) const +{ + return !(*this == other); +} + +bool EntryData::equals(const EntryData& other, CompareItemOptions options) const +{ + if (::compare(iconNumber, other.iconNumber, options) != 0) { + return false; + } + if (::compare(customIcon, other.customIcon, options) != 0) { + return false; + } + if (::compare(foregroundColor, other.foregroundColor, options) != 0) { + return false; + } + if (::compare(backgroundColor, other.backgroundColor, options) != 0) { + return false; + } + if (::compare(overrideUrl, other.overrideUrl, options) != 0) { + return false; + } + if (::compare(tags, other.tags, options) != 0) { + return false; + } + if (::compare(autoTypeEnabled, other.autoTypeEnabled, options) != 0) { + return false; + } + if (::compare(autoTypeObfuscation, other.autoTypeObfuscation, options) != 0) { + return false; + } + if (::compare(defaultAutoTypeSequence, other.defaultAutoTypeSequence, options) != 0) { + return false; + } + if (!timeInfo.equals(other.timeInfo, options)) { + return false; + } + if (!totpSettings.isNull() && !other.totpSettings.isNull()) { + // Both have TOTP settings, compare them + if (::compare(totpSettings->key, other.totpSettings->key, options) != 0) { + return false; + } + if (::compare(totpSettings->digits, other.totpSettings->digits, options) != 0) { + return false; + } + if (::compare(totpSettings->step, other.totpSettings->step, options) != 0) { + return false; + } + } else if (totpSettings.isNull() != other.totpSettings.isNull()) { + // The existance of TOTP has changed between these entries + return false; + } + + return true; +} diff --git a/src/core/Entry.h b/src/core/Entry.h index 6ddf87dea..c5f59f2e3 100644 --- a/src/core/Entry.h +++ b/src/core/Entry.h @@ -26,32 +26,37 @@ #include #include #include +#include #include "core/AutoTypeAssociations.h" #include "core/CustomData.h" #include "core/EntryAttachments.h" #include "core/EntryAttributes.h" #include "core/TimeInfo.h" -#include "core/Uuid.h" class Database; class Group; +namespace Totp +{ + struct Settings; +} -enum class EntryReferenceType { +enum class EntryReferenceType +{ Unknown, Title, UserName, Password, Url, Notes, - Uuid, + QUuid, CustomAttributes }; struct EntryData { int iconNumber; - Uuid customIcon; + QUuid customIcon; QColor foregroundColor; QColor backgroundColor; QString overrideUrl; @@ -60,8 +65,11 @@ struct EntryData int autoTypeObfuscation; QString defaultAutoTypeSequence; TimeInfo timeInfo; - mutable quint8 totpDigits; - mutable quint8 totpStep; + QSharedPointer totpSettings; + + bool operator==(const EntryData& other) const; + bool operator!=(const EntryData& other) const; + bool equals(const EntryData& other, CompareItemOptions options) const; }; class Entry : public QObject @@ -71,17 +79,18 @@ class Entry : public QObject public: Entry(); ~Entry(); - Uuid uuid() const; + const QUuid& uuid() const; + const QString uuidToHex() const; QImage icon() const; QPixmap iconPixmap() const; QPixmap iconScaledPixmap() const; int iconNumber() const; - Uuid iconUuid() const; + const QUuid& iconUuid() const; QColor foregroundColor() const; QColor backgroundColor() const; QString overrideUrl() const; QString tags() const; - TimeInfo timeInfo() const; + const TimeInfo& timeInfo() const; bool autoTypeEnabled() const; int autoTypeObfuscation() const; QString defaultAutoTypeSequence() const; @@ -96,14 +105,16 @@ public: QString username() const; QString password() const; QString notes() const; + QString attribute(const QString& key) const; QString totp() const; - QString totpSeed() const; - quint8 totpDigits() const; - quint8 totpStep() const; + QSharedPointer totpSettings() const; bool hasTotp() const; bool isExpired() const; + bool isAttributeReferenceOf(const QString& key, const QUuid& uuid) const; + void replaceReferencesWithValues(const Entry* other); bool hasReferences() const; + bool hasReferencesTo(const QUuid& uuid) const; EntryAttributes* attributes(); const EntryAttributes* attributes() const; EntryAttachments* attachments(); @@ -116,9 +127,9 @@ public: static const QString AutoTypeSequenceUsername; static const QString AutoTypeSequencePassword; - void setUuid(const Uuid& uuid); + void setUuid(const QUuid& uuid); void setIcon(int iconNumber); - void setIcon(const Uuid& uuid); + void setIcon(const QUuid& uuid); void setForegroundColor(const QColor& color); void setBackgroundColor(const QColor& color); void setOverrideUrl(const QString& url); @@ -132,9 +143,10 @@ public: void setUsername(const QString& username); void setPassword(const QString& password); void setNotes(const QString& notes); + void setDefaultAttribute(const QString& attribute, const QString& value); void setExpires(const bool& value); void setExpiryTime(const QDateTime& dateTime); - void setTotp(const QString& seed, quint8& step, quint8& digits); + void setTotp(QSharedPointer settings); QList historyItems(); const QList& historyItems() const; @@ -142,18 +154,22 @@ public: void removeHistoryItems(const QList& historyEntries); void truncateHistory(); - enum CloneFlag { - CloneNoFlags = 0, - CloneNewUuid = 1, // generate a random uuid for the clone - CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time - CloneIncludeHistory = 4, // clone the history items - CloneRenameTitle = 8, // add "-Clone" after the original title - CloneUserAsRef = 16, // Add the user as a reference to the original entry - ClonePassAsRef = 32, // Add the password as a reference to the original entry + bool equals(const Entry* other, CompareItemOptions options = CompareItemDefault) const; + + enum CloneFlag + { + CloneNoFlags = 0, + CloneNewUuid = 1, // generate a random uuid for the clone + CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time + CloneIncludeHistory = 4, // clone the history items + CloneRenameTitle = 8, // add "-Clone" after the original title + CloneUserAsRef = 16, // Add the user as a reference to the original entry + ClonePassAsRef = 32, // Add the password as a reference to the original entry }; Q_DECLARE_FLAGS(CloneFlags, CloneFlag) - enum class PlaceholderType { + enum class PlaceholderType + { NotPlaceholder, Unknown, Title, @@ -185,6 +201,7 @@ public: Entry* clone(CloneFlags flags) const; void copyDataFrom(const Entry* other); QString maskPasswordPlaceholders(const QString& str) const; + Entry* resolveReference(const QString& str) const; QString resolveMultiplePlaceholders(const QString& str) const; QString resolvePlaceholder(const QString& str) const; QString resolveUrlPlaceholder(const QString& str, PlaceholderType placeholderType) const; @@ -201,16 +218,18 @@ public: Group* group(); const Group* group() const; void setGroup(Group* group); + const Database* database() const; + Database* database(); + bool canUpdateTimeinfo() const; void setUpdateTimeinfo(bool value); signals: /** * Emitted when a default attribute has been changed. */ - void dataChanged(Entry* entry); - - void modified(); + void entryDataChanged(Entry* entry); + void entryModified(); private slots: void emitDataChanged(); @@ -224,20 +243,20 @@ private: QString resolveReferencePlaceholderRecursive(const QString& placeholder, int maxDepth) const; QString referenceFieldValue(EntryReferenceType referenceType) const; + static QString buildReference(const QUuid& uuid, const QString& field); static EntryReferenceType referenceType(const QString& referenceStr); - const Database* database() const; template bool set(T& property, const T& value); - Uuid m_uuid; + QUuid m_uuid; EntryData m_data; QPointer m_attributes; QPointer m_attachments; QPointer m_autoTypeAssociations; QPointer m_customData; + QList m_history; // Items sorted from oldest to newest - QList m_history; - Entry* m_tmpHistoryItem; + QScopedPointer m_tmpHistoryItem; bool m_modifiedSinceBegin; QPointer m_group; bool m_updateTimeinfo; diff --git a/src/core/EntryAttachments.cpp b/src/core/EntryAttachments.cpp index 4dcc0262b..49f5198d2 100644 --- a/src/core/EntryAttachments.cpp +++ b/src/core/EntryAttachments.cpp @@ -17,8 +17,10 @@ #include "EntryAttachments.h" -#include +#include "core/Global.h" + #include +#include EntryAttachments::EntryAttachments(QObject* parent) : QObject(parent) @@ -37,7 +39,7 @@ bool EntryAttachments::hasKey(const QString& key) const QSet EntryAttachments::values() const { - return m_attachments.values().toSet(); + return asConst(m_attachments).values().toSet(); } QByteArray EntryAttachments::value(const QString& key) const @@ -61,21 +63,19 @@ void EntryAttachments::set(const QString& key, const QByteArray& value) if (addAttachment) { emit added(key); - } - else { + } else { emit keyModified(key); } if (emitModified) { - emit modified(); + emit entryAttachmentsModified(); } } void EntryAttachments::remove(const QString& key) { if (!m_attachments.contains(key)) { - Q_ASSERT_X(false, "EntryAttachments::remove", - qPrintable(QString("Can't find attachment for key %1").arg(key))); + Q_ASSERT_X(false, "EntryAttachments::remove", qPrintable(QString("Can't find attachment for key %1").arg(key))); return; } @@ -84,7 +84,7 @@ void EntryAttachments::remove(const QString& key) m_attachments.remove(key); emit removed(key); - emit modified(); + emit entryAttachmentsModified(); } void EntryAttachments::remove(const QStringList& keys) @@ -94,10 +94,10 @@ void EntryAttachments::remove(const QStringList& keys) } bool isModified = false; - for (const QString &key: keys) { + for (const QString& key : keys) { if (!m_attachments.contains(key)) { - Q_ASSERT_X(false, "EntryAttachments::remove", - qPrintable(QString("Can't find attachment for key %1").arg(key))); + Q_ASSERT_X( + false, "EntryAttachments::remove", qPrintable(QString("Can't find attachment for key %1").arg(key))); continue; } @@ -108,7 +108,7 @@ void EntryAttachments::remove(const QStringList& keys) } if (isModified) { - emit modified(); + emit entryAttachmentsModified(); } } @@ -128,7 +128,7 @@ void EntryAttachments::clear() m_attachments.clear(); emit reset(); - emit modified(); + emit entryAttachmentsModified(); } void EntryAttachments::copyDataFrom(const EntryAttachments* other) @@ -139,7 +139,7 @@ void EntryAttachments::copyDataFrom(const EntryAttachments* other) m_attachments = other->m_attachments; emit reset(); - emit modified(); + emit entryAttachmentsModified(); } } diff --git a/src/core/EntryAttachments.h b/src/core/EntryAttachments.h index c2fa55b44..2cb884e77 100644 --- a/src/core/EntryAttachments.h +++ b/src/core/EntryAttachments.h @@ -44,7 +44,7 @@ public: int attachmentsSize() const; signals: - void modified(); + void entryAttachmentsModified(); void keyModified(const QString& key); void aboutToBeAdded(const QString& key); void added(const QString& key); diff --git a/src/core/EntryAttributes.cpp b/src/core/EntryAttributes.cpp index 772a56611..80067c563 100644 --- a/src/core/EntryAttributes.cpp +++ b/src/core/EntryAttributes.cpp @@ -18,13 +18,15 @@ #include "EntryAttributes.h" +#include "core/Global.h" + const QString EntryAttributes::TitleKey = "Title"; const QString EntryAttributes::UserNameKey = "UserName"; const QString EntryAttributes::PasswordKey = "Password"; const QString EntryAttributes::URLKey = "URL"; const QString EntryAttributes::NotesKey = "Notes"; -const QStringList EntryAttributes::DefaultAttributes(QStringList() << TitleKey << UserNameKey - << PasswordKey << URLKey << NotesKey); +const QStringList EntryAttributes::DefaultAttributes(QStringList() + << TitleKey << UserNameKey << PasswordKey << URLKey << NotesKey); const QString EntryAttributes::WantedFieldGroupName = "WantedField"; const QString EntryAttributes::SearchInGroupName = "SearchIn"; @@ -65,6 +67,15 @@ QString EntryAttributes::value(const QString& key) const return m_attributes.value(key); } +QList EntryAttributes::values(const QList& keys) const +{ + QList values; + for (const QString& key : keys) { + values.append(m_attributes.value(key)); + } + return values; +} + bool EntryAttributes::contains(const QString& key) const { return m_attributes.contains(key); @@ -72,7 +83,7 @@ bool EntryAttributes::contains(const QString& key) const bool EntryAttributes::containsValue(const QString& value) const { - return m_attributes.values().contains(value); + return asConst(m_attributes).values().contains(value); } bool EntryAttributes::isProtected(const QString& key) const @@ -113,22 +124,19 @@ void EntryAttributes::set(const QString& key, const QString& value, bool protect emitModified = true; } m_protectedAttributes.insert(key); - } - else if (m_protectedAttributes.remove(key)) { + } else if (m_protectedAttributes.remove(key)) { emitModified = true; } if (emitModified) { - emit modified(); + emit entryAttributesModified(); } if (defaultAttribute && changeValue) { emit defaultKeyModified(); - } - else if (addAttribute) { + } else if (addAttribute) { emit added(key); - } - else if (emitModified) { + } else if (emitModified) { emit customKeyModified(key); } } @@ -138,7 +146,6 @@ void EntryAttributes::remove(const QString& key) Q_ASSERT(!isDefaultAttribute(key)); if (!m_attributes.contains(key)) { - Q_ASSERT(false); return; } @@ -148,7 +155,7 @@ void EntryAttributes::remove(const QString& key) m_protectedAttributes.remove(key); emit removed(key); - emit modified(); + emit entryAttributesModified(); } void EntryAttributes::rename(const QString& oldKey, const QString& newKey) @@ -178,7 +185,7 @@ void EntryAttributes::rename(const QString& oldKey, const QString& newKey) m_protectedAttributes.insert(newKey); } - emit modified(); + emit entryAttributesModified(); emit renamed(oldKey, newKey); } @@ -210,7 +217,7 @@ void EntryAttributes::copyCustomKeysFrom(const EntryAttributes* other) } emit reset(); - emit modified(); + emit entryAttributesModified(); } bool EntryAttributes::areCustomKeysDifferent(const EntryAttributes* other) @@ -243,27 +250,43 @@ void EntryAttributes::copyDataFrom(const EntryAttributes* other) m_protectedAttributes = other->m_protectedAttributes; emit reset(); - emit modified(); + emit entryAttributesModified(); } } +QUuid EntryAttributes::referenceUuid(const QString& key) const +{ + if (!m_attributes.contains(key)) { + Q_ASSERT(false); + return {}; + } + + auto match = matchReference(value(key)); + if (match.hasMatch()) { + const QString uuid = match.captured("SearchText"); + if (!uuid.isEmpty()) { + return QUuid::fromRfc4122(QByteArray::fromHex(uuid.toLatin1())); + } + } + + return {}; +} + bool EntryAttributes::operator==(const EntryAttributes& other) const { - return (m_attributes == other.m_attributes - && m_protectedAttributes == other.m_protectedAttributes); + return (m_attributes == other.m_attributes && m_protectedAttributes == other.m_protectedAttributes); } bool EntryAttributes::operator!=(const EntryAttributes& other) const { - return (m_attributes != other.m_attributes - || m_protectedAttributes != other.m_protectedAttributes); + return (m_attributes != other.m_attributes || m_protectedAttributes != other.m_protectedAttributes); } QRegularExpressionMatch EntryAttributes::matchReference(const QString& text) { static QRegularExpression referenceRegExp( - "\\{REF:(?[TUPANI])@(?[TUPANIO]):(?[^}]+)\\}", - QRegularExpression::CaseInsensitiveOption); + "\\{REF:(?[TUPANI])@(?[TUPANIO]):(?[^}]+)\\}", + QRegularExpression::CaseInsensitiveOption); return referenceRegExp.match(text); } @@ -280,7 +303,7 @@ void EntryAttributes::clear() } emit reset(); - emit modified(); + emit entryAttributesModified(); } int EntryAttributes::attributesSize() const diff --git a/src/core/EntryAttributes.h b/src/core/EntryAttributes.h index 91cc50879..2cba13c64 100644 --- a/src/core/EntryAttributes.h +++ b/src/core/EntryAttributes.h @@ -24,6 +24,7 @@ #include #include #include +#include class EntryAttributes : public QObject { @@ -35,6 +36,7 @@ public: bool hasKey(const QString& key) const; QList customKeys() const; QString value(const QString& key) const; + QList values(const QList& keys) const; bool contains(const QString& key) const; bool containsValue(const QString& value) const; bool isProtected(const QString& key) const; @@ -47,6 +49,7 @@ public: void clear(); int attributesSize() const; void copyDataFrom(const EntryAttributes* other); + QUuid referenceUuid(const QString& key) const; bool operator==(const EntryAttributes& other) const; bool operator!=(const EntryAttributes& other) const; @@ -66,7 +69,7 @@ public: static const QString SearchTextGroupName; signals: - void modified(); + void entryAttributesModified(); void defaultKeyModified(); void customKeyModified(const QString& key); void aboutToBeAdded(const QString& key); diff --git a/src/core/EntrySearcher.cpp b/src/core/EntrySearcher.cpp index deaefa1aa..f6c67ad50 100644 --- a/src/core/EntrySearcher.cpp +++ b/src/core/EntrySearcher.cpp @@ -19,67 +19,143 @@ #include "EntrySearcher.h" #include "core/Group.h" +#include "core/Tools.h" -QList EntrySearcher::search(const QString& searchTerm, const Group* group, - Qt::CaseSensitivity caseSensitivity) +EntrySearcher::EntrySearcher(bool caseSensitive) + : m_caseSensitive(caseSensitive) + , m_termParser(R"re(([-!*+]+)?(?:(\w*):)?(?:(?=")"((?:[^"\\]|\\.)*)"|([^ ]*))( |$))re") +// Group 1 = modifiers, Group 2 = field, Group 3 = quoted string, Group 4 = unquoted string { - if (!group->resolveSearchingEnabled()) { - return QList(); - } - - return searchEntries(searchTerm, group, caseSensitivity); } -QList EntrySearcher::searchEntries(const QString& searchTerm, const Group* group, - Qt::CaseSensitivity caseSensitivity) +/** + * Search group, and its children, by parsing the provided search + * string for search terms. + * + * @param searchString search terms + * @param baseGroup group to start search from, cannot be null + * @param forceSearch ignore group search settings + * @return list of entries that match the search terms + */ +QList EntrySearcher::search(const QString& searchString, const Group* baseGroup, bool forceSearch) { - QList searchResult; + Q_ASSERT(baseGroup); - const QList entryList = group->entries(); - for (Entry* entry : entryList) { - searchResult.append(matchEntry(searchTerm, entry, caseSensitivity)); - } + parseSearchTerms(searchString); + return repeat(baseGroup, forceSearch); +} - const QList children = group->children(); - for (Group* childGroup : children) { - if (childGroup->searchingEnabled() != Group::Disable) { - if (matchGroup(searchTerm, childGroup, caseSensitivity)) { - searchResult.append(childGroup->entriesRecursive()); - } else { - searchResult.append(searchEntries(searchTerm, childGroup, caseSensitivity)); +/** + * Repeat the last search starting from the given group + * + * @param baseGroup group to start search from, cannot be null + * @param forceSearch ignore group search settings + * @return list of entries that match the search terms + */ +QList EntrySearcher::repeat(const Group* baseGroup, bool forceSearch) +{ + Q_ASSERT(baseGroup); + + QList results; + for (const auto group : baseGroup->groupsRecursive(true)) { + if (forceSearch || group->resolveSearchingEnabled()) { + for (auto* entry : group->entries()) { + if (searchEntryImpl(entry)) { + results.append(entry); + } } } } - - return searchResult; + return results; } -QList EntrySearcher::matchEntry(const QString& searchTerm, Entry* entry, - Qt::CaseSensitivity caseSensitivity) +/** + * Search provided entries by parsing the search string + * for search terms. + * + * @param searchString search terms + * @param entries list of entries to include in the search + * @return list of entries that match the search terms + */ +QList EntrySearcher::searchEntries(const QString& searchString, const QList& entries) { - const QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts); - for (const QString& word : wordList) { - if (!wordMatch(word, entry, caseSensitivity)) { - return QList(); + parseSearchTerms(searchString); + return repeatEntries(entries); +} + +/** + * Repeat the last search on the given entries + * + * @param entries list of entries to include in the search + * @return list of entries that match the search terms + */ +QList EntrySearcher::repeatEntries(const QList& entries) +{ + QList results; + for (auto* entry : entries) { + if (searchEntryImpl(entry)) { + results.append(entry); } } - - return QList() << entry; + return results; } -bool EntrySearcher::wordMatch(const QString& word, Entry* entry, Qt::CaseSensitivity caseSensitivity) +/** + * Set the next search to be case sensitive or not + * + * @param state + */ +void EntrySearcher::setCaseSensitive(bool state) { - return entry->resolvePlaceholder(entry->title()).contains(word, caseSensitivity) || - entry->resolvePlaceholder(entry->username()).contains(word, caseSensitivity) || - entry->resolvePlaceholder(entry->url()).contains(word, caseSensitivity) || - entry->resolvePlaceholder(entry->notes()).contains(word, caseSensitivity); + m_caseSensitive = state; } -bool EntrySearcher::matchGroup(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity) +bool EntrySearcher::isCaseSensitive() { - const QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts); - for (const QString& word : wordList) { - if (!wordMatch(word, group, caseSensitivity)) { + return m_caseSensitive; +} + +bool EntrySearcher::searchEntryImpl(Entry* entry) +{ + // Pre-load in case they are needed + auto attributes_keys = entry->attributes()->customKeys(); + auto attributes = QStringList(attributes_keys + entry->attributes()->values(attributes_keys)); + auto attachments = QStringList(entry->attachments()->keys()); + + bool found; + for (const auto& term : m_searchTerms) { + switch (term->field) { + case Field::Title: + found = term->regex.match(entry->resolvePlaceholder(entry->title())).hasMatch(); + break; + case Field::Username: + found = term->regex.match(entry->resolvePlaceholder(entry->username())).hasMatch(); + break; + case Field::Password: + found = term->regex.match(entry->resolvePlaceholder(entry->password())).hasMatch(); + break; + case Field::Url: + found = term->regex.match(entry->resolvePlaceholder(entry->url())).hasMatch(); + break; + case Field::Notes: + found = term->regex.match(entry->notes()).hasMatch(); + break; + case Field::Attribute: + found = !attributes.filter(term->regex).empty(); + break; + case Field::Attachment: + found = !attachments.filter(term->regex).empty(); + break; + default: + // Terms without a specific field try to match title, username, url, and notes + found = term->regex.match(entry->resolvePlaceholder(entry->title())).hasMatch() + || term->regex.match(entry->resolvePlaceholder(entry->username())).hasMatch() + || term->regex.match(entry->resolvePlaceholder(entry->url())).hasMatch() + || term->regex.match(entry->notes()).hasMatch(); + } + + // Short circuit if we failed to match or we matched and are excluding this term + if ((!found && !term->exclude) || (found && term->exclude)) { return false; } } @@ -87,8 +163,58 @@ bool EntrySearcher::matchGroup(const QString& searchTerm, const Group* group, Qt return true; } -bool EntrySearcher::wordMatch(const QString& word, const Group* group, Qt::CaseSensitivity caseSensitivity) +void EntrySearcher::parseSearchTerms(const QString& searchString) { - return group->name().contains(word, caseSensitivity) || - group->notes().contains(word, caseSensitivity); + m_searchTerms.clear(); + auto results = m_termParser.globalMatch(searchString); + while (results.hasNext()) { + auto result = results.next(); + auto term = QSharedPointer::create(); + + // Quoted string group + term->word = result.captured(3); + + // If empty, use the unquoted string group + if (term->word.isEmpty()) { + term->word = result.captured(4); + } + + // If still empty, ignore this match + if (term->word.isEmpty()) { + continue; + } + + auto mods = result.captured(1); + + // Convert term to regex + term->regex = Tools::convertToRegex(term->word, !mods.contains("*"), mods.contains("+"), m_caseSensitive); + + // Exclude modifier + term->exclude = mods.contains("-") || mods.contains("!"); + + // Determine the field to search + QString field = result.captured(2); + if (!field.isEmpty()) { + auto cs = Qt::CaseInsensitive; + if (field.compare("title", cs) == 0) { + term->field = Field::Title; + } else if (field.startsWith("user", cs)) { + term->field = Field::Username; + } else if (field.startsWith("pass", cs)) { + term->field = Field::Password; + } else if (field.compare("url", cs) == 0) { + term->field = Field::Url; + } else if (field.compare("notes", cs) == 0) { + term->field = Field::Notes; + } else if (field.startsWith("attr", cs)) { + term->field = Field::Attribute; + } else if (field.startsWith("attach", cs)) { + term->field = Field::Attachment; + } else { + term->field = Field::Undefined; + } + } + + m_searchTerms.append(term); + } } diff --git a/src/core/EntrySearcher.h b/src/core/EntrySearcher.h index da51eebc7..153a0612e 100644 --- a/src/core/EntrySearcher.h +++ b/src/core/EntrySearcher.h @@ -19,23 +19,55 @@ #ifndef KEEPASSX_ENTRYSEARCHER_H #define KEEPASSX_ENTRYSEARCHER_H +#include #include - class Group; class Entry; class EntrySearcher { public: - QList search(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity); + explicit EntrySearcher(bool caseSensitive = false); + + QList search(const QString& searchString, const Group* baseGroup, bool forceSearch = false); + QList repeat(const Group* baseGroup, bool forceSearch = false); + + QList searchEntries(const QString& searchString, const QList& entries); + QList repeatEntries(const QList& entries); + + void setCaseSensitive(bool state); + bool isCaseSensitive(); private: - QList searchEntries(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity); - QList matchEntry(const QString& searchTerm, Entry* entry, Qt::CaseSensitivity caseSensitivity); - bool wordMatch(const QString& word, Entry* entry, Qt::CaseSensitivity caseSensitivity); - bool matchGroup(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity); - bool wordMatch(const QString& word, const Group* group, Qt::CaseSensitivity caseSensitivity); + enum class Field + { + Undefined, + Title, + Username, + Password, + Url, + Notes, + Attribute, + Attachment + }; + + struct SearchTerm + { + Field field; + QString word; + QRegularExpression regex; + bool exclude; + }; + + bool searchEntryImpl(Entry* entry); + void parseSearchTerms(const QString& searchString); + + bool m_caseSensitive; + QRegularExpression m_termParser; + QList> m_searchTerms; + + friend class TestEntrySearcher; }; #endif // KEEPASSX_ENTRYSEARCHER_H diff --git a/src/core/Exporter.h b/src/core/Exporter.h index dedb1c8a5..1dd24b3fb 100644 --- a/src/core/Exporter.h +++ b/src/core/Exporter.h @@ -8,7 +8,9 @@ class Exporter { public: virtual Database* exportGroup(Group* group) = 0; - virtual ~Exporter() {} + virtual ~Exporter() + { + } }; #endif // KEEPASSX_EXPORTER_H diff --git a/src/core/FilePath.cpp b/src/core/FilePath.cpp index c6f1907ad..5b0322707 100644 --- a/src/core/FilePath.cpp +++ b/src/core/FilePath.cpp @@ -23,8 +23,8 @@ #include #include "config-keepassx.h" -#include "core/Global.h" #include "core/Config.h" +#include "core/Global.h" FilePath* FilePath::m_instance(nullptr); @@ -32,8 +32,7 @@ QString FilePath::dataPath(const QString& name) { if (name.isEmpty() || name.startsWith('/')) { return m_dataPath + name; - } - else { + } else { return m_dataPath + "/" + name; } } @@ -51,7 +50,7 @@ QString FilePath::pluginPath(const QString& name) // for TestAutoType pluginPaths << QCoreApplication::applicationDirPath() + "/../src/autotype/test"; -#if defined(Q_OS_MAC) && defined(WITH_APP_BUNDLE) +#if defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE) pluginPaths << QCoreApplication::applicationDirPath() + "/../PlugIns"; #endif @@ -61,14 +60,12 @@ QString FilePath::pluginPath(const QString& name) if (configuredPluginDir != ".") { if (QDir(configuredPluginDir).isAbsolute()) { pluginPaths << configuredPluginDir; - } - else { - QString relativePluginDir = QString("%1/../%2") - .arg(QCoreApplication::applicationDirPath(), configuredPluginDir); + } else { + QString relativePluginDir = + QString("%1/../%2").arg(QCoreApplication::applicationDirPath(), configuredPluginDir); pluginPaths << QDir(relativePluginDir).canonicalPath(); - QString absolutePluginDir = QString("%1/%2") - .arg(KEEPASSX_PREFIX_DIR, configuredPluginDir); + QString absolutePluginDir = QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, configuredPluginDir); pluginPaths << QDir(absolutePluginDir).canonicalPath(); } } @@ -151,16 +148,16 @@ QIcon FilePath::icon(const QString& category, const QString& name, bool fromThem } if (icon.isNull()) { - const QList pngSizes = { 16, 22, 24, 32, 48, 64, 128 }; + const QList pngSizes = {16, 22, 24, 32, 48, 64, 128}; QString filename; for (int size : pngSizes) { - filename = QString("%1/icons/application/%2x%2/%3.png").arg(m_dataPath, QString::number(size), - combinedName); + filename = + QString("%1/icons/application/%2x%2/%3.png").arg(m_dataPath, QString::number(size), combinedName); if (QFile::exists(filename)) { icon.addFile(filename, QSize(size, size)); } } - filename = QString("%1/icons/application/scalable/%2.svgz").arg(m_dataPath, combinedName); + filename = QString("%1/icons/application/scalable/%2.svg").arg(m_dataPath, combinedName); if (QFile::exists(filename)) { icon.addFile(filename); } @@ -189,22 +186,21 @@ QIcon FilePath::onOffIcon(const QString& category, const QString& name) if (i == 0) { state = QIcon::Off; stateName = "off"; - } - else { + } else { state = QIcon::On; stateName = "on"; } - const QList pngSizes = { 16, 22, 24, 32, 48, 64, 128 }; + const QList pngSizes = {16, 22, 24, 32, 48, 64, 128}; QString filename; for (int size : pngSizes) { - filename = QString("%1/icons/application/%2x%2/%3-%4.png").arg(m_dataPath, QString::number(size), - combinedName, stateName); + filename = QString("%1/icons/application/%2x%2/%3-%4.png") + .arg(m_dataPath, QString::number(size), combinedName, stateName); if (QFile::exists(filename)) { icon.addFile(filename, QSize(size, size), QIcon::Normal, state); } } - filename = QString("%1/icons/application/scalable/%2-%3.svgz").arg(m_dataPath, combinedName, stateName); + filename = QString("%1/icons/application/scalable/%2-%3.svg").arg(m_dataPath, combinedName, stateName); if (QFile::exists(filename)) { icon.addFile(filename, QSize(), QIcon::Normal, state); } @@ -227,15 +223,13 @@ FilePath::FilePath() else if (testSetDir(QString(KEEPASSX_SOURCE_DIR) + "/share")) { } #endif -#if defined(Q_OS_UNIX) && !(defined(Q_OS_MAC) && defined(WITH_APP_BUNDLE)) +#if defined(Q_OS_UNIX) && !(defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE)) else if (isDataDirAbsolute && testSetDir(KEEPASSX_DATA_DIR)) { - } - else if (!isDataDirAbsolute && testSetDir(QString("%1/../%2").arg(appDirPath, KEEPASSX_DATA_DIR))) { - } - else if (!isDataDirAbsolute && testSetDir(QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, KEEPASSX_DATA_DIR))) { + } else if (!isDataDirAbsolute && testSetDir(QString("%1/../%2").arg(appDirPath, KEEPASSX_DATA_DIR))) { + } else if (!isDataDirAbsolute && testSetDir(QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, KEEPASSX_DATA_DIR))) { } #endif -#if defined(Q_OS_MAC) && defined(WITH_APP_BUNDLE) +#if defined(Q_OS_MACOS) && defined(WITH_APP_BUNDLE) else if (testSetDir(appDirPath + "/../Resources")) { } #endif @@ -249,8 +243,7 @@ FilePath::FilePath() if (m_dataPath.isEmpty()) { qWarning("FilePath::DataPath: can't find data dir"); - } - else { + } else { m_dataPath = QDir::cleanPath(m_dataPath); } } @@ -260,8 +253,7 @@ bool FilePath::testSetDir(const QString& dir) if (QFile::exists(dir + "/icons/database/C00_Password.png")) { m_dataPath = dir; return true; - } - else { + } else { return false; } } diff --git a/src/core/FilePath.h b/src/core/FilePath.h index b0f0397e2..b304b5f14 100644 --- a/src/core/FilePath.h +++ b/src/core/FilePath.h @@ -50,7 +50,8 @@ private: Q_DISABLE_COPY(FilePath) }; -inline FilePath* filePath() { +inline FilePath* filePath() +{ return FilePath::instance(); } diff --git a/src/core/FileWatcher.cpp b/src/core/FileWatcher.cpp new file mode 100644 index 000000000..64e86c3fa --- /dev/null +++ b/src/core/FileWatcher.cpp @@ -0,0 +1,296 @@ +/* + * Copyright (C) 2011 Felix Geyer + * Copyright (C) 2017 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#include "FileWatcher.h" + +#include "core/Clock.h" +#include + +#ifdef Q_OS_LINUX +#include +#endif + +namespace +{ + const int FileChangeDelay = 500; + const int TimerResolution = 100; +} // namespace + +DelayingFileWatcher::DelayingFileWatcher(QObject* parent) + : QObject(parent) + , m_ignoreFileChange(false) +{ + connect(&m_fileWatcher, SIGNAL(fileChanged(QString)), this, SLOT(onWatchedFileChanged())); + connect(&m_fileUnblockTimer, SIGNAL(timeout()), this, SLOT(observeFileChanges())); + connect(&m_fileChangeDelayTimer, SIGNAL(timeout()), this, SIGNAL(fileChanged())); + m_fileChangeDelayTimer.setSingleShot(true); + m_fileUnblockTimer.setSingleShot(true); +} + +void DelayingFileWatcher::restart() +{ + m_fileWatcher.addPath(m_filePath); +} + +void DelayingFileWatcher::stop() +{ + m_fileWatcher.removePath(m_filePath); +} + +void DelayingFileWatcher::start(const QString& filePath) +{ + if (!m_filePath.isEmpty()) { + m_fileWatcher.removePath(m_filePath); + } + +#if defined(Q_OS_LINUX) + struct statfs statfsBuf; + bool forcePolling = false; + const auto NFS_SUPER_MAGIC = 0x6969; + + if (!statfs(filePath.toLocal8Bit().constData(), &statfsBuf)) { + forcePolling = (statfsBuf.f_type == NFS_SUPER_MAGIC); + } else { + // if we can't get the fs type let's fall back to polling + forcePolling = true; + } + auto objectName = forcePolling ? QLatin1String("_qt_autotest_force_engine_poller") : QLatin1String(""); + m_fileWatcher.setObjectName(objectName); +#endif + + m_fileWatcher.addPath(filePath); + + if (!filePath.isEmpty()) { + m_filePath = filePath; + } +} + +void DelayingFileWatcher::ignoreFileChanges() +{ + m_ignoreFileChange = true; + m_fileChangeDelayTimer.stop(); +} + +void DelayingFileWatcher::observeFileChanges(bool delayed) +{ + int timeout = 0; + if (delayed) { + timeout = FileChangeDelay; + } else { + m_ignoreFileChange = false; + start(m_filePath); + } + if (timeout > 0 && !m_fileUnblockTimer.isActive()) { + m_fileUnblockTimer.start(timeout); + } +} + +void DelayingFileWatcher::onWatchedFileChanged() +{ + if (m_ignoreFileChange) { + // the client forcefully silenced us + return; + } + if (m_fileChangeDelayTimer.isActive()) { + // we are waiting to fire the delayed fileChanged event, so nothing + // to do here + return; + } + + m_fileChangeDelayTimer.start(FileChangeDelay); +} + +BulkFileWatcher::BulkFileWatcher(QObject* parent) + : QObject(parent) +{ + connect(&m_fileWatcher, SIGNAL(fileChanged(QString)), SLOT(handleFileChanged(QString))); + connect(&m_fileWatcher, SIGNAL(directoryChanged(QString)), SLOT(handleDirectoryChanged(QString))); + connect(&m_fileWatchUnblockTimer, SIGNAL(timeout()), this, SLOT(observeFileChanges())); + connect(&m_pendingSignalsTimer, SIGNAL(timeout()), this, SLOT(emitSignals())); + m_fileWatchUnblockTimer.setSingleShot(true); + m_pendingSignalsTimer.setSingleShot(true); +} + +void BulkFileWatcher::clear() +{ + for (const QString& path : m_fileWatcher.files() + m_fileWatcher.directories()) { + const QFileInfo info(path); + m_fileWatcher.removePath(info.absoluteFilePath()); + m_fileWatcher.removePath(info.absolutePath()); + } + m_watchedPaths.clear(); + m_watchedFilesInDirectory.clear(); + m_ignoreFilesChangess.clear(); +} + +void BulkFileWatcher::removePath(const QString& path) +{ + const QFileInfo info(path); + const QString filePath = info.absoluteFilePath(); + const QString directoryPath = info.absolutePath(); + m_watchedFilesInDirectory[directoryPath].remove(filePath); + m_fileWatcher.removePath(filePath); + m_watchedPaths.remove(filePath); + if (m_watchedFilesInDirectory[directoryPath].isEmpty()) { + m_fileWatcher.removePath(directoryPath); + m_watchedPaths.remove(directoryPath); + m_watchedFilesInDirectory.remove(directoryPath); + } +} + +void BulkFileWatcher::addPath(const QString& path) +{ + const QFileInfo info(path); + const QString filePath = info.absoluteFilePath(); + const QString directoryPath = info.absolutePath(); + if (!m_watchedPaths.value(filePath)) { + const bool fileSuccess = m_fileWatcher.addPath(filePath); + m_watchedPaths[filePath] = fileSuccess; + } + if (!m_watchedPaths.value(directoryPath)) { + const bool directorySuccess = m_fileWatcher.addPath(directoryPath); + m_watchedPaths[directoryPath] = directorySuccess; + } + m_watchedFilesInDirectory[directoryPath][filePath] = info.exists(); +} + +void BulkFileWatcher::handleFileChanged(const QString& path) +{ + const QFileInfo info(path); + const QString filePath = info.absoluteFilePath(); + const QString directoryPath = info.absolutePath(); + const QMap& watchedFiles = m_watchedFilesInDirectory[directoryPath]; + const bool created = !watchedFiles[filePath] && info.exists(); + const bool deleted = watchedFiles[filePath] && !info.exists(); + const bool changed = !created && !deleted; + addPath(path); + + if (m_ignoreFilesChangess[info.canonicalFilePath()] > Clock::currentDateTimeUtc()) { + // changes are blocked + return; + } + if (created) { + qDebug("File created %s", qPrintable(path)); + scheduleSignal(Created, filePath); + } + if (changed) { + qDebug("File changed %s", qPrintable(path)); + scheduleSignal(Updated, filePath); + } + if (deleted) { + qDebug("File removed %s", qPrintable(path)); + scheduleSignal(Removed, filePath); + } +} + +void BulkFileWatcher::handleDirectoryChanged(const QString& path) +{ + qDebug("Directory changed %s", qPrintable(path)); + const QFileInfo directoryInfo(path); + const QString directoryPath = directoryInfo.absoluteFilePath(); + QMap& watchedFiles = m_watchedFilesInDirectory[directoryPath]; + for (const QString& filename : watchedFiles.keys()) { + const QFileInfo fileInfo(filename); + const QString filePath = fileInfo.absoluteFilePath(); + const bool existed = watchedFiles[filePath]; + if (!fileInfo.exists() && existed) { + qDebug("Remove watch file %s", qPrintable(filePath)); + m_fileWatcher.removePath(filePath); + m_watchedPaths.remove(filePath); + watchedFiles.remove(filePath); + scheduleSignal(Removed, filePath); + } + if (!existed && fileInfo.exists()) { + qDebug("Add watch file %s", qPrintable(filePath)); + if (!m_watchedPaths.value(filePath)) { + const bool success = m_fileWatcher.addPath(filePath); + m_watchedPaths[filePath] = success; + watchedFiles[filePath] = fileInfo.exists(); + } + scheduleSignal(Created, filePath); + } + if (existed && fileInfo.exists()) { + // this case is handled using + qDebug("Refresh watch file %s", qPrintable(fileInfo.absoluteFilePath())); + m_fileWatcher.removePath(fileInfo.absolutePath()); + m_fileWatcher.addPath(fileInfo.absolutePath()); + scheduleSignal(Updated, filePath); + } + m_watchedFilesInDirectory[directoryPath][filePath] = fileInfo.exists(); + } +} + +void BulkFileWatcher::emitSignals() +{ + QMap> queued; + m_pendingSignals.swap(queued); + for (const auto& path : queued.keys()) { + const auto& signal = queued[path]; + if (signal.last() == Removed) { + emit fileRemoved(path); + continue; + } + if (signal.first() == Created) { + emit fileCreated(path); + continue; + } + emit fileChanged(path); + } +} + +void BulkFileWatcher::scheduleSignal(Signal signal, const QString& path) +{ + // we need to collect signals since the file watcher API may send multiple signals for a "single" change + // therefore we wait until the event loop finished before starting to import any changes + const QString filePath = QFileInfo(path).absoluteFilePath(); + m_pendingSignals[filePath] << signal; + + if (!m_pendingSignalsTimer.isActive()) { + m_pendingSignalsTimer.start(); + } +} + +void BulkFileWatcher::ignoreFileChanges(const QString& path) +{ + const QFileInfo info(path); + m_ignoreFilesChangess[info.canonicalFilePath()] = Clock::currentDateTimeUtc().addMSecs(FileChangeDelay); +} + +void BulkFileWatcher::observeFileChanges(bool delayed) +{ + int timeout = 0; + if (delayed) { + timeout = TimerResolution; + } else { + const QDateTime current = Clock::currentDateTimeUtc(); + for (const QString& key : m_ignoreFilesChangess.keys()) { + if (m_ignoreFilesChangess[key] < current) { + // We assume that there was no concurrent change of the database + // during our block - so no need to reimport + qDebug("Remove block from %s", qPrintable(key)); + m_ignoreFilesChangess.remove(key); + continue; + } + qDebug("Keep block from %s", qPrintable(key)); + timeout = static_cast(current.msecsTo(m_ignoreFilesChangess[key])); + } + } + if (timeout > 0 && !m_fileWatchUnblockTimer.isActive()) { + m_fileWatchUnblockTimer.start(timeout); + } +} diff --git a/src/core/FileWatcher.h b/src/core/FileWatcher.h new file mode 100644 index 000000000..00d6a6c69 --- /dev/null +++ b/src/core/FileWatcher.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#ifndef KEEPASSXC_FILEWATCHER_H +#define KEEPASSXC_FILEWATCHER_H + +#include +#include +#include +#include + +class DelayingFileWatcher : public QObject +{ + Q_OBJECT + +public: + explicit DelayingFileWatcher(QObject* parent = nullptr); + + void blockAutoReload(bool block); + void start(const QString& path); + + void restart(); + void stop(); + void ignoreFileChanges(); + +signals: + void fileChanged(); + +public slots: + void observeFileChanges(bool delayed = false); + +private slots: + void onWatchedFileChanged(); + +private: + QString m_filePath; + QFileSystemWatcher m_fileWatcher; + QTimer m_fileChangeDelayTimer; + QTimer m_fileUnblockTimer; + bool m_ignoreFileChange; +}; + +class BulkFileWatcher : public QObject +{ + Q_OBJECT + + enum Signal + { + Created, + Updated, + Removed + }; + +public: + explicit BulkFileWatcher(QObject* parent = nullptr); + + void clear(); + + void removePath(const QString& path); + void addPath(const QString& path); + + void ignoreFileChanges(const QString& path); + +signals: + void fileCreated(QString); + void fileChanged(QString); + void fileRemoved(QString); + +public slots: + void observeFileChanges(bool delayed = false); + +private slots: + void handleFileChanged(const QString& path); + void handleDirectoryChanged(const QString& path); + void emitSignals(); + +private: + void scheduleSignal(Signal event, const QString& path); + +private: + QMap m_watchedPaths; + QMap m_ignoreFilesChangess; + QFileSystemWatcher m_fileWatcher; + QMap> m_watchedFilesInDirectory; + // needed for Import/Export-References to prevent update after self-write + QTimer m_fileWatchUnblockTimer; + // needed to tolerate multiple signals for same event + QTimer m_pendingSignalsTimer; + QMap> m_pendingSignals; +}; + +#endif // KEEPASSXC_FILEWATCHER_H diff --git a/src/core/Global.h b/src/core/Global.h index 1cae4b51e..64570b33b 100644 --- a/src/core/Global.h +++ b/src/core/Global.h @@ -23,26 +23,30 @@ #include #if defined(Q_OS_WIN) -# if defined(KEEPASSX_BUILDING_CORE) -# define KEEPASSX_EXPORT Q_DECL_IMPORT -# else -# define KEEPASSX_EXPORT Q_DECL_EXPORT -# endif +#if defined(KEEPASSX_BUILDING_CORE) +#define KEEPASSX_EXPORT Q_DECL_IMPORT #else -# define KEEPASSX_EXPORT Q_DECL_EXPORT +#define KEEPASSX_EXPORT Q_DECL_EXPORT +#endif +#else +#define KEEPASSX_EXPORT Q_DECL_EXPORT #endif #ifndef QUINT32_MAX #define QUINT32_MAX 4294967295U #endif -template struct AddConst { typedef const T Type; }; +template struct AddConst +{ + typedef const T Type; +}; // this adds const to non-const objects (like std::as_const) -template -constexpr typename AddConst::Type& asConst(T &t) noexcept { return t; } +template constexpr typename AddConst::Type& asConst(T& t) noexcept +{ + return t; +} // prevent rvalue arguments: -template -void asConst(const T&&) = delete; +template void asConst(const T&&) = delete; #endif // KEEPASSX_GLOBAL_H diff --git a/src/core/Group.cpp b/src/core/Group.cpp index 692672652..87741ee0c 100644 --- a/src/core/Group.cpp +++ b/src/core/Group.cpp @@ -18,19 +18,23 @@ #include "Group.h" +#include "core/Clock.h" #include "core/Config.h" #include "core/DatabaseIcons.h" #include "core/Global.h" #include "core/Metadata.h" +#include "core/Tools.h" + +#include const int Group::DefaultIconNumber = 48; const int Group::RecycleBinIconNumber = 43; const QString Group::RootAutoTypeSequence = "{USERNAME}{TAB}{PASSWORD}{ENTER}"; -Group::CloneFlags Group::DefaultCloneFlags = static_cast( - Group::CloneNewUuid | Group::CloneResetTimeInfo | Group::CloneIncludeEntries); -Entry::CloneFlags Group::DefaultEntryCloneFlags = static_cast( - Entry::CloneNewUuid | Entry::CloneResetTimeInfo); +Group::CloneFlags Group::DefaultCloneFlags = + static_cast(Group::CloneNewUuid | Group::CloneResetTimeInfo | Group::CloneIncludeEntries); +Entry::CloneFlags Group::DefaultEntryCloneFlags = + static_cast(Entry::CloneNewUuid | Entry::CloneResetTimeInfo); Group::Group() : m_customData(new CustomData(this)) @@ -40,14 +44,15 @@ Group::Group() m_data.isExpanded = true; m_data.autoTypeEnabled = Inherit; m_data.searchingEnabled = Inherit; - m_data.mergeMode = ModeInherit; + m_data.mergeMode = Default; - connect(m_customData, SIGNAL(modified()), this, SIGNAL(modified())); - connect(this, SIGNAL(modified()), SLOT(updateTimeinfo())); + connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(groupModified())); + connect(this, SIGNAL(groupModified()), SLOT(updateTimeinfo())); } Group::~Group() { + setUpdateTimeinfo(false); // Destroy entries and children manually so DeletedObjects can be added // to database. const QList entries = m_entries; @@ -62,7 +67,7 @@ Group::~Group() if (m_db && m_parent) { DeletedObject delGroup; - delGroup.deletionTime = QDateTime::currentDateTimeUtc(); + delGroup.deletionTime = Clock::currentDateTimeUtc(); delGroup.uuid = m_uuid; m_db->addDeletedObject(delGroup); } @@ -73,7 +78,7 @@ Group::~Group() Group* Group::createRecycleBin() { Group* recycleBin = new Group(); - recycleBin->setUuid(Uuid::random()); + recycleBin->setUuid(QUuid::createUuid()); recycleBin->setName(tr("Recycle Bin")); recycleBin->setIcon(RecycleBinIconNumber); recycleBin->setSearchingEnabled(Group::Disable); @@ -81,21 +86,27 @@ Group* Group::createRecycleBin() return recycleBin; } -template inline bool Group::set(P& property, const V& value) { +template inline bool Group::set(P& property, const V& value) +{ if (property != value) { property = value; - emit modified(); + emit groupModified(); return true; } else { return false; } } +bool Group::canUpdateTimeinfo() const +{ + return m_updateTimeinfo; +} + void Group::updateTimeinfo() { if (m_updateTimeinfo) { - m_data.timeInfo.setLastModificationTime(QDateTime::currentDateTimeUtc()); - m_data.timeInfo.setLastAccessTime(QDateTime::currentDateTimeUtc()); + m_data.timeInfo.setLastModificationTime(Clock::currentDateTimeUtc()); + m_data.timeInfo.setLastAccessTime(Clock::currentDateTimeUtc()); } } @@ -104,11 +115,16 @@ void Group::setUpdateTimeinfo(bool value) m_updateTimeinfo = value; } -Uuid Group::uuid() const +const QUuid& Group::uuid() const { return m_uuid; } +const QString Group::uuidToHex() const +{ + return Tools::uuidToHex(m_uuid); +} + QString Group::name() const { return m_data.name; @@ -123,14 +139,12 @@ QImage Group::icon() const { if (m_data.customIcon.isNull()) { return databaseIcons()->icon(m_data.iconNumber); - } - else { + } else { Q_ASSERT(m_db); if (m_db) { return m_db->metadata()->customIcon(m_data.customIcon); - } - else { + } else { return QImage(); } } @@ -140,14 +154,12 @@ QPixmap Group::iconPixmap() const { if (m_data.customIcon.isNull()) { return databaseIcons()->iconPixmap(m_data.iconNumber); - } - else { + } else { Q_ASSERT(m_db); if (m_db) { return m_db->metadata()->customIconPixmap(m_data.customIcon); - } - else { + } else { return QPixmap(); } } @@ -158,14 +170,12 @@ QPixmap Group::iconScaledPixmap() const if (m_data.customIcon.isNull()) { // built-in icons are 16x16 so don't need to be scaled return databaseIcons()->iconPixmap(m_data.iconNumber); - } - else { + } else { Q_ASSERT(m_db); if (m_db) { return m_db->metadata()->customIconScaledPixmap(m_data.customIcon); - } - else { + } else { return QPixmap(); } } @@ -176,12 +186,12 @@ int Group::iconNumber() const return m_data.iconNumber; } -Uuid Group::iconUuid() const +const QUuid& Group::iconUuid() const { return m_data.customIcon; } -TimeInfo Group::timeInfo() const +const TimeInfo& Group::timeInfo() const { return m_data.timeInfo; } @@ -233,15 +243,13 @@ Group::TriState Group::searchingEnabled() const Group::MergeMode Group::mergeMode() const { - if (m_data.mergeMode == Group::MergeMode::ModeInherit) { + if (m_data.mergeMode == Group::MergeMode::Default) { if (m_parent) { return m_parent->mergeMode(); - } else { - return Group::MergeMode::KeepNewer; // fallback } - } else { - return m_data.mergeMode; + return Group::MergeMode::KeepNewer; // fallback } + return m_data.mergeMode; } Entry* Group::lastTopVisibleEntry() const @@ -249,9 +257,28 @@ Entry* Group::lastTopVisibleEntry() const return m_lastTopVisibleEntry; } +bool Group::isRecycled() +{ + Group* group = this; + if (!group->database()) { + return false; + } + + do { + if (group->m_parent && group->m_db->metadata()) { + if (group->m_parent == group->m_db->metadata()->recycleBin()) { + return true; + } + } + group = group->m_parent; + } while (group && group->m_parent && group->m_parent != group->m_db->rootGroup()); + + return false; +} + bool Group::isExpired() const { - return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < QDateTime::currentDateTimeUtc(); + return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Clock::currentDateTimeUtc(); } CustomData* Group::customData() @@ -264,7 +291,40 @@ const CustomData* Group::customData() const return m_customData; } -void Group::setUuid(const Uuid& uuid) +bool Group::equals(const Group* other, CompareItemOptions options) const +{ + if (!other) { + return false; + } + if (m_uuid != other->m_uuid) { + return false; + } + if (!m_data.equals(other->m_data, options)) { + return false; + } + if (m_customData != other->m_customData) { + return false; + } + if (m_children.count() != other->m_children.count()) { + return false; + } + if (m_entries.count() != other->m_entries.count()) { + return false; + } + for (int i = 0; i < m_children.count(); ++i) { + if (m_children[i]->uuid() != other->m_children[i]->uuid()) { + return false; + } + } + for (int i = 0; i < m_entries.count(); ++i) { + if (m_entries[i]->uuid() != other->m_entries[i]->uuid()) { + return false; + } + } + return true; +} + +void Group::setUuid(const QUuid& uuid) { set(m_uuid, uuid); } @@ -272,7 +332,7 @@ void Group::setUuid(const Uuid& uuid) void Group::setName(const QString& name) { if (set(m_data.name, name)) { - emit dataChanged(this); + emit groupDataChanged(this); } } @@ -283,25 +343,21 @@ void Group::setNotes(const QString& notes) void Group::setIcon(int iconNumber) { - Q_ASSERT(iconNumber >= 0); - - if (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull()) { + if (iconNumber >= 0 && (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull())) { m_data.iconNumber = iconNumber; - m_data.customIcon = Uuid(); - emit modified(); - emit dataChanged(this); + m_data.customIcon = QUuid(); + emit groupModified(); + emit groupDataChanged(this); } } -void Group::setIcon(const Uuid& uuid) +void Group::setIcon(const QUuid& uuid) { - Q_ASSERT(!uuid.isNull()); - - if (m_data.customIcon != uuid) { + if (!uuid.isNull() && m_data.customIcon != uuid) { m_data.customIcon = uuid; m_data.iconNumber = 0; - emit modified(); - emit dataChanged(this); + emit groupModified(); + emit groupDataChanged(this); } } @@ -318,7 +374,7 @@ void Group::setExpanded(bool expanded) updateTimeinfo(); return; } - emit modified(); + emit groupModified(); } } @@ -346,7 +402,7 @@ void Group::setExpires(bool value) { if (m_data.timeInfo.expires() != value) { m_data.timeInfo.setExpires(value); - emit modified(); + emit groupModified(); } } @@ -354,7 +410,7 @@ void Group::setExpiryTime(const QDateTime& dateTime) { if (m_data.timeInfo.expiryTime() != dateTime) { m_data.timeInfo.setExpiryTime(dateTime); - emit modified(); + emit groupModified(); } } @@ -401,21 +457,19 @@ void Group::setParent(Group* parent, int index) recCreateDelObjects(); // copy custom icon to the new database - if (!iconUuid().isNull() && parent->m_db - && m_db->metadata()->containsCustomIcon(iconUuid()) - && !parent->m_db->metadata()->containsCustomIcon(iconUuid())) { + if (!iconUuid().isNull() && parent->m_db && m_db->metadata()->containsCustomIcon(iconUuid()) + && !parent->m_db->metadata()->containsCustomIcon(iconUuid())) { parent->m_db->metadata()->addCustomIcon(iconUuid(), icon()); } } if (m_db != parent->m_db) { - recSetDatabase(parent->m_db); + connectDatabaseSignalsRecursive(parent->m_db); } QObject::setParent(parent); - emit aboutToAdd(this, index); + emit groupAboutToAdd(this, index); Q_ASSERT(index <= parent->m_children.size()); parent->m_children.insert(index, this); - } - else { + } else { emit aboutToMove(this, parent, index); m_parent->m_children.removeAll(this); m_parent = parent; @@ -425,16 +479,15 @@ void Group::setParent(Group* parent, int index) } if (m_updateTimeinfo) { - m_data.timeInfo.setLocationChanged(QDateTime::currentDateTimeUtc()); + m_data.timeInfo.setLocationChanged(Clock::currentDateTimeUtc()); } - emit modified(); + emit groupModified(); if (!moveWithinDatabase) { - emit added(); - } - else { - emit moved(); + emit groupAdded(); + } else { + emit groupMoved(); } } @@ -446,7 +499,7 @@ void Group::setParent(Database* db) cleanupParent(); m_parent = nullptr; - recSetDatabase(db); + connectDatabaseSignalsRecursive(db); QObject::setParent(db); } @@ -457,7 +510,7 @@ QStringList Group::hierarchy() const const Group* group = this; const Group* parent = m_parent; hierarchy.prepend(group->name()); - + while (parent) { group = group->parentGroup(); parent = group->parentGroup(); @@ -517,35 +570,19 @@ QList Group::entriesRecursive(bool includeHistoryItems) const return entryList; } -Entry* Group::findEntry(QString entryId) +QList Group::referencesRecursive(const Entry* entry) const { - Q_ASSERT(!entryId.isNull()); - - Entry* entry; - if (Uuid::isUuid(entryId)) { - entry = findEntryByUuid(Uuid::fromHex(entryId)); - if (entry) { - return entry; - } - } - - entry = findEntryByPath(entryId); - if (entry) { - return entry; - } - - for (Entry* entry : entriesRecursive(false)) { - if (entry->title() == entryId) { - return entry; - } - } - - return nullptr; + auto entries = entriesRecursive(); + return QtConcurrent::blockingFiltered(entries, + [entry](const Entry* e) { return e->hasReferencesTo(entry->uuid()); }); } -Entry* Group::findEntryByUuid(const Uuid& uuid) +Entry* Group::findEntryByUuid(const QUuid& uuid) const { - Q_ASSERT(!uuid.isNull()); + if (uuid.isNull()) { + return nullptr; + } + for (Entry* entry : entriesRecursive(false)) { if (entry->uuid() == uuid) { return entry; @@ -555,20 +592,83 @@ Entry* Group::findEntryByUuid(const Uuid& uuid) return nullptr; } -Entry* Group::findEntryByPath(QString entryPath, QString basePath) +Entry* Group::findEntryByPath(const QString& entryPath) { + if (entryPath.isEmpty()) { + return nullptr; + } - Q_ASSERT(!entryPath.isNull()); + // Add a beginning slash if the search string contains a slash + // We don't add a slash by default to allow searching by entry title + QString normalizedEntryPath = entryPath; + if (!normalizedEntryPath.startsWith("/") && normalizedEntryPath.contains("/")) { + normalizedEntryPath = "/" + normalizedEntryPath; + } + return findEntryByPathRecursive(normalizedEntryPath, "/"); +} - for (Entry* entry : asConst(m_entries)) { - QString currentEntryPath = basePath + entry->title(); - if (entryPath == currentEntryPath || entryPath == QString("/" + currentEntryPath)) { - return entry; +Entry* Group::findEntryBySearchTerm(const QString& term, EntryReferenceType referenceType) +{ + Q_ASSERT_X(referenceType != EntryReferenceType::Unknown, + "Database::findEntryRecursive", + "Can't search entry with \"referenceType\" parameter equal to \"Unknown\""); + + const QList groups = groupsRecursive(true); + + for (const Group* group : groups) { + bool found = false; + const QList& entryList = group->entries(); + for (Entry* entry : entryList) { + switch (referenceType) { + case EntryReferenceType::Unknown: + return nullptr; + case EntryReferenceType::Title: + found = entry->title() == term; + break; + case EntryReferenceType::UserName: + found = entry->username() == term; + break; + case EntryReferenceType::Password: + found = entry->password() == term; + break; + case EntryReferenceType::Url: + found = entry->url() == term; + break; + case EntryReferenceType::Notes: + found = entry->notes() == term; + break; + case EntryReferenceType::QUuid: + found = entry->uuid() == QUuid::fromRfc4122(QByteArray::fromHex(term.toLatin1())); + break; + case EntryReferenceType::CustomAttributes: + found = entry->attributes()->containsValue(term); + break; + } + + if (found) { + return entry; + } } } - for (Group* group : asConst(m_children)) { - Entry* entry = group->findEntryByPath(entryPath, basePath + group->name() + QString("/")); + return nullptr; +} + +Entry* Group::findEntryByPathRecursive(const QString& entryPath, const QString& basePath) +{ + // Return the first entry that matches the full path OR if there is no leading + // slash, return the first entry title that matches + for (Entry* entry : entries()) { + // clang-format off + if (entryPath == (basePath + entry->title()) + || (!entryPath.startsWith("/") && entry->title() == entryPath)) { + return entry; + } + // clang-format on + } + + for (Group* group : children()) { + Entry* entry = group->findEntryByPathRecursive(entryPath, basePath + group->name() + "/"); if (entry != nullptr) { return entry; } @@ -577,30 +677,36 @@ Entry* Group::findEntryByPath(QString entryPath, QString basePath) return nullptr; } -Group* Group::findGroupByPath(QString groupPath, QString basePath) +Group* Group::findGroupByPath(const QString& groupPath) { + // normalize the groupPath by adding missing front and rear slashes. once. + QString normalizedGroupPath; - Q_ASSERT(!groupPath.isNull()); + if (groupPath.isEmpty()) { + normalizedGroupPath = QString("/"); // root group + } else { + // clang-format off + normalizedGroupPath = (groupPath.startsWith("/") ? "" : "/") + + groupPath + + (groupPath.endsWith("/") ? "" : "/"); + // clang-format on + } + return findGroupByPathRecursive(normalizedGroupPath, "/"); +} - QStringList possiblePaths; - possiblePaths << groupPath; - if (!groupPath.startsWith("/")) { - possiblePaths << QString("/" + groupPath); - } - if (!groupPath.endsWith("/")) { - possiblePaths << QString(groupPath + "/"); - } - if (!groupPath.endsWith("/") && !groupPath.endsWith("/")) { - possiblePaths << QString("/" + groupPath + "/"); - } +Group* Group::findGroupByPathRecursive(const QString& groupPath, const QString& basePath) +{ + // paths must be normalized + Q_ASSERT(groupPath.startsWith("/") && groupPath.endsWith("/")); + Q_ASSERT(basePath.startsWith("/") && basePath.endsWith("/")); - if (possiblePaths.contains(basePath)) { + if (groupPath == basePath) { return this; } for (Group* innerGroup : children()) { QString innerBasePath = basePath + innerGroup->name() + "/"; - Group* group = innerGroup->findGroupByPath(groupPath, innerBasePath); + Group* group = innerGroup->findGroupByPathRecursive(groupPath, innerBasePath); if (group != nullptr) { return group; } @@ -616,7 +722,7 @@ QString Group::print(bool recursive, int depth) QString indentation = QString(" ").repeated(depth); if (entries().isEmpty() && children().isEmpty()) { - response += indentation + "[empty]\n"; + response += indentation + tr("[empty]", "group has no children") + "\n"; return response; } @@ -641,7 +747,7 @@ QList Group::groupsRecursive(bool includeSelf) const groupList.append(this); } - for (const Group* group : m_children) { + for (const Group* group : asConst(m_children)) { groupList.append(group->groupsRecursive(true)); } @@ -662,9 +768,9 @@ QList Group::groupsRecursive(bool includeSelf) return groupList; } -QSet Group::customIconsRecursive() const +QSet Group::customIconsRecursive() const { - QSet result; + QSet result; if (!iconUuid().isNull()) { result.insert(iconUuid()); @@ -684,64 +790,12 @@ QSet Group::customIconsRecursive() const return result; } -void Group::merge(const Group* other) +Group* Group::findGroupByUuid(const QUuid& uuid) { - - Group* rootGroup = this; - while (rootGroup->parentGroup()) { - rootGroup = rootGroup->parentGroup(); + if (uuid.isNull()) { + return nullptr; } - // merge entries - const QList dbEntries = other->entries(); - for (Entry* entry : dbEntries) { - - Entry* existingEntry = rootGroup->findEntryByUuid(entry->uuid()); - - if (!existingEntry) { - // This entry does not exist at all. Create it. - qDebug("New entry %s detected. Creating it.", qPrintable(entry->title())); - entry->clone(Entry::CloneIncludeHistory)->setGroup(this); - } else { - // Entry is already present in the database. Update it. - bool locationChanged = existingEntry->timeInfo().locationChanged() < entry->timeInfo().locationChanged(); - if (locationChanged && existingEntry->group() != this) { - existingEntry->setGroup(this); - qDebug("Location changed for entry %s. Updating it", qPrintable(existingEntry->title())); - } - resolveEntryConflict(existingEntry, entry); - } - } - - // merge groups recursively - const QList dbChildren = other->children(); - for (Group* group : dbChildren) { - - Group* existingGroup = rootGroup->findChildByUuid(group->uuid()); - - if (!existingGroup) { - qDebug("New group %s detected. Creating it.", qPrintable(group->name())); - Group* newGroup = group->clone(Entry::CloneNoFlags, Group::CloneNoFlags); - newGroup->setParent(this); - newGroup->merge(group); - } else { - bool locationChanged = existingGroup->timeInfo().locationChanged() < group->timeInfo().locationChanged(); - if (locationChanged && existingGroup->parent() != this) { - existingGroup->setParent(this); - qDebug("Location changed for group %s. Updating it", qPrintable(existingGroup->name())); - } - resolveGroupConflict(existingGroup, group); - existingGroup->merge(group); - } - - } - - emit modified(); -} - -Group* Group::findChildByUuid(const Uuid& uuid) -{ - Q_ASSERT(!uuid.isNull()); for (Group* group : groupsRecursive(true)) { if (group->uuid() == uuid) { return group; @@ -762,6 +816,11 @@ Group* Group::findChildByName(const QString& name) return nullptr; } +/** + * Creates a duplicate of this group. + * Note that you need to copy the custom icons manually when inserting the + * new group into another database. + */ Group* Group::clone(Entry::CloneFlags entryFlags, Group::CloneFlags groupFlags) const { Group* clonedGroup = new Group(); @@ -769,7 +828,7 @@ Group* Group::clone(Entry::CloneFlags entryFlags, Group::CloneFlags groupFlags) clonedGroup->setUpdateTimeinfo(false); if (groupFlags & Group::CloneNewUuid) { - clonedGroup->setUuid(Uuid::random()); + clonedGroup->setUuid(QUuid::createUuid()); } else { clonedGroup->setUuid(this->uuid()); } @@ -794,7 +853,7 @@ Group* Group::clone(Entry::CloneFlags entryFlags, Group::CloneFlags groupFlags) clonedGroup->setUpdateTimeinfo(true); if (groupFlags & Group::CloneResetTimeInfo) { - QDateTime now = QDateTime::currentDateTimeUtc(); + QDateTime now = Clock::currentDateTimeUtc(); clonedGroup->m_data.timeInfo.setCreationTime(now); clonedGroup->m_data.timeInfo.setLastModificationTime(now); clonedGroup->m_data.timeInfo.setLastAccessTime(now); @@ -806,7 +865,9 @@ Group* Group::clone(Entry::CloneFlags entryFlags, Group::CloneFlags groupFlags) void Group::copyDataFrom(const Group* other) { - m_data = other->m_data; + if (set(m_data, other->m_data)) { + emit groupDataChanged(this); + } m_customData->copyDataFrom(other->m_customData); m_lastTopVisibleEntry = other->m_lastTopVisibleEntry; } @@ -819,18 +880,20 @@ void Group::addEntry(Entry* entry) emit entryAboutToAdd(entry); m_entries << entry; - connect(entry, SIGNAL(dataChanged(Entry*)), SIGNAL(entryDataChanged(Entry*))); + connect(entry, SIGNAL(entryDataChanged(Entry*)), SIGNAL(entryDataChanged(Entry*))); if (m_db) { - connect(entry, SIGNAL(modified()), m_db, SIGNAL(modifiedImmediate())); + connect(entry, SIGNAL(entryModified()), m_db, SLOT(markAsModified())); } - emit modified(); + emit groupModified(); emit entryAdded(entry); } void Group::removeEntry(Entry* entry) { - Q_ASSERT(m_entries.contains(entry)); + Q_ASSERT_X(m_entries.contains(entry), + Q_FUNC_INFO, + QString("Group %1 does not contain %2").arg(this->name(), entry->title()).toLatin1()); emit entryAboutToRemove(entry); @@ -839,21 +902,21 @@ void Group::removeEntry(Entry* entry) entry->disconnect(m_db); } m_entries.removeAll(entry); - emit modified(); + emit groupModified(); emit entryRemoved(entry); } -void Group::recSetDatabase(Database* db) +void Group::connectDatabaseSignalsRecursive(Database* db) { if (m_db) { - disconnect(SIGNAL(dataChanged(Group*)), m_db); - disconnect(SIGNAL(aboutToRemove(Group*)), m_db); - disconnect(SIGNAL(removed()), m_db); - disconnect(SIGNAL(aboutToAdd(Group*,int)), m_db); - disconnect(SIGNAL(added()), m_db); - disconnect(SIGNAL(aboutToMove(Group*,Group*,int)), m_db); - disconnect(SIGNAL(moved()), m_db); - disconnect(SIGNAL(modified()), m_db); + disconnect(SIGNAL(groupDataChanged(Group*)), m_db); + disconnect(SIGNAL(groupAboutToRemove(Group*)), m_db); + disconnect(SIGNAL(groupRemoved()), m_db); + disconnect(SIGNAL(groupAboutToAdd(Group*, int)), m_db); + disconnect(SIGNAL(groupAdded()), m_db); + disconnect(SIGNAL(aboutToMove(Group*, Group*, int)), m_db); + disconnect(SIGNAL(groupMoved()), m_db); + disconnect(SIGNAL(groupModified()), m_db); } for (Entry* entry : asConst(m_entries)) { @@ -861,35 +924,37 @@ void Group::recSetDatabase(Database* db) entry->disconnect(m_db); } if (db) { - connect(entry, SIGNAL(modified()), db, SIGNAL(modifiedImmediate())); + connect(entry, SIGNAL(entryModified()), db, SLOT(markAsModified())); } } if (db) { - connect(this, SIGNAL(dataChanged(Group*)), db, SIGNAL(groupDataChanged(Group*))); - connect(this, SIGNAL(aboutToRemove(Group*)), db, SIGNAL(groupAboutToRemove(Group*))); - connect(this, SIGNAL(removed()), db, SIGNAL(groupRemoved())); - connect(this, SIGNAL(aboutToAdd(Group*,int)), db, SIGNAL(groupAboutToAdd(Group*,int))); - connect(this, SIGNAL(added()), db, SIGNAL(groupAdded())); + // clang-format off + connect(this, SIGNAL(groupDataChanged(Group*)), db, SIGNAL(groupDataChanged(Group*))); + connect(this, SIGNAL(groupAboutToRemove(Group*)), db, SIGNAL(groupAboutToRemove(Group*))); + connect(this, SIGNAL(groupRemoved()), db, SIGNAL(groupRemoved())); + connect(this, SIGNAL(groupAboutToAdd(Group*, int)), db, SIGNAL(groupAboutToAdd(Group*,int))); + connect(this, SIGNAL(groupAdded()), db, SIGNAL(groupAdded())); connect(this, SIGNAL(aboutToMove(Group*,Group*,int)), db, SIGNAL(groupAboutToMove(Group*,Group*,int))); - connect(this, SIGNAL(moved()), db, SIGNAL(groupMoved())); - connect(this, SIGNAL(modified()), db, SIGNAL(modifiedImmediate())); + connect(this, SIGNAL(groupMoved()), db, SIGNAL(groupMoved())); + connect(this, SIGNAL(groupModified()), db, SLOT(markAsModified())); + // clang-format on } m_db = db; for (Group* group : asConst(m_children)) { - group->recSetDatabase(db); + group->connectDatabaseSignalsRecursive(db); } } void Group::cleanupParent() { if (m_parent) { - emit aboutToRemove(this); + emit groupAboutToRemove(this); m_parent->m_children.removeAll(this); - emit modified(); - emit removed(); + emit groupModified(); + emit groupRemoved(); } } @@ -907,21 +972,13 @@ void Group::recCreateDelObjects() } } -void Group::markOlderEntry(Entry* entry) -{ - entry->attributes()->set( - "merged", - QString("older entry merged from database \"%1\"").arg(entry->group()->database()->metadata()->name())); -} - bool Group::resolveSearchingEnabled() const { switch (m_data.searchingEnabled) { case Inherit: if (!m_parent) { return true; - } - else { + } else { return m_parent->resolveSearchingEnabled(); } case Enable: @@ -940,8 +997,7 @@ bool Group::resolveAutoTypeEnabled() const case Inherit: if (!m_parent) { return true; - } - else { + } else { return m_parent->resolveAutoTypeEnabled(); } case Enable: @@ -954,78 +1010,23 @@ bool Group::resolveAutoTypeEnabled() const } } -void Group::resolveEntryConflict(Entry* existingEntry, Entry* otherEntry) +QStringList Group::locate(const QString& locateTerm, const QString& currentPath) const { - const QDateTime timeExisting = existingEntry->timeInfo().lastModificationTime(); - const QDateTime timeOther = otherEntry->timeInfo().lastModificationTime(); - - Entry* clonedEntry; - - switch (mergeMode()) { - case KeepBoth: - // if one entry is newer, create a clone and add it to the group - if (timeExisting > timeOther) { - clonedEntry = otherEntry->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); - clonedEntry->setGroup(this); - markOlderEntry(clonedEntry); - } else if (timeExisting < timeOther) { - clonedEntry = otherEntry->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); - clonedEntry->setGroup(this); - markOlderEntry(existingEntry); - } - break; - case KeepNewer: - if (timeExisting < timeOther) { - qDebug("Updating entry %s.", qPrintable(existingEntry->title())); - // only if other entry is newer, replace existing one - Group* currentGroup = existingEntry->group(); - currentGroup->removeEntry(existingEntry); - otherEntry->clone(Entry::CloneIncludeHistory)->setGroup(currentGroup); - } - - break; - case KeepExisting: - break; - default: - // do nothing - break; - } -} - -void Group::resolveGroupConflict(Group* existingGroup, Group* otherGroup) -{ - const QDateTime timeExisting = existingGroup->timeInfo().lastModificationTime(); - const QDateTime timeOther = otherGroup->timeInfo().lastModificationTime(); - - // only if the other group is newer, update the existing one. - if (timeExisting < timeOther) { - qDebug("Updating group %s.", qPrintable(existingGroup->name())); - existingGroup->setName(otherGroup->name()); - existingGroup->setNotes(otherGroup->notes()); - if (otherGroup->iconNumber() == 0) { - existingGroup->setIcon(otherGroup->iconUuid()); - } else { - existingGroup->setIcon(otherGroup->iconNumber()); - } - existingGroup->setExpiryTime(otherGroup->timeInfo().expiryTime()); - } - -} - -QStringList Group::locate(QString locateTerm, QString currentPath) -{ - Q_ASSERT(!locateTerm.isNull()); + // TODO: Replace with EntrySearcher QStringList response; + if (locateTerm.isEmpty()) { + return response; + } - for (Entry* entry : asConst(m_entries)) { + for (const Entry* entry : asConst(m_entries)) { QString entryPath = currentPath + entry->title(); - if (entryPath.toLower().contains(locateTerm.toLower())) { + if (entryPath.contains(locateTerm, Qt::CaseInsensitive)) { response << entryPath; } } - for (Group* group : asConst(m_children)) { - for (QString path : group->locate(locateTerm, currentPath + group->name() + QString("/"))) { + for (const Group* group : asConst(m_children)) { + for (const QString& path : group->locate(locateTerm, currentPath + group->name() + QString("/"))) { response << path; } } @@ -1033,31 +1034,71 @@ QStringList Group::locate(QString locateTerm, QString currentPath) return response; } -Entry* Group::addEntryWithPath(QString entryPath) +Entry* Group::addEntryWithPath(const QString& entryPath) { - Q_ASSERT(!entryPath.isNull()); - if (this->findEntryByPath(entryPath)) { + if (entryPath.isEmpty() || findEntryByPath(entryPath)) { return nullptr; } QStringList groups = entryPath.split("/"); QString entryTitle = groups.takeLast(); QString groupPath = groups.join("/"); - if (groupPath.isNull()) { - groupPath = QString(""); - } - Q_ASSERT(!groupPath.isNull()); - Group* group = this->findGroupByPath(groupPath); + Group* group = findGroupByPath(groupPath); if (!group) { return nullptr; } - Entry* entry = new Entry(); + auto* entry = new Entry(); entry->setTitle(entryTitle); - entry->setUuid(Uuid::random()); + entry->setUuid(QUuid::createUuid()); entry->setGroup(group); return entry; - +} + +bool Group::GroupData::operator==(const Group::GroupData& other) const +{ + return equals(other, CompareItemDefault); +} + +bool Group::GroupData::operator!=(const Group::GroupData& other) const +{ + return !(*this == other); +} + +bool Group::GroupData::equals(const Group::GroupData& other, CompareItemOptions options) const +{ + if (::compare(name, other.name, options) != 0) { + return false; + } + if (::compare(notes, other.notes, options) != 0) { + return false; + } + if (::compare(iconNumber, other.iconNumber) != 0) { + return false; + } + if (::compare(customIcon, other.customIcon) != 0) { + return false; + } + if (!timeInfo.equals(other.timeInfo, options)) { + return false; + } + // TODO HNH: Some properties are configurable - should they be ignored? + if (::compare(isExpanded, other.isExpanded, options) != 0) { + return false; + } + if (::compare(defaultAutoTypeSequence, other.defaultAutoTypeSequence, options) != 0) { + return false; + } + if (::compare(autoTypeEnabled, other.autoTypeEnabled, options) != 0) { + return false; + } + if (::compare(searchingEnabled, other.searchingEnabled, options) != 0) { + return false; + } + if (::compare(mergeMode, other.mergeMode, options) != 0) { + return false; + } + return true; } diff --git a/src/core/Group.h b/src/core/Group.h index cc923e43b..4b8569207 100644 --- a/src/core/Group.h +++ b/src/core/Group.h @@ -24,25 +24,38 @@ #include #include +#include "core/CustomData.h" #include "core/Database.h" #include "core/Entry.h" -#include "core/CustomData.h" #include "core/TimeInfo.h" -#include "core/Uuid.h" class Group : public QObject { Q_OBJECT public: - enum TriState { Inherit, Enable, Disable }; - enum MergeMode { ModeInherit, KeepBoth, KeepNewer, KeepExisting }; + enum TriState + { + Inherit, + Enable, + Disable + }; + enum MergeMode + { + Default, // Determine merge strategy from parent or fallback (Synchronize) + Duplicate, // lossy strategy regarding deletions, duplicate older changes in a new entry + KeepLocal, // merge history forcing local as top regardless of age + KeepRemote, // merge history forcing remote as top regardless of age + KeepNewer, // merge history + Synchronize, // merge history keeping most recent as top entry and appling deletions + }; - enum CloneFlag { - CloneNoFlags = 0, - CloneNewUuid = 1, // generate a random uuid for the clone - CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time - CloneIncludeEntries = 4, // clone the group entries + enum CloneFlag + { + CloneNoFlags = 0, + CloneNewUuid = 1, // generate a random uuid for the clone + CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time + CloneIncludeEntries = 4, // clone the group entries }; Q_DECLARE_FLAGS(CloneFlags, CloneFlag) @@ -51,13 +64,17 @@ public: QString name; QString notes; int iconNumber; - Uuid customIcon; + QUuid customIcon; TimeInfo timeInfo; bool isExpanded; QString defaultAutoTypeSequence; Group::TriState autoTypeEnabled; Group::TriState searchingEnabled; Group::MergeMode mergeMode; + + bool operator==(const GroupData& other) const; + bool operator!=(const GroupData& other) const; + bool equals(const GroupData& other, CompareItemOptions options) const; }; Group(); @@ -65,15 +82,16 @@ public: static Group* createRecycleBin(); - Uuid uuid() const; + const QUuid& uuid() const; + const QString uuidToHex() const; QString name() const; QString notes() const; QImage icon() const; QPixmap iconPixmap() const; QPixmap iconScaledPixmap() const; int iconNumber() const; - Uuid iconUuid() const; - TimeInfo timeInfo() const; + const QUuid& iconUuid() const; + const TimeInfo& timeInfo() const; bool isExpanded() const; QString defaultAutoTypeSequence() const; QString effectiveAutoTypeSequence() const; @@ -84,9 +102,12 @@ public: bool resolveAutoTypeEnabled() const; Entry* lastTopVisibleEntry() const; bool isExpired() const; + bool isRecycled(); CustomData* customData(); const CustomData* customData() const; + bool equals(const Group* other, CompareItemOptions options) const; + static const int DefaultIconNumber; static const int RecycleBinIconNumber; static CloneFlags DefaultCloneFlags; @@ -94,18 +115,18 @@ public: static const QString RootAutoTypeSequence; Group* findChildByName(const QString& name); - Group* findChildByUuid(const Uuid& uuid); - Entry* findEntry(QString entryId); - Entry* findEntryByUuid(const Uuid& uuid); - Entry* findEntryByPath(QString entryPath, QString basePath = QString("")); - Group* findGroupByPath(QString groupPath, QString basePath = QString("/")); - QStringList locate(QString locateTerm, QString currentPath = QString("/")); - Entry* addEntryWithPath(QString entryPath); - void setUuid(const Uuid& uuid); + Entry* findEntryByUuid(const QUuid& uuid) const; + Entry* findEntryByPath(const QString& entryPath); + Entry* findEntryBySearchTerm(const QString& term, EntryReferenceType referenceType); + Group* findGroupByUuid(const QUuid& uuid); + Group* findGroupByPath(const QString& groupPath); + QStringList locate(const QString& locateTerm, const QString& currentPath = {"/"}) const; + Entry* addEntryWithPath(const QString& entryPath); + void setUuid(const QUuid& uuid); void setName(const QString& name); void setNotes(const QString& notes); void setIcon(int iconNumber); - void setIcon(const Uuid& uuid); + void setIcon(const QUuid& uuid); void setTimeInfo(const TimeInfo& timeInfo); void setExpanded(bool expanded); void setDefaultAutoTypeSequence(const QString& sequence); @@ -116,6 +137,7 @@ public: void setExpiryTime(const QDateTime& dateTime); void setMergeMode(MergeMode newMode); + bool canUpdateTimeinfo() const; void setUpdateTimeinfo(bool value); Group* parentGroup(); @@ -129,63 +151,54 @@ public: const QList& children() const; QList entries(); const QList& entries() const; + Entry* findEntryRecursive(const QString& text, EntryReferenceType referenceType, Group* group = nullptr); + QList referencesRecursive(const Entry* entry) const; QList entriesRecursive(bool includeHistoryItems = false) const; QList groupsRecursive(bool includeSelf) const; QList groupsRecursive(bool includeSelf); - QSet customIconsRecursive() const; - /** - * Creates a duplicate of this group. - * Note that you need to copy the custom icons manually when inserting the - * new group into another database. - */ + QSet customIconsRecursive() const; + Group* clone(Entry::CloneFlags entryFlags = DefaultEntryCloneFlags, CloneFlags groupFlags = DefaultCloneFlags) const; void copyDataFrom(const Group* other); - void merge(const Group* other); QString print(bool recursive = false, int depth = 0); + void addEntry(Entry* entry); + void removeEntry(Entry* entry); + signals: - void dataChanged(Group* group); - - void aboutToAdd(Group* group, int index); - void added(); - void aboutToRemove(Group* group); - void removed(); - /** - * Group moved within the database. - */ + void groupDataChanged(Group* group); + void groupAboutToAdd(Group* group, int index); + void groupAdded(); + void groupAboutToRemove(Group* group); + void groupRemoved(); void aboutToMove(Group* group, Group* toGroup, int index); - void moved(); - + void groupMoved(); + void groupModified(); void entryAboutToAdd(Entry* entry); void entryAdded(Entry* entry); void entryAboutToRemove(Entry* entry); void entryRemoved(Entry* entry); - void entryDataChanged(Entry* entry); - void modified(); - private slots: void updateTimeinfo(); private: template bool set(P& property, const V& value); - void addEntry(Entry* entry); - void removeEntry(Entry* entry); void setParent(Database* db); - void markOlderEntry(Entry* entry); - void resolveEntryConflict(Entry* existingEntry, Entry* otherEntry); - void resolveGroupConflict(Group* existingGroup, Group* otherGroup); - void recSetDatabase(Database* db); + void connectDatabaseSignalsRecursive(Database* db); void cleanupParent(); void recCreateDelObjects(); + Entry* findEntryByPathRecursive(const QString& entryPath, const QString& basePath); + Group* findGroupByPathRecursive(const QString& groupPath, const QString& basePath); + QPointer m_db; - Uuid m_uuid; + QUuid m_uuid; GroupData m_data; QPointer m_lastTopVisibleEntry; QList m_children; diff --git a/src/core/InactivityTimer.cpp b/src/core/InactivityTimer.cpp index 0cfc8f0d4..85c58d269 100644 --- a/src/core/InactivityTimer.cpp +++ b/src/core/InactivityTimer.cpp @@ -55,12 +55,13 @@ void InactivityTimer::deactivate() bool InactivityTimer::eventFilter(QObject* watched, QEvent* event) { const QEvent::Type type = event->type(); - - if ( (type >= QEvent::MouseButtonPress && type <= QEvent::KeyRelease) - || (type >= QEvent::HoverEnter && type <= QEvent::HoverMove) - || (type == QEvent::Wheel) ) { + // clang-format off + if ((type >= QEvent::MouseButtonPress && type <= QEvent::KeyRelease) + || (type >= QEvent::HoverEnter && type <= QEvent::HoverMove) + || (type == QEvent::Wheel)) { m_timer->start(); } + // clang-format on return QObject::eventFilter(watched, event); } diff --git a/src/core/ListDeleter.h b/src/core/ListDeleter.h index 5687cbb1d..6f289546f 100644 --- a/src/core/ListDeleter.h +++ b/src/core/ListDeleter.h @@ -20,12 +20,15 @@ #include -template -class ListDeleter +template class ListDeleter { public: - inline explicit ListDeleter(QList* list) : m_list(list) {} - inline ~ListDeleter() { + inline explicit ListDeleter(QList* list) + : m_list(list) + { + } + inline ~ListDeleter() + { qDeleteAll(*m_list); } diff --git a/src/core/MacPasteboard.cpp b/src/core/MacPasteboard.cpp index 98dc6f7ab..ae63ea4e4 100644 --- a/src/core/MacPasteboard.cpp +++ b/src/core/MacPasteboard.cpp @@ -17,9 +17,13 @@ #include "MacPasteboard.h" -QString MacPasteboard::convertorName() { return QLatin1String("MacPasteboard"); } +QString MacPasteboard::convertorName() +{ + return QLatin1String("MacPasteboard"); +} -QString MacPasteboard::flavorFor(const QString& mimetype) { +QString MacPasteboard::flavorFor(const QString& mimetype) +{ if (mimetype == QLatin1String("text/plain")) { return QLatin1String("public.utf8-plain-text"); } else if (mimetype == QLatin1String("application/x-nspasteboard-concealed-type")) { @@ -38,15 +42,15 @@ QString MacPasteboard::flavorFor(const QString& mimetype) { if (cs == QLatin1String("system")) { return QLatin1String("public.utf8-plain-text"); - } else if (cs == QLatin1String("iso-10646-ucs-2") || - cs == QLatin1String("utf16")) { + } else if (cs == QLatin1String("iso-10646-ucs-2") || cs == QLatin1String("utf16")) { return QLatin1String("public.utf16-plain-text"); } } return QString(); } -QString MacPasteboard::mimeFor(QString flavor) { +QString MacPasteboard::mimeFor(QString flavor) +{ if (flavor == QLatin1String("public.utf8-plain-text")) return QLatin1String("text/plain"); if (flavor == QLatin1String("org.nspasteboard.ConcealedType")) @@ -56,13 +60,15 @@ QString MacPasteboard::mimeFor(QString flavor) { return QString(); } -bool MacPasteboard::canConvert(const QString& mimetype, QString flavor) { +bool MacPasteboard::canConvert(const QString& mimetype, QString flavor) +{ Q_UNUSED(mimetype); Q_UNUSED(flavor); return true; } -QVariant MacPasteboard::convertToMime(const QString& mimetype, QList data, QString flavor) { +QVariant MacPasteboard::convertToMime(const QString& mimetype, QList data, QString flavor) +{ if (data.count() > 1) qWarning("QMime::convertToMime: Cannot handle multiple member data"); const QByteArray& firstData = data.first(); @@ -74,13 +80,13 @@ QVariant MacPasteboard::convertToMime(const QString& mimetype, QList } else if (flavor == QLatin1String("public.utf16-plain-text")) { ret = QTextCodec::codecForName("UTF-16")->toUnicode(firstData); } else { - qWarning("QMime::convertToMime: unhandled mimetype: %s", - qPrintable(mimetype)); + qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype)); } return ret; } -QList MacPasteboard::convertFromMime(const QString&, QVariant data, QString flavor) { +QList MacPasteboard::convertFromMime(const QString&, QVariant data, QString flavor) +{ QList ret; QString string = data.toString(); if (flavor == QLatin1String("public.utf8-plain-text")) @@ -91,4 +97,3 @@ QList MacPasteboard::convertFromMime(const QString&, QVariant data, ret.append(QTextCodec::codecForName("UTF-16")->fromUnicode(string)); return ret; } - diff --git a/src/core/MacPasteboard.h b/src/core/MacPasteboard.h index d471a096a..f2a71e73f 100644 --- a/src/core/MacPasteboard.h +++ b/src/core/MacPasteboard.h @@ -19,20 +19,23 @@ #define KEEPASSXC_MACPASTEBOARD_H #include -#include #include +#include class MacPasteboard : public QObject, public QMacPasteboardMime { public: - explicit MacPasteboard() : QMacPasteboardMime(MIME_ALL) {} + explicit MacPasteboard() + : QMacPasteboardMime(MIME_ALL) + { + } QString convertorName() override; - bool canConvert(const QString &mime, QString flav) override; + bool canConvert(const QString& mime, QString flav) override; QString mimeFor(QString flav) override; - QString flavorFor(const QString &mime) override; - QVariant convertToMime(const QString &mime, QList data, QString flav) override; - QList convertFromMime(const QString &mime, QVariant data, QString flav) override; + QString flavorFor(const QString& mime) override; + QVariant convertToMime(const QString& mime, QList data, QString flav) override; + QList convertFromMime(const QString& mime, QVariant data, QString flav) override; }; #endif // KEEPASSXC_MACPASTEBOARD_H diff --git a/src/core/Merger.cpp b/src/core/Merger.cpp new file mode 100644 index 000000000..e4cf0f994 --- /dev/null +++ b/src/core/Merger.cpp @@ -0,0 +1,628 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#include "Merger.h" + +#include "core/Clock.h" +#include "core/Database.h" +#include "core/Entry.h" +#include "core/Metadata.h" + +Merger::Merger(const Database* sourceDb, Database* targetDb) + : m_mode(Group::Default) +{ + if (!sourceDb || !targetDb) { + Q_ASSERT(sourceDb && targetDb); + return; + } + + m_context = MergeContext{ + sourceDb, targetDb, sourceDb->rootGroup(), targetDb->rootGroup(), sourceDb->rootGroup(), targetDb->rootGroup()}; +} + +Merger::Merger(const Group* sourceGroup, Group* targetGroup) + : m_mode(Group::Default) +{ + if (!sourceGroup || !targetGroup) { + Q_ASSERT(sourceGroup && targetGroup); + return; + } + + m_context = MergeContext{sourceGroup->database(), + targetGroup->database(), + sourceGroup->database()->rootGroup(), + targetGroup->database()->rootGroup(), + sourceGroup, + targetGroup}; +} + +void Merger::setForcedMergeMode(Group::MergeMode mode) +{ + m_mode = mode; +} + +void Merger::resetForcedMergeMode() +{ + m_mode = Group::Default; +} + +bool Merger::merge() +{ + // Order of merge steps is important - it is possible that we + // create some items before deleting them afterwards + ChangeList changes; + changes << mergeGroup(m_context); + changes << mergeDeletions(m_context); + changes << mergeMetadata(m_context); + + // qDebug("Merged %s", qPrintable(changes.join("\n\t"))); + + // At this point we have a list of changes we may want to show the user + if (!changes.isEmpty()) { + m_context.m_targetDb->markAsModified(); + return true; + } + return false; +} + +Merger::ChangeList Merger::mergeGroup(const MergeContext& context) +{ + ChangeList changes; + // merge entries + const QList sourceEntries = context.m_sourceGroup->entries(); + for (Entry* sourceEntry : sourceEntries) { + Entry* targetEntry = context.m_targetRootGroup->findEntryByUuid(sourceEntry->uuid()); + if (!targetEntry) { + changes << tr("Creating missing %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); + // This entry does not exist at all. Create it. + targetEntry = sourceEntry->clone(Entry::CloneIncludeHistory); + moveEntry(targetEntry, context.m_targetGroup); + } else { + // Entry is already present in the database. Update it. + const bool locationChanged = + targetEntry->timeInfo().locationChanged() < sourceEntry->timeInfo().locationChanged(); + if (locationChanged && targetEntry->group() != context.m_targetGroup) { + changes << tr("Relocating %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); + moveEntry(targetEntry, context.m_targetGroup); + } + changes << resolveEntryConflict(context, sourceEntry, targetEntry); + } + } + + // merge groups recursively + const QList sourceChildGroups = context.m_sourceGroup->children(); + for (Group* sourceChildGroup : sourceChildGroups) { + Group* targetChildGroup = context.m_targetRootGroup->findGroupByUuid(sourceChildGroup->uuid()); + if (!targetChildGroup) { + changes << tr("Creating missing %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); + targetChildGroup = sourceChildGroup->clone(Entry::CloneNoFlags, Group::CloneNoFlags); + moveGroup(targetChildGroup, context.m_targetGroup); + TimeInfo timeinfo = targetChildGroup->timeInfo(); + timeinfo.setLocationChanged(sourceChildGroup->timeInfo().locationChanged()); + targetChildGroup->setTimeInfo(timeinfo); + } else { + bool locationChanged = + targetChildGroup->timeInfo().locationChanged() < sourceChildGroup->timeInfo().locationChanged(); + if (locationChanged && targetChildGroup->parent() != context.m_targetGroup) { + changes << tr("Relocating %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); + moveGroup(targetChildGroup, context.m_targetGroup); + TimeInfo timeinfo = targetChildGroup->timeInfo(); + timeinfo.setLocationChanged(sourceChildGroup->timeInfo().locationChanged()); + targetChildGroup->setTimeInfo(timeinfo); + } + changes << resolveGroupConflict(context, sourceChildGroup, targetChildGroup); + } + MergeContext subcontext{context.m_sourceDb, + context.m_targetDb, + context.m_sourceRootGroup, + context.m_targetRootGroup, + sourceChildGroup, + targetChildGroup}; + changes << mergeGroup(subcontext); + } + return changes; +} + +Merger::ChangeList +Merger::resolveGroupConflict(const MergeContext& context, const Group* sourceChildGroup, Group* targetChildGroup) +{ + Q_UNUSED(context); + ChangeList changes; + + const QDateTime timeExisting = targetChildGroup->timeInfo().lastModificationTime(); + const QDateTime timeOther = sourceChildGroup->timeInfo().lastModificationTime(); + + // only if the other group is newer, update the existing one. + if (timeExisting < timeOther) { + changes << tr("Overwriting %1 [%2]").arg(sourceChildGroup->name(), sourceChildGroup->uuidToHex()); + targetChildGroup->setName(sourceChildGroup->name()); + targetChildGroup->setNotes(sourceChildGroup->notes()); + if (sourceChildGroup->iconNumber() == 0) { + targetChildGroup->setIcon(sourceChildGroup->iconUuid()); + } else { + targetChildGroup->setIcon(sourceChildGroup->iconNumber()); + } + targetChildGroup->setExpiryTime(sourceChildGroup->timeInfo().expiryTime()); + TimeInfo timeInfo = targetChildGroup->timeInfo(); + timeInfo.setLastModificationTime(timeOther); + targetChildGroup->setTimeInfo(timeInfo); + } + return changes; +} + +bool Merger::markOlderEntry(Entry* entry) +{ + entry->attributes()->set( + "merged", tr("older entry merged from database \"%1\"").arg(entry->group()->database()->metadata()->name())); + return true; +} + +void Merger::moveEntry(Entry* entry, Group* targetGroup) +{ + Q_ASSERT(entry); + Group* sourceGroup = entry->group(); + if (sourceGroup == targetGroup) { + return; + } + const bool sourceGroupUpdateTimeInfo = sourceGroup ? sourceGroup->canUpdateTimeinfo() : false; + if (sourceGroup) { + sourceGroup->setUpdateTimeinfo(false); + } + const bool targetGroupUpdateTimeInfo = targetGroup ? targetGroup->canUpdateTimeinfo() : false; + if (targetGroup) { + targetGroup->setUpdateTimeinfo(false); + } + const bool entryUpdateTimeInfo = entry->canUpdateTimeinfo(); + entry->setUpdateTimeinfo(false); + + entry->setGroup(targetGroup); + + entry->setUpdateTimeinfo(entryUpdateTimeInfo); + if (targetGroup) { + targetGroup->setUpdateTimeinfo(targetGroupUpdateTimeInfo); + } + if (sourceGroup) { + sourceGroup->setUpdateTimeinfo(sourceGroupUpdateTimeInfo); + } +} + +void Merger::moveGroup(Group* group, Group* targetGroup) +{ + Q_ASSERT(group); + Group* sourceGroup = group->parentGroup(); + if (sourceGroup == targetGroup) { + return; + } + const bool sourceGroupUpdateTimeInfo = sourceGroup ? sourceGroup->canUpdateTimeinfo() : false; + if (sourceGroup) { + sourceGroup->setUpdateTimeinfo(false); + } + const bool targetGroupUpdateTimeInfo = targetGroup ? targetGroup->canUpdateTimeinfo() : false; + if (targetGroup) { + targetGroup->setUpdateTimeinfo(false); + } + const bool groupUpdateTimeInfo = group->canUpdateTimeinfo(); + group->setUpdateTimeinfo(false); + + group->setParent(targetGroup); + + group->setUpdateTimeinfo(groupUpdateTimeInfo); + if (targetGroup) { + targetGroup->setUpdateTimeinfo(targetGroupUpdateTimeInfo); + } + if (sourceGroup) { + sourceGroup->setUpdateTimeinfo(sourceGroupUpdateTimeInfo); + } +} + +void Merger::eraseEntry(Entry* entry) +{ + Database* database = entry->database(); + // most simple method to remove an item from DeletedObjects :( + const QList deletions = database->deletedObjects(); + Group* parentGroup = entry->group(); + const bool groupUpdateTimeInfo = parentGroup ? parentGroup->canUpdateTimeinfo() : false; + if (parentGroup) { + parentGroup->setUpdateTimeinfo(false); + } + delete entry; + if (parentGroup) { + parentGroup->setUpdateTimeinfo(groupUpdateTimeInfo); + } + database->setDeletedObjects(deletions); +} + +void Merger::eraseGroup(Group* group) +{ + Database* database = group->database(); + // most simple method to remove an item from DeletedObjects :( + const QList deletions = database->deletedObjects(); + Group* parentGroup = group->parentGroup(); + const bool groupUpdateTimeInfo = parentGroup ? parentGroup->canUpdateTimeinfo() : false; + if (parentGroup) { + parentGroup->setUpdateTimeinfo(false); + } + delete group; + if (parentGroup) { + parentGroup->setUpdateTimeinfo(groupUpdateTimeInfo); + } + database->setDeletedObjects(deletions); +} + +Merger::ChangeList +Merger::resolveEntryConflict_Duplicate(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) +{ + ChangeList changes; + const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), + sourceEntry->timeInfo().lastModificationTime(), + CompareItemIgnoreMilliseconds); + // if one entry is newer, create a clone and add it to the group + if (comparison < 0) { + Entry* clonedEntry = sourceEntry->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); + moveEntry(clonedEntry, context.m_targetGroup); + markOlderEntry(targetEntry); + changes << tr("Adding backup for older target %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); + } else if (comparison > 0) { + Entry* clonedEntry = sourceEntry->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); + moveEntry(clonedEntry, context.m_targetGroup); + markOlderEntry(clonedEntry); + changes << tr("Adding backup for older source %1 [%2]").arg(sourceEntry->title(), sourceEntry->uuidToHex()); + } + return changes; +} + +Merger::ChangeList +Merger::resolveEntryConflict_KeepLocal(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) +{ + Q_UNUSED(context); + ChangeList changes; + const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), + sourceEntry->timeInfo().lastModificationTime(), + CompareItemIgnoreMilliseconds); + if (comparison < 0) { + // we need to make our older entry "newer" than the new entry - therefore + // we just create a new history entry without any changes - this preserves + // the old state before merging the new state and updates the timestamp + // the merge takes care, that the newer entry is sorted inbetween both entries + // this type of merge changes the database timestamp since reapplying the + // old entry is an active change of the database! + changes << tr("Reapplying older target entry on top of newer source %1 [%2]") + .arg(targetEntry->title(), targetEntry->uuidToHex()); + Entry* agedTargetEntry = targetEntry->clone(Entry::CloneNoFlags); + targetEntry->addHistoryItem(agedTargetEntry); + } + return changes; +} + +Merger::ChangeList +Merger::resolveEntryConflict_KeepRemote(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) +{ + Q_UNUSED(context); + ChangeList changes; + const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), + sourceEntry->timeInfo().lastModificationTime(), + CompareItemIgnoreMilliseconds); + if (comparison > 0) { + // we need to make our older entry "newer" than the new entry - therefore + // we just create a new history entry without any changes - this preserves + // the old state before merging the new state and updates the timestamp + // the merge takes care, that the newer entry is sorted inbetween both entries + // this type of merge changes the database timestamp since reapplying the + // old entry is an active change of the database! + changes << tr("Reapplying older source entry on top of newer target %1 [%2]") + .arg(targetEntry->title(), targetEntry->uuidToHex()); + targetEntry->beginUpdate(); + targetEntry->copyDataFrom(sourceEntry); + targetEntry->endUpdate(); + // History item is created by endUpdate since we should have changes + } + return changes; +} + +Merger::ChangeList Merger::resolveEntryConflict_MergeHistories(const MergeContext& context, + const Entry* sourceEntry, + Entry* targetEntry, + Group::MergeMode mergeMethod) +{ + Q_UNUSED(context); + + ChangeList changes; + const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), + sourceEntry->timeInfo().lastModificationTime(), + CompareItemIgnoreMilliseconds); + if (comparison < 0) { + Group* currentGroup = targetEntry->group(); + Entry* clonedEntry = sourceEntry->clone(Entry::CloneIncludeHistory); + qDebug("Merge %s/%s with alien on top under %s", + qPrintable(targetEntry->title()), + qPrintable(sourceEntry->title()), + qPrintable(currentGroup->name())); + changes << tr("Synchronizing from newer source %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); + moveEntry(clonedEntry, currentGroup); + mergeHistory(targetEntry, clonedEntry, mergeMethod); + eraseEntry(targetEntry); + } else { + qDebug("Merge %s/%s with local on top/under %s", + qPrintable(targetEntry->title()), + qPrintable(sourceEntry->title()), + qPrintable(targetEntry->group()->name())); + const bool changed = mergeHistory(sourceEntry, targetEntry, mergeMethod); + if (changed) { + changes + << tr("Synchronizing from older source %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); + } + } + return changes; +} + +Merger::ChangeList +Merger::resolveEntryConflict(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry) +{ + ChangeList changes; + // We need to cut off the milliseconds since the persistent format only supports times down to seconds + // so when we import data from a remote source, it may represent the (or even some msec newer) data + // which may be discarded due to higher runtime precision + + Group::MergeMode mergeMode = m_mode == Group::Default ? context.m_targetGroup->mergeMode() : m_mode; + switch (mergeMode) { + case Group::Duplicate: + changes << resolveEntryConflict_Duplicate(context, sourceEntry, targetEntry); + break; + + case Group::KeepLocal: + changes << resolveEntryConflict_KeepLocal(context, sourceEntry, targetEntry); + changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); + break; + + case Group::KeepRemote: + changes << resolveEntryConflict_KeepRemote(context, sourceEntry, targetEntry); + changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); + break; + + case Group::Synchronize: + case Group::KeepNewer: + // nothing special to do since resolveEntryConflictMergeHistories takes care to use the newest entry + changes << resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); + break; + + default: + // do nothing + break; + } + return changes; +} + +bool Merger::mergeHistory(const Entry* sourceEntry, Entry* targetEntry, Group::MergeMode mergeMethod) +{ + Q_UNUSED(mergeMethod); + const auto targetHistoryItems = targetEntry->historyItems(); + const auto sourceHistoryItems = sourceEntry->historyItems(); + const int comparison = compare(sourceEntry->timeInfo().lastModificationTime(), + targetEntry->timeInfo().lastModificationTime(), + CompareItemIgnoreMilliseconds); + const bool preferLocal = mergeMethod == Group::KeepLocal || comparison < 0; + const bool preferRemote = mergeMethod == Group::KeepRemote || comparison > 0; + + QMap merged; + for (Entry* historyItem : targetHistoryItems) { + const QDateTime modificationTime = Clock::serialized(historyItem->timeInfo().lastModificationTime()); + if (merged.contains(modificationTime) + && !merged[modificationTime]->equals(historyItem, CompareItemIgnoreMilliseconds)) { + ::qWarning("Inconsistent history entry of %s[%s] at %s contains conflicting changes - conflict resolution " + "may lose data!", + qPrintable(sourceEntry->title()), + qPrintable(sourceEntry->uuidToHex()), + qPrintable(modificationTime.toString("yyyy-MM-dd HH-mm-ss-zzz"))); + } + merged[modificationTime] = historyItem->clone(Entry::CloneNoFlags); + } + for (Entry* historyItem : sourceHistoryItems) { + // Items with same modification-time changes will be regarded as same (like KeePass2) + const QDateTime modificationTime = Clock::serialized(historyItem->timeInfo().lastModificationTime()); + if (merged.contains(modificationTime) + && !merged[modificationTime]->equals(historyItem, CompareItemIgnoreMilliseconds)) { + ::qWarning( + "History entry of %s[%s] at %s contains conflicting changes - conflict resolution may lose data!", + qPrintable(sourceEntry->title()), + qPrintable(sourceEntry->uuidToHex()), + qPrintable(modificationTime.toString("yyyy-MM-dd HH-mm-ss-zzz"))); + } + if (preferRemote && merged.contains(modificationTime)) { + // forcefully apply the remote history item + delete merged.take(modificationTime); + } + if (!merged.contains(modificationTime)) { + merged[modificationTime] = historyItem->clone(Entry::CloneNoFlags); + } + } + + const QDateTime targetModificationTime = Clock::serialized(targetEntry->timeInfo().lastModificationTime()); + const QDateTime sourceModificationTime = Clock::serialized(sourceEntry->timeInfo().lastModificationTime()); + if (targetModificationTime == sourceModificationTime + && !targetEntry->equals(sourceEntry, + CompareItemIgnoreMilliseconds | CompareItemIgnoreHistory | CompareItemIgnoreLocation)) { + ::qWarning("Entry of %s[%s] contains conflicting changes - conflict resolution may lose data!", + qPrintable(sourceEntry->title()), + qPrintable(sourceEntry->uuidToHex())); + } + + if (targetModificationTime < sourceModificationTime) { + if (preferLocal && merged.contains(targetModificationTime)) { + // forcefully apply the local history item + delete merged.take(targetModificationTime); + } + if (!merged.contains(targetModificationTime)) { + merged[targetModificationTime] = targetEntry->clone(Entry::CloneNoFlags); + } + } else if (targetModificationTime > sourceModificationTime) { + if (preferRemote && !merged.contains(sourceModificationTime)) { + // forcefully apply the remote history item + delete merged.take(sourceModificationTime); + } + if (!merged.contains(sourceModificationTime)) { + merged[sourceModificationTime] = sourceEntry->clone(Entry::CloneNoFlags); + } + } + + bool changed = false; + const int maxItems = targetEntry->database()->metadata()->historyMaxItems(); + const auto updatedHistoryItems = merged.values(); + for (int i = 0; i < maxItems; ++i) { + const Entry* oldEntry = targetHistoryItems.value(targetHistoryItems.count() - i); + const Entry* newEntry = updatedHistoryItems.value(updatedHistoryItems.count() - i); + if (!oldEntry && !newEntry) { + continue; + } + if (oldEntry && newEntry && oldEntry->equals(newEntry, CompareItemIgnoreMilliseconds)) { + continue; + } + changed = true; + break; + } + if (!changed) { + qDeleteAll(updatedHistoryItems); + return false; + } + // We need to prevent any modification to the database since every change should be tracked either + // in a clone history item or in the Entry itself + const TimeInfo timeInfo = targetEntry->timeInfo(); + const bool blockedSignals = targetEntry->blockSignals(true); + bool updateTimeInfo = targetEntry->canUpdateTimeinfo(); + targetEntry->setUpdateTimeinfo(false); + targetEntry->removeHistoryItems(targetHistoryItems); + for (Entry* historyItem : merged) { + Q_ASSERT(!historyItem->parent()); + targetEntry->addHistoryItem(historyItem); + } + targetEntry->truncateHistory(); + targetEntry->blockSignals(blockedSignals); + targetEntry->setUpdateTimeinfo(updateTimeInfo); + Q_ASSERT(timeInfo == targetEntry->timeInfo()); + Q_UNUSED(timeInfo); + return true; +} + +Merger::ChangeList Merger::mergeDeletions(const MergeContext& context) +{ + ChangeList changes; + Group::MergeMode mergeMode = m_mode == Group::Default ? context.m_targetGroup->mergeMode() : m_mode; + if (mergeMode != Group::Synchronize) { + // no deletions are applied for any other strategy! + return changes; + } + + const auto targetDeletions = context.m_targetDb->deletedObjects(); + const auto sourceDeletions = context.m_sourceDb->deletedObjects(); + + QList deletions; + QMap mergedDeletions; + QList entries; + QList groups; + + for (const auto& object : (targetDeletions + sourceDeletions)) { + if (!mergedDeletions.contains(object.uuid)) { + mergedDeletions[object.uuid] = object; + + auto* entry = context.m_targetRootGroup->findEntryByUuid(object.uuid); + if (entry) { + entries << entry; + continue; + } + auto* group = context.m_targetRootGroup->findGroupByUuid(object.uuid); + if (group) { + groups << group; + continue; + } + deletions << object; + continue; + } + if (mergedDeletions[object.uuid].deletionTime > object.deletionTime) { + mergedDeletions[object.uuid] = object; + } + } + + while (!entries.isEmpty()) { + auto* entry = entries.takeFirst(); + const auto& object = mergedDeletions[entry->uuid()]; + if (entry->timeInfo().lastModificationTime() > object.deletionTime) { + // keep deleted entry since it was changed after deletion date + continue; + } + deletions << object; + if (entry->group()) { + changes << tr("Deleting child %1 [%2]").arg(entry->title(), entry->uuidToHex()); + } else { + changes << tr("Deleting orphan %1 [%2]").arg(entry->title(), entry->uuidToHex()); + } + // Entry is inserted into deletedObjects after deletions are processed + eraseEntry(entry); + } + + while (!groups.isEmpty()) { + auto* group = groups.takeFirst(); + if (!(group->children().toSet() & groups.toSet()).isEmpty()) { + // we need to finish all children before we are able to determine if the group can be removed + groups << group; + continue; + } + const auto& object = mergedDeletions[group->uuid()]; + if (group->timeInfo().lastModificationTime() > object.deletionTime) { + // keep deleted group since it was changed after deletion date + continue; + } + if (!group->entriesRecursive(false).isEmpty() || !group->groupsRecursive(false).isEmpty()) { + // keep deleted group since it contains undeleted content + continue; + } + deletions << object; + if (group->parentGroup()) { + changes << tr("Deleting child %1 [%2]").arg(group->name(), group->uuidToHex()); + } else { + changes << tr("Deleting orphan %1 [%2]").arg(group->name(), group->uuidToHex()); + } + eraseGroup(group); + } + // Put every deletion to the earliest date of deletion + if (deletions != context.m_targetDb->deletedObjects()) { + changes << tr("Changed deleted objects"); + } + context.m_targetDb->setDeletedObjects(deletions); + return changes; +} + +Merger::ChangeList Merger::mergeMetadata(const MergeContext& context) +{ + // TODO HNH: missing handling of recycle bin, names, templates for groups and entries, + // public data (entries of newer dict override keys of older dict - ignoring + // their own age - it is enough if one entry of the whole dict is newer) => possible lost update + // TODO HNH: CustomData is merged with entries of the new customData overwrite entries + // of the older CustomData - the dict with the newest entry is considered + // newer regardless of the age of the other entries => possible lost update + ChangeList changes; + auto* sourceMetadata = context.m_sourceDb->metadata(); + auto* targetMetadata = context.m_targetDb->metadata(); + + const auto keys = sourceMetadata->customIcons().keys(); + for (QUuid customIconId : keys) { + QImage customIcon = sourceMetadata->customIcon(customIconId); + if (!targetMetadata->containsCustomIcon(customIconId)) { + targetMetadata->addCustomIcon(customIconId, customIcon); + changes << tr("Adding missing icon %1").arg(QString::fromLatin1(customIconId.toRfc4122().toHex())); + } + } + return changes; +} diff --git a/src/core/Merger.h b/src/core/Merger.h new file mode 100644 index 000000000..03a47a27f --- /dev/null +++ b/src/core/Merger.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#ifndef KEEPASSXC_MERGER_H +#define KEEPASSXC_MERGER_H + +#include "core/Group.h" +#include +#include + +class Database; +class Entry; + +class Merger : public QObject +{ + Q_OBJECT +public: + Merger(const Database* sourceDb, Database* targetDb); + Merger(const Group* sourceGroup, Group* targetGroup); + void setForcedMergeMode(Group::MergeMode mode); + void resetForcedMergeMode(); + bool merge(); + +private: + typedef QString Change; + typedef QStringList ChangeList; + + struct MergeContext + { + QPointer m_sourceDb; + QPointer m_targetDb; + QPointer m_sourceRootGroup; + QPointer m_targetRootGroup; + QPointer m_sourceGroup; + QPointer m_targetGroup; + }; + ChangeList mergeGroup(const MergeContext& context); + ChangeList mergeDeletions(const MergeContext& context); + ChangeList mergeMetadata(const MergeContext& context); + bool markOlderEntry(Entry* entry); + bool mergeHistory(const Entry* sourceEntry, Entry* targetEntry, Group::MergeMode mergeMethod); + void moveEntry(Entry* entry, Group* targetGroup); + void moveGroup(Group* group, Group* targetGroup); + // remove an entry without a trace in the deletedObjects - needed for elemination cloned entries + void eraseEntry(Entry* entry); + // remove an entry without a trace in the deletedObjects - needed for elemination cloned entries + void eraseGroup(Group* group); + ChangeList resolveEntryConflict(const MergeContext& context, const Entry* existingEntry, Entry* otherEntry); + ChangeList resolveGroupConflict(const MergeContext& context, const Group* existingGroup, Group* otherGroup); + Merger::ChangeList + resolveEntryConflict_Duplicate(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); + Merger::ChangeList + resolveEntryConflict_KeepLocal(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); + Merger::ChangeList + resolveEntryConflict_KeepRemote(const MergeContext& context, const Entry* sourceEntry, Entry* targetEntry); + Merger::ChangeList resolveEntryConflict_MergeHistories(const MergeContext& context, + const Entry* sourceEntry, + Entry* targetEntry, + Group::MergeMode mergeMethod); + +private: + MergeContext m_context; + Group::MergeMode m_mode; +}; + +#endif // KEEPASSXC_MERGER_H diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index 9da2f30dc..45010a4ff 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -15,9 +15,10 @@ * along with this program. If not, see . */ -#include #include "Metadata.h" +#include +#include "core/Clock.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Tools.h" @@ -43,7 +44,7 @@ Metadata::Metadata(QObject* parent) m_data.protectUrl = false; m_data.protectNotes = false; - QDateTime now = QDateTime::currentDateTimeUtc(); + QDateTime now = Clock::currentDateTimeUtc(); m_data.nameChanged = now; m_data.descriptionChanged = now; m_data.defaultUserNameChanged = now; @@ -52,31 +53,30 @@ Metadata::Metadata(QObject* parent) m_masterKeyChanged = now; m_settingsChanged = now; - connect(m_customData, SIGNAL(modified()), this, SIGNAL(modified())); + connect(m_customData, SIGNAL(customDataModified()), this, SIGNAL(metadataModified())); } template bool Metadata::set(P& property, const V& value) { if (property != value) { property = value; - emit modified(); + emit metadataModified(); return true; - } - else { + } else { return false; } } -template bool Metadata::set(P& property, const V& value, QDateTime& dateTime) { +template bool Metadata::set(P& property, const V& value, QDateTime& dateTime) +{ if (property != value) { property = value; if (m_updateDatetime) { - dateTime = QDateTime::currentDateTimeUtc(); + dateTime = Clock::currentDateTimeUtc(); } - emit modified(); + emit metadataModified(); return true; - } - else { + } else { return false; } } @@ -161,12 +161,12 @@ bool Metadata::protectNotes() const return m_data.protectNotes; } -QImage Metadata::customIcon(const Uuid& uuid) const +QImage Metadata::customIcon(const QUuid& uuid) const { return m_customIcons.value(uuid); } -QPixmap Metadata::customIconPixmap(const Uuid& uuid) const +QPixmap Metadata::customIconPixmap(const QUuid& uuid) const { QPixmap pixmap; @@ -184,7 +184,7 @@ QPixmap Metadata::customIconPixmap(const Uuid& uuid) const return pixmap; } -QPixmap Metadata::customIconScaledPixmap(const Uuid& uuid) const +QPixmap Metadata::customIconScaledPixmap(const QUuid& uuid) const { QPixmap pixmap; @@ -203,28 +203,28 @@ QPixmap Metadata::customIconScaledPixmap(const Uuid& uuid) const return pixmap; } -bool Metadata::containsCustomIcon(const Uuid& uuid) const +bool Metadata::containsCustomIcon(const QUuid& uuid) const { return m_customIcons.contains(uuid); } -QHash Metadata::customIcons() const +QHash Metadata::customIcons() const { return m_customIcons; } -QHash Metadata::customIconsScaledPixmaps() const +QHash Metadata::customIconsScaledPixmaps() const { - QHash result; + QHash result; - for (const Uuid& uuid : m_customIconsOrder) { + for (const QUuid& uuid : m_customIconsOrder) { result.insert(uuid, customIconScaledPixmap(uuid)); } return result; } -QList Metadata::customIconsOrder() const +QList Metadata::customIconsOrder() const { return m_customIconsOrder; } @@ -311,9 +311,7 @@ void Metadata::setGenerator(const QString& value) void Metadata::setName(const QString& value) { - if (set(m_data.name, value, m_data.nameChanged)) { - emit nameTextChanged(); - } + set(m_data.name, value, m_data.nameChanged); } void Metadata::setNameChanged(const QDateTime& value) @@ -379,7 +377,7 @@ void Metadata::setProtectNotes(bool value) set(m_data.protectNotes, value); } -void Metadata::addCustomIcon(const Uuid& uuid, const QImage& icon) +void Metadata::addCustomIcon(const QUuid& uuid, const QImage& icon) { Q_ASSERT(!uuid.isNull()); Q_ASSERT(!m_customIcons.contains(uuid)); @@ -393,26 +391,24 @@ void Metadata::addCustomIcon(const Uuid& uuid, const QImage& icon) QByteArray hash = hashImage(icon); m_customIconsHashes[hash] = uuid; Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count()); - emit modified(); + emit metadataModified(); } -void Metadata::addCustomIconScaled(const Uuid& uuid, const QImage& icon) +void Metadata::addCustomIconScaled(const QUuid& uuid, const QImage& icon) { QImage iconScaled; // scale down to 128x128 if icon is larger if (icon.width() > 128 || icon.height() > 128) { - iconScaled = icon.scaled(QSize(128, 128), Qt::KeepAspectRatio, - Qt::SmoothTransformation); - } - else { + iconScaled = icon.scaled(QSize(128, 128), Qt::KeepAspectRatio, Qt::SmoothTransformation); + } else { iconScaled = icon; } addCustomIcon(uuid, iconScaled); } -void Metadata::removeCustomIcon(const Uuid& uuid) +void Metadata::removeCustomIcon(const QUuid& uuid) { Q_ASSERT(!uuid.isNull()); Q_ASSERT(m_customIcons.contains(uuid)); @@ -430,18 +426,18 @@ void Metadata::removeCustomIcon(const Uuid& uuid) m_customIconScaledCacheKeys.remove(uuid); m_customIconsOrder.removeAll(uuid); Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count()); - emit modified(); + emit metadataModified(); } -Uuid Metadata::findCustomIcon(const QImage &candidate) +QUuid Metadata::findCustomIcon(const QImage& candidate) { QByteArray hash = hashImage(candidate); - return m_customIconsHashes.value(hash, Uuid()); + return m_customIconsHashes.value(hash, QUuid()); } -void Metadata::copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata) +void Metadata::copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata) { - for (const Uuid& uuid : iconList) { + for (const QUuid& uuid : iconList) { Q_ASSERT(otherMetadata->containsCustomIcon(uuid)); if (!containsCustomIcon(uuid) && otherMetadata->containsCustomIcon(uuid)) { @@ -452,7 +448,11 @@ void Metadata::copyCustomIcons(const QSet& iconList, const Metadata* other QByteArray Metadata::hashImage(const QImage& image) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + auto data = QByteArray(reinterpret_cast(image.bits()), static_cast(image.sizeInBytes())); +#else auto data = QByteArray(reinterpret_cast(image.bits()), image.byteCount()); +#endif return QCryptographicHash::hash(data, QCryptographicHash::Md5); } diff --git a/src/core/Metadata.h b/src/core/Metadata.h index a52cb0a78..01abcb809 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -25,8 +25,8 @@ #include #include #include +#include -#include "core/Uuid.h" #include "core/CustomData.h" class Database; @@ -78,14 +78,14 @@ public: bool protectPassword() const; bool protectUrl() const; bool protectNotes() const; - QImage customIcon(const Uuid& uuid) const; - QPixmap customIconPixmap(const Uuid& uuid) const; - QPixmap customIconScaledPixmap(const Uuid& uuid) const; - bool containsCustomIcon(const Uuid& uuid) const; - QHash customIcons() const; - QList customIconsOrder() const; + QImage customIcon(const QUuid& uuid) const; + QPixmap customIconPixmap(const QUuid& uuid) const; + QPixmap customIconScaledPixmap(const QUuid& uuid) const; + bool containsCustomIcon(const QUuid& uuid) const; + QHash customIcons() const; + QList customIconsOrder() const; bool recycleBinEnabled() const; - QHash customIconsScaledPixmaps() const; + QHash customIconsScaledPixmaps() const; Group* recycleBin(); const Group* recycleBin() const; QDateTime recycleBinChanged() const; @@ -119,11 +119,11 @@ public: void setProtectPassword(bool value); void setProtectUrl(bool value); void setProtectNotes(bool value); - void addCustomIcon(const Uuid& uuid, const QImage& icon); - void addCustomIconScaled(const Uuid& uuid, const QImage& icon); - void removeCustomIcon(const Uuid& uuid); - void copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata); - Uuid findCustomIcon(const QImage& candidate); + void addCustomIcon(const QUuid& uuid, const QImage& icon); + void addCustomIconScaled(const QUuid& uuid, const QImage& icon); + void removeCustomIcon(const QUuid& uuid); + void copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata); + QUuid findCustomIcon(const QImage& candidate); void setRecycleBinEnabled(bool value); void setRecycleBin(Group* group); void setRecycleBinChanged(const QDateTime& value); @@ -148,8 +148,7 @@ public: void copyAttributesFrom(const Metadata* other); signals: - void nameTextChanged(); - void modified(); + void metadataModified(); private: template bool set(P& property, const V& value); @@ -159,11 +158,11 @@ private: MetadataData m_data; - QHash m_customIcons; - mutable QHash m_customIconCacheKeys; - mutable QHash m_customIconScaledCacheKeys; - QList m_customIconsOrder; - QHash m_customIconsHashes; + QHash m_customIcons; + mutable QHash m_customIconCacheKeys; + mutable QHash m_customIconScaledCacheKeys; + QList m_customIconsOrder; + QHash m_customIconsHashes; QPointer m_recycleBin; QDateTime m_recycleBinChanged; diff --git a/src/core/OSEventFilter.cpp b/src/core/OSEventFilter.cpp new file mode 100644 index 000000000..d5873ee8d --- /dev/null +++ b/src/core/OSEventFilter.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2013 Felix Geyer + * Copyright (C) 2018 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ + +#include "OSEventFilter.h" + +#include + +#include "autotype/AutoType.h" +#include "gui/MainWindow.h" +#ifdef Q_OS_WIN +#include +#endif + +OSEventFilter::OSEventFilter() +{ +} + +bool OSEventFilter::nativeEventFilter(const QByteArray& eventType, void* message, long* result) +{ + Q_UNUSED(result) + +#if defined(Q_OS_UNIX) + if (eventType == QByteArrayLiteral("xcb_generic_event_t")) { +#elif defined(Q_OS_WIN) + auto winmsg = static_cast(message); + if (winmsg->message == WM_QUERYENDSESSION) { + *result = 1; + return true; + } else if (winmsg->message == WM_ENDSESSION) { + getMainWindow()->appExit(); + *result = 0; + return true; + } else if (eventType == QByteArrayLiteral("windows_generic_MSG") + || eventType == QByteArrayLiteral("windows_dispatcher_MSG")) { +#endif + return autoType()->callEventFilter(message) == 1; + } + + return false; +} diff --git a/src/core/OSEventFilter.h b/src/core/OSEventFilter.h new file mode 100644 index 000000000..10434c0c2 --- /dev/null +++ b/src/core/OSEventFilter.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2013 Felix Geyer + * Copyright (C) 2018 KeePassXC Team + * + * This program 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. + * + * This program 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 this program. If not, see . + */ + +#ifndef OSEVENTFILTER_H +#define OSEVENTFILTER_H +#include + +class QByteArray; + +class OSEventFilter : public QAbstractNativeEventFilter +{ +public: + OSEventFilter(); + bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override; + +private: + Q_DISABLE_COPY(OSEventFilter) +}; + +#endif // OSEVENTFILTER_H diff --git a/src/core/PassphraseGenerator.cpp b/src/core/PassphraseGenerator.cpp index 88871eb8c..f972e0ef2 100644 --- a/src/core/PassphraseGenerator.cpp +++ b/src/core/PassphraseGenerator.cpp @@ -17,12 +17,12 @@ #include "PassphraseGenerator.h" -#include #include #include +#include -#include "crypto/Random.h" #include "core/FilePath.h" +#include "crypto/Random.h" const char* PassphraseGenerator::DefaultSeparator = " "; const char* PassphraseGenerator::DefaultWordList = "eff_large.wordlist"; @@ -52,7 +52,6 @@ void PassphraseGenerator::setWordCount(int wordCount) // safe default if something goes wrong m_wordCount = DefaultWordCount; } - } void PassphraseGenerator::setWordList(const QString& path) @@ -82,7 +81,8 @@ void PassphraseGenerator::setDefaultWordList() setWordList(path); } -void PassphraseGenerator::setWordSeparator(const QString& separator) { +void PassphraseGenerator::setWordSeparator(const QString& separator) +{ m_separator = separator; } @@ -91,7 +91,7 @@ QString PassphraseGenerator::generatePassphrase() const Q_ASSERT(isValid()); // In case there was an error loading the wordlist - if(m_wordlist.length() == 0) { + if (m_wordlist.length() == 0) { return QString(); } @@ -107,7 +107,7 @@ QString PassphraseGenerator::generatePassphrase() const bool PassphraseGenerator::isValid() const { if (m_wordCount == 0) { - return false; + return false; } return m_wordlist.size() >= 1000; diff --git a/src/core/PasswordGenerator.cpp b/src/core/PasswordGenerator.cpp index 740fb5467..1132582d6 100644 --- a/src/core/PasswordGenerator.cpp +++ b/src/core/PasswordGenerator.cpp @@ -21,16 +21,19 @@ #include "crypto/Random.h" #include +const char* PasswordGenerator::DefaultExcludedChars = ""; + PasswordGenerator::PasswordGenerator() : m_length(0) - , m_classes(0) - , m_flags(0) + , m_classes(nullptr) + , m_flags(nullptr) + , m_excluded(PasswordGenerator::DefaultExcludedChars) { } -double PasswordGenerator::calculateEntropy(QString password) +double PasswordGenerator::calculateEntropy(const QString& password) { - return ZxcvbnMatch(password.toLatin1(), 0, 0); + return ZxcvbnMatch(password.toLatin1(), nullptr, nullptr); } void PasswordGenerator::setLength(int length) @@ -45,7 +48,7 @@ void PasswordGenerator::setLength(int length) void PasswordGenerator::setCharClasses(const CharClasses& classes) { if (classes == 0) { - m_classes = DefaultCharset; + m_classes = DefaultCharset; return; } m_classes = classes; @@ -56,6 +59,11 @@ void PasswordGenerator::setFlags(const GeneratorFlags& flags) m_flags = flags; } +void PasswordGenerator::setExcludedChars(const QString& chars) +{ + m_excluded = chars; +} + QString PasswordGenerator::generatePassword() const { Q_ASSERT(isValid()); @@ -72,30 +80,29 @@ QString PasswordGenerator::generatePassword() const QString password; if (m_flags & CharFromEveryGroup) { - for (int i = 0; i < groups.size(); i++) { - int pos = randomGen()->randomUInt(groups[i].size()); + for (const auto& group : groups) { + int pos = randomGen()->randomUInt(static_cast(group.size())); - password.append(groups[i][pos]); + password.append(group[pos]); } for (int i = groups.size(); i < m_length; i++) { - int pos = randomGen()->randomUInt(passwordChars.size()); + int pos = randomGen()->randomUInt(static_cast(passwordChars.size())); password.append(passwordChars[pos]); } // shuffle chars for (int i = (password.size() - 1); i >= 1; i--) { - int j = randomGen()->randomUInt(i + 1); + int j = randomGen()->randomUInt(static_cast(i + 1)); QChar tmp = password[i]; password[i] = password[j]; password[j] = tmp; } - } - else { + } else { for (int i = 0; i < m_length; i++) { - int pos = randomGen()->randomUInt(passwordChars.size()); + int pos = randomGen()->randomUInt(static_cast(passwordChars.size())); password.append(passwordChars[pos]); } @@ -104,28 +111,11 @@ QString PasswordGenerator::generatePassword() const return password; } -int PasswordGenerator::getbits() const -{ - const QVector groups = passwordGroups(); - - int bits = 0; - QVector passwordChars; - for (const PasswordGroup& group: groups) { - bits += group.size(); - } - - bits *= m_length; - - return bits; -} - - bool PasswordGenerator::isValid() const { if (m_classes == 0) { return false; - } - else if (m_length == 0) { + } else if (m_length == 0) { return false; } @@ -133,7 +123,7 @@ bool PasswordGenerator::isValid() const return false; } - return true; + return !passwordGroups().isEmpty(); } QVector PasswordGenerator::passwordGroups() const @@ -143,7 +133,8 @@ QVector PasswordGenerator::passwordGroups() const if (m_classes & LowerLetters) { PasswordGroup group; - for (int i = 97; i < (97 + 26); i++) { + for (int i = 97; i <= (97 + 25); i++) { + if ((m_flags & ExcludeLookAlike) && (i == 108)) { // "l" continue; } @@ -156,7 +147,8 @@ QVector PasswordGenerator::passwordGroups() const if (m_classes & UpperLetters) { PasswordGroup group; - for (int i = 65; i < (65 + 26); i++) { + for (int i = 65; i <= (65 + 25); i++) { + if ((m_flags & ExcludeLookAlike) && (i == 73 || i == 79)) { // "I" and "O" continue; } @@ -179,28 +171,79 @@ QVector PasswordGenerator::passwordGroups() const passwordGroups.append(group); } - if (m_classes & SpecialCharacters) { + if (m_classes & Braces) { PasswordGroup group; - for (int i = 33; i <= 47; i++) { - group.append(i); + // ()[]{} + group.append(40); + group.append(41); + group.append(91); + group.append(93); + group.append(123); + group.append(125); + + passwordGroups.append(group); + } + if (m_classes & Punctuation) { + PasswordGroup group; + + // .,:; + group.append(44); + group.append(46); + group.append(58); + group.append(59); + + passwordGroups.append(group); + } + if (m_classes & Quotes) { + PasswordGroup group; + + // "' + group.append(34); + group.append(39); + + passwordGroups.append(group); + } + if (m_classes & Dashes) { + PasswordGroup group; + + // -/\_| + group.append(45); + group.append(47); + group.append(92); + group.append(95); + if (!(m_flags & ExcludeLookAlike)) { + group.append(124); // "|" } - for (int i = 58; i <= 64; i++) { - group.append(i); - } - - for (int i = 91; i <= 96; i++) { - group.append(i); - } - - for (int i = 123; i <= 126; i++) { - if ((m_flags & ExcludeLookAlike) && (i == 124)) { // "|" - continue; - } - + passwordGroups.append(group); + } + if (m_classes & Math) { + PasswordGroup group; + + // !*+-<=>? + group.append(33); + group.append(42); + group.append(43); + group.append(60); + group.append(61); + group.append(62); + group.append(63); + + passwordGroups.append(group); + } + if (m_classes & Logograms) { + PasswordGroup group; + + // #$%& + for (int i = 35; i <= 38; i++) { group.append(i); } + // @^`~ + group.append(64); + group.append(94); + group.append(96); + group.append(126); passwordGroups.append(group); } @@ -223,6 +266,27 @@ QVector PasswordGenerator::passwordGroups() const passwordGroups.append(group); } + // Loop over character groups and remove excluded characters from them; + // remove empty groups + int i = 0; + while (i != passwordGroups.size()) { + PasswordGroup group = passwordGroups[i]; + + for (QChar ch : m_excluded) { + int j = group.indexOf(ch); + while (j != -1) { + group.remove(j); + j = group.indexOf(ch); + } + } + if (!group.isEmpty()) { + passwordGroups.replace(i, group); + ++i; + } else { + passwordGroups.remove(i); + } + } + return passwordGroups; } @@ -239,7 +303,22 @@ int PasswordGenerator::numCharClasses() const if (m_classes & Numbers) { numClasses++; } - if (m_classes & SpecialCharacters) { + if (m_classes & Braces) { + numClasses++; + } + if (m_classes & Punctuation) { + numClasses++; + } + if (m_classes & Quotes) { + numClasses++; + } + if (m_classes & Dashes) { + numClasses++; + } + if (m_classes & Math) { + numClasses++; + } + if (m_classes & Logograms) { numClasses++; } if (m_classes & EASCII) { diff --git a/src/core/PasswordGenerator.h b/src/core/PasswordGenerator.h index 15a0dcefe..7bfdddd69 100644 --- a/src/core/PasswordGenerator.h +++ b/src/core/PasswordGenerator.h @@ -30,41 +30,56 @@ class PasswordGenerator public: enum CharClass { - LowerLetters = 0x1, - UpperLetters = 0x2, - Numbers = 0x4, - SpecialCharacters = 0x8, - EASCII = 0x10, - DefaultCharset = LowerLetters | UpperLetters | Numbers + LowerLetters = (1 << 0), + UpperLetters = (1 << 1), + Numbers = (1 << 2), + Braces = (1 << 3), + Punctuation = (1 << 4), + Quotes = (1 << 5), + Dashes = (1 << 6), + Math = (1 << 7), + Logograms = (1 << 8), + SpecialCharacters = Braces | Punctuation | Quotes | Dashes | Math | Logograms, + EASCII = (1 << 9), + DefaultCharset = LowerLetters | UpperLetters | Numbers }; Q_DECLARE_FLAGS(CharClasses, CharClass) enum GeneratorFlag { - ExcludeLookAlike = 0x1, - CharFromEveryGroup = 0x2, - DefaultFlags = ExcludeLookAlike | CharFromEveryGroup + ExcludeLookAlike = (1 << 0), + CharFromEveryGroup = (1 << 1), + AdvancedMode = (1 << 2), + DefaultFlags = ExcludeLookAlike | CharFromEveryGroup }; Q_DECLARE_FLAGS(GeneratorFlags, GeneratorFlag) public: PasswordGenerator(); - double calculateEntropy(QString password); + double calculateEntropy(const QString& password); void setLength(int length); void setCharClasses(const CharClasses& classes); void setFlags(const GeneratorFlags& flags); + void setExcludedChars(const QString& chars); bool isValid() const; QString generatePassword() const; - int getbits() const; static const int DefaultLength = 16; + static const char* DefaultExcludedChars; static constexpr bool DefaultLower = (DefaultCharset & LowerLetters) != 0; static constexpr bool DefaultUpper = (DefaultCharset & UpperLetters) != 0; static constexpr bool DefaultNumbers = (DefaultCharset & Numbers) != 0; static constexpr bool DefaultSpecial = (DefaultCharset & SpecialCharacters) != 0; + static constexpr bool DefaultAdvancedMode = (DefaultFlags & AdvancedMode) != 0; + static constexpr bool DefaultBraces = (DefaultCharset & Braces) != 0; + static constexpr bool DefaultPunctuation = (DefaultCharset & Punctuation) != 0; + static constexpr bool DefaultQuotes = (DefaultCharset & Quotes) != 0; + static constexpr bool DefaultDashes = (DefaultCharset & Dashes) != 0; + static constexpr bool DefaultMath = (DefaultCharset & Math) != 0; + static constexpr bool DefaultLogograms = (DefaultCharset & Logograms) != 0; static constexpr bool DefaultEASCII = (DefaultCharset & EASCII) != 0; static constexpr bool DefaultLookAlike = (DefaultFlags & ExcludeLookAlike) != 0; static constexpr bool DefaultFromEveryGroup = (DefaultFlags & CharFromEveryGroup) != 0; @@ -76,6 +91,7 @@ private: int m_length; CharClasses m_classes; GeneratorFlags m_flags; + QString m_excluded; Q_DISABLE_COPY(PasswordGenerator) }; diff --git a/src/core/ScreenLockListener.cpp b/src/core/ScreenLockListener.cpp index eb78cd608..2c1ba055a 100644 --- a/src/core/ScreenLockListener.cpp +++ b/src/core/ScreenLockListener.cpp @@ -18,11 +18,13 @@ #include "ScreenLockListener.h" #include "ScreenLockListenerPrivate.h" -ScreenLockListener::ScreenLockListener(QWidget* parent): - QObject(parent){ +ScreenLockListener::ScreenLockListener(QWidget* parent) + : QObject(parent) +{ m_listener = ScreenLockListenerPrivate::instance(parent); - connect(m_listener,SIGNAL(screenLocked()), this,SIGNAL(screenLocked())); + connect(m_listener, SIGNAL(screenLocked()), this, SIGNAL(screenLocked())); } -ScreenLockListener::~ScreenLockListener(){ +ScreenLockListener::~ScreenLockListener() +{ } diff --git a/src/core/ScreenLockListener.h b/src/core/ScreenLockListener.h index b4eb81e04..107d342a6 100644 --- a/src/core/ScreenLockListener.h +++ b/src/core/ScreenLockListener.h @@ -21,7 +21,8 @@ class ScreenLockListenerPrivate; -class ScreenLockListener : public QObject { +class ScreenLockListener : public QObject +{ Q_OBJECT public: diff --git a/src/core/ScreenLockListenerDBus.cpp b/src/core/ScreenLockListenerDBus.cpp index 03eed58ad..5c57861bd 100644 --- a/src/core/ScreenLockListenerDBus.cpp +++ b/src/core/ScreenLockListenerDBus.cpp @@ -22,60 +22,54 @@ #include #include -ScreenLockListenerDBus::ScreenLockListenerDBus(QWidget *parent): - ScreenLockListenerPrivate(parent) +ScreenLockListenerDBus::ScreenLockListenerDBus(QWidget* parent) + : ScreenLockListenerPrivate(parent) { QDBusConnection sessionBus = QDBusConnection::sessionBus(); QDBusConnection systemBus = QDBusConnection::systemBus(); - sessionBus.connect( - "org.freedesktop.ScreenSaver", // service - "/org/freedesktop/ScreenSaver", // path - "org.freedesktop.ScreenSaver", // interface - "ActiveChanged", // signal name - this, //receiver - SLOT(freedesktopScreenSaver(bool))); + sessionBus.connect("org.freedesktop.ScreenSaver", // service + "/org/freedesktop/ScreenSaver", // path + "org.freedesktop.ScreenSaver", // interface + "ActiveChanged", // signal name + this, // receiver + SLOT(freedesktopScreenSaver(bool))); - sessionBus.connect( - "org.gnome.ScreenSaver", // service - "/org/gnome/ScreenSaver", // path - "org.gnome.ScreenSaver", // interface - "ActiveChanged", // signal name - this, //receiver - SLOT(freedesktopScreenSaver(bool))); + sessionBus.connect("org.gnome.ScreenSaver", // service + "/org/gnome/ScreenSaver", // path + "org.gnome.ScreenSaver", // interface + "ActiveChanged", // signal name + this, // receiver + SLOT(freedesktopScreenSaver(bool))); - sessionBus.connect( - "org.gnome.SessionManager", // service - "/org/gnome/SessionManager/Presence", // path - "org.gnome.SessionManager.Presence", // interface - "StatusChanged", // signal name - this, //receiver - SLOT(gnomeSessionStatusChanged(uint))); + sessionBus.connect("org.gnome.SessionManager", // service + "/org/gnome/SessionManager/Presence", // path + "org.gnome.SessionManager.Presence", // interface + "StatusChanged", // signal name + this, // receiver + SLOT(gnomeSessionStatusChanged(uint))); - systemBus.connect( - "org.freedesktop.login1", // service - "/org/freedesktop/login1", // path - "org.freedesktop.login1.Manager", // interface - "PrepareForSleep", // signal name - this, //receiver - SLOT(logindPrepareForSleep(bool))); + systemBus.connect("org.freedesktop.login1", // service + "/org/freedesktop/login1", // path + "org.freedesktop.login1.Manager", // interface + "PrepareForSleep", // signal name + this, // receiver + SLOT(logindPrepareForSleep(bool))); QString sessionId = QProcessEnvironment::systemEnvironment().value("XDG_SESSION_ID"); - systemBus.connect( - "", // service - QString("/org/freedesktop/login1/session/") + sessionId, // path - "org.freedesktop.login1.Session", // interface - "Lock", // signal name - this, //receiver - SLOT(unityLocked())); + systemBus.connect("", // service + QString("/org/freedesktop/login1/session/") + sessionId, // path + "org.freedesktop.login1.Session", // interface + "Lock", // signal name + this, // receiver + SLOT(unityLocked())); - sessionBus.connect( - "com.canonical.Unity", // service - "/com/canonical/Unity/Session", // path - "com.canonical.Unity.Session", // interface - "Locked", // signal name - this, //receiver - SLOT(unityLocked())); + sessionBus.connect("com.canonical.Unity", // service + "/com/canonical/Unity/Session", // path + "com.canonical.Unity.Session", // interface + "Locked", // signal name + this, // receiver + SLOT(unityLocked())); } void ScreenLockListenerDBus::gnomeSessionStatusChanged(uint status) diff --git a/src/core/ScreenLockListenerDBus.h b/src/core/ScreenLockListenerDBus.h index 72f308f72..ab73a8cf3 100644 --- a/src/core/ScreenLockListenerDBus.h +++ b/src/core/ScreenLockListenerDBus.h @@ -17,15 +17,15 @@ #ifndef SCREENLOCKLISTENERDBUS_H #define SCREENLOCKLISTENERDBUS_H +#include "ScreenLockListenerPrivate.h" #include #include -#include "ScreenLockListenerPrivate.h" class ScreenLockListenerDBus : public ScreenLockListenerPrivate { Q_OBJECT public: - explicit ScreenLockListenerDBus(QWidget *parent = 0); + explicit ScreenLockListenerDBus(QWidget* parent = nullptr); private slots: void gnomeSessionStatusChanged(uint status); diff --git a/src/core/ScreenLockListenerMac.cpp b/src/core/ScreenLockListenerMac.cpp index dce05de3f..08e4d1eee 100644 --- a/src/core/ScreenLockListenerMac.cpp +++ b/src/core/ScreenLockListenerMac.cpp @@ -17,8 +17,8 @@ #include "ScreenLockListenerMac.h" -#include #include +#include ScreenLockListenerMac* ScreenLockListenerMac::instance() { @@ -32,8 +32,10 @@ ScreenLockListenerMac* ScreenLockListenerMac::instance() return m_ptr; } -void ScreenLockListenerMac::notificationCenterCallBack(CFNotificationCenterRef, void*, - CFStringRef, const void*, +void ScreenLockListenerMac::notificationCenterCallBack(CFNotificationCenterRef, + void*, + CFStringRef, + const void*, CFDictionaryRef) { instance()->onSignalReception(); diff --git a/src/core/ScreenLockListenerMac.h b/src/core/ScreenLockListenerMac.h index cd36ce9e6..d2bee79b8 100644 --- a/src/core/ScreenLockListenerMac.h +++ b/src/core/ScreenLockListenerMac.h @@ -24,19 +24,21 @@ #include "ScreenLockListenerPrivate.h" -class ScreenLockListenerMac: public ScreenLockListenerPrivate { +class ScreenLockListenerMac : public ScreenLockListenerPrivate +{ Q_OBJECT public: static ScreenLockListenerMac* instance(); - static void notificationCenterCallBack(CFNotificationCenterRef center, void* observer, - CFStringRef name, const void* object, + static void notificationCenterCallBack(CFNotificationCenterRef center, + void* observer, + CFStringRef name, + const void* object, CFDictionaryRef userInfo); private: ScreenLockListenerMac(QWidget* parent = nullptr); void onSignalReception(); - }; #endif // SCREENLOCKLISTENERMAC_H diff --git a/src/core/ScreenLockListenerPrivate.cpp b/src/core/ScreenLockListenerPrivate.cpp index b36b9a33a..9dce17d4d 100644 --- a/src/core/ScreenLockListenerPrivate.cpp +++ b/src/core/ScreenLockListenerPrivate.cpp @@ -16,7 +16,7 @@ */ #include "ScreenLockListenerPrivate.h" -#if defined(Q_OS_MAC) +#if defined(Q_OS_MACOS) #include "ScreenLockListenerMac.h" #elif defined(Q_OS_UNIX) #include "ScreenLockListenerDBus.h" @@ -25,13 +25,13 @@ #endif ScreenLockListenerPrivate::ScreenLockListenerPrivate(QWidget* parent) - : QObject(parent) + : QObject(parent) { } ScreenLockListenerPrivate* ScreenLockListenerPrivate::instance(QWidget* parent) { -#if defined(Q_OS_MAC) +#if defined(Q_OS_MACOS) Q_UNUSED(parent); return ScreenLockListenerMac::instance(); #elif defined(Q_OS_UNIX) diff --git a/src/core/ScreenLockListenerPrivate.h b/src/core/ScreenLockListenerPrivate.h index 8ecad17d8..a7c080687 100644 --- a/src/core/ScreenLockListenerPrivate.h +++ b/src/core/ScreenLockListenerPrivate.h @@ -24,10 +24,10 @@ class ScreenLockListenerPrivate : public QObject { Q_OBJECT public: - static ScreenLockListenerPrivate* instance(QWidget* parent = 0); + static ScreenLockListenerPrivate* instance(QWidget* parent = nullptr); protected: - ScreenLockListenerPrivate(QWidget* parent = 0); + ScreenLockListenerPrivate(QWidget* parent = nullptr); signals: void screenLocked(); diff --git a/src/core/ScreenLockListenerWin.cpp b/src/core/ScreenLockListenerWin.cpp index 80fa32894..05d01f4cc 100644 --- a/src/core/ScreenLockListenerWin.cpp +++ b/src/core/ScreenLockListenerWin.cpp @@ -25,7 +25,7 @@ * See https://msdn.microsoft.com/en-us/library/aa383841(v=vs.85).aspx * See https://blogs.msdn.microsoft.com/oldnewthing/20060104-50/?p=32783 */ -ScreenLockListenerWin::ScreenLockListenerWin(QWidget* parent) +ScreenLockListenerWin::ScreenLockListenerWin(QWidget* parent) : ScreenLockListenerPrivate(parent) , QAbstractNativeEventFilter() { @@ -36,20 +36,17 @@ ScreenLockListenerWin::ScreenLockListenerWin(QWidget* parent) // This call requests a notification from windows when a laptop is closed HPOWERNOTIFY hPnotify = RegisterPowerSettingNotification( - reinterpret_cast(parent->winId()), - &GUID_LIDSWITCH_STATE_CHANGE, DEVICE_NOTIFY_WINDOW_HANDLE); + reinterpret_cast(parent->winId()), &GUID_LIDSWITCH_STATE_CHANGE, DEVICE_NOTIFY_WINDOW_HANDLE); m_powerNotificationHandle = reinterpret_cast(hPnotify); // This call requests a notification for session changes - if (!WTSRegisterSessionNotification( - reinterpret_cast(parent->winId()), - NOTIFY_FOR_THIS_SESSION)) { + if (!WTSRegisterSessionNotification(reinterpret_cast(parent->winId()), NOTIFY_FOR_THIS_SESSION)) { } } ScreenLockListenerWin::~ScreenLockListenerWin() { - HWND h= reinterpret_cast(static_cast(parent())->winId()); + HWND h = reinterpret_cast(static_cast(parent())->winId()); WTSUnRegisterSessionNotification(h); if (m_powerNotificationHandle) { diff --git a/src/core/ScreenLockListenerWin.h b/src/core/ScreenLockListenerWin.h index 6a8380efe..523ae5d0b 100644 --- a/src/core/ScreenLockListenerWin.h +++ b/src/core/ScreenLockListenerWin.h @@ -17,9 +17,9 @@ #ifndef SCREENLOCKLISTENERWIN_H #define SCREENLOCKLISTENERWIN_H +#include #include #include -#include #include "ScreenLockListenerPrivate.h" @@ -27,12 +27,12 @@ class ScreenLockListenerWin : public ScreenLockListenerPrivate, public QAbstract { Q_OBJECT public: - explicit ScreenLockListenerWin(QWidget* parent = 0); + explicit ScreenLockListenerWin(QWidget* parent = nullptr); ~ScreenLockListenerWin(); - virtual bool nativeEventFilter(const QByteArray &eventType, void* message, long*) override; + virtual bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override; private: - void* m_powerNotificationHandle ; + void* m_powerNotificationHandle; }; #endif // SCREENLOCKLISTENERWIN_H diff --git a/src/core/SignalMultiplexer.cpp b/src/core/SignalMultiplexer.cpp index 0f99b8e65..d1ed89e30 100644 --- a/src/core/SignalMultiplexer.cpp +++ b/src/core/SignalMultiplexer.cpp @@ -131,8 +131,7 @@ void SignalMultiplexer::connect(const Connection& con) if (con.sender) { QObject::connect(con.sender, con.signal, m_currentObject, con.slot); - } - else { + } else { QObject::connect(m_currentObject, con.signal, con.receiver, con.slot); } } @@ -143,8 +142,7 @@ void SignalMultiplexer::disconnect(const Connection& con) if (con.sender) { QObject::disconnect(con.sender, con.signal, m_currentObject, con.slot); - } - else { + } else { QObject::disconnect(m_currentObject, con.signal, con.receiver, con.slot); } } diff --git a/src/core/TimeDelta.cpp b/src/core/TimeDelta.cpp index e2dbdac40..a5331736c 100644 --- a/src/core/TimeDelta.cpp +++ b/src/core/TimeDelta.cpp @@ -19,10 +19,9 @@ #include -QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta) { - return dateTime.addDays(delta.getDays()) - .addMonths(delta.getMonths()) - .addYears(delta.getYears()); +QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta) +{ + return dateTime.addDays(delta.getDays()).addMonths(delta.getMonths()).addYears(delta.getYears()); } TimeDelta TimeDelta::fromDays(int days) diff --git a/src/core/TimeInfo.cpp b/src/core/TimeInfo.cpp index ec6ebdeec..9f4faf3a4 100644 --- a/src/core/TimeInfo.cpp +++ b/src/core/TimeInfo.cpp @@ -17,13 +17,13 @@ #include "TimeInfo.h" -#include "core/Tools.h" +#include "core/Clock.h" TimeInfo::TimeInfo() : m_expires(false) , m_usageCount(0) { - QDateTime now = QDateTime::currentDateTimeUtc(); + QDateTime now = Clock::currentDateTimeUtc(); m_lastModificationTime = now; m_creationTime = now; m_lastAccessTime = now; @@ -105,3 +105,38 @@ void TimeInfo::setLocationChanged(const QDateTime& dateTime) Q_ASSERT(dateTime.timeSpec() == Qt::UTC); m_locationChanged = dateTime; } + +bool TimeInfo::operator==(const TimeInfo& other) const +{ + return equals(other, CompareItemDefault); +} + +bool TimeInfo::operator!=(const TimeInfo& other) const +{ + return !this->operator==(other); +} + +bool TimeInfo::equals(const TimeInfo& other, CompareItemOptions options) const +{ + // clang-format off + if (::compare(m_lastModificationTime, other.m_lastModificationTime, options) != 0) { + return false; + } + if (::compare(m_creationTime, other.m_creationTime, options) != 0) { + return false; + } + if (::compare(!options.testFlag(CompareItemIgnoreStatistics), m_lastAccessTime, other.m_lastAccessTime, options) != 0) { + return false; + } + if (::compare(m_expires, m_expiryTime, other.m_expires, other.expiryTime(), options) != 0) { + return false; + } + if (::compare(!options.testFlag(CompareItemIgnoreStatistics), m_usageCount, other.m_usageCount, options) != 0) { + return false; + } + if (::compare(!options.testFlag(CompareItemIgnoreLocation), m_locationChanged, other.m_locationChanged, options) != 0) { + return false; + } + return true; + // clang-format on +} diff --git a/src/core/TimeInfo.h b/src/core/TimeInfo.h index 455c002cd..de8a37593 100644 --- a/src/core/TimeInfo.h +++ b/src/core/TimeInfo.h @@ -19,6 +19,9 @@ #define KEEPASSX_TIMEINFO_H #include +#include + +#include "core/Compare.h" class TimeInfo { @@ -33,6 +36,10 @@ public: int usageCount() const; QDateTime locationChanged() const; + bool operator==(const TimeInfo& other) const; + bool operator!=(const TimeInfo& other) const; + bool equals(const TimeInfo& other, CompareItemOptions options = CompareItemDefault) const; + void setLastModificationTime(const QDateTime& dateTime); void setCreationTime(const QDateTime& dateTime); void setLastAccessTime(const QDateTime& dateTime); diff --git a/src/core/Tools.cpp b/src/core/Tools.cpp index b9e4be8e0..b77a460d4 100644 --- a/src/core/Tools.cpp +++ b/src/core/Tools.cpp @@ -18,343 +18,229 @@ */ #include "Tools.h" +#include "core/Config.h" +#include "core/Translator.h" #include -#include -#include -#include -#include - #include +#include +#include +#include +#include +#include +#include +#include #ifdef Q_OS_WIN -#include // for Sleep(), SetDllDirectoryA(), SetSearchPathMode(), ... -#include // for SetSecurityInfo() +#include // for Sleep() #endif #ifdef Q_OS_UNIX #include // for nanosleep() #endif -#include "config-keepassx.h" - -#if defined(HAVE_RLIMIT_CORE) -#include -#endif - -#if defined(HAVE_PR_SET_DUMPABLE) -#include -#endif - -#ifdef HAVE_PT_DENY_ATTACH -#include -#include -#endif - -namespace Tools { - -QString humanReadableFileSize(qint64 bytes) +namespace Tools { - double size = bytes; + QString humanReadableFileSize(qint64 bytes, quint32 precision) + { + constexpr auto kibibyte = 1024; + double size = bytes; - QStringList units = QStringList() << "B" << "KiB" << "MiB" << "GiB"; - int i = 0; - int maxI = units.size() - 1; + QStringList units = QStringList() << "B" + << "KiB" + << "MiB" + << "GiB"; + int i = 0; + int maxI = units.size() - 1; - while ((size >= 1024) && (i < maxI)) { - size /= 1024; - i++; + while ((size >= kibibyte) && (i < maxI)) { + size /= kibibyte; + i++; + } + + return QString("%1 %2").arg(QLocale().toString(size, 'f', precision), units.at(i)); } - return QString("%1 %2").arg(QLocale().toString(size, 'f', 2), units.at(i)); -} + bool readFromDevice(QIODevice* device, QByteArray& data, int size) + { + QByteArray buffer; + buffer.resize(size); -bool hasChild(const QObject* parent, const QObject* child) -{ - if (!parent || !child) { - return false; - } - - const QObjectList children = parent->children(); - for (QObject* c : children) { - if (child == c || hasChild(c, child)) { + qint64 readResult = device->read(buffer.data(), size); + if (readResult == -1) { + return false; + } else { + buffer.resize(readResult); + data = buffer; return true; } } - return false; -} -bool readFromDevice(QIODevice* device, QByteArray& data, int size) -{ - QByteArray buffer; - buffer.resize(size); - - qint64 readResult = device->read(buffer.data(), size); - if (readResult == -1) { - return false; - } - else { - buffer.resize(readResult); - data = buffer; - return true; - } -} - -bool readAllFromDevice(QIODevice* device, QByteArray& data) -{ - QByteArray result; - qint64 readBytes = 0; - qint64 readResult; - do { - result.resize(result.size() + 16384); - readResult = device->read(result.data() + readBytes, result.size() - readBytes); - if (readResult > 0) { - readBytes += readResult; - } - } while (readResult > 0); - - if (readResult == -1) { - return false; - } - else { - result.resize(static_cast(readBytes)); - data = result; - return true; - } -} - -QString imageReaderFilter() -{ - const QList formats = QImageReader::supportedImageFormats(); - QStringList formatsStringList; - - for (const QByteArray& format : formats) { - for (int i = 0; i < format.size(); i++) { - if (!QChar(format.at(i)).isLetterOrNumber()) { - continue; - } - } - - formatsStringList.append("*." + QString::fromLatin1(format).toLower()); - } - - return formatsStringList.join(" "); -} - -bool isHex(const QByteArray& ba) -{ - for (char c : ba) { - if ( !( (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ) ) { - return false; - } - } - - return true; -} - -bool isBase64(const QByteArray& ba) -{ - QRegExp regexp("^(?:[a-z0-9+/]{4})*(?:[a-z0-9+/]{3}=|[a-z0-9+/]{2}==)?$", - Qt::CaseInsensitive, QRegExp::RegExp2); - - QString base64 = QString::fromLatin1(ba.constData(), ba.size()); - - return regexp.exactMatch(base64); -} - -void sleep(int ms) -{ - Q_ASSERT(ms >= 0); - - if (ms == 0) { - return; - } - -#ifdef Q_OS_WIN - Sleep(uint(ms)); -#else - timespec ts; - ts.tv_sec = ms / 1000; - ts.tv_nsec = (ms % 1000) * 1000 * 1000; - nanosleep(&ts, nullptr); -#endif -} - -void wait(int ms) -{ - Q_ASSERT(ms >= 0); - - if (ms == 0) { - return; - } - - QElapsedTimer timer; - timer.start(); - - if (ms <= 50) { - QCoreApplication::processEvents(QEventLoop::AllEvents, ms); - sleep(qMax(ms - static_cast(timer.elapsed()), 0)); - } - else { - int timeLeft; + bool readAllFromDevice(QIODevice* device, QByteArray& data) + { + QByteArray result; + qint64 readBytes = 0; + qint64 readResult; do { - timeLeft = ms - timer.elapsed(); - if (timeLeft > 0) { - QCoreApplication::processEvents(QEventLoop::AllEvents, timeLeft); - sleep(10); + result.resize(result.size() + 16384); + readResult = device->read(result.data() + readBytes, result.size() - readBytes); + if (readResult > 0) { + readBytes += readResult; } - } while (!timer.hasExpired(ms)); + } while (readResult > 0); + + if (readResult == -1) { + return false; + } else { + result.resize(static_cast(readBytes)); + data = result; + return true; + } } -} -void disableCoreDumps() -{ - // default to true - // there is no point in printing a warning if this is not implemented on the platform - bool success = true; + QString imageReaderFilter() + { + const QList formats = QImageReader::supportedImageFormats(); + QStringList formatsStringList; -#if defined(HAVE_RLIMIT_CORE) - struct rlimit limit; - limit.rlim_cur = 0; - limit.rlim_max = 0; - success = success && (setrlimit(RLIMIT_CORE, &limit) == 0); -#endif + for (const QByteArray& format : formats) { + for (char codePoint : format) { + if (!QChar(codePoint).isLetterOrNumber()) { + continue; + } + } -#if defined(HAVE_PR_SET_DUMPABLE) - success = success && (prctl(PR_SET_DUMPABLE, 0) == 0); -#endif + formatsStringList.append("*." + QString::fromLatin1(format).toLower()); + } - // Mac OS X -#ifdef HAVE_PT_DENY_ATTACH - success = success && (ptrace(PT_DENY_ATTACH, 0, 0, 0) == 0); -#endif + return formatsStringList.join(" "); + } + + bool isHex(const QByteArray& ba) + { + for (const unsigned char c : ba) { + if (!std::isxdigit(c)) { + return false; + } + } + + return true; + } + + bool isBase64(const QByteArray& ba) + { + constexpr auto pattern = R"(^(?:[a-z0-9+]{4})*(?:[a-z0-9+]{3}=|[a-z0-9+]{2}==)?$)"; + QRegExp regexp(pattern, Qt::CaseInsensitive, QRegExp::RegExp2); + + QString base64 = QString::fromLatin1(ba.constData(), ba.size()); + + return regexp.exactMatch(base64); + } + + void sleep(int ms) + { + Q_ASSERT(ms >= 0); + + if (ms == 0) { + return; + } #ifdef Q_OS_WIN - success = success && createWindowsDACL(); + Sleep(uint(ms)); +#else + timespec ts; + ts.tv_sec = ms / 1000; + ts.tv_nsec = (ms % 1000) * 1000 * 1000; + nanosleep(&ts, nullptr); #endif - - if (!success) { - qWarning("Unable to disable core dumps."); - } -} - -void setupSearchPaths() -{ -#ifdef Q_OS_WIN - // Make sure Windows doesn't load DLLs from the current working directory - SetDllDirectoryA(""); - SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE); -#endif -} - -// -// This function grants the user associated with the process token minimal access rights and -// denies everything else on Windows. This includes PROCESS_QUERY_INFORMATION and -// PROCESS_VM_READ access rights that are required for MiniDumpWriteDump() or ReadProcessMemory(). -// We do this using a discretionary access control list (DACL). Effectively this prevents -// crash dumps and disallows other processes from accessing our memory. This works as long -// as you do not have admin privileges, since then you are able to grant yourself the -// SeDebugPrivilege or SeTakeOwnershipPrivilege and circumvent the DACL. -// -bool createWindowsDACL() -{ - bool bSuccess = false; - -#ifdef Q_OS_WIN - // Process token and user - HANDLE hToken = nullptr; - PTOKEN_USER pTokenUser = nullptr; - DWORD cbBufferSize = 0; - - // Access control list - PACL pACL = nullptr; - DWORD cbACL = 0; - - // Open the access token associated with the calling process - if (!OpenProcessToken( - GetCurrentProcess(), - TOKEN_QUERY, - &hToken - )) { - goto Cleanup; } - // Retrieve the token information in a TOKEN_USER structure - GetTokenInformation( - hToken, - TokenUser, - nullptr, - 0, - &cbBufferSize - ); + void wait(int ms) + { + Q_ASSERT(ms >= 0); - pTokenUser = static_cast(HeapAlloc(GetProcessHeap(), 0, cbBufferSize)); - if (pTokenUser == nullptr) { - goto Cleanup; + if (ms == 0) { + return; + } + + QElapsedTimer timer; + timer.start(); + + if (ms <= 50) { + QCoreApplication::processEvents(QEventLoop::AllEvents, ms); + sleep(qMax(ms - static_cast(timer.elapsed()), 0)); + } else { + int timeLeft; + do { + timeLeft = ms - timer.elapsed(); + if (timeLeft > 0) { + QCoreApplication::processEvents(QEventLoop::AllEvents, timeLeft); + sleep(10); + } + } while (!timer.hasExpired(ms)); + } } - if (!GetTokenInformation( - hToken, - TokenUser, - pTokenUser, - cbBufferSize, - &cbBufferSize - )) { - goto Cleanup; + // Escape common regex symbols except for *, ?, and | + auto regexEscape = QRegularExpression(R"re(([-[\]{}()+.,\\\/^$#]))re"); + + QRegularExpression convertToRegex(const QString& string, bool useWildcards, bool exactMatch, bool caseSensitive) + { + QString pattern = string; + + // Wildcard support (*, ?, |) + if (useWildcards) { + pattern.replace(regexEscape, "\\\\1"); + pattern.replace("*", ".*"); + pattern.replace("?", "."); + } + + // Exact modifier + if (exactMatch) { + pattern = "^" + pattern + "$"; + } + + auto regex = QRegularExpression(pattern); + if (!caseSensitive) { + regex.setPatternOptions(QRegularExpression::CaseInsensitiveOption); + } + + return regex; } - if (!IsValidSid(pTokenUser->User.Sid)) { - goto Cleanup; + QString uuidToHex(const QUuid& uuid) + { + return QString::fromLatin1(uuid.toRfc4122().toHex()); } - // Calculate the amount of memory that must be allocated for the DACL - cbACL = sizeof(ACL) - + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pTokenUser->User.Sid); - - // Create and initialize an ACL - pACL = static_cast(HeapAlloc(GetProcessHeap(), 0, cbACL)); - if (pACL == nullptr) { - goto Cleanup; + QUuid hexToUuid(const QString& uuid) + { + return QUuid::fromRfc4122(QByteArray::fromHex(uuid.toLatin1())); } - if (!InitializeAcl(pACL, cbACL, ACL_REVISION)) { - goto Cleanup; + Buffer::Buffer() + : raw(nullptr) + , size(0) + { } - // Add allowed access control entries, everything else is denied - if (!AddAccessAllowedAce( - pACL, - ACL_REVISION, - SYNCHRONIZE | PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_TERMINATE, // same as protected process - pTokenUser->User.Sid // pointer to the trustee's SID - )) { - goto Cleanup; + Buffer::~Buffer() + { + clear(); } - // Set discretionary access control list - bSuccess = ERROR_SUCCESS == SetSecurityInfo( - GetCurrentProcess(), // object handle - SE_KERNEL_OBJECT, // type of object - DACL_SECURITY_INFORMATION, // change only the objects DACL - nullptr, nullptr, // do not change owner or group - pACL, // DACL specified - nullptr // do not change SACL - ); - -Cleanup: - - if (pACL != nullptr) { - HeapFree(GetProcessHeap(), 0, pACL); + void Buffer::clear() + { + if (size > 0) { + free(raw); + } + raw = nullptr; + size = 0; } - if (pTokenUser != nullptr) { - HeapFree(GetProcessHeap(), 0, pTokenUser); - } - if (hToken != nullptr) { - CloseHandle(hToken); - } -#endif - return bSuccess; -} + QByteArray Buffer::content() const + { + return QByteArray(reinterpret_cast(raw), size); + } } // namespace Tools diff --git a/src/core/Tools.h b/src/core/Tools.h index b6fa49c02..a2c09efe2 100644 --- a/src/core/Tools.h +++ b/src/core/Tools.h @@ -21,42 +21,85 @@ #include "core/Global.h" -#include #include #include +#include #include class QIODevice; +class QRegularExpression; -namespace Tools { - -QString humanReadableFileSize(qint64 bytes); -bool hasChild(const QObject* parent, const QObject* child); -bool readFromDevice(QIODevice* device, QByteArray& data, int size = 16384); -bool readAllFromDevice(QIODevice* device, QByteArray& data); -QString imageReaderFilter(); -bool isHex(const QByteArray& ba); -bool isBase64(const QByteArray& ba); -void sleep(int ms); -void wait(int ms); -void disableCoreDumps(); -void setupSearchPaths(); -bool createWindowsDACL(); - -template -RandomAccessIterator binaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T& value) +namespace Tools { - RandomAccessIterator it = std::lower_bound(begin, end, value); + QString humanReadableFileSize(qint64 bytes, quint32 precision = 2); + bool readFromDevice(QIODevice* device, QByteArray& data, int size = 16384); + bool readAllFromDevice(QIODevice* device, QByteArray& data); + QString imageReaderFilter(); + bool isHex(const QByteArray& ba); + bool isBase64(const QByteArray& ba); + void sleep(int ms); + void wait(int ms); + QString uuidToHex(const QUuid& uuid); + QUuid hexToUuid(const QString& uuid); + QRegularExpression convertToRegex(const QString& string, + bool useWildcards = false, + bool exactMatch = false, + bool caseSensitive = false); - if ((it == end) || (value < *it)) { - return end; - } - else { - return it; - } -} + template + RandomAccessIterator binaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T& value) + { + RandomAccessIterator it = std::lower_bound(begin, end, value); + if ((it == end) || (value < *it)) { + return end; + } else { + return it; + } + } + + template struct Map + { + QMap values; + Value& operator[](const Key index) + { + return values[index]; + } + + ~Map() + { + for (Value m : values) { + deleter(m); + } + } + }; + + struct Buffer + { + unsigned char* raw; + size_t size; + + Buffer(); + ~Buffer(); + + void clear(); + QByteArray content() const; + }; + + inline int qtRuntimeVersion() + { + // Cache the result since the Qt version can't change during + // the execution, computing it once will be enough + const static int version = []() { + const auto sq = QString::fromLatin1(qVersion()); + return (sq.section(QChar::fromLatin1('.'), 0, 0).toInt() << 16) + + (sq.section(QChar::fromLatin1('.'), 1, 1).toInt() << 8) + + (sq.section(QChar::fromLatin1('.'), 2, 2).toInt()); + }(); + + return version; + } } // namespace Tools #endif // KEEPASSX_TOOLS_H diff --git a/src/core/Translator.cpp b/src/core/Translator.cpp index 34bc7c2e6..595dadfa1 100644 --- a/src/core/Translator.cpp +++ b/src/core/Translator.cpp @@ -22,8 +22,8 @@ #include #include #include -#include #include +#include #include "config-keepassx.h" #include "core/Config.h" @@ -47,8 +47,7 @@ void Translator::installTranslators() #ifdef QT_DEBUG QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR), #endif - filePath()->dataPath("translations") - }; + filePath()->dataPath("translations")}; bool translationsLoaded = false; for (const QString& path : paths) { @@ -72,10 +71,9 @@ QList> Translator::availableLanguages() #ifdef QT_DEBUG QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR), #endif - filePath()->dataPath("translations") - }; + filePath()->dataPath("translations")}; - QList > languages; + QList> languages; languages.append(QPair("system", "System default")); QRegularExpression regExp("^keepassx_([a-zA-Z_]+)\\.qm$", QRegularExpression::CaseInsensitiveOption); @@ -138,7 +136,8 @@ bool Translator::installQtTranslator(const QString& language, const QString& pat QScopedPointer qtTranslator(new QTranslator(qApp)); if (qtTranslator->load(QString("qtbase_%1").arg(language), path)) { return QCoreApplication::installTranslator(qtTranslator.take()); - } else if (qtTranslator->load(QString("qtbase_%1").arg(language), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { + } else if (qtTranslator->load(QString("qtbase_%1").arg(language), + QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { return QCoreApplication::installTranslator(qtTranslator.take()); } return false; diff --git a/src/core/Uuid.cpp b/src/core/Uuid.cpp deleted file mode 100644 index cb32bfdc7..000000000 --- a/src/core/Uuid.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2010 Felix Geyer - * - * This program 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 2 or (at your option) - * version 3 of the License. - * - * This program 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 this program. If not, see . - */ - -#include "Uuid.h" - -#include - -#include "crypto/Random.h" - -const int Uuid::Length = 16; -const QRegExp Uuid::HexRegExp = QRegExp(QString("^[0-9A-F]{%1}$").arg(QString::number(Uuid::Length * 2)), - Qt::CaseInsensitive); - -Uuid::Uuid() - : m_data(Length, 0) -{ -} - -Uuid::Uuid(const QByteArray& data) -{ - Q_ASSERT(data.size() == Length); - - m_data = data; -} - -Uuid Uuid::random() -{ - return Uuid(randomGen()->randomArray(Length)); -} - -QString Uuid::toBase64() const -{ - return QString::fromLatin1(m_data.toBase64()); -} - -QString Uuid::toHex() const -{ - return QString::fromLatin1(m_data.toHex()); -} - -QByteArray Uuid::toByteArray() const -{ - return m_data; -} - -bool Uuid::isNull() const -{ - for (int i = 0; i < m_data.size(); ++i) { - if (m_data[i] != 0) { - return false; - } - } - - return true; -} - -Uuid& Uuid::operator=(const Uuid& other) -{ - m_data = other.m_data; - - return *this; -} - -bool Uuid::operator==(const Uuid& other) const -{ - return m_data == other.m_data; -} - -bool Uuid::operator!=(const Uuid& other) const -{ - return !operator==(other); -} - -Uuid Uuid::fromBase64(const QString& str) -{ - QByteArray data = QByteArray::fromBase64(str.toLatin1()); - if (data.size() == Uuid::Length) { - return Uuid(data); - } - return {}; -} - -Uuid Uuid::fromHex(const QString& str) -{ - QByteArray data = QByteArray::fromHex(str.toLatin1()); - if (data.size() == Uuid::Length) { - return Uuid(data); - } - return {}; -} - -uint qHash(const Uuid& key) -{ - return qHash(key.toByteArray()); -} - -QDataStream& operator<<(QDataStream& stream, const Uuid& uuid) -{ - return stream << uuid.toByteArray(); -} - -QDataStream& operator>>(QDataStream& stream, Uuid& uuid) -{ - QByteArray data; - stream >> data; - if (data.size() == Uuid::Length) { - uuid = Uuid(data); - } - - return stream; -} - -bool Uuid::isUuid(const QString& uuid) -{ - return Uuid::HexRegExp.exactMatch(uuid); -} diff --git a/src/core/Uuid.h b/src/core/Uuid.h deleted file mode 100644 index ecb20e0c3..000000000 --- a/src/core/Uuid.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2010 Felix Geyer - * - * This program 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 2 or (at your option) - * version 3 of the License. - * - * This program 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 this program. If not, see . - */ - -#ifndef KEEPASSX_UUID_H -#define KEEPASSX_UUID_H - -#include -#include -#include - -class Uuid -{ -public: - Uuid(); - explicit Uuid(const QByteArray& data); - static Uuid random(); - QString toBase64() const; - QString toHex() const; - QByteArray toByteArray() const; - - bool isNull() const; - Uuid& operator=(const Uuid& other); - bool operator==(const Uuid& other) const; - bool operator!=(const Uuid& other) const; - static const int Length; - static const QRegExp HexRegExp; - static Uuid fromBase64(const QString& str); - static Uuid fromHex(const QString& str); - static bool isUuid(const QString& str); - -private: - QByteArray m_data; -}; - -Q_DECLARE_TYPEINFO(Uuid, Q_MOVABLE_TYPE); - -uint qHash(const Uuid& key); - -QDataStream& operator<<(QDataStream& stream, const Uuid& uuid); -QDataStream& operator>>(QDataStream& stream, Uuid& uuid); - -#endif // KEEPASSX_UUID_H diff --git a/src/crypto/Crypto.cpp b/src/crypto/Crypto.cpp index 7ba78a6b3..ab97322ca 100644 --- a/src/crypto/Crypto.cpp +++ b/src/crypto/Crypto.cpp @@ -50,7 +50,7 @@ bool Crypto::init() // has to be set before testing Crypto classes m_initalized = true; - if (!selfTest()) { + if (!backendSelfTest() || !selfTest()) { m_initalized = false; return false; } @@ -116,7 +116,8 @@ bool Crypto::checkAlgorithms() bool Crypto::selfTest() { - return testSha256() && testSha512() && testAes256Cbc() && testAes256Ecb() && testTwofish() && testSalsa20() && testChaCha20(); + return testSha256() && testSha512() && testAes256Cbc() && testAes256Ecb() && testTwofish() && testSalsa20() + && testChaCha20(); } void Crypto::raiseError(const QString& str) @@ -127,8 +128,8 @@ void Crypto::raiseError(const QString& str) bool Crypto::testSha256() { - QByteArray sha256Test = CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - CryptoHash::Sha256); + QByteArray sha256Test = + CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", CryptoHash::Sha256); if (sha256Test != QByteArray::fromHex("248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1")) { raiseError("SHA-256 mismatch."); @@ -140,10 +141,12 @@ bool Crypto::testSha256() bool Crypto::testSha512() { - QByteArray sha512Test = CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - CryptoHash::Sha512); + QByteArray sha512Test = + CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", CryptoHash::Sha512); - if (sha512Test != QByteArray::fromHex("204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445")) { + if (sha512Test + != QByteArray::fromHex("204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b" + "07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445")) { raiseError("SHA-512 mismatch."); return false; } @@ -262,7 +265,6 @@ bool Crypto::testTwofish() return false; } - SymmetricCipher twofishDecrypt(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); if (!twofishDecrypt.init(key, iv)) { raiseError(twofishEncrypt.errorString()); @@ -289,8 +291,7 @@ bool Crypto::testSalsa20() QByteArray salsa20Cipher = QByteArray::fromHex("B4C0AFA503BE7FC29A62058166D56F8F"); bool ok; - SymmetricCipher salsa20Stream(SymmetricCipher::Salsa20, SymmetricCipher::Stream, - SymmetricCipher::Encrypt); + SymmetricCipher salsa20Stream(SymmetricCipher::Salsa20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); if (!salsa20Stream.init(salsa20Key, salsa20iv)) { raiseError(salsa20Stream.errorString()); return false; @@ -309,15 +310,17 @@ bool Crypto::testSalsa20() return true; } -bool Crypto::testChaCha20() { +bool Crypto::testChaCha20() +{ QByteArray chacha20Key = QByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000"); QByteArray chacha20iv = QByteArray::fromHex("0000000000000000"); - QByteArray chacha20Plain = QByteArray::fromHex("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); - QByteArray chacha20Cipher = QByteArray::fromHex("76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586"); + QByteArray chacha20Plain = QByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000"); + QByteArray chacha20Cipher = QByteArray::fromHex("76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da" + "41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586"); bool ok; - SymmetricCipher chacha20Stream(SymmetricCipher::ChaCha20, SymmetricCipher::Stream, - SymmetricCipher::Encrypt); + SymmetricCipher chacha20Stream(SymmetricCipher::ChaCha20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); if (!chacha20Stream.init(chacha20Key, chacha20iv)) { raiseError(chacha20Stream.errorString()); return false; @@ -334,4 +337,4 @@ bool Crypto::testChaCha20() { } return true; -} \ No newline at end of file +} diff --git a/src/crypto/CryptoHash.cpp b/src/crypto/CryptoHash.cpp index 12c6bf791..07bf5efc9 100644 --- a/src/crypto/CryptoHash.cpp +++ b/src/crypto/CryptoHash.cpp @@ -58,8 +58,7 @@ CryptoHash::CryptoHash(Algorithm algo, bool hmac) gcry_error_t error = gcry_md_open(&d->ctx, algoGcrypt, flagsGcrypt); if (error != GPG_ERR_NO_ERROR) { - qWarning("Gcrypt error (ctor): %s", gcry_strerror(error)); - qWarning("Gcrypt error (ctor): %s", gcry_strsource(error)); + qWarning("Gcrypt error (ctor): %s\n %s", gcry_strerror(error), gcry_strsource(error)); } Q_ASSERT(error == 0); // TODO: error handling @@ -92,19 +91,11 @@ void CryptoHash::setKey(const QByteArray& data) gcry_error_t error = gcry_md_setkey(d->ctx, data.constData(), static_cast(data.size())); if (error) { - qWarning("Gcrypt error (setKey): %s", gcry_strerror(error)); - qWarning("Gcrypt error (setKey): %s", gcry_strsource(error)); + qWarning("Gcrypt error (setKey): %s\n %s", gcry_strerror(error), gcry_strsource(error)); } Q_ASSERT(error == 0); } -void CryptoHash::reset() -{ - Q_D(CryptoHash); - - gcry_md_reset(d->ctx); -} - QByteArray CryptoHash::result() const { Q_D(const CryptoHash); diff --git a/src/crypto/CryptoHash.h b/src/crypto/CryptoHash.h index bd312121a..02f90eb4d 100644 --- a/src/crypto/CryptoHash.h +++ b/src/crypto/CryptoHash.h @@ -34,7 +34,6 @@ public: explicit CryptoHash(Algorithm algo, bool hmac = false); ~CryptoHash(); void addData(const QByteArray& data); - void reset(); QByteArray result() const; void setKey(const QByteArray& data); diff --git a/src/crypto/Random.cpp b/src/crypto/Random.cpp index dc0667fae..4203b6c0c 100644 --- a/src/crypto/Random.cpp +++ b/src/crypto/Random.cpp @@ -28,7 +28,7 @@ public: void randomize(void* data, int len) override; }; -Random* Random::m_instance(nullptr); +QSharedPointer Random::m_instance; void Random::randomize(QByteArray& ba) { @@ -70,18 +70,20 @@ quint32 Random::randomUIntRange(quint32 min, quint32 max) Random* Random::instance() { if (!m_instance) { - m_instance = new Random(new RandomBackendGcrypt()); + m_instance.reset(new Random(new RandomBackendGcrypt())); } - return m_instance; + return m_instance.data(); } -void Random::createWithBackend(RandomBackend* backend) +void Random::resetInstance() { - Q_ASSERT(backend); - Q_ASSERT(!m_instance); + m_instance.reset(); +} - m_instance = new Random(backend); +void Random::setInstance(RandomBackend* backend) +{ + m_instance.reset(new Random(backend)); } Random::Random(RandomBackend* backend) @@ -89,10 +91,13 @@ Random::Random(RandomBackend* backend) { } - void RandomBackendGcrypt::randomize(void* data, int len) { Q_ASSERT(Crypto::initalized()); gcry_randomize(data, len, GCRY_STRONG_RANDOM); } + +RandomBackend::~RandomBackend() +{ +} diff --git a/src/crypto/Random.h b/src/crypto/Random.h index 038ae7aea..bdf7b9aca 100644 --- a/src/crypto/Random.h +++ b/src/crypto/Random.h @@ -20,12 +20,13 @@ #include #include +#include class RandomBackend { public: virtual void randomize(void* data, int len) = 0; - virtual ~RandomBackend() {} + virtual ~RandomBackend(); }; class Random @@ -45,18 +46,23 @@ public: quint32 randomUIntRange(quint32 min, quint32 max); static Random* instance(); - static void createWithBackend(RandomBackend* backend); + +protected: + static void resetInstance(); + static void setInstance(RandomBackend* backend); private: + static QSharedPointer m_instance; + explicit Random(RandomBackend* backend); QScopedPointer m_backend; - static Random* m_instance; Q_DISABLE_COPY(Random) }; -inline Random* randomGen() { +inline Random* randomGen() +{ return Random::instance(); } diff --git a/src/crypto/SymmetricCipher.cpp b/src/crypto/SymmetricCipher.cpp index 1ba42a537..cdb0d1f56 100644 --- a/src/crypto/SymmetricCipher.cpp +++ b/src/crypto/SymmetricCipher.cpp @@ -1,19 +1,19 @@ /* -* Copyright (C) 2010 Felix Geyer -* -* This program 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 2 or (at your option) -* version 3 of the License. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2010 Felix Geyer + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ #include "SymmetricCipher.h" @@ -87,12 +87,12 @@ int SymmetricCipher::blockSize() const QString SymmetricCipher::errorString() const { - return m_backend->errorString(); + return m_backend->error(); } -SymmetricCipher::Algorithm SymmetricCipher::cipherToAlgorithm(Uuid cipher) +SymmetricCipher::Algorithm SymmetricCipher::cipherToAlgorithm(const QUuid& cipher) { - if (cipher == KeePass2::CIPHER_AES) { + if (cipher == KeePass2::CIPHER_AES256) { return Aes256; } else if (cipher == KeePass2::CIPHER_CHACHA20) { return ChaCha20; @@ -100,22 +100,24 @@ SymmetricCipher::Algorithm SymmetricCipher::cipherToAlgorithm(Uuid cipher) return Twofish; } - qWarning("SymmetricCipher::cipherToAlgorithm: invalid Uuid %s", cipher.toByteArray().toHex().data()); + qWarning("SymmetricCipher::cipherToAlgorithm: invalid UUID %s", cipher.toString().toLatin1().data()); return InvalidAlgorithm; } -Uuid SymmetricCipher::algorithmToCipher(Algorithm algo) +QUuid SymmetricCipher::algorithmToCipher(Algorithm algo) { switch (algo) { + case Aes128: + return KeePass2::CIPHER_AES128; case Aes256: - return KeePass2::CIPHER_AES; + return KeePass2::CIPHER_AES256; case ChaCha20: return KeePass2::CIPHER_CHACHA20; case Twofish: return KeePass2::CIPHER_TWOFISH; default: qWarning("SymmetricCipher::algorithmToCipher: invalid algorithm %d", algo); - return Uuid(); + return {}; } } diff --git a/src/crypto/SymmetricCipher.h b/src/crypto/SymmetricCipher.h index 0c683d224..e0e91aff1 100644 --- a/src/crypto/SymmetricCipher.h +++ b/src/crypto/SymmetricCipher.h @@ -1,19 +1,19 @@ /* -* Copyright (C) 2010 Felix Geyer -* -* This program 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 2 or (at your option) -* version 3 of the License. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2010 Felix Geyer + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ #ifndef KEEPASSX_SYMMETRICCIPHER_H #define KEEPASSX_SYMMETRICCIPHER_H @@ -21,10 +21,10 @@ #include #include #include +#include #include "crypto/SymmetricCipherBackend.h" #include "format/KeePass2.h" -#include "core/Uuid.h" class SymmetricCipher { @@ -83,8 +83,8 @@ public: QString errorString() const; Algorithm algorithm() const; - static Algorithm cipherToAlgorithm(Uuid cipher); - static Uuid algorithmToCipher(Algorithm algo); + static Algorithm cipherToAlgorithm(const QUuid& cipher); + static QUuid algorithmToCipher(Algorithm algo); static int algorithmIvSize(Algorithm algo); static Mode algorithmMode(Algorithm algo); diff --git a/src/crypto/SymmetricCipherBackend.h b/src/crypto/SymmetricCipherBackend.h index dd493d2df..c8e98cfa4 100644 --- a/src/crypto/SymmetricCipherBackend.h +++ b/src/crypto/SymmetricCipherBackend.h @@ -1,19 +1,19 @@ /* -* Copyright (C) 2010 Felix Geyer -* -* This program 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 2 or (at your option) -* version 3 of the License. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2010 Felix Geyer + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ #ifndef KEEPASSX_SYMMETRICCIPHERBACKEND_H #define KEEPASSX_SYMMETRICCIPHERBACKEND_H @@ -23,7 +23,9 @@ class SymmetricCipherBackend { public: - virtual ~SymmetricCipherBackend() {} + virtual ~SymmetricCipherBackend() + { + } virtual bool init() = 0; virtual bool setKey(const QByteArray& key) = 0; virtual bool setIv(const QByteArray& iv) = 0; @@ -36,7 +38,7 @@ public: virtual int keySize() const = 0; virtual int blockSize() const = 0; - virtual QString errorString() const = 0; + virtual QString error() const = 0; }; #endif // KEEPASSX_SYMMETRICCIPHERBACKEND_H diff --git a/src/crypto/SymmetricCipherGcrypt.cpp b/src/crypto/SymmetricCipherGcrypt.cpp index 97d53cd83..fb436522d 100644 --- a/src/crypto/SymmetricCipherGcrypt.cpp +++ b/src/crypto/SymmetricCipherGcrypt.cpp @@ -1,26 +1,27 @@ /* -* Copyright (C) 2010 Felix Geyer -* -* This program 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 2 or (at your option) -* version 3 of the License. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2010 Felix Geyer + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ #include "SymmetricCipherGcrypt.h" #include "config-keepassx.h" #include "crypto/Crypto.h" -SymmetricCipherGcrypt::SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, +SymmetricCipherGcrypt::SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, + SymmetricCipher::Mode mode, SymmetricCipher::Direction direction) : m_ctx(nullptr) , m_algo(gcryptAlgo(algo)) @@ -79,13 +80,12 @@ int SymmetricCipherGcrypt::gcryptMode(SymmetricCipher::Mode mode) } } -void SymmetricCipherGcrypt::setErrorString(gcry_error_t err) +void SymmetricCipherGcrypt::setError(const gcry_error_t& err) { const char* gcryptError = gcry_strerror(err); const char* gcryptErrorSource = gcry_strsource(err); - m_errorString = QString("%1/%2").arg(QString::fromLocal8Bit(gcryptErrorSource), - QString::fromLocal8Bit(gcryptError)); + m_error = QString("%1/%2").arg(QString::fromLocal8Bit(gcryptErrorSource), QString::fromLocal8Bit(gcryptError)); } bool SymmetricCipherGcrypt::init() @@ -94,11 +94,11 @@ bool SymmetricCipherGcrypt::init() gcry_error_t error; - if(m_ctx != nullptr) + if (m_ctx != nullptr) gcry_cipher_close(m_ctx); error = gcry_cipher_open(&m_ctx, m_algo, m_mode, 0); if (error != 0) { - setErrorString(error); + setError(error); return false; } @@ -111,7 +111,7 @@ bool SymmetricCipherGcrypt::setKey(const QByteArray& key) gcry_error_t error = gcry_cipher_setkey(m_ctx, m_key.constData(), m_key.size()); if (error != 0) { - setErrorString(error); + setError(error); return false; } @@ -130,7 +130,7 @@ bool SymmetricCipherGcrypt::setIv(const QByteArray& iv) } if (error != 0) { - setErrorString(error); + setError(error); return false; } @@ -153,7 +153,7 @@ QByteArray SymmetricCipherGcrypt::process(const QByteArray& data, bool* ok) } if (error != 0) { - setErrorString(error); + setError(error); *ok = false; } else { *ok = true; @@ -175,7 +175,7 @@ bool SymmetricCipherGcrypt::processInPlace(QByteArray& data) } if (error != 0) { - setErrorString(error); + setError(error); return false; } @@ -184,8 +184,6 @@ bool SymmetricCipherGcrypt::processInPlace(QByteArray& data) bool SymmetricCipherGcrypt::processInPlace(QByteArray& data, quint64 rounds) { - // TODO: check block size - gcry_error_t error; char* rawData = data.data(); @@ -196,7 +194,7 @@ bool SymmetricCipherGcrypt::processInPlace(QByteArray& data, quint64 rounds) error = gcry_cipher_decrypt(m_ctx, rawData, size, nullptr, 0); if (error != 0) { - setErrorString(error); + setError(error); return false; } } @@ -205,7 +203,7 @@ bool SymmetricCipherGcrypt::processInPlace(QByteArray& data, quint64 rounds) error = gcry_cipher_encrypt(m_ctx, rawData, size, nullptr, 0); if (error != 0) { - setErrorString(error); + setError(error); return false; } } @@ -220,13 +218,13 @@ bool SymmetricCipherGcrypt::reset() error = gcry_cipher_reset(m_ctx); if (error != 0) { - setErrorString(error); + setError(error); return false; } error = gcry_cipher_setiv(m_ctx, m_iv.constData(), m_iv.size()); if (error != 0) { - setErrorString(error); + setError(error); return false; } @@ -257,7 +255,7 @@ int SymmetricCipherGcrypt::blockSize() const return blockSizeT; } -QString SymmetricCipherGcrypt::errorString() const +QString SymmetricCipherGcrypt::error() const { - return m_errorString; + return m_error; } diff --git a/src/crypto/SymmetricCipherGcrypt.h b/src/crypto/SymmetricCipherGcrypt.h index 2436c3be1..2f886999c 100644 --- a/src/crypto/SymmetricCipherGcrypt.h +++ b/src/crypto/SymmetricCipherGcrypt.h @@ -1,19 +1,19 @@ /* -* Copyright (C) 2010 Felix Geyer -* -* This program 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 2 or (at your option) -* version 3 of the License. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2010 Felix Geyer + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ #ifndef KEEPASSX_SYMMETRICCIPHERGCRYPT_H #define KEEPASSX_SYMMETRICCIPHERGCRYPT_H @@ -23,10 +23,11 @@ #include "crypto/SymmetricCipher.h" #include "crypto/SymmetricCipherBackend.h" -class SymmetricCipherGcrypt: public SymmetricCipherBackend +class SymmetricCipherGcrypt : public SymmetricCipherBackend { public: - SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, + SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, + SymmetricCipher::Mode mode, SymmetricCipher::Direction direction); ~SymmetricCipherGcrypt(); @@ -42,12 +43,12 @@ public: int keySize() const; int blockSize() const; - QString errorString() const; + QString error() const; private: static int gcryptAlgo(SymmetricCipher::Algorithm algo); static int gcryptMode(SymmetricCipher::Mode mode); - void setErrorString(gcry_error_t err); + void setError(const gcry_error_t& err); gcry_cipher_hd_t m_ctx; const int m_algo; @@ -55,7 +56,7 @@ private: const SymmetricCipher::Direction m_direction; QByteArray m_key; QByteArray m_iv; - QString m_errorString; + QString m_error; }; #endif // KEEPASSX_SYMMETRICCIPHERGCRYPT_H diff --git a/src/crypto/argon2/argon2.h b/src/crypto/argon2/argon2.h index 8ea6108aa..8eba85a6f 100644 --- a/src/crypto/argon2/argon2.h +++ b/src/crypto/argon2/argon2.h @@ -31,4 +31,4 @@ #include -#endif //KEEPASSXC_CRYPTO_ARGON2_H +#endif // KEEPASSXC_CRYPTO_ARGON2_H diff --git a/src/crypto/kdf/AesKdf.cpp b/src/crypto/kdf/AesKdf.cpp index 593b01c24..0b2130cfe 100644 --- a/src/crypto/kdf/AesKdf.cpp +++ b/src/crypto/kdf/AesKdf.cpp @@ -19,8 +19,8 @@ #include -#include "format/KeePass2.h" #include "crypto/CryptoHash.h" +#include "format/KeePass2.h" AesKdf::AesKdf() : Kdf::Kdf(KeePass2::KDF_AES_KDBX4) @@ -35,7 +35,7 @@ AesKdf::AesKdf(bool legacyKdbx3) { } -bool AesKdf::processParameters(const QVariantMap &p) +bool AesKdf::processParameters(const QVariantMap& p) { bool ok; int rounds = p.value(KeePass2::KDFPARAM_AES_ROUNDS).toInt(&ok); @@ -52,7 +52,7 @@ QVariantMap AesKdf::writeParameters() QVariantMap p; // always write old KDBX3 AES-KDF UUID for compatibility with other applications - p.insert(KeePass2::KDFPARAM_UUID, KeePass2::KDF_AES_KDBX3.toByteArray()); + p.insert(KeePass2::KDFPARAM_UUID, KeePass2::KDF_AES_KDBX3.toRfc4122()); p.insert(KeePass2::KDFPARAM_AES_ROUNDS, static_cast(rounds())); p.insert(KeePass2::KDFPARAM_AES_SEED, seed()); @@ -84,8 +84,7 @@ bool AesKdf::transform(const QByteArray& raw, QByteArray& result) const bool AesKdf::transformKeyRaw(const QByteArray& key, const QByteArray& seed, int rounds, QByteArray* result) { QByteArray iv(16, 0); - SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Ecb, - SymmetricCipher::Encrypt); + SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); if (!cipher.init(seed, iv)) { qWarning("AesKdf::transformKeyRaw: error in SymmetricCipher::init: %s", cipher.errorString().toUtf8().data()); return false; diff --git a/src/crypto/kdf/AesKdf.h b/src/crypto/kdf/AesKdf.h index 31ee1fa70..84156e6fb 100644 --- a/src/crypto/kdf/AesKdf.h +++ b/src/crypto/kdf/AesKdf.h @@ -20,7 +20,7 @@ #include "Kdf.h" -class AesKdf: public Kdf +class AesKdf : public Kdf { public: AesKdf(); @@ -35,10 +35,8 @@ protected: int benchmarkImpl(int msec) const override; private: - static bool transformKeyRaw(const QByteArray& key, - const QByteArray& seed, - int rounds, - QByteArray* result) Q_REQUIRED_RESULT; + Q_REQUIRED_RESULT static bool + transformKeyRaw(const QByteArray& key, const QByteArray& seed, int rounds, QByteArray* result); }; #endif // KEEPASSX_AESKDF_H diff --git a/src/crypto/kdf/Argon2Kdf.cpp b/src/crypto/kdf/Argon2Kdf.cpp index f67c9c1fb..2ae81a6b3 100644 --- a/src/crypto/kdf/Argon2Kdf.cpp +++ b/src/crypto/kdf/Argon2Kdf.cpp @@ -30,10 +30,10 @@ * or associated data. KeePass uses the latest version of Argon2, v1.3. */ Argon2Kdf::Argon2Kdf() - : Kdf::Kdf(KeePass2::KDF_ARGON2) - , m_version(0x13) - , m_memory(1 << 16) - , m_parallelism(static_cast(QThread::idealThreadCount())) + : Kdf::Kdf(KeePass2::KDF_ARGON2) + , m_version(0x13) + , m_memory(1 << 16) + , m_parallelism(static_cast(QThread::idealThreadCount())) { m_rounds = 1; } @@ -86,7 +86,7 @@ bool Argon2Kdf::setParallelism(quint32 threads) return false; } -bool Argon2Kdf::processParameters(const QVariantMap &p) +bool Argon2Kdf::processParameters(const QVariantMap& p) { QByteArray salt = p.value(KeePass2::KDFPARAM_ARGON2_SALT).toByteArray(); if (!setSeed(salt)) { @@ -133,7 +133,7 @@ bool Argon2Kdf::processParameters(const QVariantMap &p) QVariantMap Argon2Kdf::writeParameters() { QVariantMap p; - p.insert(KeePass2::KDFPARAM_UUID, KeePass2::KDF_ARGON2.toByteArray()); + p.insert(KeePass2::KDFPARAM_UUID, KeePass2::KDF_ARGON2.toRfc4122()); p.insert(KeePass2::KDFPARAM_ARGON2_VERSION, version()); p.insert(KeePass2::KDFPARAM_ARGON2_PARALLELISM, parallelism()); p.insert(KeePass2::KDFPARAM_ARGON2_MEMORY, memory() * 1024); @@ -161,13 +161,28 @@ bool Argon2Kdf::transform(const QByteArray& raw, QByteArray& result) const return transformKeyRaw(raw, seed(), version(), rounds(), memory(), parallelism(), result); } -bool Argon2Kdf::transformKeyRaw(const QByteArray& key, const QByteArray& seed, quint32 version, - quint32 rounds, quint64 memory, quint32 parallelism, QByteArray& result) +bool Argon2Kdf::transformKeyRaw(const QByteArray& key, + const QByteArray& seed, + quint32 version, + quint32 rounds, + quint64 memory, + quint32 parallelism, + QByteArray& result) { // Time Cost, Mem Cost, Threads/Lanes, Password, length, Salt, length, out, length - int rc = argon2_hash(rounds, memory, parallelism, key.data(), key.size(), - seed.data(), seed.size(), result.data(), result.size(), - nullptr, 0, Argon2_d, version); + int rc = argon2_hash(rounds, + memory, + parallelism, + key.data(), + key.size(), + seed.data(), + seed.size(), + result.data(), + result.size(), + nullptr, + 0, + Argon2_d, + version); if (rc != ARGON2_OK) { qWarning("Argon2 error: %s", argon2_error_message(rc)); return false; diff --git a/src/crypto/kdf/Argon2Kdf.h b/src/crypto/kdf/Argon2Kdf.h index fe62b2953..73b7f8529 100644 --- a/src/crypto/kdf/Argon2Kdf.h +++ b/src/crypto/kdf/Argon2Kdf.h @@ -20,7 +20,8 @@ #include "Kdf.h" -class Argon2Kdf : public Kdf { +class Argon2Kdf : public Kdf +{ public: Argon2Kdf(); @@ -44,13 +45,13 @@ protected: quint32 m_parallelism; private: - static bool transformKeyRaw(const QByteArray& key, - const QByteArray& seed, - quint32 version, - quint32 rounds, - quint64 memory, - quint32 parallelism, - QByteArray& result) Q_REQUIRED_RESULT; + Q_REQUIRED_RESULT static bool transformKeyRaw(const QByteArray& key, + const QByteArray& seed, + quint32 version, + quint32 rounds, + quint64 memory, + quint32 parallelism, + QByteArray& result); }; #endif // KEEPASSX_ARGON2KDF_H diff --git a/src/crypto/kdf/Kdf.cpp b/src/crypto/kdf/Kdf.cpp index e500dbe6f..b4c4427c8 100644 --- a/src/crypto/kdf/Kdf.cpp +++ b/src/crypto/kdf/Kdf.cpp @@ -22,14 +22,14 @@ #include "crypto/Random.h" -Kdf::Kdf(Uuid uuid) +Kdf::Kdf(const QUuid& uuid) : m_rounds(KDF_DEFAULT_ROUNDS) - , m_seed(QByteArray(KDF_DEFAULT_SEED_SIZE, 0)) + , m_seed(QByteArray(KDF_MAX_SEED_SIZE, 0)) , m_uuid(uuid) { } -Uuid Kdf::uuid() const +const QUuid& Kdf::uuid() const { return m_uuid; } @@ -56,7 +56,7 @@ bool Kdf::setRounds(int rounds) bool Kdf::setSeed(const QByteArray& seed) { - if (seed.size() != m_seed.size()) { + if (seed.size() < KDF_MIN_SEED_SIZE || seed.size() > KDF_MAX_SEED_SIZE) { return false; } @@ -80,11 +80,12 @@ int Kdf::benchmark(int msec) const thread1.wait(); thread2.wait(); - return qMax(1, qMin(thread1.rounds(), thread2.rounds())); + return qMax(1, (thread1.rounds() + thread2.rounds()) / 2); } Kdf::BenchmarkThread::BenchmarkThread(int msec, const Kdf* kdf) - : m_msec(msec) + : m_rounds(1) + , m_msec(msec) , m_kdf(kdf) { } diff --git a/src/crypto/kdf/Kdf.h b/src/crypto/kdf/Kdf.h index 216224a6f..368fb16f7 100644 --- a/src/crypto/kdf/Kdf.h +++ b/src/crypto/kdf/Kdf.h @@ -18,20 +18,20 @@ #ifndef KEEPASSX_KDF_H #define KEEPASSX_KDF_H +#include #include -#include "core/Uuid.h" - -#define KDF_DEFAULT_SEED_SIZE 32 +#define KDF_MIN_SEED_SIZE 8 +#define KDF_MAX_SEED_SIZE 32 #define KDF_DEFAULT_ROUNDS 1000000ull class Kdf { public: - explicit Kdf(Uuid uuid); + explicit Kdf(const QUuid& uuid); virtual ~Kdf() = default; - Uuid uuid() const; + const QUuid& uuid() const; int rounds() const; virtual bool setRounds(int rounds); @@ -54,8 +54,6 @@ protected: private: class BenchmarkThread; - const Uuid m_uuid; - + const QUuid m_uuid; }; - #endif // KEEPASSX_KDF_H diff --git a/src/crypto/kdf/Kdf_p.h b/src/crypto/kdf/Kdf_p.h index 5606c0bf5..55ad2401b 100644 --- a/src/crypto/kdf/Kdf_p.h +++ b/src/crypto/kdf/Kdf_p.h @@ -22,9 +22,9 @@ #ifndef KEEPASSXC_KDF_P_H #define KEEPASSXC_KDF_P_H -class Kdf::BenchmarkThread: public QThread +class Kdf::BenchmarkThread : public QThread { -Q_OBJECT + Q_OBJECT public: explicit BenchmarkThread(int msec, const Kdf* kdf); diff --git a/src/sshagent/ASN1Key.cpp b/src/crypto/ssh/ASN1Key.cpp similarity index 77% rename from src/sshagent/ASN1Key.cpp rename to src/crypto/ssh/ASN1Key.cpp index 2b6cbd106..b585d3abd 100644 --- a/src/sshagent/ASN1Key.cpp +++ b/src/crypto/ssh/ASN1Key.cpp @@ -17,12 +17,15 @@ */ #include "ASN1Key.h" +#include "crypto/ssh/BinaryStream.h" + #include -namespace { - constexpr quint8 TAG_INT = 0x02; - constexpr quint8 TAG_SEQUENCE = 0x30; - constexpr quint8 KEY_ZERO = 0x0; +namespace +{ + constexpr quint8 TAG_INT = 0x02; + constexpr quint8 TAG_SEQUENCE = 0x30; + constexpr quint8 KEY_ZERO = 0x0; bool nextTag(BinaryStream& stream, quint8& tag, quint32& len) { @@ -52,7 +55,17 @@ namespace { return true; } - bool parseHeader(BinaryStream& stream, quint8 wantedType) + bool parsePublicHeader(BinaryStream& stream) + { + quint8 tag; + quint32 len; + + nextTag(stream, tag, len); + + return (tag == TAG_SEQUENCE); + } + + bool parsePrivateHeader(BinaryStream& stream, quint8 wantedType) { quint8 tag; quint32 len; @@ -111,17 +124,17 @@ namespace { return QByteArray::fromHex(QString(iqmp_hex).toLatin1()); } -} +} // namespace bool ASN1Key::parseDSA(QByteArray& ba, OpenSSHKey& key) { BinaryStream stream(&ba); - if (!parseHeader(stream, KEY_ZERO)) { + if (!parsePrivateHeader(stream, KEY_ZERO)) { return false; } - QByteArray p,q,g,y,x; + QByteArray p, q, g, y, x; readInt(stream, p); readInt(stream, q); readInt(stream, g); @@ -148,15 +161,42 @@ bool ASN1Key::parseDSA(QByteArray& ba, OpenSSHKey& key) return true; } -bool ASN1Key::parseRSA(QByteArray& ba, OpenSSHKey& key) +bool ASN1Key::parsePublicRSA(QByteArray& ba, OpenSSHKey& key) { BinaryStream stream(&ba); - if (!parseHeader(stream, KEY_ZERO)) { + if (!parsePublicHeader(stream)) { return false; } - QByteArray n,e,d,p,q,dp,dq,qinv; + QByteArray n, e; + readInt(stream, n); + readInt(stream, e); + + QList publicData; + publicData.append(e); + publicData.append(n); + + QList privateData; + privateData.append(n); + privateData.append(e); + + key.setType("ssh-rsa"); + key.setPublicData(publicData); + key.setPrivateData(privateData); + key.setComment(""); + return true; +} + +bool ASN1Key::parsePrivateRSA(QByteArray& ba, OpenSSHKey& key) +{ + BinaryStream stream(&ba); + + if (!parsePrivateHeader(stream, KEY_ZERO)) { + return false; + } + + QByteArray n, e, d, p, q, dp, dq, qinv; readInt(stream, n); readInt(stream, e); readInt(stream, d); diff --git a/src/sshagent/ASN1Key.h b/src/crypto/ssh/ASN1Key.h similarity index 79% rename from src/sshagent/ASN1Key.h rename to src/crypto/ssh/ASN1Key.h index 59f8d4e81..0a199d357 100644 --- a/src/sshagent/ASN1Key.h +++ b/src/crypto/ssh/ASN1Key.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef ASN1KEY_H -#define ASN1KEY_H +#ifndef KEEPASSXC_ASN1KEY_H +#define KEEPASSXC_ASN1KEY_H #include "OpenSSHKey.h" #include @@ -25,7 +25,8 @@ namespace ASN1Key { bool parseDSA(QByteArray& ba, OpenSSHKey& key); - bool parseRSA(QByteArray& ba, OpenSSHKey& key); -} + bool parsePrivateRSA(QByteArray& ba, OpenSSHKey& key); + bool parsePublicRSA(QByteArray& ba, OpenSSHKey& key); +} // namespace ASN1Key -#endif // ASN1KEY_H +#endif // KEEPASSXC_ASN1KEY_H diff --git a/src/sshagent/BinaryStream.cpp b/src/crypto/ssh/BinaryStream.cpp similarity index 81% rename from src/sshagent/BinaryStream.cpp rename to src/crypto/ssh/BinaryStream.cpp index b9ed236fd..3ba4c1a81 100644 --- a/src/sshagent/BinaryStream.cpp +++ b/src/crypto/ssh/BinaryStream.cpp @@ -19,26 +19,21 @@ #include "BinaryStream.h" #include -BinaryStream::BinaryStream(QObject* parent) - : QObject(parent) - , m_timeout(-1) -{ - -} - BinaryStream::BinaryStream(QIODevice* device) : QObject(device) , m_timeout(-1) , m_device(device) { - } BinaryStream::BinaryStream(QByteArray* ba, QObject* parent) : QObject(parent) , m_timeout(-1) { - setData(ba); + m_buffer.reset(new QBuffer(ba)); + m_buffer->open(QIODevice::ReadWrite); + + m_device = m_buffer.data(); } BinaryStream::~BinaryStream() @@ -55,19 +50,6 @@ QIODevice* BinaryStream::device() const return m_device; } -void BinaryStream::setDevice(QIODevice* device) -{ - m_device = device; -} - -void BinaryStream::setData(QByteArray* ba) -{ - m_buffer.reset(new QBuffer(ba)); - m_buffer->open(QIODevice::ReadWrite); - - m_device = m_buffer.data(); -} - void BinaryStream::setTimeout(int timeout) { m_timeout = timeout; @@ -105,7 +87,7 @@ bool BinaryStream::read(QByteArray& ba) bool BinaryStream::read(quint32& i) { - if (read(reinterpret_cast(&i), sizeof(i))) { + if (read(reinterpret_cast(&i), sizeof(i))) { i = qFromBigEndian(i); return true; } @@ -115,7 +97,7 @@ bool BinaryStream::read(quint32& i) bool BinaryStream::read(quint16& i) { - if (read(reinterpret_cast(&i), sizeof(i))) { + if (read(reinterpret_cast(&i), sizeof(i))) { i = qFromBigEndian(i); return true; } @@ -125,24 +107,24 @@ bool BinaryStream::read(quint16& i) bool BinaryStream::read(quint8& i) { - return read(reinterpret_cast(&i), sizeof(i)); + return read(reinterpret_cast(&i), sizeof(i)); } bool BinaryStream::readString(QByteArray& ba) { - quint32 length; + quint32 length; - if (!read(length)) { - return false; - } + if (!read(length)) { + return false; + } - ba.resize(length); + ba.resize(length); - if (!read(ba.data(), ba.length())) { - return false; - } + if (!read(ba.data(), ba.length())) { + return false; + } - return true; + return true; } bool BinaryStream::readString(QString& str) @@ -153,11 +135,10 @@ bool BinaryStream::readString(QString& str) return false; } - str = str.fromLatin1(ba); + str = QString::fromLatin1(ba); return true; } - bool BinaryStream::write(const char* ptr, qint64 size) { if (m_device->write(ptr, size) < 0) { @@ -186,18 +167,18 @@ bool BinaryStream::write(const QByteArray& ba) bool BinaryStream::write(quint32 i) { i = qToBigEndian(i); - return write(reinterpret_cast(&i), sizeof(i)); + return write(reinterpret_cast(&i), sizeof(i)); } bool BinaryStream::write(quint16 i) { i = qToBigEndian(i); - return write(reinterpret_cast(&i), sizeof(i)); + return write(reinterpret_cast(&i), sizeof(i)); } bool BinaryStream::write(quint8 i) { - return write(reinterpret_cast(&i), sizeof(i)); + return write(reinterpret_cast(&i), sizeof(i)); } bool BinaryStream::writeString(const QByteArray& ba) diff --git a/src/sshagent/BinaryStream.h b/src/crypto/ssh/BinaryStream.h similarity index 83% rename from src/sshagent/BinaryStream.h rename to src/crypto/ssh/BinaryStream.h index c61010180..6f95039ec 100644 --- a/src/sshagent/BinaryStream.h +++ b/src/crypto/ssh/BinaryStream.h @@ -16,26 +16,24 @@ * along with this program. If not, see . */ -#ifndef BINARYSTREAM_H -#define BINARYSTREAM_H +#ifndef KEEPASSXC_BINARYSTREAM_H +#define KEEPASSXC_BINARYSTREAM_H -#include -#include #include +#include +#include class BinaryStream : QObject { Q_OBJECT + Q_DISABLE_COPY(BinaryStream) public: - BinaryStream(QObject* parent = nullptr); - BinaryStream(QIODevice* device); - BinaryStream(QByteArray* ba, QObject* parent = nullptr); - ~BinaryStream(); + explicit BinaryStream(QIODevice* device); + explicit BinaryStream(QByteArray* ba, QObject* parent = nullptr); + ~BinaryStream() override; const QString errorString() const; QIODevice* device() const; - void setDevice(QIODevice* device); - void setData(QByteArray* ba); void setTimeout(int timeout); bool read(QByteArray& ba); @@ -65,4 +63,4 @@ private: QScopedPointer m_buffer; }; -#endif // BINARYSTREAM_H +#endif // KEEPASSXC_BINARYSTREAM_H diff --git a/src/crypto/ssh/CMakeLists.txt b/src/crypto/ssh/CMakeLists.txt new file mode 100644 index 000000000..fdaf68e41 --- /dev/null +++ b/src/crypto/ssh/CMakeLists.txt @@ -0,0 +1,14 @@ +if(WITH_XC_CRYPTO_SSH) + include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) + + set(crypto_ssh_SOURCES + bcrypt_pbkdf.cpp + blowfish.c + ASN1Key.cpp + BinaryStream.cpp + OpenSSHKey.cpp + ) + + add_library(crypto_ssh STATIC ${crypto_ssh_SOURCES}) + target_link_libraries(crypto_ssh Qt5::Core ${GCRYPT_LIBRARIES}) +endif() diff --git a/src/sshagent/OpenSSHKey.cpp b/src/crypto/ssh/OpenSSHKey.cpp similarity index 54% rename from src/sshagent/OpenSSHKey.cpp rename to src/crypto/ssh/OpenSSHKey.cpp index 4527bfb60..7cabf38c6 100644 --- a/src/sshagent/OpenSSHKey.cpp +++ b/src/crypto/ssh/OpenSSHKey.cpp @@ -17,33 +17,207 @@ */ #include "OpenSSHKey.h" -#include "ASN1Key.h" + +#include "core/Tools.h" +#include "crypto/SymmetricCipher.h" +#include "crypto/ssh/ASN1Key.h" +#include "crypto/ssh/BinaryStream.h" + +#include #include #include -#include -#include "crypto/SymmetricCipher.h" -const QString OpenSSHKey::TYPE_DSA = "DSA PRIVATE KEY"; -const QString OpenSSHKey::TYPE_RSA = "RSA PRIVATE KEY"; -const QString OpenSSHKey::TYPE_OPENSSH = "OPENSSH PRIVATE KEY"; +#include + +const QString OpenSSHKey::TYPE_DSA_PRIVATE = "DSA PRIVATE KEY"; +const QString OpenSSHKey::TYPE_RSA_PRIVATE = "RSA PRIVATE KEY"; +const QString OpenSSHKey::TYPE_RSA_PUBLIC = "RSA PUBLIC KEY"; +const QString OpenSSHKey::TYPE_OPENSSH_PRIVATE = "OPENSSH PRIVATE KEY"; + +namespace +{ + QPair> binaryDeserialize(const QByteArray& serialized) + { + if (serialized.isEmpty()) { + return {}; + } + QBuffer buffer; + buffer.setData(serialized); + buffer.open(QBuffer::ReadOnly); + BinaryStream stream(&buffer); + QString type; + stream.readString(type); + QByteArray temp; + QList data; + while (stream.readString(temp)) { + data << temp; + } + return ::qMakePair(type, data); + } + + QByteArray binarySerialize(const QString& type, const QList& data) + { + if (type.isEmpty() && data.isEmpty()) { + return {}; + } + QByteArray buffer; + BinaryStream stream(&buffer); + stream.writeString(type); + for (const QByteArray& part : data) { + stream.writeString(part); + } + return buffer; + } +} // namespace // bcrypt_pbkdf.cpp int bcrypt_pbkdf(const QByteArray& pass, const QByteArray& salt, QByteArray& key, quint32 rounds); -OpenSSHKey::OpenSSHKey(QObject *parent) +OpenSSHKey OpenSSHKey::generate(bool secure) +{ + enum Index + { + Params, + CombinedKey, + PrivateKey, + PublicKey, + + Private_N, + Private_E, + Private_D, + Private_P, + Private_Q, + Private_U, // private key + Public_N, + Public_E, + }; + + Tools::Map mpi; + Tools::Map sexp; + gcry_error_t rc = GPG_ERR_NO_ERROR; + rc = gcry_sexp_build(&sexp[Params], + NULL, + secure ? "(genkey (rsa (nbits 4:2048)))" : "(genkey (rsa (transient-key) (nbits 4:2048)))"); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not create ssh key" << gcry_err_code(rc); + return OpenSSHKey(); + } + + rc = gcry_pk_genkey(&sexp[CombinedKey], sexp[Params]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not create ssh key" << gcry_err_code(rc); + return OpenSSHKey(); + } + + sexp[PrivateKey] = gcry_sexp_find_token(sexp[CombinedKey], "private-key", 0); + sexp[PublicKey] = gcry_sexp_find_token(sexp[CombinedKey], "public-key", 0); + + sexp[Private_N] = gcry_sexp_find_token(sexp[PrivateKey], "n", 1); + mpi[Private_N] = gcry_sexp_nth_mpi(sexp[Private_N], 1, GCRYMPI_FMT_USG); + sexp[Private_E] = gcry_sexp_find_token(sexp[PrivateKey], "e", 1); + mpi[Private_E] = gcry_sexp_nth_mpi(sexp[Private_E], 1, GCRYMPI_FMT_USG); + sexp[Private_D] = gcry_sexp_find_token(sexp[PrivateKey], "d", 1); + mpi[Private_D] = gcry_sexp_nth_mpi(sexp[Private_D], 1, GCRYMPI_FMT_USG); + sexp[Private_Q] = gcry_sexp_find_token(sexp[PrivateKey], "q", 1); + mpi[Private_Q] = gcry_sexp_nth_mpi(sexp[Private_Q], 1, GCRYMPI_FMT_USG); + sexp[Private_P] = gcry_sexp_find_token(sexp[PrivateKey], "p", 1); + mpi[Private_P] = gcry_sexp_nth_mpi(sexp[Private_P], 1, GCRYMPI_FMT_USG); + sexp[Private_U] = gcry_sexp_find_token(sexp[PrivateKey], "u", 1); + mpi[Private_U] = gcry_sexp_nth_mpi(sexp[Private_U], 1, GCRYMPI_FMT_USG); + + sexp[Public_N] = gcry_sexp_find_token(sexp[PublicKey], "n", 1); + mpi[Public_N] = gcry_sexp_nth_mpi(sexp[Public_N], 1, GCRYMPI_FMT_USG); + sexp[Public_E] = gcry_sexp_find_token(sexp[PublicKey], "e", 1); + mpi[Public_E] = gcry_sexp_nth_mpi(sexp[Public_E], 1, GCRYMPI_FMT_USG); + + QList publicParts; + QList privateParts; + Tools::Buffer buffer; + gcry_mpi_format format = GCRYMPI_FMT_USG; + rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_N]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not extract private key part" << gcry_err_code(rc); + return OpenSSHKey(); + } + privateParts << buffer.content(); + + buffer.clear(); + rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_E]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not extract private key part" << gcry_err_code(rc); + return OpenSSHKey(); + } + privateParts << buffer.content(); + + buffer.clear(); + rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_D]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not extract private key part" << gcry_err_code(rc); + return OpenSSHKey(); + } + privateParts << buffer.content(); + + buffer.clear(); + rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_U]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not extract private key part" << gcry_err_code(rc); + return OpenSSHKey(); + } + privateParts << buffer.content(); + + buffer.clear(); + rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_P]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not extract private key part" << gcry_err_code(rc); + return OpenSSHKey(); + } + privateParts << buffer.content(); + + buffer.clear(); + rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Private_Q]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not extract private key part" << gcry_err_code(rc); + return OpenSSHKey(); + } + privateParts << buffer.content(); + + buffer.clear(); + rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Public_E]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not extract public key part" << gcry_err_code(rc); + return OpenSSHKey(); + } + publicParts << buffer.content(); + + buffer.clear(); + rc = gcry_mpi_aprint(format, &buffer.raw, &buffer.size, mpi[Public_N]); + if (rc != GPG_ERR_NO_ERROR) { + qWarning() << "Could not extract public key part" << gcry_err_code(rc); + return OpenSSHKey(); + } + publicParts << buffer.content(); + OpenSSHKey key; + key.m_rawType = OpenSSHKey::TYPE_RSA_PRIVATE; + key.setType("ssh-rsa"); + key.setPublicData(publicParts); + key.setPrivateData(privateParts); + key.setComment(""); + return key; +} + +OpenSSHKey::OpenSSHKey(QObject* parent) : QObject(parent) , m_type(QString()) , m_cipherName(QString("none")) , m_kdfName(QString("none")) , m_kdfOptions(QByteArray()) - , m_rawPrivateData(QByteArray()) - , m_publicData(QList()) - , m_privateData(QList()) - , m_privateType(QString()) + , m_rawType(QString()) + , m_rawData(QByteArray()) + , m_rawPublicData(QList()) + , m_rawPrivateData(QList()) , m_comment(QString()) , m_error(QString()) { - } OpenSSHKey::OpenSSHKey(const OpenSSHKey& other) @@ -52,13 +226,13 @@ OpenSSHKey::OpenSSHKey(const OpenSSHKey& other) , m_cipherName(other.m_cipherName) , m_kdfName(other.m_kdfName) , m_kdfOptions(other.m_kdfOptions) + , m_rawType(other.m_rawType) + , m_rawData(other.m_rawData) + , m_rawPublicData(other.m_rawPublicData) , m_rawPrivateData(other.m_rawPrivateData) - , m_publicData(other.m_publicData) - , m_privateData(other.m_privateData) , m_comment(other.m_comment) , m_error(other.m_error) { - } bool OpenSSHKey::operator==(const OpenSSHKey& other) const @@ -79,22 +253,21 @@ const QString OpenSSHKey::type() const int OpenSSHKey::keyLength() const { - if (m_type == "ssh-dss" && m_publicData.length() == 4) { - return (m_publicData[0].length() - 1) * 8; - } else if (m_type == "ssh-rsa" && m_publicData.length() == 2) { - return (m_publicData[1].length() - 1) * 8; - } else if (m_type.startsWith("ecdsa-sha2-") && m_publicData.length() == 2) { - return (m_publicData[1].length() - 1) * 4; - } else if (m_type == "ssh-ed25519" && m_publicData.length() == 1) { - return m_publicData[0].length() * 8; + if (m_type == "ssh-dss" && m_rawPublicData.length() == 4) { + return (m_rawPublicData[0].length() - 1) * 8; + } else if (m_type == "ssh-rsa" && m_rawPublicData.length() == 2) { + return (m_rawPublicData[1].length() - 1) * 8; + } else if (m_type.startsWith("ecdsa-sha2-") && m_rawPublicData.length() == 2) { + return (m_rawPublicData[1].length() - 1) * 4; + } else if (m_type == "ssh-ed25519" && m_rawPublicData.length() == 1) { + return m_rawPublicData[0].length() * 8; } - return 0; } -const QString OpenSSHKey::fingerprint() const +const QString OpenSSHKey::fingerprint(QCryptographicHash::Algorithm algo) const { - if (m_publicData.isEmpty()) { + if (m_rawPublicData.isEmpty()) { return {}; } @@ -103,13 +276,24 @@ const QString OpenSSHKey::fingerprint() const stream.writeString(m_type); - for (QByteArray ba : m_publicData) { + for (const QByteArray& ba : m_rawPublicData) { stream.writeString(ba); } - QByteArray rawHash = QCryptographicHash::hash(publicKey, QCryptographicHash::Sha256); + QByteArray rawHash = QCryptographicHash::hash(publicKey, algo); - return "SHA256:" + QString::fromLatin1(rawHash.toBase64(QByteArray::OmitTrailingEquals)); + if (algo == QCryptographicHash::Md5) { + QString md5Hash = QString::fromLatin1(rawHash.toHex()); + QStringList md5HashParts; + for (int i = 0; i < md5Hash.length(); i += 2) { + md5HashParts.append(md5Hash.mid(i, 2)); + } + return "MD5:" + md5HashParts.join(':'); + } else if (algo == QCryptographicHash::Sha256) { + return "SHA256:" + QString::fromLatin1(rawHash.toBase64(QByteArray::OmitTrailingEquals)); + } + + return "HASH:" + QString::fromLatin1(rawHash.toHex()); } const QString OpenSSHKey::comment() const @@ -117,9 +301,27 @@ const QString OpenSSHKey::comment() const return m_comment; } +const QString OpenSSHKey::privateKey() const +{ + if (m_rawPrivateData.isEmpty()) { + return {}; + } + + QByteArray privateKey; + BinaryStream stream(&privateKey); + + stream.writeString(m_type); + + for (QByteArray ba : m_rawPrivateData) { + stream.writeString(ba); + } + + return m_type + " " + QString::fromLatin1(privateKey.toBase64()) + " " + m_comment; +} + const QString OpenSSHKey::publicKey() const { - if (m_publicData.isEmpty()) { + if (m_rawPublicData.isEmpty()) { return {}; } @@ -128,7 +330,7 @@ const QString OpenSSHKey::publicKey() const stream.writeString(m_type); - for (QByteArray ba : m_publicData) { + for (QByteArray ba : m_rawPublicData) { stream.writeString(ba); } @@ -147,12 +349,12 @@ void OpenSSHKey::setType(const QString& type) void OpenSSHKey::setPublicData(const QList& data) { - m_publicData = data; + m_rawPublicData = data; } void OpenSSHKey::setPrivateData(const QList& data) { - m_privateData = data; + m_rawPrivateData = data; } void OpenSSHKey::setComment(const QString& comment) @@ -162,11 +364,11 @@ void OpenSSHKey::setComment(const QString& comment) void OpenSSHKey::clearPrivate() { + m_rawData.clear(); m_rawPrivateData.clear(); - m_privateData.clear(); } -bool OpenSSHKey::parsePEM(const QByteArray& in, QByteArray& out) +bool OpenSSHKey::extractPEM(const QByteArray& in, QByteArray& out) { QString pem = QString::fromLatin1(in); QStringList rows = pem.split(QRegularExpression("(?:\r?\n|\r)"), QString::SkipEmptyParts); @@ -192,7 +394,7 @@ bool OpenSSHKey::parsePEM(const QByteArray& in, QByteArray& out) return false; } - m_privateType = beginMatch.captured(1); + m_rawType = beginMatch.captured(1); rows.removeFirst(); rows.removeLast(); @@ -228,17 +430,17 @@ bool OpenSSHKey::parsePEM(const QByteArray& in, QByteArray& out) return true; } -bool OpenSSHKey::parse(const QByteArray& in) +bool OpenSSHKey::parsePKCS1PEM(const QByteArray& in) { QByteArray data; - if (!parsePEM(in, data)) { + if (!extractPEM(in, data)) { return false; } - if (m_privateType == TYPE_DSA || m_privateType == TYPE_RSA) { - m_rawPrivateData = data; - } else if (m_privateType == TYPE_OPENSSH) { + if (m_rawType == TYPE_DSA_PRIVATE || m_rawType == TYPE_RSA_PRIVATE || m_rawType == TYPE_RSA_PUBLIC) { + m_rawData = data; + } else if (m_rawType == TYPE_OPENSSH_PRIVATE) { BinaryStream stream(&data); QByteArray magic; @@ -282,18 +484,18 @@ bool OpenSSHKey::parse(const QByteArray& in) } // padded list of keys - if (!stream.readString(m_rawPrivateData)) { + if (!stream.readString(m_rawData)) { m_error = tr("Corrupted key file, reading private key failed"); return false; } } else { - m_error = tr("Unsupported key type: %1").arg(m_privateType); + m_error = tr("Unsupported key type: %1").arg(m_rawType); return false; } // load private if no encryption if (!encrypted()) { - return openPrivateKey(); + return openKey(); } return true; @@ -304,15 +506,15 @@ bool OpenSSHKey::encrypted() const return (m_cipherName != "none"); } -bool OpenSSHKey::openPrivateKey(const QString& passphrase) +bool OpenSSHKey::openKey(const QString& passphrase) { QScopedPointer cipher; - if (!m_privateData.isEmpty()) { + if (!m_rawPrivateData.isEmpty()) { return true; } - if (m_rawPrivateData.isEmpty()) { + if (m_rawData.isEmpty()) { m_error = tr("No private key payload to decrypt"); return false; } @@ -381,7 +583,7 @@ bool OpenSSHKey::openPrivateKey(const QString& passphrase) hash.addData(m_cipherIV.data(), 8); mdBuf = hash.result(); keyData.append(mdBuf); - } while(keyData.size() < cipher->keySize()); + } while (keyData.size() < cipher->keySize()); if (keyData.size() > cipher->keySize()) { // If our key size isn't a multiple of 16 (e.g. AES-192 or something), @@ -398,33 +600,38 @@ bool OpenSSHKey::openPrivateKey(const QString& passphrase) return false; } - QByteArray rawPrivateData = m_rawPrivateData; + QByteArray rawData = m_rawData; if (cipher && cipher->isInitalized()) { bool ok = false; - rawPrivateData = cipher->process(rawPrivateData, &ok); + rawData = cipher->process(rawData, &ok); if (!ok) { m_error = tr("Decryption failed, wrong passphrase?"); return false; } } - if (m_privateType == TYPE_DSA) { - if (!ASN1Key::parseDSA(rawPrivateData, *this)) { + if (m_rawType == TYPE_DSA_PRIVATE) { + if (!ASN1Key::parseDSA(rawData, *this)) { m_error = tr("Decryption failed, wrong passphrase?"); return false; } return true; - } else if (m_privateType == TYPE_RSA) { - if (!ASN1Key::parseRSA(rawPrivateData, *this)) { + } else if (m_rawType == TYPE_RSA_PRIVATE) { + if (!ASN1Key::parsePrivateRSA(rawData, *this)) { m_error = tr("Decryption failed, wrong passphrase?"); return false; } - return true; - } else if (m_privateType == TYPE_OPENSSH) { - BinaryStream keyStream(&rawPrivateData); + } else if (m_rawType == TYPE_RSA_PUBLIC) { + if (!ASN1Key::parsePublicRSA(rawData, *this)) { + m_error = tr("Decryption failed, wrong passphrase?"); + return false; + } + return true; + } else if (m_rawType == TYPE_OPENSSH_PRIVATE) { + BinaryStream keyStream(&rawData); quint32 checkInt1; quint32 checkInt2; @@ -440,13 +647,13 @@ bool OpenSSHKey::openPrivateKey(const QString& passphrase) return readPrivate(keyStream); } - m_error = tr("Unsupported key type: %1").arg(m_privateType); + m_error = tr("Unsupported key type: %1").arg(m_rawType); return false; } bool OpenSSHKey::readPublic(BinaryStream& stream) { - m_publicData.clear(); + m_rawPublicData.clear(); if (!stream.readString(m_type)) { m_error = tr("Unexpected EOF while reading public key"); @@ -475,7 +682,7 @@ bool OpenSSHKey::readPublic(BinaryStream& stream) return false; } - m_publicData.append(t); + m_rawPublicData.append(t); } return true; @@ -483,7 +690,7 @@ bool OpenSSHKey::readPublic(BinaryStream& stream) bool OpenSSHKey::readPrivate(BinaryStream& stream) { - m_privateData.clear(); + m_rawPrivateData.clear(); if (!stream.readString(m_type)) { m_error = tr("Unexpected EOF while reading private key"); @@ -512,7 +719,7 @@ bool OpenSSHKey::readPrivate(BinaryStream& stream) return false; } - m_privateData.append(t); + m_rawPrivateData.append(t); } if (!stream.readString(m_comment)) { @@ -525,7 +732,7 @@ bool OpenSSHKey::readPrivate(BinaryStream& stream) bool OpenSSHKey::writePublic(BinaryStream& stream) { - if (m_publicData.isEmpty()) { + if (m_rawPublicData.isEmpty()) { m_error = tr("Can't write public key as it is empty"); return false; } @@ -535,7 +742,7 @@ bool OpenSSHKey::writePublic(BinaryStream& stream) return false; } - for (QByteArray t : m_publicData) { + for (QByteArray t : m_rawPublicData) { if (!stream.writeString(t)) { m_error = tr("Unexpected EOF when writing public key"); return false; @@ -547,7 +754,7 @@ bool OpenSSHKey::writePublic(BinaryStream& stream) bool OpenSSHKey::writePrivate(BinaryStream& stream) { - if (m_privateData.isEmpty()) { + if (m_rawPrivateData.isEmpty()) { m_error = tr("Can't write private key as it is empty"); return false; } @@ -557,7 +764,7 @@ bool OpenSSHKey::writePrivate(BinaryStream& stream) return false; } - for (QByteArray t : m_privateData) { + for (QByteArray t : m_rawPrivateData) { if (!stream.writeString(t)) { m_error = tr("Unexpected EOF when writing private key"); return false; @@ -572,6 +779,49 @@ bool OpenSSHKey::writePrivate(BinaryStream& stream) return true; } +QList OpenSSHKey::publicParts() const +{ + return m_rawPublicData; +} + +QList OpenSSHKey::privateParts() const +{ + return m_rawPrivateData; +} + +const QString& OpenSSHKey::privateType() const +{ + return m_rawType; +} + +OpenSSHKey OpenSSHKey::restoreFromBinary(Type type, const QByteArray& serialized) +{ + OpenSSHKey key; + auto data = binaryDeserialize(serialized); + key.setType(data.first); + switch (type) { + case Public: + key.setPublicData(data.second); + break; + case Private: + key.setPrivateData(data.second); + break; + } + return key; +} + +QByteArray OpenSSHKey::serializeToBinary(Type type, const OpenSSHKey& key) +{ + Q_ASSERT(!key.encrypted()); + switch (type) { + case Public: + return binarySerialize(key.type(), key.publicParts()); + case Private: + return binarySerialize(key.type(), key.privateParts()); + } + return {}; +} + uint qHash(const OpenSSHKey& key) { return qHash(key.fingerprint()); diff --git a/src/sshagent/OpenSSHKey.h b/src/crypto/ssh/OpenSSHKey.h similarity index 61% rename from src/sshagent/OpenSSHKey.h rename to src/crypto/ssh/OpenSSHKey.h index e06af2201..85c288b9f 100644 --- a/src/sshagent/OpenSSHKey.h +++ b/src/crypto/ssh/OpenSSHKey.h @@ -16,30 +16,34 @@ * along with this program. If not, see . */ -#ifndef OPENSSHKEY_H -#define OPENSSHKEY_H +#ifndef KEEPASSXC_OPENSSHKEY_H +#define KEEPASSXC_OPENSSHKEY_H #include -#include "BinaryStream.h" -class OpenSSHKey : QObject +class BinaryStream; + +class OpenSSHKey : public QObject { Q_OBJECT public: + static OpenSSHKey generate(bool secure = true); + explicit OpenSSHKey(QObject* parent = nullptr); OpenSSHKey(const OpenSSHKey& other); bool operator==(const OpenSSHKey& other) const; - bool parse(const QByteArray& in); + bool parsePKCS1PEM(const QByteArray& in); bool encrypted() const; - bool openPrivateKey(const QString& passphrase = QString()); + bool openKey(const QString& passphrase = QString()); const QString cipherName() const; const QString type() const; int keyLength() const; - const QString fingerprint() const; + const QString fingerprint(QCryptographicHash::Algorithm algo = QCryptographicHash::Sha256) const; const QString comment() const; const QString publicKey() const; + const QString privateKey() const; const QString errorString() const; void setType(const QString& type); @@ -54,26 +58,41 @@ public: bool writePublic(BinaryStream& stream); bool writePrivate(BinaryStream& stream); -private: - static const QString TYPE_DSA; - static const QString TYPE_RSA; - static const QString TYPE_OPENSSH; + QList publicParts() const; + QList privateParts() const; + const QString& privateType() const; - bool parsePEM(const QByteArray& in, QByteArray& out); + static const QString TYPE_DSA_PRIVATE; + static const QString TYPE_RSA_PRIVATE; + static const QString TYPE_RSA_PUBLIC; + static const QString TYPE_OPENSSH_PRIVATE; + + enum Type + { + Public, + Private + }; + + static OpenSSHKey restoreFromBinary(Type eType, const QByteArray& serialized); + static QByteArray serializeToBinary(Type eType, const OpenSSHKey& key); + +private: + bool extractPEM(const QByteArray& in, QByteArray& out); QString m_type; QString m_cipherName; QByteArray m_cipherIV; QString m_kdfName; QByteArray m_kdfOptions; - QByteArray m_rawPrivateData; - QList m_publicData; - QList m_privateData; - QString m_privateType; + + QString m_rawType; + QByteArray m_rawData; + QList m_rawPublicData; + QList m_rawPrivateData; QString m_comment; QString m_error; }; uint qHash(const OpenSSHKey& key); -#endif // OPENSSHKEY_H +#endif // KEEPASSXC_OPENSSHKEY_H diff --git a/src/sshagent/bcrypt_pbkdf.cpp b/src/crypto/ssh/bcrypt_pbkdf.cpp similarity index 100% rename from src/sshagent/bcrypt_pbkdf.cpp rename to src/crypto/ssh/bcrypt_pbkdf.cpp diff --git a/src/sshagent/blf.h b/src/crypto/ssh/blf.h similarity index 100% rename from src/sshagent/blf.h rename to src/crypto/ssh/blf.h diff --git a/src/sshagent/blowfish.c b/src/crypto/ssh/blowfish.c similarity index 100% rename from src/sshagent/blowfish.c rename to src/crypto/ssh/blowfish.c diff --git a/src/sshagent/includes.h b/src/crypto/ssh/includes.h similarity index 90% rename from src/sshagent/includes.h rename to src/crypto/ssh/includes.h index c6bb4d32e..23b4aeeb6 100644 --- a/src/sshagent/includes.h +++ b/src/crypto/ssh/includes.h @@ -8,7 +8,6 @@ #endif #include - #ifdef _WIN32 #include @@ -16,5 +15,5 @@ typedef uint32_t u_int32_t; typedef uint16_t u_int16_t; typedef uint8_t u_int8_t; -#define bzero(p,s) memset(p, 0, s) +#define bzero(p, s) memset(p, 0, s) #endif diff --git a/src/format/CsvExporter.cpp b/src/format/CsvExporter.cpp index c444afe23..03d5a576f 100644 --- a/src/format/CsvExporter.cpp +++ b/src/format/CsvExporter.cpp @@ -23,7 +23,7 @@ #include "core/Database.h" #include "core/Group.h" -bool CsvExporter::exportDatabase(const QString& filename, const Database* db) +bool CsvExporter::exportDatabase(const QString& filename, const QSharedPointer& db) { QFile file(filename); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { @@ -33,7 +33,7 @@ bool CsvExporter::exportDatabase(const QString& filename, const Database* db) return exportDatabase(&file, db); } -bool CsvExporter::exportDatabase(QIODevice* device, const Database* db) +bool CsvExporter::exportDatabase(QIODevice* device, const QSharedPointer& db) { QString header; addColumn(header, "Group"); @@ -64,7 +64,7 @@ bool CsvExporter::writeGroup(QIODevice* device, const Group* group, QString grou } groupPath.append(group->name()); - const QList entryList = group->entries(); + const QList& entryList = group->entries(); for (const Entry* entry : entryList) { QString line; @@ -83,7 +83,7 @@ bool CsvExporter::writeGroup(QIODevice* device, const Group* group, QString grou } } - const QList children = group->children(); + const QList& children = group->children(); for (const Group* child : children) { if (!writeGroup(device, child, groupPath)) { return false; diff --git a/src/format/CsvExporter.h b/src/format/CsvExporter.h index 4040a3505..e71cf7fa9 100644 --- a/src/format/CsvExporter.h +++ b/src/format/CsvExporter.h @@ -20,6 +20,7 @@ #define KEEPASSX_CSVEXPORTER_H #include +#include class Database; class Group; @@ -28,8 +29,8 @@ class QIODevice; class CsvExporter { public: - bool exportDatabase(const QString& filename, const Database* db); - bool exportDatabase(QIODevice* device, const Database* db); + bool exportDatabase(const QString& filename, const QSharedPointer& db); + bool exportDatabase(QIODevice* device, const QSharedPointer& db); QString errorString() const; private: diff --git a/src/format/Kdbx3Reader.cpp b/src/format/Kdbx3Reader.cpp index 84f7db67e..4fec74718 100644 --- a/src/format/Kdbx3Reader.cpp +++ b/src/format/Kdbx3Reader.cpp @@ -18,86 +18,87 @@ #include "Kdbx3Reader.h" -#include "core/Group.h" #include "core/Endian.h" +#include "core/Group.h" #include "crypto/CryptoHash.h" -#include "format/KeePass2RandomStream.h" #include "format/KdbxXmlReader.h" +#include "format/KeePass2RandomStream.h" #include "streams/HashedBlockStream.h" #include "streams/QtIOCompressor" #include "streams/SymmetricCipherStream.h" #include -Database* Kdbx3Reader::readDatabaseImpl(QIODevice* device, const QByteArray& headerData, - const CompositeKey& key, bool keepDatabase) +bool Kdbx3Reader::readDatabaseImpl(QIODevice* device, + const QByteArray& headerData, + QSharedPointer key, + Database* db) { Q_ASSERT(m_kdbxVersion <= KeePass2::FILE_VERSION_3_1); if (hasError()) { - return nullptr; + return false; } // check if all required headers were present - if (m_masterSeed.isEmpty() || m_encryptionIV.isEmpty() - || m_streamStartBytes.isEmpty() || m_protectedStreamKey.isEmpty() - || m_db->cipher().isNull()) { - raiseError("missing database headers"); - return nullptr; + if (m_masterSeed.isEmpty() || m_encryptionIV.isEmpty() || m_streamStartBytes.isEmpty() + || m_protectedStreamKey.isEmpty() || db->cipher().isNull()) { + raiseError(tr("missing database headers")); + return false; } - if (!m_db->setKey(key, false)) { + if (!db->setKey(key, false)) { raiseError(tr("Unable to calculate master key")); - return nullptr; + return false; } - if (!m_db->challengeMasterSeed(m_masterSeed)) { + if (!db->challengeMasterSeed(m_masterSeed)) { raiseError(tr("Unable to issue challenge-response.")); - return nullptr; + return false; } CryptoHash hash(CryptoHash::Sha256); hash.addData(m_masterSeed); - hash.addData(m_db->challengeResponseKey()); - hash.addData(m_db->transformedMasterKey()); + hash.addData(db->challengeResponseKey()); + hash.addData(db->transformedMasterKey()); QByteArray finalKey = hash.result(); - SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(m_db->cipher()); - SymmetricCipherStream cipherStream(device, cipher, - SymmetricCipher::algorithmMode(cipher), SymmetricCipher::Decrypt); + SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(db->cipher()); + SymmetricCipherStream cipherStream( + device, cipher, SymmetricCipher::algorithmMode(cipher), SymmetricCipher::Decrypt); if (!cipherStream.init(finalKey, m_encryptionIV)) { raiseError(cipherStream.errorString()); - return nullptr; + return false; } if (!cipherStream.open(QIODevice::ReadOnly)) { raiseError(cipherStream.errorString()); - return nullptr; + return false; } QByteArray realStart = cipherStream.read(32); if (realStart != m_streamStartBytes) { raiseError(tr("Wrong key or database file is corrupt.")); - return nullptr; + return false; } HashedBlockStream hashedStream(&cipherStream); if (!hashedStream.open(QIODevice::ReadOnly)) { raiseError(hashedStream.errorString()); - return nullptr; + return false; } QIODevice* xmlDevice = nullptr; QScopedPointer ioCompressor; - if (m_db->compressionAlgo() == Database::CompressionNone) { + if (db->compressionAlgorithm() == Database::CompressionNone) { xmlDevice = &hashedStream; } else { ioCompressor.reset(new QtIOCompressor(&hashedStream)); ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); if (!ioCompressor->open(QIODevice::ReadOnly)) { raiseError(ioCompressor->errorString()); - return nullptr; + return false; } xmlDevice = ioCompressor.data(); } @@ -105,28 +106,17 @@ Database* Kdbx3Reader::readDatabaseImpl(QIODevice* device, const QByteArray& hea KeePass2RandomStream randomStream(KeePass2::ProtectedStreamAlgo::Salsa20); if (!randomStream.init(m_protectedStreamKey)) { raiseError(randomStream.errorString()); - return nullptr; - } - - QBuffer buffer; - if (saveXml()) { - m_xmlData = xmlDevice->readAll(); - buffer.setBuffer(&m_xmlData); - buffer.open(QIODevice::ReadOnly); - xmlDevice = &buffer; + return false; } Q_ASSERT(xmlDevice); KdbxXmlReader xmlReader(KeePass2::FILE_VERSION_3_1); - xmlReader.readDatabase(xmlDevice, m_db.data(), &randomStream); + xmlReader.readDatabase(xmlDevice, db, &randomStream); if (xmlReader.hasError()) { raiseError(xmlReader.errorString()); - if (keepDatabase) { - return m_db.take(); - } - return nullptr; + return false; } Q_ASSERT(!xmlReader.headerHash().isEmpty() || m_kdbxVersion < KeePass2::FILE_VERSION_3_1); @@ -134,19 +124,21 @@ Database* Kdbx3Reader::readDatabaseImpl(QIODevice* device, const QByteArray& hea if (!xmlReader.headerHash().isEmpty()) { QByteArray headerHash = CryptoHash::hash(headerData, CryptoHash::Sha256); if (headerHash != xmlReader.headerHash()) { - raiseError("Header doesn't match hash"); - return nullptr; + raiseError(tr("Header doesn't match hash")); + return false; } } - return m_db.take(); + return true; } -bool Kdbx3Reader::readHeaderField(StoreDataStream& headerStream) +bool Kdbx3Reader::readHeaderField(StoreDataStream& headerStream, Database* db) { + Q_UNUSED(db); + QByteArray fieldIDArray = headerStream.read(1); if (fieldIDArray.size() != 1) { - raiseError("Invalid header id size"); + raiseError(tr("Invalid header id size")); return false; } char fieldID = fieldIDArray.at(0); @@ -154,7 +146,7 @@ bool Kdbx3Reader::readHeaderField(StoreDataStream& headerStream) bool ok; auto fieldLen = Endian::readSizedInt(&headerStream, KeePass2::BYTEORDER, &ok); if (!ok) { - raiseError("Invalid header field length"); + raiseError(tr("Invalid header field length")); return false; } @@ -162,7 +154,7 @@ bool Kdbx3Reader::readHeaderField(StoreDataStream& headerStream) if (fieldLen != 0) { fieldData = headerStream.read(fieldLen); if (fieldData.size() != fieldLen) { - raiseError("Invalid header data length"); + raiseError(tr("Invalid header data length")); return false; } } diff --git a/src/format/Kdbx3Reader.h b/src/format/Kdbx3Reader.h index e62901578..ded7c52dc 100644 --- a/src/format/Kdbx3Reader.h +++ b/src/format/Kdbx3Reader.h @@ -24,16 +24,18 @@ /** * KDBX 2/3 reader implementation. */ -class Kdbx3Reader: public KdbxReader +class Kdbx3Reader : public KdbxReader { -Q_DECLARE_TR_FUNCTIONS(Kdbx3Reader) + Q_DECLARE_TR_FUNCTIONS(Kdbx3Reader) public: - Database* readDatabaseImpl(QIODevice* device, const QByteArray& headerData, - const CompositeKey& key, bool keepDatabase) override; + bool readDatabaseImpl(QIODevice* device, + const QByteArray& headerData, + QSharedPointer key, + Database* db) override; protected: - bool readHeaderField(StoreDataStream& headerStream) override; + bool readHeaderField(StoreDataStream& headerStream, Database* db) override; }; #endif // KEEPASSX_KDBX3READER_H diff --git a/src/format/Kdbx3Writer.cpp b/src/format/Kdbx3Writer.cpp index c2fefff1b..b2de41f44 100644 --- a/src/format/Kdbx3Writer.cpp +++ b/src/format/Kdbx3Writer.cpp @@ -23,9 +23,9 @@ #include "core/Database.h" #include "crypto/CryptoHash.h" #include "crypto/Random.h" +#include "format/KdbxXmlWriter.h" #include "format/KeePass2.h" #include "format/KeePass2RandomStream.h" -#include "format/KdbxXmlWriter.h" #include "streams/HashedBlockStream.h" #include "streams/QtIOCompressor" #include "streams/SymmetricCipherStream.h" @@ -65,23 +65,26 @@ bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db) writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, KeePass2::FILE_VERSION_3_1); - CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toByteArray())); - CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::CompressionFlags, - Endian::sizedIntToBytes(db->compressionAlgo(), - KeePass2::BYTEORDER))); + CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toRfc4122())); + CHECK_RETURN_FALSE( + writeHeaderField(&header, + KeePass2::HeaderFieldID::CompressionFlags, + Endian::sizedIntToBytes(db->compressionAlgorithm(), KeePass2::BYTEORDER))); auto kdf = db->kdf(); CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::MasterSeed, masterSeed)); CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::TransformSeed, kdf->seed())); - CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::TransformRounds, - Endian::sizedIntToBytes(kdf->rounds(), - KeePass2::BYTEORDER))); + CHECK_RETURN_FALSE(writeHeaderField(&header, + KeePass2::HeaderFieldID::TransformRounds, + Endian::sizedIntToBytes(kdf->rounds(), KeePass2::BYTEORDER))); CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EncryptionIV, encryptionIV)); - CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::ProtectedStreamKey, protectedStreamKey)); + CHECK_RETURN_FALSE( + writeHeaderField(&header, KeePass2::HeaderFieldID::ProtectedStreamKey, protectedStreamKey)); CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::StreamStartBytes, startBytes)); - CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::InnerRandomStreamID, - Endian::sizedIntToBytes(static_cast( - KeePass2::ProtectedStreamAlgo::Salsa20), - KeePass2::BYTEORDER))); + CHECK_RETURN_FALSE(writeHeaderField( + &header, + KeePass2::HeaderFieldID::InnerRandomStreamID, + Endian::sizedIntToBytes(static_cast(KeePass2::ProtectedStreamAlgo::Salsa20), + KeePass2::BYTEORDER))); CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EndOfHeader, endOfHeader)); header.close(); @@ -93,8 +96,7 @@ bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db) // write cipher stream SymmetricCipher::Algorithm algo = SymmetricCipher::cipherToAlgorithm(db->cipher()); - SymmetricCipherStream cipherStream(device, algo, - SymmetricCipher::algorithmMode(algo), SymmetricCipher::Encrypt); + SymmetricCipherStream cipherStream(device, algo, SymmetricCipher::algorithmMode(algo), SymmetricCipher::Encrypt); cipherStream.init(finalKey, encryptionIV); if (!cipherStream.open(QIODevice::WriteOnly)) { raiseError(cipherStream.errorString()); @@ -111,7 +113,7 @@ bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db) QIODevice* outputDevice = nullptr; QScopedPointer ioCompressor; - if (db->compressionAlgo() == Database::CompressionNone) { + if (db->compressionAlgorithm() == Database::CompressionNone) { outputDevice = &hashedStream; } else { ioCompressor.reset(new QtIOCompressor(&hashedStream)); diff --git a/src/format/Kdbx3Writer.h b/src/format/Kdbx3Writer.h index 8acc198a5..eb98a470d 100644 --- a/src/format/Kdbx3Writer.h +++ b/src/format/Kdbx3Writer.h @@ -23,9 +23,9 @@ /** * KDBX2/3 writer implementation. */ -class Kdbx3Writer: public KdbxWriter +class Kdbx3Writer : public KdbxWriter { -Q_DECLARE_TR_FUNCTIONS(Kdbx3Writer) + Q_DECLARE_TR_FUNCTIONS(Kdbx3Writer) public: bool writeDatabase(QIODevice* device, Database* db) override; diff --git a/src/format/Kdbx4Reader.cpp b/src/format/Kdbx4Reader.cpp index 2919db785..fbdf865bc 100644 --- a/src/format/Kdbx4Reader.cpp +++ b/src/format/Kdbx4Reader.cpp @@ -19,94 +19,94 @@ #include -#include "core/Group.h" #include "core/Endian.h" +#include "core/Group.h" #include "crypto/CryptoHash.h" -#include "format/KeePass2RandomStream.h" #include "format/KdbxXmlReader.h" +#include "format/KeePass2RandomStream.h" #include "streams/HmacBlockStream.h" #include "streams/QtIOCompressor" #include "streams/SymmetricCipherStream.h" -Database* Kdbx4Reader::readDatabaseImpl(QIODevice* device, const QByteArray& headerData, - const CompositeKey& key, bool keepDatabase) +bool Kdbx4Reader::readDatabaseImpl(QIODevice* device, + const QByteArray& headerData, + QSharedPointer key, + Database* db) { Q_ASSERT(m_kdbxVersion == KeePass2::FILE_VERSION_4); m_binaryPoolInverse.clear(); if (hasError()) { - return nullptr; + return false; } // check if all required headers were present - if (m_masterSeed.isEmpty() - || m_encryptionIV.isEmpty() - || m_db->cipher().isNull()) { + if (m_masterSeed.isEmpty() || m_encryptionIV.isEmpty() || db->cipher().isNull()) { raiseError(tr("missing database headers")); - return nullptr; + return false; } - if (!m_db->setKey(key, false, false)) { + if (!db->setKey(key, false, false)) { raiseError(tr("Unable to calculate master key")); - return nullptr; + return false; } CryptoHash hash(CryptoHash::Sha256); hash.addData(m_masterSeed); - hash.addData(m_db->transformedMasterKey()); + hash.addData(db->transformedMasterKey()); QByteArray finalKey = hash.result(); QByteArray headerSha256 = device->read(32); QByteArray headerHmac = device->read(32); if (headerSha256.size() != 32 || headerHmac.size() != 32) { raiseError(tr("Invalid header checksum size")); - return nullptr; + return false; } if (headerSha256 != CryptoHash::hash(headerData, CryptoHash::Sha256)) { raiseError(tr("Header SHA256 mismatch")); - return nullptr; + return false; } - QByteArray hmacKey = KeePass2::hmacKey(m_masterSeed, m_db->transformedMasterKey()); - if (headerHmac != CryptoHash::hmac(headerData, - HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256)) { + // clang-format off + QByteArray hmacKey = KeePass2::hmacKey(m_masterSeed, db->transformedMasterKey()); + if (headerHmac != CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256)) { raiseError(tr("Wrong key or database file is corrupt. (HMAC mismatch)")); - return nullptr; + return false; } HmacBlockStream hmacStream(device, hmacKey); if (!hmacStream.open(QIODevice::ReadOnly)) { raiseError(hmacStream.errorString()); - return nullptr; + return false; } - SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(m_db->cipher()); + SymmetricCipher::Algorithm cipher = SymmetricCipher::cipherToAlgorithm(db->cipher()); if (cipher == SymmetricCipher::InvalidAlgorithm) { raiseError(tr("Unknown cipher")); - return nullptr; + return false; } - SymmetricCipherStream cipherStream(&hmacStream, cipher, - SymmetricCipher::algorithmMode(cipher), SymmetricCipher::Decrypt); + SymmetricCipherStream cipherStream(&hmacStream, cipher, SymmetricCipher::algorithmMode(cipher), SymmetricCipher::Decrypt); if (!cipherStream.init(finalKey, m_encryptionIV)) { raiseError(cipherStream.errorString()); - return nullptr; + return false; } if (!cipherStream.open(QIODevice::ReadOnly)) { raiseError(cipherStream.errorString()); - return nullptr; + return false; } + // clang-format on QIODevice* xmlDevice = nullptr; QScopedPointer ioCompressor; - if (m_db->compressionAlgo() == Database::CompressionNone) { + if (db->compressionAlgorithm() == Database::CompressionNone) { xmlDevice = &cipherStream; } else { ioCompressor.reset(new QtIOCompressor(&cipherStream)); ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); if (!ioCompressor->open(QIODevice::ReadOnly)) { raiseError(ioCompressor->errorString()); - return nullptr; + return false; } xmlDevice = ioCompressor.data(); } @@ -115,40 +115,29 @@ Database* Kdbx4Reader::readDatabaseImpl(QIODevice* device, const QByteArray& hea } if (hasError()) { - return nullptr; + return false; } KeePass2RandomStream randomStream(m_irsAlgo); if (!randomStream.init(m_protectedStreamKey)) { raiseError(randomStream.errorString()); - return nullptr; - } - - QBuffer buffer; - if (saveXml()) { - m_xmlData = xmlDevice->readAll(); - buffer.setBuffer(&m_xmlData); - buffer.open(QIODevice::ReadOnly); - xmlDevice = &buffer; + return false; } Q_ASSERT(xmlDevice); KdbxXmlReader xmlReader(KeePass2::FILE_VERSION_4, binaryPool()); - xmlReader.readDatabase(xmlDevice, m_db.data(), &randomStream); + xmlReader.readDatabase(xmlDevice, db, &randomStream); if (xmlReader.hasError()) { raiseError(xmlReader.errorString()); - if (keepDatabase) { - return m_db.take(); - } - return nullptr; + return false; } - return m_db.take(); + return true; } -bool Kdbx4Reader::readHeaderField(StoreDataStream& device) +bool Kdbx4Reader::readHeaderField(StoreDataStream& device, Database* db) { QByteArray fieldIDArray = device.read(1); if (fieldIDArray.size() != 1) { @@ -205,7 +194,7 @@ bool Kdbx4Reader::readHeaderField(StoreDataStream& device) raiseError(tr("Unsupported key derivation function (KDF) or invalid parameters")); return false; } - m_db->setKdf(kdf); + db->setKdf(kdf); break; } @@ -214,7 +203,7 @@ bool Kdbx4Reader::readHeaderField(StoreDataStream& device) variantBuffer.setBuffer(&fieldData); variantBuffer.open(QBuffer::ReadOnly); QVariantMap data = readVariantMap(&variantBuffer); - m_db->setPublicCustomData(data); + db->setPublicCustomData(data); break; } @@ -304,8 +293,8 @@ bool Kdbx4Reader::readInnerHeaderField(QIODevice* device) QVariantMap Kdbx4Reader::readVariantMap(QIODevice* device) { bool ok; - quint16 version = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok) - & KeePass2::VARIANTMAP_CRITICAL_MASK; + quint16 version = + Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok) & KeePass2::VARIANTMAP_CRITICAL_MASK; quint16 maxVersion = KeePass2::VARIANTMAP_VERSION & KeePass2::VARIANTMAP_CRITICAL_MASK; if (!ok || (version > maxVersion)) { //: Translation: variant map = data structure for storing meta data diff --git a/src/format/Kdbx4Reader.h b/src/format/Kdbx4Reader.h index 24d4a9142..3afb5bf69 100644 --- a/src/format/Kdbx4Reader.h +++ b/src/format/Kdbx4Reader.h @@ -27,16 +27,18 @@ */ class Kdbx4Reader : public KdbxReader { -Q_DECLARE_TR_FUNCTIONS(Kdbx4Reader) + Q_DECLARE_TR_FUNCTIONS(Kdbx4Reader) public: - Database* readDatabaseImpl(QIODevice* device, const QByteArray& headerData, - const CompositeKey& key, bool keepDatabase) override; + bool readDatabaseImpl(QIODevice* device, + const QByteArray& headerData, + QSharedPointer key, + Database* db) override; QHash binaryPoolInverse() const; QHash binaryPool() const; protected: - bool readHeaderField(StoreDataStream& headerStream) override; + bool readHeaderField(StoreDataStream& headerStream, Database* db) override; private: bool readInnerHeaderField(QIODevice* device); diff --git a/src/format/Kdbx4Writer.cpp b/src/format/Kdbx4Writer.cpp index bd671d9c7..33c0024ed 100644 --- a/src/format/Kdbx4Writer.cpp +++ b/src/format/Kdbx4Writer.cpp @@ -20,14 +20,14 @@ #include #include -#include "streams/HmacBlockStream.h" +#include "core/CustomData.h" #include "core/Database.h" #include "core/Metadata.h" -#include "core/CustomData.h" #include "crypto/CryptoHash.h" #include "crypto/Random.h" -#include "format/KeePass2RandomStream.h" #include "format/KdbxXmlWriter.h" +#include "format/KeePass2RandomStream.h" +#include "streams/HmacBlockStream.h" #include "streams/QtIOCompressor" #include "streams/SymmetricCipherStream.h" @@ -50,7 +50,6 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) QByteArray masterSeed = randomGen()->randomArray(32); QByteArray encryptionIV = randomGen()->randomArray(ivSize); QByteArray protectedStreamKey = randomGen()->randomArray(64); - QByteArray startBytes; QByteArray endOfHeader = "\r\n\r\n"; if (!db->setKey(db->key(), false, true)) { @@ -73,10 +72,12 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, KeePass2::FILE_VERSION_4); - CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toByteArray())); - CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::CompressionFlags, - Endian::sizedIntToBytes(static_cast(db->compressionAlgo()), - KeePass2::BYTEORDER))); + CHECK_RETURN_FALSE( + writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toRfc4122())); + CHECK_RETURN_FALSE(writeHeaderField( + &header, + KeePass2::HeaderFieldID::CompressionFlags, + Endian::sizedIntToBytes(static_cast(db->compressionAlgorithm()), KeePass2::BYTEORDER))); CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::MasterSeed, masterSeed)); CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EncryptionIV, encryptionIV)); @@ -94,8 +95,8 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) if (!publicCustomData.isEmpty()) { QByteArray serialized; serializeVariantMap(publicCustomData, serialized); - CHECK_RETURN_FALSE(writeHeaderField( - &header, KeePass2::HeaderFieldID::PublicCustomData, serialized)); + CHECK_RETURN_FALSE( + writeHeaderField(&header, KeePass2::HeaderFieldID::PublicCustomData, serialized)); } CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::EndOfHeader, endOfHeader)); @@ -109,8 +110,8 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) // write HMAC-authenticated cipher stream QByteArray hmacKey = KeePass2::hmacKey(masterSeed, db->transformedMasterKey()); - QByteArray headerHmac = CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), - CryptoHash::Sha256); + QByteArray headerHmac = + CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256); CHECK_RETURN_FALSE(writeData(device, headerHash)); CHECK_RETURN_FALSE(writeData(device, headerHmac)); @@ -123,9 +124,8 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) return false; } - cipherStream.reset(new SymmetricCipherStream(hmacBlockStream.data(), algo, - SymmetricCipher::algorithmMode(algo), - SymmetricCipher::Encrypt)); + cipherStream.reset(new SymmetricCipherStream( + hmacBlockStream.data(), algo, SymmetricCipher::algorithmMode(algo), SymmetricCipher::Encrypt)); if (!cipherStream->init(finalKey, encryptionIV)) { raiseError(cipherStream->errorString()); @@ -139,7 +139,7 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) QIODevice* outputDevice = nullptr; QScopedPointer ioCompressor; - if (db->compressionAlgo() == Database::CompressionNone) { + if (db->compressionAlgorithm() == Database::CompressionNone) { outputDevice = cipherStream.data(); } else { ioCompressor.reset(new QtIOCompressor(cipherStream.data())); @@ -153,11 +153,12 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) Q_ASSERT(outputDevice); - CHECK_RETURN_FALSE(writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::InnerRandomStreamID, - Endian::sizedIntToBytes(static_cast(KeePass2::ProtectedStreamAlgo::ChaCha20), - KeePass2::BYTEORDER))); - CHECK_RETURN_FALSE(writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::InnerRandomStreamKey, - protectedStreamKey)); + CHECK_RETURN_FALSE(writeInnerHeaderField( + outputDevice, + KeePass2::InnerHeaderFieldID::InnerRandomStreamID, + Endian::sizedIntToBytes(static_cast(KeePass2::ProtectedStreamAlgo::ChaCha20), KeePass2::BYTEORDER))); + CHECK_RETURN_FALSE( + writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::InnerRandomStreamKey, protectedStreamKey)); // Write attachments to the inner header writeAttachments(outputDevice, db); @@ -208,7 +209,8 @@ bool Kdbx4Writer::writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeader QByteArray fieldIdArr; fieldIdArr[0] = static_cast(fieldId); CHECK_RETURN_FALSE(writeData(device, fieldIdArr)); - CHECK_RETURN_FALSE(writeData(device, Endian::sizedIntToBytes(static_cast(data.size()), KeePass2::BYTEORDER))); + CHECK_RETURN_FALSE( + writeData(device, Endian::sizedIntToBytes(static_cast(data.size()), KeePass2::BYTEORDER))); CHECK_RETURN_FALSE(writeData(device, data)); return true; diff --git a/src/format/Kdbx4Writer.h b/src/format/Kdbx4Writer.h index 90a8e658e..c8540245b 100644 --- a/src/format/Kdbx4Writer.h +++ b/src/format/Kdbx4Writer.h @@ -25,7 +25,7 @@ */ class Kdbx4Writer : public KdbxWriter { -Q_DECLARE_TR_FUNCTIONS(Kdbx4Writer) + Q_DECLARE_TR_FUNCTIONS(Kdbx4Writer) public: bool writeDatabase(QIODevice* device, Database* db) override; diff --git a/src/format/KdbxReader.cpp b/src/format/KdbxReader.cpp index 36ff6d197..50b7a7245 100644 --- a/src/format/KdbxReader.cpp +++ b/src/format/KdbxReader.cpp @@ -1,3 +1,5 @@ +#include + /* * Copyright (C) 2018 KeePassXC Team * @@ -18,6 +20,11 @@ #include "KdbxReader.h" #include "core/Database.h" #include "core/Endian.h" +#include "format/KdbxXmlWriter.h" + +#include + +#define UUID_LENGTH 16 /** * Read KDBX magic header numbers from a device. @@ -52,14 +59,14 @@ bool KdbxReader::readMagicNumbers(QIODevice* device, quint32& sig1, quint32& sig * * @param device input device * @param key database encryption composite key - * @param keepDatabase keep database in case of read failure - * @return pointer to the read database, nullptr on failure + * @param db database to read into + * @return true on success */ -Database* KdbxReader::readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase) +bool KdbxReader::readDatabase(QIODevice* device, QSharedPointer key, Database* db) { device->seek(0); - m_db.reset(new Database()); + m_db = db; m_xmlData.clear(); m_masterSeed.clear(); m_encryptionIV.clear(); @@ -71,24 +78,33 @@ Database* KdbxReader::readDatabase(QIODevice* device, const CompositeKey& key, b // read KDBX magic numbers quint32 sig1, sig2; - readMagicNumbers(&headerStream, sig1, sig2, m_kdbxVersion); + if (!readMagicNumbers(&headerStream, sig1, sig2, m_kdbxVersion)) { + return false; + } m_kdbxSignature = qMakePair(sig1, sig2); // mask out minor version m_kdbxVersion &= KeePass2::FILE_VERSION_CRITICAL_MASK; // read header fields - while (readHeaderField(headerStream) && !hasError()) { + while (readHeaderField(headerStream, m_db) && !hasError()) { } headerStream.close(); if (hasError()) { - return nullptr; + return false; } // read payload - return readDatabaseImpl(device, headerStream.storedData(), key, keepDatabase); + bool ok = readDatabaseImpl(device, headerStream.storedData(), std::move(key), db); + + if (saveXml()) { + m_xmlData.clear(); + decryptXmlInnerStream(m_xmlData, db); + } + + return ok; } bool KdbxReader::hasError() const @@ -116,11 +132,6 @@ QByteArray KdbxReader::xmlData() const return m_xmlData; } -QByteArray KdbxReader::streamKey() const -{ - return m_protectedStreamKey; -} - KeePass2::ProtectedStreamAlgo KdbxReader::protectedStreamAlgo() const { return m_irsAlgo; @@ -131,12 +142,16 @@ KeePass2::ProtectedStreamAlgo KdbxReader::protectedStreamAlgo() const */ void KdbxReader::setCipher(const QByteArray& data) { - if (data.size() != Uuid::Length) { - raiseError(tr("Invalid cipher uuid length")); + if (data.size() != UUID_LENGTH) { + raiseError(tr("Invalid cipher uuid length: %1 (length=%2)").arg(QString(data)).arg(data.size())); return; } - Uuid uuid(data); + QUuid uuid = QUuid::fromRfc4122(data); + if (uuid.isNull()) { + raiseError(tr("Unable to parse UUID: %1").arg(QString(data))); + return; + } if (SymmetricCipher::cipherToAlgorithm(uuid) == SymmetricCipher::InvalidAlgorithm) { raiseError(tr("Unsupported cipher")); @@ -160,7 +175,7 @@ void KdbxReader::setCompressionFlags(const QByteArray& data) raiseError(tr("Unsupported compression algorithm")); return; } - m_db->setCompressionAlgo(static_cast(id)); + m_db->setCompressionAlgorithm(static_cast(id)); } /** @@ -247,14 +262,31 @@ void KdbxReader::setInnerRandomStreamID(const QByteArray& data) } auto id = Endian::bytesToSizedInt(data, KeePass2::BYTEORDER); KeePass2::ProtectedStreamAlgo irsAlgo = KeePass2::idToProtectedStreamAlgo(id); - if (irsAlgo == KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo || - irsAlgo == KeePass2::ProtectedStreamAlgo::ArcFourVariant) { + if (irsAlgo == KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo + || irsAlgo == KeePass2::ProtectedStreamAlgo::ArcFourVariant) { raiseError(tr("Invalid inner random stream cipher")); return; } m_irsAlgo = irsAlgo; } +/** + * Decrypt protected inner stream fields in XML dump on demand. + * Without the stream key from the KDBX header, the values become worthless. + * + * @param xmlOutput XML dump with decrypted fields + * @param db the database object for which to generate the decrypted XML dump + */ +void KdbxReader::decryptXmlInnerStream(QByteArray& xmlOutput, Database* db) const +{ + QBuffer buffer; + buffer.setBuffer(&xmlOutput); + buffer.open(QIODevice::WriteOnly); + KdbxXmlWriter writer(m_kdbxVersion); + writer.disableInnerStreamProtection(true); + writer.writeDatabase(&buffer, db); +} + /** * Raise an error. Use in case of an unexpected read error. * diff --git a/src/format/KdbxReader.h b/src/format/KdbxReader.h index 994cfb7ef..9a500c3f6 100644 --- a/src/format/KdbxReader.h +++ b/src/format/KdbxReader.h @@ -33,14 +33,14 @@ class QIODevice; */ class KdbxReader { -Q_DECLARE_TR_FUNCTIONS(KdbxReader) + Q_DECLARE_TR_FUNCTIONS(KdbxReader) public: KdbxReader() = default; virtual ~KdbxReader() = default; static bool readMagicNumbers(QIODevice* device, quint32& sig1, quint32& sig2, quint32& version); - Database* readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase = false); + bool readDatabase(QIODevice* device, QSharedPointer key, Database* db); bool hasError() const; QString errorString() const; @@ -48,7 +48,6 @@ public: bool saveXml() const; void setSaveXml(bool save); QByteArray xmlData() const; - QByteArray streamKey() const; KeePass2::ProtectedStreamAlgo protectedStreamAlgo() const; protected: @@ -58,19 +57,22 @@ protected: * @param device input device at the payload starting position * @param KDBX header data as bytes * @param key database encryption composite key - * @param keepDatabase keep database in case of read failure - * @return pointer to the read database, nullptr on failure + * @param db database to read into + * @return true on success */ - virtual Database* readDatabaseImpl(QIODevice* device, const QByteArray& headerData, - const CompositeKey& key, bool keepDatabase) = 0; + virtual bool readDatabaseImpl(QIODevice* device, + const QByteArray& headerData, + QSharedPointer key, + Database* db) = 0; /** * Read next header field from stream. * * @param headerStream input header stream + * @param database to read header field for * @return true if there are more header fields */ - virtual bool readHeaderField(StoreDataStream& headerStream) = 0; + virtual bool readHeaderField(StoreDataStream& headerStream, Database* db) = 0; virtual void setCipher(const QByteArray& data); virtual void setCompressionFlags(const QByteArray& data); @@ -84,9 +86,8 @@ protected: void raiseError(const QString& errorMessage); - QScopedPointer m_db; + void decryptXmlInnerStream(QByteArray& xmlOutput, Database* db) const; - QPair m_kdbxSignature; quint32 m_kdbxVersion = 0; QByteArray m_masterSeed; @@ -98,10 +99,12 @@ protected: QByteArray m_xmlData; private: + QPair m_kdbxSignature; + QPointer m_db; + bool m_saveXml = false; bool m_error = false; QString m_errorStr = ""; }; - -#endif //KEEPASSXC_KDBXREADER_H +#endif // KEEPASSXC_KDBXREADER_H diff --git a/src/format/KdbxWriter.h b/src/format/KdbxWriter.h index 5aa41766e..4685797ca 100644 --- a/src/format/KdbxWriter.h +++ b/src/format/KdbxWriter.h @@ -23,7 +23,9 @@ #include +// clang-format off #define CHECK_RETURN_FALSE(x) if (!(x)) return false; +// clang-format on class QIODevice; class Database; @@ -33,7 +35,7 @@ class Database; */ class KdbxWriter { -Q_DECLARE_TR_FUNCTIONS(KdbxWriter) + Q_DECLARE_TR_FUNCTIONS(KdbxWriter) public: KdbxWriter() = default; @@ -54,7 +56,6 @@ public: QString errorString() const; protected: - /** * Helper method for writing a KDBX header field to a device. * @@ -72,8 +73,8 @@ protected: QByteArray fieldIdArr; fieldIdArr[0] = static_cast(fieldId); CHECK_RETURN_FALSE(writeData(device, fieldIdArr)); - CHECK_RETURN_FALSE(writeData(device, Endian::sizedIntToBytes(static_cast(data.size()), - KeePass2::BYTEORDER))); + CHECK_RETURN_FALSE(writeData( + device, Endian::sizedIntToBytes(static_cast(data.size()), KeePass2::BYTEORDER))); CHECK_RETURN_FALSE(writeData(device, data)); return true; @@ -86,5 +87,4 @@ protected: QString m_errorStr = ""; }; - -#endif //KEEPASSXC_KDBXWRITER_H +#endif // KEEPASSXC_KDBXWRITER_H diff --git a/src/format/KdbxXmlReader.cpp b/src/format/KdbxXmlReader.cpp index 0eb9e1c67..84d597bdb 100644 --- a/src/format/KdbxXmlReader.cpp +++ b/src/format/KdbxXmlReader.cpp @@ -17,16 +17,20 @@ #include "KdbxXmlReader.h" #include "KeePass2RandomStream.h" -#include "core/Global.h" -#include "core/Tools.h" -#include "core/Entry.h" -#include "core/Group.h" +#include "core/Clock.h" #include "core/DatabaseIcons.h" #include "core/Endian.h" +#include "core/Entry.h" +#include "core/Global.h" +#include "core/Group.h" +#include "core/Tools.h" #include "streams/QtIOCompressor" -#include #include +#include +#include + +#define UUID_LENGTH 16 /** * @param version KDBX version @@ -40,9 +44,9 @@ KdbxXmlReader::KdbxXmlReader(quint32 version) * @param version KDBX version * @param binaryPool binary pool */ -KdbxXmlReader::KdbxXmlReader(quint32 version, const QHash& binaryPool) +KdbxXmlReader::KdbxXmlReader(quint32 version, QHash binaryPool) : m_kdbxVersion(version) - , m_binaryPool(binaryPool) + , m_binaryPool(std::move(binaryPool)) { } @@ -52,7 +56,7 @@ KdbxXmlReader::KdbxXmlReader(quint32 version, const QHash& * @param device input file * @return pointer to the new database */ -Database* KdbxXmlReader::readDatabase(const QString& filename) +QSharedPointer KdbxXmlReader::readDatabase(const QString& filename) { QFile file(filename); file.open(QIODevice::ReadOnly); @@ -65,10 +69,10 @@ Database* KdbxXmlReader::readDatabase(const QString& filename) * @param device input device * @return pointer to the new database */ -Database* KdbxXmlReader::readDatabase(QIODevice* device) +QSharedPointer KdbxXmlReader::readDatabase(QIODevice* device) { - auto db = new Database(); - readDatabase(device, db); + auto db = QSharedPointer::create(); + readDatabase(device, db.data()); return db; } @@ -79,7 +83,6 @@ Database* KdbxXmlReader::readDatabase(QIODevice* device) * @param db database to read into * @param randomStream random stream to use for decryption */ -#include "QDebug" void KdbxXmlReader::readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream) { m_error = false; @@ -114,17 +117,15 @@ void KdbxXmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Random } if (!m_tmpParent->children().isEmpty()) { - qWarning("KdbxXmlReader::readDatabase: found %d invalid group reference(s)", - m_tmpParent->children().size()); + qWarning("KdbxXmlReader::readDatabase: found %d invalid group reference(s)", m_tmpParent->children().size()); } if (!m_tmpParent->entries().isEmpty()) { - qWarning("KdbxXmlReader::readDatabase: found %d invalid entry reference(s)", - m_tmpParent->children().size()); + qWarning("KdbxXmlReader::readDatabase: found %d invalid entry reference(s)", m_tmpParent->children().size()); } - const QSet poolKeys = m_binaryPool.keys().toSet(); - const QSet entryKeys = m_binaryMap.keys().toSet(); + const QSet poolKeys = asConst(m_binaryPool).keys().toSet(); + const QSet entryKeys = asConst(m_binaryMap).keys().toSet(); const QSet unmappedKeys = entryKeys - poolKeys; const QSet unusedKeys = poolKeys - entryKeys; @@ -136,7 +137,7 @@ void KdbxXmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Random qWarning("KdbxXmlReader::readDatabase: found unused key \"%s\"", qPrintable(key)); } - QHash >::const_iterator i; + QHash>::const_iterator i; for (i = m_binaryMap.constBegin(); i != m_binaryMap.constEnd(); ++i) { const QPair& target = i.value(); target.first->attachments()->set(target.second, m_binaryPool[i.key()]); @@ -144,12 +145,12 @@ void KdbxXmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Random m_meta->setUpdateDatetime(true); - QHash::const_iterator iGroup; + QHash::const_iterator iGroup; for (iGroup = m_groups.constBegin(); iGroup != m_groups.constEnd(); ++iGroup) { iGroup.value()->setUpdateTimeinfo(true); } - QHash::const_iterator iEntry; + QHash::const_iterator iEntry; for (iEntry = m_entries.constBegin(); iEntry != m_entries.constEnd(); ++iEntry) { iEntry.value()->setUpdateTimeinfo(true); @@ -179,8 +180,9 @@ QString KdbxXmlReader::errorString() const { if (m_error) { return m_errorStr; - }if (m_xml.hasError()) { - return QString("XML error:\n%1\nLine %2, column %3") + } + if (m_xml.hasError()) { + return tr("XML error:\n%1\nLine %2, column %3") .arg(m_xml.errorString()) .arg(m_xml.lineNumber()) .arg(m_xml.columnNumber()); @@ -190,8 +192,7 @@ QString KdbxXmlReader::errorString() const bool KdbxXmlReader::isTrueValue(const QStringRef& value) { - return value.compare(QLatin1String("true"), Qt::CaseInsensitive) == 0 - || value == "1"; + return value.compare(QLatin1String("true"), Qt::CaseInsensitive) == 0 || value == "1"; } void KdbxXmlReader::raiseError(const QString& errorMessage) @@ -348,7 +349,7 @@ void KdbxXmlReader::parseIcon() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Icon"); - Uuid uuid; + QUuid uuid; QImage icon; bool uuidSet = false; bool iconSet = false; @@ -366,6 +367,10 @@ void KdbxXmlReader::parseIcon() } if (uuidSet && iconSet) { + // Check for duplicate UUID (corruption) + if (m_meta->containsCustomIcon(uuid)) { + uuid = QUuid::createUuid(); + } m_meta->addCustomIcon(uuid, icon); return; } @@ -385,12 +390,10 @@ void KdbxXmlReader::parseBinaries() QXmlStreamAttributes attr = m_xml.attributes(); QString id = attr.value("ID").toString(); - QByteArray data = isTrueValue(attr.value("Compressed")) - ? readCompressedBinary() : readBinary(); + QByteArray data = isTrueValue(attr.value("Compressed")) ? readCompressedBinary() : readBinary(); if (m_binaryPool.contains(id)) { - qWarning("KdbxXmlReader::parseBinaries: overwriting binary item \"%s\"", - qPrintable(id)); + qWarning("KdbxXmlReader::parseBinaries: overwriting binary item \"%s\"", qPrintable(id)); } m_binaryPool.insert(id, data); @@ -483,12 +486,12 @@ Group* KdbxXmlReader::parseGroup() QList entries; while (!m_xml.hasError() && m_xml.readNextStartElement()) { if (m_xml.name() == "UUID") { - Uuid uuid = readUuid(); + QUuid uuid = readUuid(); if (uuid.isNull()) { if (m_strictMode) { raiseError(tr("Null group uuid")); } else { - group->setUuid(Uuid::random()); + group->setUuid(QUuid::createUuid()); } } else { group->setUuid(uuid); @@ -519,7 +522,7 @@ Group* KdbxXmlReader::parseGroup() continue; } if (m_xml.name() == "CustomIconUUID") { - Uuid uuid = readUuid(); + QUuid uuid = readUuid(); if (!uuid.isNull()) { group->setIcon(uuid); } @@ -592,7 +595,7 @@ Group* KdbxXmlReader::parseGroup() } if (group->uuid().isNull() && !m_strictMode) { - group->setUuid(Uuid::random()); + group->setUuid(QUuid::createUuid()); } if (!group->uuid().isNull()) { @@ -637,10 +640,11 @@ void KdbxXmlReader::parseDeletedObject() while (!m_xml.hasError() && m_xml.readNextStartElement()) { if (m_xml.name() == "UUID") { - Uuid uuid = readUuid(); + QUuid uuid = readUuid(); if (uuid.isNull()) { if (m_strictMode) { raiseError(tr("Null DeleteObject uuid")); + return; } continue; } @@ -675,12 +679,12 @@ Entry* KdbxXmlReader::parseEntry(bool history) while (!m_xml.hasError() && m_xml.readNextStartElement()) { if (m_xml.name() == "UUID") { - Uuid uuid = readUuid(); + QUuid uuid = readUuid(); if (uuid.isNull()) { if (m_strictMode) { raiseError(tr("Null entry uuid")); } else { - entry->setUuid(Uuid::random()); + entry->setUuid(QUuid::createUuid()); } } else { entry->setUuid(uuid); @@ -699,7 +703,7 @@ Entry* KdbxXmlReader::parseEntry(bool history) continue; } if (m_xml.name() == "CustomIconUUID") { - Uuid uuid = readUuid(); + QUuid uuid = readUuid(); if (!uuid.isNull()) { entry->setIcon(uuid); } @@ -731,7 +735,7 @@ Entry* KdbxXmlReader::parseEntry(bool history) } if (m_xml.name() == "Binary") { QPair ref = parseEntryBinary(entry); - if (!ref.first.isNull() && !ref.second.isNull()) { + if (!ref.first.isEmpty() && !ref.second.isEmpty()) { binaryRefs.append(ref); } continue; @@ -756,7 +760,7 @@ Entry* KdbxXmlReader::parseEntry(bool history) } if (entry->uuid().isNull() && !m_strictMode) { - entry->setUuid(Uuid::random()); + entry->setUuid(QUuid::createUuid()); } if (!entry->uuid().isNull()) { @@ -1033,7 +1037,7 @@ QDateTime KdbxXmlReader::readDateTime() return QDateTime(QDate(1, 1, 1), QTime(0, 0, 0, 0), Qt::UTC).addSecs(secs); } - QDateTime dt = QDateTime::fromString(str, Qt::ISODate); + QDateTime dt = Clock::parse(str, Qt::ISODate); if (dt.isValid()) { return dt; } @@ -1042,7 +1046,7 @@ QDateTime KdbxXmlReader::readDateTime() raiseError(tr("Invalid date time value")); } - return QDateTime::currentDateTimeUtc(); + return Clock::currentDateTimeUtc(); } QColor KdbxXmlReader::readColor() @@ -1094,19 +1098,19 @@ int KdbxXmlReader::readNumber() return result; } -Uuid KdbxXmlReader::readUuid() +QUuid KdbxXmlReader::readUuid() { QByteArray uuidBin = readBinary(); if (uuidBin.isEmpty()) { - return {}; + return QUuid(); } - if (uuidBin.length() != Uuid::Length) { + if (uuidBin.length() != UUID_LENGTH) { if (m_strictMode) { raiseError(tr("Invalid uuid value")); } - return {}; + return QUuid(); } - return Uuid(uuidBin); + return QUuid::fromRfc4122(uuidBin); } QByteArray KdbxXmlReader::readBinary() @@ -1150,7 +1154,7 @@ QByteArray KdbxXmlReader::readCompressedBinary() return result; } -Group* KdbxXmlReader::getGroup(const Uuid& uuid) +Group* KdbxXmlReader::getGroup(const QUuid& uuid) { if (uuid.isNull()) { return nullptr; @@ -1168,7 +1172,7 @@ Group* KdbxXmlReader::getGroup(const Uuid& uuid) return group; } -Entry* KdbxXmlReader::getEntry(const Uuid& uuid) +Entry* KdbxXmlReader::getEntry(const QUuid& uuid) { if (uuid.isNull()) { return nullptr; @@ -1191,4 +1195,3 @@ void KdbxXmlReader::skipCurrentElement() qWarning("KdbxXmlReader::skipCurrentElement: skip element \"%s\"", qPrintable(m_xml.name().toString())); m_xml.skipCurrentElement(); } - diff --git a/src/format/KdbxXmlReader.h b/src/format/KdbxXmlReader.h index 500151828..2ec9c9f66 100644 --- a/src/format/KdbxXmlReader.h +++ b/src/format/KdbxXmlReader.h @@ -18,14 +18,13 @@ #ifndef KEEPASSXC_KDBXXMLREADER_H #define KEEPASSXC_KDBXXMLREADER_H +#include "core/Database.h" #include "core/Metadata.h" #include "core/TimeInfo.h" -#include "core/Uuid.h" -#include "core/Database.h" #include -#include #include +#include #include class QIODevice; @@ -38,15 +37,15 @@ class KeePass2RandomStream; */ class KdbxXmlReader { -Q_DECLARE_TR_FUNCTIONS(KdbxXmlReader) + Q_DECLARE_TR_FUNCTIONS(KdbxXmlReader) public: explicit KdbxXmlReader(quint32 version); - explicit KdbxXmlReader(quint32 version, const QHash& binaryPool); + explicit KdbxXmlReader(quint32 version, QHash binaryPool); virtual ~KdbxXmlReader() = default; - virtual Database* readDatabase(const QString& filename); - virtual Database* readDatabase(QIODevice* device); + virtual QSharedPointer readDatabase(const QString& filename); + virtual QSharedPointer readDatabase(QIODevice* device); virtual void readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = nullptr); bool hasError() const; @@ -86,14 +85,14 @@ protected: virtual QDateTime readDateTime(); virtual QColor readColor(); virtual int readNumber(); - virtual Uuid readUuid(); + virtual QUuid readUuid(); virtual QByteArray readBinary(); virtual QByteArray readCompressedBinary(); virtual void skipCurrentElement(); - virtual Group* getGroup(const Uuid& uuid); - virtual Entry* getEntry(const Uuid& uuid); + virtual Group* getGroup(const QUuid& uuid); + virtual Entry* getEntry(const QUuid& uuid); virtual bool isTrueValue(const QStringRef& value); virtual void raiseError(const QString& errorMessage); @@ -108,15 +107,15 @@ protected: QXmlStreamReader m_xml; QScopedPointer m_tmpParent; - QHash m_groups; - QHash m_entries; + QHash m_groups; + QHash m_entries; QHash m_binaryPool; - QHash > m_binaryMap; + QHash> m_binaryMap; QByteArray m_headerHash; bool m_error = false; QString m_errorStr = ""; }; -#endif //KEEPASSXC_KDBXXMLREADER_H +#endif // KEEPASSXC_KDBXXMLREADER_H diff --git a/src/format/KdbxXmlWriter.cpp b/src/format/KdbxXmlWriter.cpp index a546f3171..7aa79c47d 100644 --- a/src/format/KdbxXmlWriter.cpp +++ b/src/format/KdbxXmlWriter.cpp @@ -33,7 +33,10 @@ KdbxXmlWriter::KdbxXmlWriter(quint32 version) { } -void KdbxXmlWriter::writeDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream, const QByteArray& headerHash) +void KdbxXmlWriter::writeDatabase(QIODevice* device, + const Database* db, + KeePass2RandomStream* randomStream, + const QByteArray& headerHash) { m_db = db; m_meta = db->metadata(); @@ -64,7 +67,7 @@ void KdbxXmlWriter::writeDatabase(QIODevice* device, Database* db, KeePass2Rando void KdbxXmlWriter::writeDatabase(const QString& filename, Database* db) { QFile file(filename); - file.open(QIODevice::WriteOnly|QIODevice::Truncate); + file.open(QIODevice::WriteOnly | QIODevice::Truncate); writeDatabase(&file, db); } @@ -151,15 +154,15 @@ void KdbxXmlWriter::writeCustomIcons() { m_xml.writeStartElement("CustomIcons"); - const QList customIconsOrder = m_meta->customIconsOrder(); - for (const Uuid& uuid : customIconsOrder) { + const QList customIconsOrder = m_meta->customIconsOrder(); + for (const QUuid& uuid : customIconsOrder) { writeIcon(uuid, m_meta->customIcon(uuid)); } m_xml.writeEndElement(); } -void KdbxXmlWriter::writeIcon(const Uuid& uuid, const QImage& icon) +void KdbxXmlWriter::writeIcon(const QUuid& uuid, const QImage& icon) { m_xml.writeStartElement("Icon"); @@ -187,7 +190,7 @@ void KdbxXmlWriter::writeBinaries() m_xml.writeAttribute("ID", QString::number(i.value())); QByteArray data; - if (m_db->compressionAlgo() == Database::CompressionGZip) { + if (m_db->compressionAlgorithm() == Database::CompressionGZip) { m_xml.writeAttribute("Compressed", "True"); QBuffer buffer; @@ -204,8 +207,7 @@ void KdbxXmlWriter::writeBinaries() buffer.seek(0); data = buffer.readAll(); - } - else { + } else { data = i.key(); } @@ -354,12 +356,14 @@ void KdbxXmlWriter::writeEntry(const Entry* entry) for (const QString& key : attributesKeyList) { m_xml.writeStartElement("String"); - bool protect = ( ((key == "Title") && m_meta->protectTitle()) || - ((key == "UserName") && m_meta->protectUsername()) || - ((key == "Password") && m_meta->protectPassword()) || - ((key == "URL") && m_meta->protectUrl()) || - ((key == "Notes") && m_meta->protectNotes()) || - entry->attributes()->isProtected(key) ); + // clang-format off + bool protect = + (((key == "Title") && m_meta->protectTitle()) || ((key == "UserName") && m_meta->protectUsername()) + || ((key == "Password") && m_meta->protectPassword()) + || ((key == "URL") && m_meta->protectUrl()) + || ((key == "Notes") && m_meta->protectNotes()) + || entry->attributes()->isProtected(key)); + // clang-format on writeString("Key", key); @@ -367,7 +371,7 @@ void KdbxXmlWriter::writeEntry(const Entry* entry) QString value; if (protect) { - if (m_randomStream) { + if (!m_innerStreamProtectionDisabled && m_randomStream) { m_xml.writeAttribute("Protected", "True"); bool ok; QByteArray rawData = m_randomStream->process(entry->attributes()->value(key).toUtf8(), &ok); @@ -375,13 +379,11 @@ void KdbxXmlWriter::writeEntry(const Entry* entry) raiseError(m_randomStream->errorString()); } value = QString::fromLatin1(rawData.toBase64()); - } - else { + } else { m_xml.writeAttribute("ProtectInMemory", "True"); value = entry->attributes()->value(key); } - } - else { + } else { value = entry->attributes()->value(key); } @@ -462,8 +464,7 @@ void KdbxXmlWriter::writeString(const QString& qualifiedName, const QString& str { if (string.isEmpty()) { m_xml.writeEmptyElement(qualifiedName); - } - else { + } else { m_xml.writeTextElement(qualifiedName, stripInvalidXml10Chars(string)); } } @@ -477,8 +478,7 @@ void KdbxXmlWriter::writeBool(const QString& qualifiedName, bool b) { if (b) { writeString(qualifiedName, "True"); - } - else { + } else { writeString(qualifiedName, "False"); } } @@ -504,18 +504,17 @@ void KdbxXmlWriter::writeDateTime(const QString& qualifiedName, const QDateTime& writeString(qualifiedName, dateTimeStr); } -void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const Uuid& uuid) +void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const QUuid& uuid) { - writeString(qualifiedName, uuid.toBase64()); + writeString(qualifiedName, uuid.toRfc4122().toBase64()); } void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const Group* group) { if (group) { writeUuid(qualifiedName, group->uuid()); - } - else { - writeUuid(qualifiedName, Uuid()); + } else { + writeUuid(qualifiedName, QUuid()); } } @@ -523,9 +522,8 @@ void KdbxXmlWriter::writeUuid(const QString& qualifiedName, const Entry* entry) { if (entry) { writeUuid(qualifiedName, entry->uuid()); - } - else { - writeUuid(qualifiedName, Uuid()); + } else { + writeUuid(qualifiedName, QUuid()); } } @@ -539,9 +537,8 @@ void KdbxXmlWriter::writeColor(const QString& qualifiedName, const QColor& color QString colorStr; if (color.isValid()) { - colorStr = QString("#%1%2%3").arg(colorPartToString(color.red()), - colorPartToString(color.green()), - colorPartToString(color.blue())); + colorStr = QString("#%1%2%3").arg( + colorPartToString(color.red()), colorPartToString(color.green()), colorPartToString(color.blue())); } writeString(qualifiedName, colorStr); @@ -553,11 +550,9 @@ void KdbxXmlWriter::writeTriState(const QString& qualifiedName, Group::TriState if (triState == Group::Inherit) { value = "null"; - } - else if (triState == Group::Enable) { + } else if (triState == Group::Enable) { value = "true"; - } - else { + } else { value = "false"; } @@ -583,13 +578,12 @@ QString KdbxXmlWriter::stripInvalidXml10Chars(QString str) if (ch.isLowSurrogate() && i != 0 && str.at(i - 1).isHighSurrogate()) { // keep valid surrogate pair i--; - } - else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control characters - || (uc >= 0x7F && uc <= 0x84) // control characters, valid but discouraged by XML - || (uc >= 0x86 && uc <= 0x9F) // control characters, valid but discouraged by XML - || (uc > 0xFFFD) // noncharacter - || ch.isLowSurrogate() // single low surrogate - || ch.isHighSurrogate()) // single high surrogate + } else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control characters + || (uc >= 0x7F && uc <= 0x84) // control characters, valid but discouraged by XML + || (uc >= 0x86 && uc <= 0x9F) // control characters, valid but discouraged by XML + || (uc > 0xFFFD) // noncharacter + || ch.isLowSurrogate() // single low surrogate + || ch.isHighSurrogate()) // single high surrogate { qWarning("Stripping invalid XML 1.0 codepoint %x", uc); str.remove(i, 1); @@ -604,3 +598,24 @@ void KdbxXmlWriter::raiseError(const QString& errorMessage) m_error = true; m_errorStr = errorMessage; } + +/** + * Disable inner stream protection and write protected fields + * in plaintext instead. This is useful for plaintext XML exports + * where the inner stream key is not available. + * + * @param disable true to disable protection + */ +void KdbxXmlWriter::disableInnerStreamProtection(bool disable) +{ + m_innerStreamProtectionDisabled = disable; +} + +/** + * @return true if inner stream protection is disabled and protected + * fields will be saved in plaintext + */ +bool KdbxXmlWriter::innerStreamProtectionDisabled() const +{ + return m_innerStreamProtectionDisabled; +} diff --git a/src/format/KdbxXmlWriter.h b/src/format/KdbxXmlWriter.h index e2c5b73c8..1a367a263 100644 --- a/src/format/KdbxXmlWriter.h +++ b/src/format/KdbxXmlWriter.h @@ -27,7 +27,6 @@ #include "core/Entry.h" #include "core/Group.h" #include "core/TimeInfo.h" -#include "core/Uuid.h" class KeePass2RandomStream; class Metadata; @@ -37,9 +36,13 @@ class KdbxXmlWriter public: explicit KdbxXmlWriter(quint32 version); - void writeDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = nullptr, + void writeDatabase(QIODevice* device, + const Database* db, + KeePass2RandomStream* randomStream = nullptr, const QByteArray& headerHash = QByteArray()); void writeDatabase(const QString& filename, Database* db); + void disableInnerStreamProtection(bool disable); + bool innerStreamProtectionDisabled() const; bool hasError(); QString errorString(); @@ -49,7 +52,7 @@ private: void writeMetadata(); void writeMemoryProtection(); void writeCustomIcons(); - void writeIcon(const Uuid& uuid, const QImage& icon); + void writeIcon(const QUuid& uuid, const QImage& icon); void writeBinaries(); void writeCustomData(const CustomData* customData); void writeCustomDataItem(const QString& key, const QString& value); @@ -67,7 +70,7 @@ private: void writeNumber(const QString& qualifiedName, int number); void writeBool(const QString& qualifiedName, bool b); void writeDateTime(const QString& qualifiedName, const QDateTime& dateTime); - void writeUuid(const QString& qualifiedName, const Uuid& uuid); + void writeUuid(const QString& qualifiedName, const QUuid& uuid); void writeUuid(const QString& qualifiedName, const Group* group); void writeUuid(const QString& qualifiedName, const Entry* entry); void writeBinary(const QString& qualifiedName, const QByteArray& ba); @@ -80,9 +83,11 @@ private: const quint32 m_kdbxVersion; + bool m_innerStreamProtectionDisabled = false; + QXmlStreamWriter m_xml; - QPointer m_db; - QPointer m_meta; + QPointer m_db; + QPointer m_meta; KeePass2RandomStream* m_randomStream = nullptr; QHash m_idMap; QByteArray m_headerHash; diff --git a/src/format/KeePass1.h b/src/format/KeePass1.h index fa220da03..caddee441 100644 --- a/src/format/KeePass1.h +++ b/src/format/KeePass1.h @@ -1,19 +1,19 @@ /* -* Copyright (C) 2012 Felix Geyer -* -* This program 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 2 or (at your option) -* version 3 of the License. -* -* This program 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 this program. If not, see . -*/ + * Copyright (C) 2012 Felix Geyer + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ #ifndef KEEPASSX_KEEPASS1_H #define KEEPASSX_KEEPASS1_H @@ -35,6 +35,6 @@ namespace KeePass1 Rijndael = 2, Twofish = 8 }; -} +} // namespace KeePass1 #endif // KEEPASSX_KEEPASS1_H diff --git a/src/format/KeePass1Reader.cpp b/src/format/KeePass1Reader.cpp index 390857075..e42449358 100644 --- a/src/format/KeePass1Reader.cpp +++ b/src/format/KeePass1Reader.cpp @@ -21,7 +21,6 @@ #include #include -#include "crypto/kdf/AesKdf.h" #include "core/Database.h" #include "core/Endian.h" #include "core/Entry.h" @@ -29,6 +28,7 @@ #include "core/Metadata.h" #include "core/Tools.h" #include "crypto/CryptoHash.h" +#include "crypto/kdf/AesKdf.h" #include "format/KeePass1.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" @@ -37,7 +37,7 @@ class KeePass1Key : public CompositeKey { public: - virtual QByteArray rawKey() const; + QByteArray rawKey() const override; virtual void clear(); void setPassword(const QByteArray& password); void setKeyfileData(const QByteArray& keyfileData); @@ -47,10 +47,8 @@ private: QByteArray m_keyfileData; }; - KeePass1Reader::KeePass1Reader() - : m_db(nullptr) - , m_tmpParent(nullptr) + : m_tmpParent(nullptr) , m_device(nullptr) , m_encryptionFlags(0) , m_transformRounds(0) @@ -58,36 +56,36 @@ KeePass1Reader::KeePass1Reader() { } -Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& password, - QIODevice* keyfileDevice) +QSharedPointer +KeePass1Reader::readDatabase(QIODevice* device, const QString& password, QIODevice* keyfileDevice) { m_error = false; m_errorStr.clear(); QByteArray keyfileData; - FileKey newFileKey; + auto newFileKey = QSharedPointer::create(); if (keyfileDevice) { keyfileData = readKeyfile(keyfileDevice); if (keyfileData.isEmpty()) { raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); - return nullptr; + return {}; } if (!keyfileDevice->seek(0)) { raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); - return nullptr; + return {}; } - if (!newFileKey.load(keyfileDevice)) { + if (!newFileKey->load(keyfileDevice)) { raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); - return nullptr; + return {}; } } - QScopedPointer db(new Database()); + auto db = QSharedPointer::create(); QScopedPointer tmpParent(new Group()); - m_db = db.data(); + m_db = db; m_tmpParent = tmpParent.data(); m_device = device; @@ -96,68 +94,69 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor auto signature1 = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); if (!ok || signature1 != KeePass1::SIGNATURE_1) { raiseError(tr("Not a KeePass database.")); - return nullptr; + return {}; } auto signature2 = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); if (!ok || signature2 != KeePass1::SIGNATURE_2) { raiseError(tr("Not a KeePass database.")); - return nullptr; + return {}; } m_encryptionFlags = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); if (!ok || !(m_encryptionFlags & KeePass1::Rijndael || m_encryptionFlags & KeePass1::Twofish)) { raiseError(tr("Unsupported encryption algorithm.")); - return nullptr; + return {}; } auto version = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); - if (!ok || (version & KeePass1::FILE_VERSION_CRITICAL_MASK) - != (KeePass1::FILE_VERSION & KeePass1::FILE_VERSION_CRITICAL_MASK)) { + if (!ok + || (version & KeePass1::FILE_VERSION_CRITICAL_MASK) + != (KeePass1::FILE_VERSION & KeePass1::FILE_VERSION_CRITICAL_MASK)) { raiseError(tr("Unsupported KeePass database version.")); - return nullptr; + return {}; } m_masterSeed = m_device->read(16); if (m_masterSeed.size() != 16) { raiseError("Unable to read master seed"); - return nullptr; + return {}; } m_encryptionIV = m_device->read(16); if (m_encryptionIV.size() != 16) { raiseError(tr("Unable to read encryption IV", "IV = Initialization Vector for symmetric cipher")); - return nullptr; + return {}; } auto numGroups = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError(tr("Invalid number of groups")); - return nullptr; + return {}; } auto numEntries = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError(tr("Invalid number of entries")); - return nullptr; + return {}; } m_contentHashHeader = m_device->read(32); if (m_contentHashHeader.size() != 32) { raiseError(tr("Invalid content hash size")); - return nullptr; + return {}; } m_transformSeed = m_device->read(32); if (m_transformSeed.size() != 32) { raiseError(tr("Invalid transform seed size")); - return nullptr; + return {}; } m_transformRounds = Endian::readSizedInt(m_device, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError(tr("Invalid number of transform rounds")); - return nullptr; + return {}; } auto kdf = QSharedPointer::create(true); kdf->setRounds(m_transformRounds); @@ -169,14 +168,14 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor QScopedPointer cipherStream(testKeys(password, keyfileData, contentPos)); if (!cipherStream) { - return nullptr; + return {}; } QList groups; for (quint32 i = 0; i < numGroups; i++) { Group* group = readGroup(cipherStream.data()); if (!group) { - return nullptr; + return {}; } groups.append(group); } @@ -185,14 +184,14 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor for (quint32 i = 0; i < numEntries; i++) { Entry* entry = readEntry(cipherStream.data()); if (!entry) { - return nullptr; + return {}; } entries.append(entry); } if (!constructGroupTree(groups)) { raiseError(tr("Unable to construct group tree")); - return nullptr; + return {}; } for (Entry* entry : asConst(entries)) { @@ -200,8 +199,7 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor parseMetaStream(entry); delete entry; - } - else { + } else { quint32 groupId = m_entryGroupIds.value(entry); if (!m_groupIds.contains(groupId)) { qWarning("Orphaned entry found, assigning to root group."); @@ -209,7 +207,7 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor } else { entry->setGroup(m_groupIds.value(groupId)); } - entry->setUuid(Uuid::random()); + entry->setUuid(QUuid::createUuid()); } } @@ -235,53 +233,51 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor entry->setUpdateTimeinfo(true); } - CompositeKey key; + auto key = QSharedPointer::create(); if (!password.isEmpty()) { - key.addKey(PasswordKey(password)); + key->addKey(QSharedPointer::create(password)); } if (keyfileDevice) { - key.addKey(newFileKey); + key->addKey(newFileKey); } if (!db->setKey(key)) { raiseError(tr("Unable to calculate master key")); - return nullptr; + return {}; } - return db.take(); + return db; } -Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& password, - const QString& keyfileName) +QSharedPointer +KeePass1Reader::readDatabase(QIODevice* device, const QString& password, const QString& keyfileName) { QScopedPointer keyFile; if (!keyfileName.isEmpty()) { keyFile.reset(new QFile(keyfileName)); if (!keyFile->open(QFile::ReadOnly)) { raiseError(keyFile->errorString()); - return nullptr; + return {}; } } - QScopedPointer db(readDatabase(device, password, keyFile.data())); - - return db.take(); + return QSharedPointer(readDatabase(device, password, keyFile.data())); } -Database* KeePass1Reader::readDatabase(const QString& filename, const QString& password, - const QString& keyfileName) +QSharedPointer +KeePass1Reader::readDatabase(const QString& filename, const QString& password, const QString& keyfileName) { QFile dbFile(filename); if (!dbFile.open(QFile::ReadOnly)) { raiseError(dbFile.errorString()); - return nullptr; + return {}; } - Database* db = readDatabase(&dbFile, password, keyfileName); + auto db = readDatabase(&dbFile, password, keyfileName); if (dbFile.error() != QFile::NoError) { raiseError(dbFile.errorString()); - return nullptr; + return {}; } return db; @@ -297,10 +293,10 @@ QString KeePass1Reader::errorString() return m_errorStr; } -SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const QByteArray& keyfileData, - qint64 contentPos) +SymmetricCipherStream* +KeePass1Reader::testKeys(const QString& password, const QByteArray& keyfileData, qint64 contentPos) { - const QList encodings = { Windows1252, Latin1, UTF8 }; + const QList encodings = {Windows1252, Latin1, UTF8}; QScopedPointer cipherStream; QByteArray passwordData; @@ -310,28 +306,24 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q for (PasswordEncoding encoding : encodings) { if (encoding == Windows1252) { passwordData = passwordDataCorrect; - } - else if (encoding == Latin1) { + } else if (encoding == Latin1) { // KeePassX used Latin-1 encoding for passwords until version 0.3.1 // but KeePass/Win32 uses Windows Codepage 1252. passwordData = password.toLatin1(); if (passwordData == passwordDataCorrect) { continue; - } - else { + } else { qWarning("Testing password encoded as Latin-1."); } - } - else if (encoding == UTF8) { + } else if (encoding == UTF8) { // KeePassX used UTF-8 encoding for passwords until version 0.2.2 // but KeePass/Win32 uses Windows Codepage 1252. passwordData = password.toUtf8(); if (passwordData == passwordDataCorrect) { continue; - } - else { + } else { qWarning("Testing password encoded as UTF-8."); } } @@ -341,12 +333,11 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q return nullptr; } if (m_encryptionFlags & KeePass1::Rijndael) { - cipherStream.reset(new SymmetricCipherStream(m_device, SymmetricCipher::Aes256, - SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); - } - else { - cipherStream.reset(new SymmetricCipherStream(m_device, SymmetricCipher::Twofish, - SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); + cipherStream.reset(new SymmetricCipherStream( + m_device, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); + } else { + cipherStream.reset(new SymmetricCipherStream( + m_device, SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); } if (!cipherStream->init(finalKey, m_encryptionIV)) { @@ -363,7 +354,7 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q cipherStream->reset(); cipherStream->close(); if (!m_device->seek(contentPos)) { - QString msg = "unable to seek to content position"; + QString msg = tr("unable to seek to content position"); if (!m_device->errorString().isEmpty()) { msg.append("\n").append(m_device->errorString()); } @@ -375,8 +366,7 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q if (success) { break; - } - else { + } else { cipherStream.reset(); } } @@ -476,8 +466,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) case 0x0002: group->setName(QString::fromUtf8(fieldData.constData())); break; - case 0x0003: - { + case 0x0003: { if (fieldSize != 5) { raiseError(tr("Incorrect group creation time field size")); return nullptr; @@ -488,8 +477,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) } break; } - case 0x0004: - { + case 0x0004: { if (fieldSize != 5) { raiseError(tr("Incorrect group modification time field size")); return nullptr; @@ -500,8 +488,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) } break; } - case 0x0005: - { + case 0x0005: { if (fieldSize != 5) { raiseError(tr("Incorrect group access time field size")); } @@ -511,8 +498,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) } break; } - case 0x0006: - { + case 0x0006: { if (fieldSize != 5) { raiseError(tr("Incorrect group expiry time field size")); } @@ -523,8 +509,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) } break; } - case 0x0007: - { + case 0x0007: { if (fieldSize != 4) { raiseError(tr("Incorrect group icon field size")); return nullptr; @@ -533,8 +518,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) group->setIcon(iconNumber); break; } - case 0x0008: - { + case 0x0008: { if (fieldSize != 2) { raiseError(tr("Incorrect group level field size")); return nullptr; @@ -561,7 +545,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) return nullptr; } - group->setUuid(Uuid::random()); + group->setUuid(QUuid::createUuid()); group->setTimeInfo(timeInfo); m_groupIds.insert(groupId, group.data()); m_groupLevels.insert(group.data(), groupLevel); @@ -610,8 +594,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) } m_entryUuids.insert(fieldData, entry.data()); break; - case 0x0002: - { + case 0x0002: { if (fieldSize != 4) { raiseError(tr("Invalid entry group id field size")); return nullptr; @@ -620,8 +603,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) m_entryGroupIds.insert(entry.data(), groupId); break; } - case 0x0003: - { + case 0x0003: { if (fieldSize != 4) { raiseError(tr("Invalid entry icon field size")); return nullptr; @@ -645,8 +627,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) case 0x0008: parseNotes(QString::fromUtf8(fieldData.constData()), entry.data()); break; - case 0x0009: - { + case 0x0009: { if (fieldSize != 5) { raiseError(tr("Invalid entry creation time field size")); return nullptr; @@ -657,8 +638,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) } break; } - case 0x000A: - { + case 0x000A: { if (fieldSize != 5) { raiseError(tr("Invalid entry modification time field size")); return nullptr; @@ -669,8 +649,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) } break; } - case 0x000B: - { + case 0x000B: { if (fieldSize != 5) { raiseError(tr("Invalid entry creation time field size")); return nullptr; @@ -681,8 +660,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) } break; } - case 0x000C: - { + case 0x000C: { if (fieldSize != 5) { raiseError(tr("Invalid entry expiry time field size")); return nullptr; @@ -734,27 +712,23 @@ void KeePass1Reader::parseNotes(const QString& rawNotes, Entry* entry) if (sequenceRegexp.exactMatch(line)) { if (sequenceRegexp.cap(1).isEmpty()) { entry->setDefaultAutoTypeSequence(sequenceRegexp.cap(2)); - } - else { + } else { sequences[sequenceRegexp.cap(1).toInt()] = sequenceRegexp.cap(2); } lastLineAutoType = true; - } - else if (windowRegexp.exactMatch(line)) { + } else if (windowRegexp.exactMatch(line)) { int nr; if (windowRegexp.cap(1).isEmpty()) { nr = -1; // special number that matches no other sequence - } - else { + } else { nr = windowRegexp.cap(1).toInt(); } windows[nr].append(windowRegexp.cap(2)); lastLineAutoType = true; - } - else { + } else { // don't add empty lines following a removed auto-type line if (!lastLineAutoType || !line.isEmpty()) { notes.append(line); @@ -788,8 +762,7 @@ bool KeePass1Reader::constructGroupTree(const QList& groups) if (level == 0) { groups[i]->setParent(m_db->rootGroup()); - } - else { + } else { for (int j = (i - 1); j >= 0; j--) { if (m_groupLevels.value(groups[j]) < level) { if ((level - m_groupLevels.value(groups[j])) != 1) { @@ -818,13 +791,11 @@ void KeePass1Reader::parseMetaStream(const Entry* entry) if (!parseGroupTreeState(data)) { qWarning("Unable to parse group tree state metastream."); } - } - else if (entry->notes() == "KPX_CUSTOM_ICONS_4") { + } else if (entry->notes() == "KPX_CUSTOM_ICONS_4") { if (!parseCustomIcons4(data)) { qWarning("Unable to parse custom icons metastream."); } - } - else { + } else { qWarning("Ignoring unknown metastream \"%s\".", entry->notes().toLocal8Bit().constData()); } } @@ -875,7 +846,7 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) quint32 numGroups = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; - QList iconUuids; + QList iconUuids; for (quint32 i = 0; i < numIcons; i++) { if (data.size() < (pos + 4)) { @@ -894,7 +865,7 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) icon = icon.scaled(16, 16); } - Uuid uuid = Uuid::random(); + QUuid uuid = QUuid::createUuid(); iconUuids.append(uuid); m_db->metadata()->addCustomIcon(uuid, icon); } @@ -962,20 +933,16 @@ QDateTime KeePass1Reader::dateFromPackedStruct(const QByteArray& data) // check for the special "never" datetime if (dateTime == QDateTime(QDate(2999, 12, 28), QTime(23, 59, 59), Qt::UTC)) { return QDateTime(); - } - else { + } else { return dateTime; } } bool KeePass1Reader::isMetaStream(const Entry* entry) { - return entry->attachments()->keys().contains("bin-stream") - && !entry->notes().isEmpty() - && entry->title() == "Meta-Info" - && entry->username() == "SYSTEM" - && entry->url() == "$" - && entry->iconNumber() == 0; + return entry->attachments()->keys().contains("bin-stream") && !entry->notes().isEmpty() + && entry->title() == "Meta-Info" && entry->username() == "SYSTEM" && entry->url() == "$" + && entry->iconNumber() == 0; } QByteArray KeePass1Reader::readKeyfile(QIODevice* device) @@ -1002,8 +969,7 @@ QByteArray KeePass1Reader::readKeyfile(QIODevice* device) if (Tools::isHex(data)) { return QByteArray::fromHex(data); - } - else { + } else { device->seek(0); } } @@ -1021,16 +987,13 @@ QByteArray KeePass1Reader::readKeyfile(QIODevice* device) return cryptoHash.result(); } - QByteArray KeePass1Key::rawKey() const { if (m_keyfileData.isEmpty()) { return CryptoHash::hash(m_password, CryptoHash::Sha256); - } - else if (m_password.isEmpty()) { + } else if (m_password.isEmpty()) { return m_keyfileData; - } - else { + } else { CryptoHash keyHash(CryptoHash::Sha256); keyHash.addData(CryptoHash::hash(m_password, CryptoHash::Sha256)); keyHash.addData(m_keyfileData); diff --git a/src/format/KeePass1Reader.h b/src/format/KeePass1Reader.h index e98dd7d1f..b9ad6ee66 100644 --- a/src/format/KeePass1Reader.h +++ b/src/format/KeePass1Reader.h @@ -21,6 +21,7 @@ #include #include #include +#include class Database; class Entry; @@ -34,12 +35,9 @@ class KeePass1Reader public: KeePass1Reader(); - Database* readDatabase(QIODevice* device, const QString& password, - QIODevice* keyfileDevice); - Database* readDatabase(QIODevice* device, const QString& password, - const QString& keyfileName); - Database* readDatabase(const QString& filename, const QString& password, - const QString& keyfileName); + QSharedPointer readDatabase(QIODevice* device, const QString& password, QIODevice* keyfileDevice); + QSharedPointer readDatabase(QIODevice* device, const QString& password, const QString& keyfileName); + QSharedPointer readDatabase(const QString& filename, const QString& password, const QString& keyfileName); bool hasError(); QString errorString(); @@ -51,8 +49,7 @@ private: UTF8 }; - SymmetricCipherStream* testKeys(const QString& password, const QByteArray& keyfileData, - qint64 contentPos); + SymmetricCipherStream* testKeys(const QString& password, const QByteArray& keyfileData, qint64 contentPos); QByteArray key(const QByteArray& password, const QByteArray& keyfileData); bool verifyKey(SymmetricCipherStream* cipherStream); Group* readGroup(QIODevice* cipherStream); @@ -67,7 +64,7 @@ private: static QDateTime dateFromPackedStruct(const QByteArray& data); static bool isMetaStream(const Entry* entry); - Database* m_db; + QSharedPointer m_db; Group* m_tmpParent; QIODevice* m_device; quint32 m_encryptionFlags; diff --git a/src/format/KeePass2.cpp b/src/format/KeePass2.cpp index 9c0355cd4..fbc393030 100644 --- a/src/format/KeePass2.cpp +++ b/src/format/KeePass2.cpp @@ -16,20 +16,23 @@ */ #include "KeePass2.h" -#include +#include "crypto/CryptoHash.h" #include "crypto/kdf/AesKdf.h" #include "crypto/kdf/Argon2Kdf.h" -#include "crypto/CryptoHash.h" +#include -const Uuid KeePass2::CIPHER_AES = Uuid(QByteArray::fromHex("31c1f2e6bf714350be5805216afc5aff")); -const Uuid KeePass2::CIPHER_TWOFISH = Uuid(QByteArray::fromHex("ad68f29f576f4bb9a36ad47af965346c")); -const Uuid KeePass2::CIPHER_CHACHA20 = Uuid(QByteArray::fromHex("D6038A2B8B6F4CB5A524339A31DBB59A")); +#define UUID_LENGTH 16 -const Uuid KeePass2::KDF_AES_KDBX3 = Uuid(QByteArray::fromHex("C9D9F39A628A4460BF740D08C18A4FEA")); -const Uuid KeePass2::KDF_AES_KDBX4 = Uuid(QByteArray::fromHex("7C02BB8279A74AC0927D114A00648238")); -const Uuid KeePass2::KDF_ARGON2 = Uuid(QByteArray::fromHex("EF636DDF8C29444B91F7A9A403E30A0C")); +const QUuid KeePass2::CIPHER_AES128 = QUuid("61ab05a1-9464-41c3-8d74-3a563df8dd35"); +const QUuid KeePass2::CIPHER_AES256 = QUuid("31c1f2e6-bf71-4350-be58-05216afc5aff"); +const QUuid KeePass2::CIPHER_TWOFISH = QUuid("ad68f29f-576f-4bb9-a36a-d47af965346c"); +const QUuid KeePass2::CIPHER_CHACHA20 = QUuid("d6038a2b-8b6f-4cb5-a524-339a31dbb59a"); -const QByteArray KeePass2::INNER_STREAM_SALSA20_IV("\xE8\x30\x09\x4B\x97\x20\x5D\x2A"); +const QUuid KeePass2::KDF_AES_KDBX3 = QUuid("c9d9f39a-628a-4460-bf74-0d08c18a4fea"); +const QUuid KeePass2::KDF_AES_KDBX4 = QUuid("7c02bb82-79a7-4ac0-927d-114a00648238"); +const QUuid KeePass2::KDF_ARGON2 = QUuid("ef636ddf-8c29-444b-91f7-a9a403e30a0c"); + +const QByteArray KeePass2::INNER_STREAM_SALSA20_IV("\xe8\x30\x09\x4b\x97\x20\x5d\x2a"); const QString KeePass2::KDFPARAM_UUID("$UUID"); // AES parameters @@ -44,19 +47,18 @@ const QString KeePass2::KDFPARAM_ARGON2_VERSION("V"); const QString KeePass2::KDFPARAM_ARGON2_SECRET("K"); const QString KeePass2::KDFPARAM_ARGON2_ASSOCDATA("A"); -const QList> KeePass2::CIPHERS{ - qMakePair(KeePass2::CIPHER_AES, QString(QT_TRANSLATE_NOOP("KeePass2", "AES: 256-bit"))), - qMakePair(KeePass2::CIPHER_TWOFISH, QString(QT_TRANSLATE_NOOP("KeePass2", "Twofish: 256-bit"))), - qMakePair(KeePass2::CIPHER_CHACHA20, QString(QT_TRANSLATE_NOOP("KeePass2", "ChaCha20: 256-bit"))) -}; +const QList> KeePass2::CIPHERS{ + qMakePair(KeePass2::CIPHER_AES256, QObject::tr("AES: 256-bit")), + qMakePair(KeePass2::CIPHER_TWOFISH, QObject::tr("Twofish: 256-bit")), + qMakePair(KeePass2::CIPHER_CHACHA20, QObject::tr("ChaCha20: 256-bit"))}; -const QList> KeePass2::KDFS{ - qMakePair(KeePass2::KDF_ARGON2, QString(QT_TRANSLATE_NOOP("KeePass2", "Argon2 (KDBX 4 – recommended)"))), - qMakePair(KeePass2::KDF_AES_KDBX4, QString(QT_TRANSLATE_NOOP("KeePass2", "AES-KDF (KDBX 4)"))), - qMakePair(KeePass2::KDF_AES_KDBX3, QString(QT_TRANSLATE_NOOP("KeePass2", "AES-KDF (KDBX 3.1)"))) -}; +const QList> KeePass2::KDFS{ + qMakePair(KeePass2::KDF_ARGON2, QObject::tr("Argon2 (KDBX 4 – recommended)")), + qMakePair(KeePass2::KDF_AES_KDBX4, QObject::tr("AES-KDF (KDBX 4)")), + qMakePair(KeePass2::KDF_AES_KDBX3, QObject::tr("AES-KDF (KDBX 3.1)"))}; -QByteArray KeePass2::hmacKey(QByteArray masterSeed, QByteArray transformedMasterKey) { +QByteArray KeePass2::hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey) +{ CryptoHash hmacKeyHash(CryptoHash::Sha512); hmacKeyHash.addData(masterSeed); hmacKeyHash.addData(transformedMasterKey); @@ -73,11 +75,11 @@ QByteArray KeePass2::hmacKey(QByteArray masterSeed, QByteArray transformedMaster QSharedPointer KeePass2::kdfFromParameters(const QVariantMap& p) { QByteArray uuidBytes = p.value(KDFPARAM_UUID).toByteArray(); - if (uuidBytes.size() != Uuid::Length) { + if (uuidBytes.size() != UUID_LENGTH) { return {}; } - Uuid kdfUuid(uuidBytes); + QUuid kdfUuid = QUuid::fromRfc4122(uuidBytes); if (kdfUuid == KDF_AES_KDBX3) { // upgrade to non-legacy AES-KDF, since KDBX3 doesn't have any KDF parameters kdfUuid = KDF_AES_KDBX4; @@ -94,12 +96,12 @@ QSharedPointer KeePass2::kdfFromParameters(const QVariantMap& p) return kdf; } -QVariantMap KeePass2::kdfToParameters(QSharedPointer kdf) +QVariantMap KeePass2::kdfToParameters(const QSharedPointer& kdf) { return kdf->writeParameters(); } -QSharedPointer KeePass2::uuidToKdf(const Uuid& uuid) +QSharedPointer KeePass2::uuidToKdf(const QUuid& uuid) { if (uuid == KDF_AES_KDBX3) { return QSharedPointer::create(true); diff --git a/src/format/KeePass2.h b/src/format/KeePass2.h index 67779121f..d18db3578 100644 --- a/src/format/KeePass2.h +++ b/src/format/KeePass2.h @@ -1,4 +1,4 @@ - /* +/* * Copyright (C) 2010 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -18,120 +18,120 @@ #ifndef KEEPASSX_KEEPASS2_H #define KEEPASSX_KEEPASS2_H -#include -#include -#include #include +#include #include +#include +#include +#include #include "crypto/SymmetricCipher.h" #include "crypto/kdf/Kdf.h" -#include "core/Uuid.h" namespace KeePass2 { -constexpr quint32 SIGNATURE_1 = 0x9AA2D903; -constexpr quint32 SIGNATURE_2 = 0xB54BFB67; + constexpr quint32 SIGNATURE_1 = 0x9AA2D903; + constexpr quint32 SIGNATURE_2 = 0xB54BFB67; -constexpr quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFF0000; -constexpr quint32 FILE_VERSION_4 = 0x00040000; -constexpr quint32 FILE_VERSION_3_1 = 0x00030001; -constexpr quint32 FILE_VERSION_3 = 0x00030000; -constexpr quint32 FILE_VERSION_2 = 0x00020000; -constexpr quint32 FILE_VERSION_MIN = FILE_VERSION_2; + constexpr quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFF0000; + constexpr quint32 FILE_VERSION_4 = 0x00040000; + constexpr quint32 FILE_VERSION_3_1 = 0x00030001; + constexpr quint32 FILE_VERSION_3 = 0x00030000; + constexpr quint32 FILE_VERSION_2 = 0x00020000; + constexpr quint32 FILE_VERSION_MIN = FILE_VERSION_2; -constexpr quint16 VARIANTMAP_VERSION = 0x0100; -constexpr quint16 VARIANTMAP_CRITICAL_MASK = 0xFF00; + constexpr quint16 VARIANTMAP_VERSION = 0x0100; + constexpr quint16 VARIANTMAP_CRITICAL_MASK = 0xFF00; -const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; + const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; -extern const Uuid CIPHER_AES; -extern const Uuid CIPHER_TWOFISH; -extern const Uuid CIPHER_CHACHA20; + extern const QUuid CIPHER_AES128; + extern const QUuid CIPHER_AES256; + extern const QUuid CIPHER_TWOFISH; + extern const QUuid CIPHER_CHACHA20; -extern const Uuid KDF_AES_KDBX3; -extern const Uuid KDF_AES_KDBX4; -extern const Uuid KDF_ARGON2; + extern const QUuid KDF_AES_KDBX3; + extern const QUuid KDF_AES_KDBX4; + extern const QUuid KDF_ARGON2; -extern const QByteArray INNER_STREAM_SALSA20_IV; + extern const QByteArray INNER_STREAM_SALSA20_IV; -extern const QString KDFPARAM_UUID; -extern const QString KDFPARAM_AES_ROUNDS; -extern const QString KDFPARAM_AES_SEED; -extern const QString KDFPARAM_ARGON2_SALT; -extern const QString KDFPARAM_ARGON2_PARALLELISM; -extern const QString KDFPARAM_ARGON2_MEMORY; -extern const QString KDFPARAM_ARGON2_ITERATIONS; -extern const QString KDFPARAM_ARGON2_VERSION; -extern const QString KDFPARAM_ARGON2_SECRET; -extern const QString KDFPARAM_ARGON2_ASSOCDATA; + extern const QString KDFPARAM_UUID; + extern const QString KDFPARAM_AES_ROUNDS; + extern const QString KDFPARAM_AES_SEED; + extern const QString KDFPARAM_ARGON2_SALT; + extern const QString KDFPARAM_ARGON2_PARALLELISM; + extern const QString KDFPARAM_ARGON2_MEMORY; + extern const QString KDFPARAM_ARGON2_ITERATIONS; + extern const QString KDFPARAM_ARGON2_VERSION; + extern const QString KDFPARAM_ARGON2_SECRET; + extern const QString KDFPARAM_ARGON2_ASSOCDATA; -extern const QList> CIPHERS; -extern const QList> KDFS; + extern const QList> CIPHERS; + extern const QList> KDFS; -enum class HeaderFieldID -{ - EndOfHeader = 0, - Comment = 1, - CipherID = 2, - CompressionFlags = 3, - MasterSeed = 4, - TransformSeed = 5, - TransformRounds = 6, - EncryptionIV = 7, - ProtectedStreamKey = 8, - StreamStartBytes = 9, - InnerRandomStreamID = 10, - KdfParameters = 11, - PublicCustomData = 12 -}; + enum class HeaderFieldID + { + EndOfHeader = 0, + Comment = 1, + CipherID = 2, + CompressionFlags = 3, + MasterSeed = 4, + TransformSeed = 5, + TransformRounds = 6, + EncryptionIV = 7, + ProtectedStreamKey = 8, + StreamStartBytes = 9, + InnerRandomStreamID = 10, + KdfParameters = 11, + PublicCustomData = 12 + }; -enum class InnerHeaderFieldID : quint8 -{ - End = 0, - InnerRandomStreamID = 1, - InnerRandomStreamKey = 2, - Binary = 3 -}; + enum class InnerHeaderFieldID : quint8 + { + End = 0, + InnerRandomStreamID = 1, + InnerRandomStreamKey = 2, + Binary = 3 + }; -enum class ProtectedStreamAlgo -{ - ArcFourVariant = 1, - Salsa20 = 2, - ChaCha20 = 3, - InvalidProtectedStreamAlgo = -1 -}; + enum class ProtectedStreamAlgo + { + ArcFourVariant = 1, + Salsa20 = 2, + ChaCha20 = 3, + InvalidProtectedStreamAlgo = -1 + }; -enum class VariantMapFieldType : quint8 -{ - End = 0, - // Byte = 0x02, - // UInt16 = 0x03, - UInt32 = 0x04, - UInt64 = 0x05, - // Signed mask: 0x08 - Bool = 0x08, - // SByte = 0x0A, - // Int16 = 0x0B, - Int32 = 0x0C, - Int64 = 0x0D, - // Float = 0x10, - // Double = 0x11, - // Decimal = 0x12, - // Char = 0x17, // 16-bit Unicode character - String = 0x18, - // Array mask: 0x40 - ByteArray = 0x42 -}; + enum class VariantMapFieldType : quint8 + { + End = 0, + // Byte = 0x02, + // UInt16 = 0x03, + UInt32 = 0x04, + UInt64 = 0x05, + // Signed mask: 0x08 + Bool = 0x08, + // SByte = 0x0A, + // Int16 = 0x0B, + Int32 = 0x0C, + Int64 = 0x0D, + // Float = 0x10, + // Double = 0x11, + // Decimal = 0x12, + // Char = 0x17, // 16-bit Unicode character + String = 0x18, + // Array mask: 0x40 + ByteArray = 0x42 + }; -QByteArray hmacKey(QByteArray masterSeed, QByteArray transformedMasterKey); -QSharedPointer kdfFromParameters(const QVariantMap& p); -QVariantMap kdfToParameters(QSharedPointer kdf); -QSharedPointer uuidToKdf(const Uuid& uuid); -Uuid kdfToUuid(QSharedPointer kdf); -ProtectedStreamAlgo idToProtectedStreamAlgo(quint32 id); + QByteArray hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey); + QSharedPointer kdfFromParameters(const QVariantMap& p); + QVariantMap kdfToParameters(const QSharedPointer& kdf); + QSharedPointer uuidToKdf(const QUuid& uuid); + ProtectedStreamAlgo idToProtectedStreamAlgo(quint32 id); -} // namespace KeePass2 +} // namespace KeePass2 #endif // KEEPASSX_KEEPASS2_H diff --git a/src/format/KeePass2RandomStream.cpp b/src/format/KeePass2RandomStream.cpp index 26824b7e5..2f8c8340d 100644 --- a/src/format/KeePass2RandomStream.cpp +++ b/src/format/KeePass2RandomStream.cpp @@ -30,8 +30,7 @@ bool KeePass2RandomStream::init(const QByteArray& key) { switch (m_cipher.algorithm()) { case SymmetricCipher::Salsa20: - return m_cipher.init(CryptoHash::hash(key, CryptoHash::Sha256), - KeePass2::INNER_STREAM_SALSA20_IV); + return m_cipher.init(CryptoHash::hash(key, CryptoHash::Sha256), KeePass2::INNER_STREAM_SALSA20_IV); case SymmetricCipher::ChaCha20: { QByteArray keyIv = CryptoHash::hash(key, CryptoHash::Sha512); return m_cipher.init(keyIv.left(32), keyIv.mid(32, 12)); @@ -121,7 +120,8 @@ bool KeePass2RandomStream::loadBlock() return true; } -SymmetricCipher::Algorithm KeePass2RandomStream::mapAlgo(KeePass2::ProtectedStreamAlgo algo) { +SymmetricCipher::Algorithm KeePass2RandomStream::mapAlgo(KeePass2::ProtectedStreamAlgo algo) +{ switch (algo) { case KeePass2::ProtectedStreamAlgo::ChaCha20: return SymmetricCipher::ChaCha20; diff --git a/src/format/KeePass2RandomStream.h b/src/format/KeePass2RandomStream.h index 1e341bacc..e41f5a5d6 100644 --- a/src/format/KeePass2RandomStream.h +++ b/src/format/KeePass2RandomStream.h @@ -20,8 +20,8 @@ #include -#include "crypto/SymmetricCipher.h" #include "KeePass2.h" +#include "crypto/SymmetricCipher.h" class KeePass2RandomStream { diff --git a/src/format/KeePass2Reader.cpp b/src/format/KeePass2Reader.cpp index abc7f54e1..97c361abe 100644 --- a/src/format/KeePass2Reader.cpp +++ b/src/format/KeePass2Reader.cpp @@ -16,9 +16,9 @@ */ #include "format/KeePass2Reader.h" -#include "format/KeePass1.h" #include "format/Kdbx3Reader.h" #include "format/Kdbx4Reader.h" +#include "format/KeePass1.h" #include @@ -27,24 +27,25 @@ * * @param filename input file * @param key database encryption composite key - * @return pointer to the read database, nullptr on failure + * @param db Database to read into + * @return true on success */ -Database* KeePass2Reader::readDatabase(const QString& filename, const CompositeKey& key) +bool KeePass2Reader::readDatabase(const QString& filename, QSharedPointer key, Database* db) { QFile file(filename); if (!file.open(QFile::ReadOnly)) { raiseError(file.errorString()); - return nullptr; + return false; } - QScopedPointer db(readDatabase(&file, key)); + bool ok = readDatabase(&file, std::move(key), db); if (file.error() != QFile::NoError) { raiseError(file.errorString()); - return nullptr; + return false; } - return db.take(); + return ok; } /** @@ -52,10 +53,10 @@ Database* KeePass2Reader::readDatabase(const QString& filename, const CompositeK * * @param device input device * @param key database encryption composite key - * @param keepDatabase keep database in case of read failure - * @return pointer to the read database, nullptr on failure + * @param db Database to read into + * @return true on success */ -Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase) +bool KeePass2Reader::readDatabase(QIODevice* device, QSharedPointer key, Database* db) { m_error = false; m_errorStr.clear(); @@ -63,26 +64,29 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke quint32 signature1, signature2; bool ok = KdbxReader::readMagicNumbers(device, signature1, signature2, m_version); - // mask out minor version - m_version &= KeePass2::FILE_VERSION_CRITICAL_MASK; - - if (!ok || signature1 != KeePass2::SIGNATURE_1 || signature2 != KeePass2::SIGNATURE_2) { - raiseError(tr("Not a KeePass database.")); - return nullptr; + if (!ok) { + raiseError(tr("Failed to read database file.")); + return false; } - if (signature2 == KeePass1::SIGNATURE_2) { + if (signature1 == KeePass1::SIGNATURE_1 && signature2 == KeePass1::SIGNATURE_2) { raiseError(tr("The selected file is an old KeePass 1 database (.kdb).\n\n" "You can import it by clicking on Database > 'Import KeePass 1 database...'.\n" "This is a one-way migration. You won't be able to open the imported " "database with the old KeePassX 0.4 version.")); - return nullptr; + return false; + } else if (!(signature1 == KeePass2::SIGNATURE_1 && signature2 == KeePass2::SIGNATURE_2)) { + raiseError(tr("Not a KeePass database.")); + return false; } + // mask out minor version + m_version &= KeePass2::FILE_VERSION_CRITICAL_MASK; + quint32 maxVersion = KeePass2::FILE_VERSION_4 & KeePass2::FILE_VERSION_CRITICAL_MASK; if (m_version < KeePass2::FILE_VERSION_MIN || m_version > maxVersion) { raiseError(tr("Unsupported KeePass 2 database version.")); - return nullptr; + return false; } // determine file format (KDBX 2/3 or 4) @@ -93,7 +97,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke } m_reader->setSaveXml(m_saveXml); - return m_reader->readDatabase(device, key, keepDatabase); + return m_reader->readDatabase(device, std::move(key), db); } bool KeePass2Reader::hasError() const diff --git a/src/format/KeePass2Reader.h b/src/format/KeePass2Reader.h index 1b91223ee..c6c3b0f2b 100644 --- a/src/format/KeePass2Reader.h +++ b/src/format/KeePass2Reader.h @@ -18,25 +18,25 @@ #ifndef KEEPASSX_KEEPASS2READER_H #define KEEPASSX_KEEPASS2READER_H -#include "format/KeePass2.h" -#include "core/Database.h" -#include "keys/CompositeKey.h" #include "KdbxReader.h" +#include "core/Database.h" +#include "format/KeePass2.h" +#include "keys/CompositeKey.h" -#include #include -#include #include -#include #include +#include +#include +#include class KeePass2Reader { -Q_DECLARE_TR_FUNCTIONS(KdbxReader) + Q_DECLARE_TR_FUNCTIONS(KdbxReader) public: - Database* readDatabase(const QString& filename, const CompositeKey& key); - Database* readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase = false); + bool readDatabase(const QString& filename, QSharedPointer key, Database* db); + bool readDatabase(QIODevice* device, QSharedPointer key, Database* db); bool hasError() const; QString errorString() const; @@ -46,6 +46,7 @@ public: QSharedPointer reader() const; quint32 version() const; + private: void raiseError(const QString& errorMessage); diff --git a/src/format/KeePass2Repair.cpp b/src/format/KeePass2Repair.cpp deleted file mode 100644 index 47ed59dc9..000000000 --- a/src/format/KeePass2Repair.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2016 Felix Geyer - * Copyright (C) 2017 KeePassXC Team - * - * This program 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 2 or (at your option) - * version 3 of the License. - * - * This program 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 this program. If not, see . - */ - -#include "KeePass2Repair.h" - -#include - -#include "core/Group.h" -#include "format/KeePass2.h" -#include "format/KeePass2RandomStream.h" -#include "format/KeePass2Reader.h" -#include "format/Kdbx4Reader.h" -#include "format/KdbxXmlReader.h" - -KeePass2Repair::RepairOutcome KeePass2Repair::repairDatabase(QIODevice* device, const CompositeKey& key) -{ - m_errorStr.clear(); - - KeePass2Reader reader; - reader.setSaveXml(true); - - QScopedPointer db(reader.readDatabase(device, key, true)); - if (!reader.hasError()) { - return qMakePair(NothingTodo, nullptr); - } - - QByteArray xmlData = reader.reader()->xmlData(); - if (!db || xmlData.isEmpty()) { - m_errorStr = reader.errorString(); - return qMakePair(UnableToOpen, nullptr); - } - - bool repairAction = false; - - QString xmlStart = QString::fromLatin1(xmlData.constData(), qMin(100, xmlData.size())); - QRegExp encodingRegExp("encoding=\"([^\"]+)\"", Qt::CaseInsensitive, QRegExp::RegExp2); - if (encodingRegExp.indexIn(xmlStart) != -1) { - if (encodingRegExp.cap(1).compare("utf-8", Qt::CaseInsensitive) != 0 - && encodingRegExp.cap(1).compare("utf8", Qt::CaseInsensitive) != 0) - { - // database is not utf-8 encoded, we don't support repairing that - return qMakePair(RepairFailed, nullptr); - } - } - - // try to fix broken databases because of bug #392 - for (int i = (xmlData.size() - 1); i >= 0; i--) { - auto ch = static_cast(xmlData.at(i)); - if (ch < 0x20 && ch != 0x09 && ch != 0x0A && ch != 0x0D) { - xmlData.remove(i, 1); - repairAction = true; - } - } - - if (!repairAction) { - // we were unable to find the problem - return qMakePair(RepairFailed, nullptr); - } - - KeePass2RandomStream randomStream(reader.reader()->protectedStreamAlgo()); - randomStream.init(reader.reader()->streamKey()); - bool hasError; - - QBuffer buffer(&xmlData); - buffer.open(QIODevice::ReadOnly); - if ((reader.version() & KeePass2::FILE_VERSION_CRITICAL_MASK) < KeePass2::FILE_VERSION_4) { - KdbxXmlReader xmlReader(KeePass2::FILE_VERSION_3_1); - xmlReader.readDatabase(&buffer, db.data(), &randomStream); - hasError = xmlReader.hasError(); - } else { - auto reader4 = reader.reader().staticCast(); - QHash pool = reader4->binaryPool(); - KdbxXmlReader xmlReader(KeePass2::FILE_VERSION_4, pool); - xmlReader.readDatabase(&buffer, db.data(), &randomStream); - hasError = xmlReader.hasError(); - } - - if (hasError) { - return qMakePair(RepairFailed, nullptr); - } - else { - return qMakePair(RepairSuccess, db.take()); - } -} - -QString KeePass2Repair::errorString() const -{ - return m_errorStr; -} diff --git a/src/format/KeePass2Writer.cpp b/src/format/KeePass2Writer.cpp index 325986a33..0bd247280 100644 --- a/src/format/KeePass2Writer.cpp +++ b/src/format/KeePass2Writer.cpp @@ -15,16 +15,16 @@ * along with this program. If not, see . */ -#include #include +#include #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/kdf/AesKdf.h" -#include "format/KeePass2Writer.h" #include "format/Kdbx3Writer.h" #include "format/Kdbx4Writer.h" +#include "format/KeePass2Writer.h" /** * Write a database to a KDBX file. @@ -48,21 +48,25 @@ bool KeePass2Writer::writeDatabase(const QString& filename, Database* db) */ bool KeePass2Writer::implicitUpgradeNeeded(Database const* db) const { + if (db->kdf()->uuid() != KeePass2::KDF_AES_KDBX3) { + return false; + } + if (!db->publicCustomData().isEmpty()) { return true; } - for (const auto& group: db->rootGroup()->groupsRecursive(true)) { + for (const auto& group : db->rootGroup()->groupsRecursive(true)) { if (group->customData() && !group->customData()->isEmpty()) { return true; } - for (const auto& entry: group->entries()) { + for (const auto& entry : group->entries()) { if (entry->customData() && !entry->customData()->isEmpty()) { return true; } - for (const auto& historyItem: entry->historyItems()) { + for (const auto& historyItem : entry->historyItems()) { if (historyItem->customData() && !historyItem->customData()->isEmpty()) { return true; } @@ -81,7 +85,8 @@ bool KeePass2Writer::implicitUpgradeNeeded(Database const* db) const * @return true on success */ -bool KeePass2Writer::writeDatabase(QIODevice* device, Database* db) { +bool KeePass2Writer::writeDatabase(QIODevice* device, Database* db) +{ m_error = false; m_errorStr.clear(); diff --git a/src/format/KeePass2Writer.h b/src/format/KeePass2Writer.h index f024d4a83..e5b26eaea 100644 --- a/src/format/KeePass2Writer.h +++ b/src/format/KeePass2Writer.h @@ -28,7 +28,7 @@ class Database; class KeePass2Writer { -Q_DECLARE_TR_FUNCTIONS(KeePass2Writer) + Q_DECLARE_TR_FUNCTIONS(KeePass2Writer) public: bool writeDatabase(const QString& filename, Database* db); diff --git a/src/git-info.h.cmake b/src/git-info.h.cmake new file mode 100644 index 000000000..470b36a64 --- /dev/null +++ b/src/git-info.h.cmake @@ -0,0 +1,8 @@ +/* git-info.h. Generated by cmake from git-info.h.cmake */ + +#ifndef KEEPASSXC_GIT_INFO_H +#define KEEPASSXC_GIT_INFO_H + +#define GIT_HEAD "@GIT_HEAD@" + +#endif // KEEPASSXC_GIT_INFO_H diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index adfdea0a7..0de79fccc 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -20,16 +20,147 @@ #include "ui_AboutDialog.h" #include "config-keepassx.h" -#include "version.h" #include "core/FilePath.h" #include "crypto/Crypto.h" +#include "git-info.h" #include #include +static const QString aboutMaintainers = R"( +

    +)"; + +static const QString aboutContributors = R"( +

    VIP Patreon Supporters:

    +
      +
    • John Cook
    • +
    • Max Anderson
    • +
    • l0b0
    • +
    • NarwhalOfAges
    • +
    • Caleb Currie
    • +
    • Igor Zinovik
    • +
    • Morgan Courbet
    • +
    • Sergiu Coroi
    • +
    +

    Notable Code Contributions:

    +
      +
    • droidmonkey
    • +
    • phoerious
    • +
    • TheZ3ro
    • +
    • louib
    • +
    • weslly
    • +
    • varjolintu (KeePassXC-Browser)
    • +
    • hifi (SSH Agent)
    • +
    • ckieschnick (KeeShare)
    • +
    • seatedscribe (CSV Import)
    • +
    • brainplot (many improvements)
    • +
    • kneitinger (many improvements)
    • +
    • frostasm (many improvements)
    • +
    • fonic (Entry Table View)
    • +
    • kylemanna (YubiKey)
    • +
    • keithbennett (KeePassHTTP)
    • +
    • Typz (KeePassHTTP)
    • +
    • denk-mal (KeePassHTTP)
    • +
    • angelsl (KDBX 4)
    • +
    • debfx (KeePassX)
    • +
    • BlueIce (KeePassX)
    • +
    +

    Patreon Supporters:

    +
      +
    • Ashura
    • +
    • Alexanderjb
    • +
    • Andreas Kollmann
    • +
    • Richard Ames
    • +
    • Christian Rasmussen
    • +
    • Gregory Werbin
    • +
    • Nuutti Toivola
    • +
    • SLmanDR
    • +
    • Tyler Gass
    • +
    • Lionel Laské
    • +
    • Dmitrii Galinskii
    • +
    • Sergei Maximov
    • +
    • John-Ivar
    • +
    • Clayton Casciato
    • +
    +

    Translations:

    +
      +
    • Arabic: AboShanab, Night1, kmutahar, muha_abdulaziz, omar.nsy
    • +
    • Basque: azken_tximinoa, Hey_neken
    • +
    • Bengali: codesmite
    • +
    • Burmese: Phyu
    • +
    • Catalan: capitantrueno, dsoms, mcus, raulua, ZJaume
    • +
    • Chinese (China): Biggulu, Brandon_c, Dy64, Felix2yu, Small_Ku, Z4HD, + carp0129, ef6, holic, kikyous, kofzhanganguo, ligyxy, remonli, slgray, umi_neko, vc5
    • +
    • Chinese (Taiwan): BestSteve, MiauLightouch, Small_Ku, flachesis, gojpdchx, + raymondtau, th3lusive, yan12125, ymhuang0808
    • +
    • Czech: DanielMilde, JosefVitu, awesomevojta, pavelb, tpavelek
    • +
    • Danish: nlkl, KalleDK, MannVera, alfabetacain, ebbe, thniels
    • +
    • Dutch: Bubbel, Dr.Default, apie, bartlibert, evanoosten, fvw, KnooL, + srgvg, Vistaus, wanderingidea, Stephan_P, Zombaya1, e2jk, ovisicnarf, pietermj, rigrig, + theniels17
    • +
    • English (UK): YCMHARHZ, rookwood01, throne3d
    • +
    • Esperanto: batisteo
    • +
    • Estonian: Hermanio
    • +
    • Finnish: artnay, Jarppi, MawKKe, petri, tomisalmi, hifi, varjolintu
    • +
    • French: yahoe.001, A1RO, Albynton, Cabirto, Fumble, Gui13, MartialBis, + MrHeadwar, Nesousx, Raphi111, Scrat15, aghilas.messara, alexisju, b_mortgat, benoitbalon, + bisaloo, e2jk, ebrious, frgnca, ggtr1138, gilbsgilbs, gtalbot, houdini, houdini69, + iannick, jlutran, kyodev, lacnic, laetilodie, logut, mlpo, narzb, nekopep, pBouillon, + plunkets, theodex, tl_pierre, wilfriedroset
    • +
    • German: origin_de, mithrial, andreas.maier, NotAName, Atalanttore, + Hativ, muellerma, mircsicz, derhagen, Wyrrrd, mbetz, kflesch, nursoda, BasicBaer, + mfernau77, for1real, joe776, waster, eth0, marcbone, mcliquid, transi_222, MarcEdinger, + DavidHamburg, jensrutschmann, codejunky, vlenzer, montilo, antsas, rgloor, Calyrx, + omnisome4, pcrcoding
    • +
    • Greek: magkopian, nplatis, tassos.b, xinomilo
    • +
    • Hungarian: bubu, meskobalazs, urbalazs, andras_tim
    • +
    • Indonesian: zk, bora_ach
    • +
    • Italian: the.sailor, VosaxAlo, tosky, seatedscribe, bovirus, Peo, + NITAL, FranzMari, Gringoarg, amaxis, salvatorecordiano, duncanmid, lucaim
    • +
    • Japanese: masoo, metalic_cat, p2635, Shinichirou_Yamada, + vargas.peniel, vmemjp, yukinakato, gojpdchx, saita
    • +
    • Korean: cancantun, peremen
    • +
    • Lithuanian: Moo, pauliusbaulius, rookwood101
    • +
    • Norweigian Bokmål: sattor, ysteinalver, jumpingmushroom, + JardarBolin, eothred, torgeirf, haarek
    • +
    • Polish: keypress, konradmb, mrerexx, psobczak, SebJez, hoek
    • +
    • Portuguese: weslly, xendez
    • +
    • Portuguese (Brazil): danielbibit, guilherme__sr, Havokdan, fabiom, + flaviobn, weslly, newmanisaac, rafaelnp, RockyTV, xendez, lucasjsoliveira, vitor895, + mauri.andres, andersoniop
    • +
    • Portuguese (Portugal): American_Jesus, xendez, hds, arainho, a.santos, + pfialho, smarquespt, mihai.ile, smiguel, lmagomes, xnenjm
    • +
    • Russian: Mogost, alexminza, KekcuHa, NcNZllQnHVU, ruslan.denisenko, + agag11507, anm, cl0ne, JayDi85, RKuchma, Rakleed, vsvyatski, NetWormKido, DG, + Mr.GreyWolf, VictorR2007, _nomoretears_, netforhack, denoos, wkill95, Shevchuk, + talvind, artemkonenko, ShareDVI
    • +
    • Slovak: l.martinicky, Slavko, crazko, pecer
    • +
    • Spanish: gonrial, iglpdc, vsvyatski, Xlate1984, erinm, AndreachongB, + piegope, lupa18, e2jk, capitantrueno, LeoBeltran, antifaz, Zranz, AdrianClv, + EdwardNavarro, rodolfo.guagnini, NicolasCGN, caralu74, puchrojo, DarkHolme, + pdinoto, masanchez5000, adolfogc, systurbed, mauri.andres, Bendhet, vargas.peniel, + eliluminado, jojobrambs, pquin
    • +
    • Swedish: theschitz, Anders_Bergqvist, LIINdd, krklns, henziger, + jpyllman, peron, Thelin, baxtex, zeroxfourc
    • +
    • Thai: arthit, rayg
    • +
    • Turkish: TeknoMobil, etc, SeLeNLeR, ethem578, cagries, N3pp
    • +
    • Ukrainian: brisk022, exlevan, chulivska, cl0ne, zoresvit, + netforhack, ShareDVI
    • +
    +)"; + AboutDialog::AboutDialog(QWidget* parent) - : QDialog(parent), - m_ui(new Ui::AboutDialog()) + : QDialog(parent) + , m_ui(new Ui::AboutDialog()) { m_ui->setupUi(this); @@ -37,7 +168,7 @@ AboutDialog::AboutDialog(QWidget* parent) setWindowFlags(Qt::Sheet); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - m_ui->nameLabel->setText(m_ui->nameLabel->text().replace("${VERSION}", KEEPASSX_VERSION)); + m_ui->nameLabel->setText(m_ui->nameLabel->text().replace("${VERSION}", KEEPASSXC_VERSION)); QFont nameLabelFont = m_ui->nameLabel->font(); nameLabelFont.setPointSize(nameLabelFont.pointSize() + 4); m_ui->nameLabel->setFont(nameLabelFont); @@ -48,14 +179,11 @@ AboutDialog::AboutDialog(QWidget* parent) if (!QString(GIT_HEAD).isEmpty()) { commitHash = GIT_HEAD; } - else if (!QString(DIST_HASH).contains("Format")) { - commitHash = DIST_HASH; - } QString debugInfo = "KeePassXC - "; - debugInfo.append(tr("Version %1\n").arg(KEEPASSX_VERSION)); + debugInfo.append(tr("Version %1").arg(KEEPASSXC_VERSION).append("\n")); #ifndef KEEPASSXC_BUILD_TYPE_RELEASE - debugInfo.append(tr("Build Type: %1\n").arg(KEEPASSXC_BUILD_TYPE)); + debugInfo.append(tr("Build Type: %1").arg(KEEPASSXC_BUILD_TYPE).append("\n")); #endif if (!commitHash.isEmpty()) { debugInfo.append(tr("Revision: %1").arg(commitHash.left(7)).append("\n")); @@ -65,45 +193,54 @@ AboutDialog::AboutDialog(QWidget* parent) debugInfo.append(tr("Distribution: %1").arg(KEEPASSXC_DIST_TYPE).append("\n")); #endif - debugInfo.append("\n").append(QString("%1\n- Qt %2\n- %3\n\n") - .arg(tr("Libraries:")) - .arg(QString::fromLocal8Bit(qVersion())) - .arg(Crypto::backendVersion())); + debugInfo.append("\n").append( + QString("%1\n- Qt %2\n- %3\n\n") + .arg(tr("Libraries:"), QString::fromLocal8Bit(qVersion()), Crypto::backendVersion())); #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) debugInfo.append(tr("Operating system: %1\nCPU architecture: %2\nKernel: %3 %4") - .arg(QSysInfo::prettyProductName(), - QSysInfo::currentCpuArchitecture(), - QSysInfo::kernelType(), - QSysInfo::kernelVersion())); + .arg(QSysInfo::prettyProductName(), + QSysInfo::currentCpuArchitecture(), + QSysInfo::kernelType(), + QSysInfo::kernelVersion())); debugInfo.append("\n\n"); #endif QString extensions; #ifdef WITH_XC_AUTOTYPE - extensions += "\n- Auto-Type"; + extensions += "\n- " + tr("Auto-Type"); #endif #ifdef WITH_XC_BROWSER - extensions += "\n- Browser Integration"; -#endif -#ifdef WITH_XC_HTTP - extensions += "\n- Legacy Browser Integration (KeePassHTTP)"; + extensions += "\n- " + tr("Browser Integration"); #endif #ifdef WITH_XC_SSHAGENT - extensions += "\n- SSH Agent"; + extensions += "\n- " + tr("SSH Agent"); +#endif +#if defined(WITH_XC_KEESHARE_SECURE) && defined(WITH_XC_KEESHARE_INSECURE) + extensions += "\n- " + tr("KeeShare (signed and unsigned sharing)"); +#elif defined(WITH_XC_KEESHARE_SECURE) + extensions += "\n- " + tr("KeeShare (only signed sharing)"); +#elif defined(WITH_XC_KEESHARE_INSECURE) + extensions += "\n- " + tr("KeeShare (only unsigned sharing)"); #endif #ifdef WITH_XC_YUBIKEY - extensions += "\n- YubiKey"; + extensions += "\n- " + tr("YubiKey"); +#endif +#ifdef WITH_XC_TOUCHID + extensions += "\n- " + tr("TouchID"); #endif if (extensions.isEmpty()) - extensions = " None"; + extensions = " " + tr("None"); debugInfo.append(tr("Enabled extensions:").append(extensions)); m_ui->debugInfo->setPlainText(debugInfo); + m_ui->maintainers->setText(aboutMaintainers); + m_ui->contributors->setText(aboutContributors); + setAttribute(Qt::WA_DeleteOnClose); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); connect(m_ui->copyToClipboard, SIGNAL(clicked()), SLOT(copyToClipboard())); diff --git a/src/gui/AboutDialog.h b/src/gui/AboutDialog.h index 9d0c1c355..bd6b2edb9 100644 --- a/src/gui/AboutDialog.h +++ b/src/gui/AboutDialog.h @@ -22,7 +22,8 @@ #include #include -namespace Ui { +namespace Ui +{ class AboutDialog; } diff --git a/src/gui/AboutDialog.ui b/src/gui/AboutDialog.ui index 2b274544a..8bd8ea01f 100644 --- a/src/gui/AboutDialog.ui +++ b/src/gui/AboutDialog.ui @@ -163,7 +163,7 @@
    - + 0 @@ -171,15 +171,7 @@ - <ul> - <li>Jonathan White (<a href="https://github.com/droidmonkey">droidmonkey</a>)</li> - <li>Janek Bevendorff (<a href="https://github.com/phoerious">phoerious</a>)</li> - <li><a href="https://github.com/TheZ3ro">TheZ3ro</a></li> - <li>Louis-Bertrand (<a href="https://github.com/louib">louib</a>)</li> - <li>Weslly Honorato (<a href="https://github.com/weslly">weslly</a>)</li> - <li>Toni Spets (<a href="https://github.com/hifi">hifi</a>)</li> - <li>Sami V&auml;nttinen (<a href="https://github.com/varjolintu">varjolintu</a>)</li> -</ul> + true @@ -238,8 +230,8 @@ 0 0 - 449 - 845 + 466 + 246 @@ -255,61 +247,7 @@ IBeamCursor - <h3>VIP Patreon Supporters:</h3> -<ul> - <li>John Cook</li> - <li>Max Anderson</li> -</ul> -<h3>Notable Code Contributions:</h3> -<ul> - <li>droidmonkey</li> - <li>phoerious</li> - <li>TheZ3ro</li> - <li>louib</li> - <li>weslly</li> - <li>varjolintu (KeePassXC-Browser)</li> - <li>hifi (SSH Agent)</li> - <li>frostasm</li> - <li>fonic (Entry Table View)</li> - <li>kylemanna (YubiKey)</li> - <li>keithbennett (KeePassHTTP)</li> - <li>Typz (KeePassHTTP)</li> - <li>denk-mal (KeePassHTTP)</li> - <li>angelsl (KDBX 4)</li> - <li>seatedscribe (CSV Import)</li> - <li>debfx (KeePassX)</li> - <li>BlueIce (KeePassX)</li> -</ul> -<h3>Patreon Supporters:</h3> -<ul> - <li>Ashura</li> - <li>Alexanderjb</li> - <li>Andreas Kollmann</li> - <li>Richard Ames</li> -</ul> -<h3>Translations:</h3> -<ul> - <li><strong>Basque</strong>: azken_tximinoa, Hey_neken</li> - <li><strong>Catalan</strong>: capitantrueno, dsoms, mcus, raulua, ZJaume</li> - <li><strong>Chinese (China)</strong>: Biggulu, Brandon_c, hoilc, ligyxy, vc5, Small_Ku</li> - <li><strong>Chinese (Taiwan)</strong>: BestSteve, MiauLightouch, Small_Ku, yan12125, ymhuang0808</li> - <li><strong>Czech</strong>: DanielMilde, JosefVitu, pavelb, tpavelek</li> - <li><strong>Danish</strong>: nlkl</li> - <li><strong>Dutch</strong>: apie, bartlibert, evanoosten, fvw, KnooL, srgvg, Vistaus, wanderingidea</li> - <li><strong>Finnish</strong>: artnay, Jarppi, MawKKe</li> - <li><strong>French</strong>: A1RO, aghilas.messara, bisaloo, frgnca, ggtr1138, gilbsgilbs, gtalbot, Gui13, iannick, jlutran, kyodev, logut, MartialBis, narzb, pBouillon, plunkets, Raphi111, Scrat15, tl_pierre, wilfriedroset</li> - <li><strong>German</strong>: antsas, BasicBaer, Calyrx, codejunky, DavidHamburg, eth0, for1real, jensrutschmann, joe776, kflesch, MarcEdinger, marcbone, mcliquid, mfernau77, montilo, nursoda, omnisome4, origin_de, pcrcoding, phoerious, rgloor, transi_222, vlenzer, waster</li> - <li><strong>Greek</strong>: magkopian, nplatis, tassos.b, xinomilo</li> - <li><strong>Hungarian</strong>: bubu, meskobalazs, urbalazs</li> - <li><strong>Indonesian</strong>: zk</li> - <li><strong>Italian</strong>: amaxis, bovirus, duncanmid, FranzMari, lucaim, Mte90, Peo, TheZ3ro, tosky, VosaxAlo</li> - <li><strong>Japanese</strong>: masoo, metalic_cat, p2635, Shinichirou_Yamada, vargas.peniel, vmemjp, yukinakato</li> - <li><strong>Korean</strong>: cancantun, peremen</li> - <li><strong>Lithuanian</strong>: Moo</li> - <li><strong>Polish</strong>: keypress, konradmb, mrerexx, psobczak</li> - <li><strong>Portuguese (Brazil)</strong>: danielbibit, fabiom, flaviobn, vitor895, weslly</li> -</ul> - + Qt::AutoText diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp index 48cd0d8d7..b79f2c30a 100644 --- a/src/gui/Application.cpp +++ b/src/gui/Application.cpp @@ -21,7 +21,6 @@ #include "MainWindow.h" #include "core/Config.h" -#include #include #include #include @@ -32,69 +31,35 @@ #include "autotype/AutoType.h" #include "core/Global.h" +#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) +#include "core/OSEventFilter.h" +#endif + #if defined(Q_OS_UNIX) #include -#include #include +#include #endif -namespace { -constexpr int WaitTimeoutMSec = 150; -const char BlockSizeProperty[] = "blockSize"; -} - -#if defined(Q_OS_UNIX) && !defined(Q_OS_OSX) -class XcbEventFilter : public QAbstractNativeEventFilter +namespace { -public: - bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override - { - Q_UNUSED(result) - - if (eventType == QByteArrayLiteral("xcb_generic_event_t")) { - int retCode = autoType()->callEventFilter(message); - if (retCode == 1) { - return true; - } - } - - return false; - } -}; -#elif defined(Q_OS_WIN) -class WinEventFilter : public QAbstractNativeEventFilter -{ -public: - bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override - { - Q_UNUSED(result); - - if (eventType == QByteArrayLiteral("windows_generic_MSG") - || eventType == QByteArrayLiteral("windows_dispatcher_MSG")) { - int retCode = autoType()->callEventFilter(message); - if (retCode == 1) { - return true; - } - } - - return false; - } -}; -#endif + constexpr int WaitTimeoutMSec = 150; + const char BlockSizeProperty[] = "blockSize"; +} // namespace Application::Application(int& argc, char** argv) : QApplication(argc, argv) - , m_mainWindow(nullptr) #ifdef Q_OS_UNIX , m_unixSignalNotifier(nullptr) #endif , m_alreadyRunning(false) , m_lockFile(nullptr) +#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) + , m_osEventFilter(new OSEventFilter()) +{ + installNativeEventFilter(m_osEventFilter.data()); +#else { -#if defined(Q_OS_UNIX) && !defined(Q_OS_OSX) - installNativeEventFilter(new XcbEventFilter()); -#elif defined(Q_OS_WIN) - installNativeEventFilter(new WinEventFilter()); #endif #if defined(Q_OS_UNIX) registerUnixSignals(); @@ -109,8 +74,8 @@ Application::Application(int& argc, char** argv) identifier += "-" + userName; } #ifdef QT_DEBUG - // In DEBUG mode don't interfere with Release instances - identifier += "-DEBUG"; + // In DEBUG mode don't interfere with Release instances + identifier += "-DEBUG"; #endif QString lockName = identifier + ".lock"; m_socketName = identifier + ".socket"; @@ -146,9 +111,9 @@ Application::Application(int& argc, char** argv) if (!m_alreadyRunning) { // If we get here then the original instance is likely dead - qWarning() << QCoreApplication::translate("Main", - "Existing single-instance lock file is invalid. Launching new instance.") - .toUtf8().constData(); + qWarning() << QObject::tr("Existing single-instance lock file is invalid. Launching new instance.") + .toUtf8() + .constData(); // forceably reset the lock file m_lockFile->removeStaleLockFile(); @@ -160,9 +125,8 @@ Application::Application(int& argc, char** argv) break; } default: - qWarning() << QCoreApplication::translate("Main", - "The lock file could not be created. Single-instance mode disabled.") - .toUtf8().constData(); + qWarning() + << QObject::tr("The lock file could not be created. Single-instance mode disabled.").toUtf8().constData(); } } @@ -175,16 +139,6 @@ Application::~Application() } } -QWidget* Application::mainWindow() const -{ - return m_mainWindow; -} - -void Application::setMainWindow(QWidget* mainWindow) -{ - m_mainWindow = mainWindow; -} - bool Application::event(QEvent* event) { // Handle Apple QFileOpenEvent from finder (double click on .kdbx file) @@ -192,7 +146,7 @@ bool Application::event(QEvent* event) emit openFile(static_cast(event)->file()); return true; } -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS // restore main window when clicking on the docker icon else if (event->type() == QEvent::ApplicationActivate) { emit applicationActivated(); @@ -214,17 +168,17 @@ void Application::registerUnixSignals() // application will be unresponsive to signals such as SIGINT or SIGTERM return; } - - QVector const handledSignals = { SIGQUIT, SIGINT, SIGTERM, SIGHUP }; - for (auto s: handledSignals) { + + QVector const handledSignals = {SIGQUIT, SIGINT, SIGTERM, SIGHUP}; + for (auto s : handledSignals) { struct sigaction sigAction; - + sigAction.sa_handler = handleUnixSignal; sigemptyset(&sigAction.sa_mask); sigAction.sa_flags = 0 | SA_RESTART; sigaction(s, &sigAction, nullptr); } - + m_unixSignalNotifier = new QSocketNotifier(unixSignalSocket[1], QSocketNotifier::Read, this); connect(m_unixSignalNotifier, SIGNAL(activated(int)), this, SLOT(quitBySignal())); } @@ -232,16 +186,15 @@ void Application::registerUnixSignals() void Application::handleUnixSignal(int sig) { switch (sig) { - case SIGQUIT: - case SIGINT: - case SIGTERM: - { - char buf = 0; - Q_UNUSED(::write(unixSignalSocket[0], &buf, sizeof(buf))); - return; - } - case SIGHUP: - return; + case SIGQUIT: + case SIGINT: + case SIGTERM: { + char buf = 0; + Q_UNUSED(::write(unixSignalSocket[0], &buf, sizeof(buf))); + return; + } + case SIGHUP: + return; } } @@ -289,7 +242,7 @@ void Application::socketReadyRead() QStringList fileNames; in >> fileNames; - for (const QString& fileName: asConst(fileNames)) { + for (const QString& fileName : asConst(fileNames)) { const QFileInfo fInfo(fileName); if (fInfo.isFile() && fInfo.suffix().toLower() == "kdbx") { emit openFile(fileName); @@ -319,8 +272,7 @@ bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames) QByteArray data; QDataStream out(&data, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_5_0); - out << quint32(0) - << fileNames; + out << quint32(0) << fileNames; out.device()->seek(0); out << quint32(data.size() - sizeof(quint32)); @@ -329,4 +281,3 @@ bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames) const bool disconnected = client.waitForDisconnected(WaitTimeoutMSec); return writeOk && disconnected; } - diff --git a/src/gui/Application.h b/src/gui/Application.h index 1f5759368..9a3ef756b 100644 --- a/src/gui/Application.h +++ b/src/gui/Application.h @@ -22,8 +22,13 @@ #include #include -class QLockFile; +#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) +#include + +class OSEventFilter; +#endif +class QLockFile; class QSocketNotifier; class Application : public QApplication @@ -32,9 +37,7 @@ class Application : public QApplication public: Application(int& argc, char** argv); - QWidget* mainWindow() const; - ~Application(); - void setMainWindow(QWidget* mainWindow); + ~Application() override; bool event(QEvent* event) override; bool isAlreadyRunning() const; @@ -55,8 +58,6 @@ private slots: void socketReadyRead(); private: - QWidget* m_mainWindow; - #if defined(Q_OS_UNIX) /** * Register Unix signals such as SIGINT and SIGTERM for clean shutdown. @@ -70,6 +71,9 @@ private: QLockFile* m_lockFile; QLocalServer m_lockServer; QString m_socketName; +#if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) + QScopedPointer m_osEventFilter; +#endif }; #endif // KEEPASSX_APPLICATION_H diff --git a/src/gui/SettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp similarity index 58% rename from src/gui/SettingsWidget.cpp rename to src/gui/ApplicationSettingsWidget.cpp index 30cc11e5c..90b851bd9 100644 --- a/src/gui/SettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -16,44 +16,50 @@ * along with this program. If not, see . */ -#include "SettingsWidget.h" -#include "ui_SettingsWidgetGeneral.h" -#include "ui_SettingsWidgetSecurity.h" +#include "ApplicationSettingsWidget.h" +#include "ui_ApplicationSettingsWidgetGeneral.h" +#include "ui_ApplicationSettingsWidgetSecurity.h" #include "config-keepassx.h" + #include "autotype/AutoType.h" #include "core/Config.h" -#include "core/Translator.h" #include "core/FilePath.h" #include "core/Global.h" +#include "core/Translator.h" -class SettingsWidget::ExtraPage +#include "touchid/TouchID.h" + +class ApplicationSettingsWidget::ExtraPage { - public: - ExtraPage(ISettingsPage* page, QWidget* widget): settingsPage(page), widget(widget) - {} +public: + ExtraPage(ISettingsPage* page, QWidget* widget) + : settingsPage(page) + , widget(widget) + { + } - void loadSettings() const - { - settingsPage->loadSettings(widget); - } + void loadSettings() const + { + settingsPage->loadSettings(widget); + } - void saveSettings() const - { - settingsPage->saveSettings(widget); - } + void saveSettings() const + { + settingsPage->saveSettings(widget); + } - private: - QSharedPointer settingsPage; - QWidget* widget; +private: + QSharedPointer settingsPage; + QWidget* widget; }; -SettingsWidget::SettingsWidget(QWidget* parent) +ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) : EditWidget(parent) , m_secWidget(new QWidget()) , m_generalWidget(new QWidget()) - , m_secUi(new Ui::SettingsWidgetSecurity()) - , m_generalUi(new Ui::SettingsWidgetGeneral()) + , m_secUi(new Ui::ApplicationSettingsWidgetSecurity()) + , m_generalUi(new Ui::ApplicationSettingsWidgetGeneral()) , m_globalAutoTypeKey(static_cast(0)) , m_globalAutoTypeModifiers(Qt::NoModifier) { @@ -72,26 +78,41 @@ SettingsWidget::SettingsWidget(QWidget* parent) connect(this, SIGNAL(apply()), SLOT(saveSettings())); connect(this, SIGNAL(rejected()), SLOT(reject())); - connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), - this, SLOT(enableAutoSaveOnExit(bool))); - connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), - this, SLOT(enableSystray(bool))); + // clang-format off + connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), SLOT(autoSaveToggled(bool))); + connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), SLOT(systrayToggled(bool))); + connect(m_generalUi->toolbarHideCheckBox, SIGNAL(toggled(bool)), SLOT(enableToolbarSettings(bool))); connect(m_secUi->clearClipboardCheckBox, SIGNAL(toggled(bool)), m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool))); connect(m_secUi->lockDatabaseIdleCheckBox, SIGNAL(toggled(bool)), m_secUi->lockDatabaseIdleSpinBox, SLOT(setEnabled(bool))); + connect(m_secUi->touchIDResetCheckBox, SIGNAL(toggled(bool)), + m_secUi->touchIDResetSpinBox, SLOT(setEnabled(bool))); + // clang-format on #ifndef WITH_XC_NETWORKING + m_generalUi->checkForUpdatesOnStartupCheckBox->setVisible(false); m_secUi->privacy->setVisible(false); #endif + +#ifndef WITH_XC_TOUCHID + bool hideTouchID = true; +#else + bool hideTouchID = !TouchID::getInstance().isAvailable(); +#endif + if (hideTouchID) { + m_secUi->touchIDResetCheckBox->setVisible(false); + m_secUi->touchIDResetSpinBox->setVisible(false); + m_secUi->touchIDResetOnScreenLockCheckBox->setVisible(false); + } } -SettingsWidget::~SettingsWidget() +ApplicationSettingsWidget::~ApplicationSettingsWidget() { } -void SettingsWidget::addSettingsPage(ISettingsPage* page) +void ApplicationSettingsWidget::addSettingsPage(ISettingsPage* page) { QWidget* widget = page->createWidget(); widget->setParent(this); @@ -99,12 +120,10 @@ void SettingsWidget::addSettingsPage(ISettingsPage* page) addPage(page->name(), page->icon(), widget); } -void SettingsWidget::loadSettings() +void ApplicationSettingsWidget::loadSettings() { - if (config()->hasAccessError()) { - showMessage( - tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); + showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); } #ifdef QT_DEBUG @@ -127,26 +146,44 @@ void SettingsWidget::loadSettings() m_generalUi->ignoreGroupExpansionCheckBox->setChecked(config()->get("IgnoreGroupExpansion").toBool()); m_generalUi->languageComboBox->clear(); - QList > languages = Translator::availableLanguages(); - for (int i = 0; i < languages.size(); i++) { - m_generalUi->languageComboBox->addItem(languages[i].second, languages[i].first); + QList> languages = Translator::availableLanguages(); + for (const auto& language : languages) { + m_generalUi->languageComboBox->addItem(language.second, language.first); } int defaultIndex = m_generalUi->languageComboBox->findData(config()->get("GUI/Language")); if (defaultIndex > 0) { m_generalUi->languageComboBox->setCurrentIndex(defaultIndex); } - m_generalUi->detailsHideCheckBox->setChecked(config()->get("GUI/HideDetailsView").toBool()); + m_generalUi->previewHideCheckBox->setChecked(config()->get("GUI/HidePreviewPanel").toBool()); + m_generalUi->toolbarHideCheckBox->setChecked(config()->get("GUI/HideToolbar").toBool()); + m_generalUi->toolbarMovableCheckBox->setChecked(config()->get("GUI/MovableToolbar").toBool()); + + m_generalUi->toolButtonStyleComboBox->clear(); + m_generalUi->toolButtonStyleComboBox->addItem(tr("Icon only"), Qt::ToolButtonIconOnly); + m_generalUi->toolButtonStyleComboBox->addItem(tr("Text only"), Qt::ToolButtonTextOnly); + m_generalUi->toolButtonStyleComboBox->addItem(tr("Text beside icon"), Qt::ToolButtonTextBesideIcon); + m_generalUi->toolButtonStyleComboBox->addItem(tr("Text under icon"), Qt::ToolButtonTextUnderIcon); + m_generalUi->toolButtonStyleComboBox->addItem(tr("Follow style"), Qt::ToolButtonFollowStyle); + int toolButtonStyleIndex = m_generalUi->toolButtonStyleComboBox->findData(config()->get("GUI/ToolButtonStyle")); + if (toolButtonStyleIndex > 0) { + m_generalUi->toolButtonStyleComboBox->setCurrentIndex(toolButtonStyleIndex); + } + m_generalUi->systrayShowCheckBox->setChecked(config()->get("GUI/ShowTrayIcon").toBool()); m_generalUi->systrayDarkIconCheckBox->setChecked(config()->get("GUI/DarkTrayIcon").toBool()); m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get("GUI/MinimizeToTray").toBool()); - m_generalUi->systrayMinimizeOnCloseCheckBox->setChecked(config()->get("GUI/MinimizeOnClose").toBool()); + m_generalUi->minimizeOnCloseCheckBox->setChecked(config()->get("GUI/MinimizeOnClose").toBool()); m_generalUi->systrayMinimizeOnStartup->setChecked(config()->get("GUI/MinimizeOnStartup").toBool()); + m_generalUi->checkForUpdatesOnStartupCheckBox->setChecked(config()->get("GUI/CheckForUpdates").toBool()); + m_generalUi->checkForUpdatesIncludeBetasCheckBox->setChecked( + config()->get("GUI/CheckForUpdatesIncludeBetas").toBool()); m_generalUi->autoTypeAskCheckBox->setChecked(config()->get("security/autotypeask").toBool()); if (autoType()->isAvailable()) { m_globalAutoTypeKey = static_cast(config()->get("GlobalAutoTypeKey").toInt()); - m_globalAutoTypeModifiers = static_cast(config()->get("GlobalAutoTypeModifiers").toInt()); + m_globalAutoTypeModifiers = + static_cast(config()->get("GlobalAutoTypeModifiers").toInt()); if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { m_generalUi->autoTypeShortcutWidget->setShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); } @@ -155,7 +192,6 @@ void SettingsWidget::loadSettings() m_generalUi->autoTypeStartDelaySpinBox->setValue(config()->get("AutoTypeStartDelay").toInt()); } - m_secUi->clearClipboardCheckBox->setChecked(config()->get("security/clearclipboard").toBool()); m_secUi->clearClipboardSpinBox->setValue(config()->get("security/clearclipboardtimeout").toInt()); @@ -164,27 +200,30 @@ void SettingsWidget::loadSettings() m_secUi->lockDatabaseMinimizeCheckBox->setChecked(config()->get("security/lockdatabaseminimize").toBool()); m_secUi->lockDatabaseOnScreenLockCheckBox->setChecked(config()->get("security/lockdatabasescreenlock").toBool()); m_secUi->relockDatabaseAutoTypeCheckBox->setChecked(config()->get("security/relockautotype").toBool()); - m_secUi->fallbackToGoogle->setChecked(config()->get("security/IconDownloadFallbackToGoogle").toBool()); + m_secUi->fallbackToSearch->setChecked(config()->get("security/IconDownloadFallback").toBool()); m_secUi->passwordCleartextCheckBox->setChecked(config()->get("security/passwordscleartext").toBool()); - m_secUi->passwordDetailsCleartextCheckBox->setChecked(config()->get("security/hidepassworddetails").toBool()); + m_secUi->passwordShowDotsCheckBox->setChecked(config()->get("security/passwordemptynodots").toBool()); + m_secUi->passwordPreviewCleartextCheckBox->setChecked(config()->get("security/HidePasswordPreviewPanel").toBool()); m_secUi->passwordRepeatCheckBox->setChecked(config()->get("security/passwordsrepeat").toBool()); m_secUi->hideNotesCheckBox->setChecked(config()->get("security/hidenotes").toBool()); + m_secUi->touchIDResetCheckBox->setChecked(config()->get("security/resettouchid").toBool()); + m_secUi->touchIDResetSpinBox->setValue(config()->get("security/resettouchidtimeout").toInt()); + m_secUi->touchIDResetOnScreenLockCheckBox->setChecked(config()->get("security/resettouchidscreenlock").toBool()); - for (const ExtraPage& page: asConst(m_extraPages)) { + for (const ExtraPage& page : asConst(m_extraPages)) { page.loadSettings(); } setCurrentPage(0); } -void SettingsWidget::saveSettings() +void ApplicationSettingsWidget::saveSettings() { if (config()->hasAccessError()) { - showMessage( - tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); + showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); // We prevent closing the settings page if we could not write to // the config file. return; @@ -193,40 +232,42 @@ void SettingsWidget::saveSettings() config()->set("SingleInstance", m_generalUi->singleInstanceCheckBox->isChecked()); config()->set("RememberLastDatabases", m_generalUi->rememberLastDatabasesCheckBox->isChecked()); config()->set("RememberLastKeyFiles", m_generalUi->rememberLastKeyFilesCheckBox->isChecked()); - config()->set("OpenPreviousDatabasesOnStartup", - m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked()); - config()->set("AutoSaveAfterEveryChange", - m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked()); + config()->set("OpenPreviousDatabasesOnStartup", m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked()); + config()->set("AutoSaveAfterEveryChange", m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked()); config()->set("AutoSaveOnExit", m_generalUi->autoSaveOnExitCheckBox->isChecked()); config()->set("BackupBeforeSave", m_generalUi->backupBeforeSaveCheckBox->isChecked()); config()->set("UseAtomicSaves", m_generalUi->useAtomicSavesCheckBox->isChecked()); config()->set("AutoReloadOnChange", m_generalUi->autoReloadOnChangeCheckBox->isChecked()); config()->set("MinimizeOnCopy", m_generalUi->minimizeOnCopyCheckBox->isChecked()); - config()->set("UseGroupIconOnEntryCreation", - m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked()); - config()->set("IgnoreGroupExpansion", - m_generalUi->ignoreGroupExpansionCheckBox->isChecked()); - config()->set("AutoTypeEntryTitleMatch", - m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked()); - config()->set("AutoTypeEntryURLMatch", - m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked()); + config()->set("UseGroupIconOnEntryCreation", m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked()); + config()->set("IgnoreGroupExpansion", m_generalUi->ignoreGroupExpansionCheckBox->isChecked()); + config()->set("AutoTypeEntryTitleMatch", m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked()); + config()->set("AutoTypeEntryURLMatch", m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked()); int currentLangIndex = m_generalUi->languageComboBox->currentIndex(); config()->set("GUI/Language", m_generalUi->languageComboBox->itemData(currentLangIndex).toString()); - config()->set("GUI/HideDetailsView", m_generalUi->detailsHideCheckBox->isChecked()); + config()->set("GUI/HidePreviewPanel", m_generalUi->previewHideCheckBox->isChecked()); + config()->set("GUI/HideToolbar", m_generalUi->toolbarHideCheckBox->isChecked()); + config()->set("GUI/MovableToolbar", m_generalUi->toolbarMovableCheckBox->isChecked()); + + int currentToolButtonStyleIndex = m_generalUi->toolButtonStyleComboBox->currentIndex(); + config()->set("GUI/ToolButtonStyle", + m_generalUi->toolButtonStyleComboBox->itemData(currentToolButtonStyleIndex).toString()); + config()->set("GUI/ShowTrayIcon", m_generalUi->systrayShowCheckBox->isChecked()); config()->set("GUI/DarkTrayIcon", m_generalUi->systrayDarkIconCheckBox->isChecked()); config()->set("GUI/MinimizeToTray", m_generalUi->systrayMinimizeToTrayCheckBox->isChecked()); - config()->set("GUI/MinimizeOnClose", m_generalUi->systrayMinimizeOnCloseCheckBox->isChecked()); + config()->set("GUI/MinimizeOnClose", m_generalUi->minimizeOnCloseCheckBox->isChecked()); config()->set("GUI/MinimizeOnStartup", m_generalUi->systrayMinimizeOnStartup->isChecked()); + config()->set("GUI/CheckForUpdates", m_generalUi->checkForUpdatesOnStartupCheckBox->isChecked()); + config()->set("GUI/CheckForUpdatesIncludeBetas", m_generalUi->checkForUpdatesIncludeBetasCheckBox->isChecked()); config()->set("security/autotypeask", m_generalUi->autoTypeAskCheckBox->isChecked()); if (autoType()->isAvailable()) { config()->set("GlobalAutoTypeKey", m_generalUi->autoTypeShortcutWidget->key()); - config()->set("GlobalAutoTypeModifiers", - static_cast(m_generalUi->autoTypeShortcutWidget->modifiers())); + config()->set("GlobalAutoTypeModifiers", static_cast(m_generalUi->autoTypeShortcutWidget->modifiers())); config()->set("AutoTypeDelay", m_generalUi->autoTypeDelaySpinBox->value()); config()->set("AutoTypeStartDelay", m_generalUi->autoTypeStartDelaySpinBox->value()); } @@ -238,13 +279,19 @@ void SettingsWidget::saveSettings() config()->set("security/lockdatabaseminimize", m_secUi->lockDatabaseMinimizeCheckBox->isChecked()); config()->set("security/lockdatabasescreenlock", m_secUi->lockDatabaseOnScreenLockCheckBox->isChecked()); config()->set("security/relockautotype", m_secUi->relockDatabaseAutoTypeCheckBox->isChecked()); - config()->set("security/IconDownloadFallbackToGoogle", m_secUi->fallbackToGoogle->isChecked()); + config()->set("security/IconDownloadFallback", m_secUi->fallbackToSearch->isChecked()); config()->set("security/passwordscleartext", m_secUi->passwordCleartextCheckBox->isChecked()); - config()->set("security/hidepassworddetails", m_secUi->passwordDetailsCleartextCheckBox->isChecked()); + config()->set("security/passwordemptynodots", m_secUi->passwordShowDotsCheckBox->isChecked()); + + config()->set("security/HidePasswordPreviewPanel", m_secUi->passwordPreviewCleartextCheckBox->isChecked()); config()->set("security/passwordsrepeat", m_secUi->passwordRepeatCheckBox->isChecked()); config()->set("security/hidenotes", m_secUi->hideNotesCheckBox->isChecked()); + config()->set("security/resettouchid", m_secUi->touchIDResetCheckBox->isChecked()); + config()->set("security/resettouchidtimeout", m_secUi->touchIDResetSpinBox->value()); + config()->set("security/resettouchidscreenlock", m_secUi->touchIDResetOnScreenLockCheckBox->isChecked()); + // Security: clear storage if related settings are disabled if (!config()->get("RememberLastDatabases").toBool()) { config()->set("LastDatabases", QVariant()); @@ -255,28 +302,37 @@ void SettingsWidget::saveSettings() config()->set("LastDir", ""); } - for (const ExtraPage& page: asConst(m_extraPages)) { + for (const ExtraPage& page : asConst(m_extraPages)) { page.saveSettings(); } } -void SettingsWidget::reject() +void ApplicationSettingsWidget::reject() { // register the old key again as it might have changed if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { autoType()->registerGlobalShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); } - } -void SettingsWidget::enableAutoSaveOnExit(bool checked) +void ApplicationSettingsWidget::autoSaveToggled(bool checked) { + // Explicitly enable auto-save on exit if it wasn't already + if (checked && !m_generalUi->autoSaveOnExitCheckBox->isChecked()) { + m_generalUi->autoSaveOnExitCheckBox->setChecked(true); + } m_generalUi->autoSaveOnExitCheckBox->setEnabled(!checked); } -void SettingsWidget::enableSystray(bool checked) +void ApplicationSettingsWidget::systrayToggled(bool checked) { m_generalUi->systrayDarkIconCheckBox->setEnabled(checked); m_generalUi->systrayMinimizeToTrayCheckBox->setEnabled(checked); - m_generalUi->systrayMinimizeOnCloseCheckBox->setEnabled(checked); +} + +void ApplicationSettingsWidget::enableToolbarSettings(bool checked) +{ + m_generalUi->toolbarMovableCheckBox->setEnabled(!checked); + m_generalUi->toolButtonStyleComboBox->setEnabled(!checked); + m_generalUi->toolButtonStyleLabel->setEnabled(!checked); } diff --git a/src/gui/SettingsWidget.h b/src/gui/ApplicationSettingsWidget.h similarity index 61% rename from src/gui/SettingsWidget.h rename to src/gui/ApplicationSettingsWidget.h index 27566037d..ffcfea2be 100644 --- a/src/gui/SettingsWidget.h +++ b/src/gui/ApplicationSettingsWidget.h @@ -21,42 +21,47 @@ #include "gui/EditWidget.h" -namespace Ui { - class SettingsWidgetGeneral; - class SettingsWidgetSecurity; -} +namespace Ui +{ + class ApplicationSettingsWidgetGeneral; + class ApplicationSettingsWidgetSecurity; +} // namespace Ui -class ISettingsPage { +class ISettingsPage +{ public: - virtual ~ISettingsPage() {} + virtual ~ISettingsPage() + { + } virtual QString name() = 0; virtual QIcon icon() = 0; - virtual QWidget * createWidget() = 0; - virtual void loadSettings(QWidget * widget) = 0; - virtual void saveSettings(QWidget * widget) = 0; + virtual QWidget* createWidget() = 0; + virtual void loadSettings(QWidget* widget) = 0; + virtual void saveSettings(QWidget* widget) = 0; }; -class SettingsWidget : public EditWidget +class ApplicationSettingsWidget : public EditWidget { Q_OBJECT public: - explicit SettingsWidget(QWidget* parent = nullptr); - ~SettingsWidget(); - void addSettingsPage(ISettingsPage * page); + explicit ApplicationSettingsWidget(QWidget* parent = nullptr); + ~ApplicationSettingsWidget(); + void addSettingsPage(ISettingsPage* page); void loadSettings(); private slots: void saveSettings(); void reject(); - void enableAutoSaveOnExit(bool checked); - void enableSystray(bool checked); + void autoSaveToggled(bool checked); + void systrayToggled(bool checked); + void enableToolbarSettings(bool checked); private: QWidget* const m_secWidget; QWidget* const m_generalWidget; - const QScopedPointer m_secUi; - const QScopedPointer m_generalUi; + const QScopedPointer m_secUi; + const QScopedPointer m_generalUi; Qt::Key m_globalAutoTypeKey; Qt::KeyboardModifiers m_globalAutoTypeModifiers; class ExtraPage; diff --git a/src/gui/SettingsWidgetGeneral.ui b/src/gui/ApplicationSettingsWidgetGeneral.ui similarity index 71% rename from src/gui/SettingsWidgetGeneral.ui rename to src/gui/ApplicationSettingsWidgetGeneral.ui index 2d94892f2..798971bfe 100644 --- a/src/gui/SettingsWidgetGeneral.ui +++ b/src/gui/ApplicationSettingsWidgetGeneral.ui @@ -1,13 +1,13 @@ - SettingsWidgetGeneral - + ApplicationSettingsWidgetGeneral + 0 0 684 - 732 + 881 @@ -26,7 +26,7 @@ - 1 + 0 @@ -83,6 +83,13 @@ + + + + Check for updates at application startup + + + @@ -164,9 +171,9 @@ - + - Hide the Details view + Hide the entry preview panel @@ -179,6 +186,121 @@ General + + + + Include pre-releases when checking for updates + + + + + + + Hide toolbar (icons) + + + + + + + 0 + + + QLayout::SetMaximumSize + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + true + + + + 0 + 0 + + + + Movable toolbar + + + + + + + + + 15 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + true + + + + 0 + 0 + + + + Button style + + + + + + + true + + + + 0 + 0 + + + + + + + + + + Minimize instead of app exit + + + @@ -186,6 +308,42 @@ + + + + 0 + + + QLayout::SetMaximumSize + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + false + + + Dark system tray icon + + + + + @@ -243,78 +401,6 @@ - - - - 0 - - - QLayout::SetMaximumSize - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - false - - - Hide window to system tray instead of app exit - - - - - - - - - 0 - - - QLayout::SetMaximumSize - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - false - - - Dark system tray icon - - - - - diff --git a/src/gui/SettingsWidgetSecurity.ui b/src/gui/ApplicationSettingsWidgetSecurity.ui similarity index 72% rename from src/gui/SettingsWidgetSecurity.ui rename to src/gui/ApplicationSettingsWidgetSecurity.ui index da3def868..344c2b81c 100644 --- a/src/gui/SettingsWidgetSecurity.ui +++ b/src/gui/ApplicationSettingsWidgetSecurity.ui @@ -1,13 +1,13 @@ - SettingsWidgetSecurity - + ApplicationSettingsWidgetSecurity + 0 0 595 - 446 + 478 @@ -61,7 +61,7 @@ - + @@ -74,7 +74,7 @@ - + false @@ -92,13 +92,42 @@ 10 - 9999 + 43200 240 + + + + false + + + + 0 + 0 + + + + min + + + 1440 + + + 30 + + + + + + + Forget TouchID after inactivity of + + + @@ -115,6 +144,13 @@ + + + + Forget TouchID when session is locked or lid is closed + + + @@ -122,7 +158,7 @@ - + Re-lock previously locked database after performing Auto-Type @@ -139,14 +175,21 @@ - Show passwords in cleartext by default + Don't hide passwords when editing them - + - Hide passwords in the preview panel + Don't use placeholder for empty password fields + + + + + + + Hide passwords in the entry preview panel @@ -167,9 +210,9 @@ - + - Use Google as fallback for downloading website icons + Use DuckDuckGo as fallback for downloading website icons diff --git a/src/gui/CategoryListWidget.cpp b/src/gui/CategoryListWidget.cpp index f091cc243..c57b19bc0 100644 --- a/src/gui/CategoryListWidget.cpp +++ b/src/gui/CategoryListWidget.cpp @@ -19,15 +19,15 @@ #include "ui_CategoryListWidget.h" #include +#include #include #include #include -#include CategoryListWidget::CategoryListWidget(QWidget* parent) - : QWidget(parent), - m_itemDelegate(nullptr), - m_ui(new Ui::CategoryListWidget()) + : QWidget(parent) + , m_itemDelegate(nullptr) + , m_ui(new Ui::CategoryListWidget()) { m_ui->setupUi(this); m_itemDelegate = new CategoryListWidgetDelegate(m_ui->categoryList); @@ -38,7 +38,9 @@ CategoryListWidget::CategoryListWidget(QWidget* parent) connect(m_ui->scrollUp, SIGNAL(clicked()), SLOT(scrollCategoriesUp())); connect(m_ui->scrollDown, SIGNAL(clicked()), SLOT(scrollCategoriesDown())); connect(m_ui->categoryList->verticalScrollBar(), SIGNAL(valueChanged(int)), SLOT(updateCategoryScrollButtons())); - connect(m_ui->categoryList->verticalScrollBar(), SIGNAL(rangeChanged(int, int)), SLOT(updateCategoryScrollButtons())); + // clang-format off + connect(m_ui->categoryList->verticalScrollBar(), SIGNAL(rangeChanged(int,int)), SLOT(updateCategoryScrollButtons())); + // clang-format on } CategoryListWidget::~CategoryListWidget() @@ -128,16 +130,14 @@ void CategoryListWidget::updateCategoryScrollButtons() void CategoryListWidget::scrollCategoriesUp() { - m_ui->categoryList->verticalScrollBar()->setValue( - m_ui->categoryList->verticalScrollBar()->value() - m_ui->categoryList->verticalScrollBar()->pageStep() - ); + m_ui->categoryList->verticalScrollBar()->setValue(m_ui->categoryList->verticalScrollBar()->value() + - m_ui->categoryList->verticalScrollBar()->pageStep()); } void CategoryListWidget::scrollCategoriesDown() { - m_ui->categoryList->verticalScrollBar()->setValue( - m_ui->categoryList->verticalScrollBar()->value() + m_ui->categoryList->verticalScrollBar()->pageStep() - ); + m_ui->categoryList->verticalScrollBar()->setValue(m_ui->categoryList->verticalScrollBar()->value() + + m_ui->categoryList->verticalScrollBar()->pageStep()); } void CategoryListWidget::emitCategoryChanged(int index) @@ -145,14 +145,12 @@ void CategoryListWidget::emitCategoryChanged(int index) emit categoryChanged(index); } - /* =============================================================================================== */ - CategoryListWidgetDelegate::CategoryListWidgetDelegate(QListWidget* parent) - : QStyledItemDelegate(parent), - m_listWidget(parent), - m_size(96, 96) + : QStyledItemDelegate(parent) + , m_listWidget(parent) + , m_size(96, 96) { m_size.setWidth(minWidth()); if (m_listWidget && m_listWidget->width() > m_size.width()) { @@ -165,7 +163,10 @@ CategoryListWidgetDelegate::CategoryListWidgetDelegate(QListWidget* parent) class WindowsCorrectedStyle : public QProxyStyle { public: - void drawPrimitive(PrimitiveElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const override + void drawPrimitive(PrimitiveElement element, + const QStyleOption* option, + QPainter* painter, + const QWidget* widget) const override { painter->save(); @@ -187,7 +188,9 @@ public: }; #endif -void CategoryListWidgetDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const +void CategoryListWidgetDelegate::paint(QPainter* painter, + const QStyleOptionViewItem& option, + const QModelIndex& index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); @@ -225,8 +228,8 @@ int CategoryListWidgetDelegate::minWidth() const for (int i = 0; i < c; ++i) { QFontMetrics fm(m_listWidget->font()); - QRect fontRect = fm.boundingRect( - QRect(0, 0, 0, 0), Qt::TextWordWrap | Qt::ElideNone, m_listWidget->item(i)->text()); + QRect fontRect = + fm.boundingRect(QRect(0, 0, 0, 0), Qt::TextWordWrap | Qt::ElideNone, m_listWidget->item(i)->text()); if (fontRect.width() > maxWidth) { maxWidth = fontRect.width(); @@ -239,7 +242,7 @@ int CategoryListWidgetDelegate::minWidth() const return maxWidth < m_size.height() ? m_size.height() : maxWidth; } -QSize CategoryListWidgetDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +QSize CategoryListWidgetDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const { Q_UNUSED(option); Q_UNUSED(index); diff --git a/src/gui/CategoryListWidget.h b/src/gui/CategoryListWidget.h index 3cf82fd1b..7873a3d3e 100644 --- a/src/gui/CategoryListWidget.h +++ b/src/gui/CategoryListWidget.h @@ -15,14 +15,18 @@ * along with this program. If not, see . */ -#include -#include +#ifndef KEEPASSXC_GUI_CATEGORYLISTWIDGET_H +#define KEEPASSXC_GUI_CATEGORYLISTWIDGET_H + #include +#include +#include class CategoryListWidgetDelegate; class QListWidget; -namespace Ui { +namespace Ui +{ class CategoryListWidget; } @@ -31,7 +35,7 @@ class CategoryListWidget : public QWidget Q_OBJECT public: - CategoryListWidget(QWidget* parent = 0); + CategoryListWidget(QWidget* parent = nullptr); ~CategoryListWidget(); int currentCategory(); @@ -46,7 +50,7 @@ signals: protected: void showEvent(QShowEvent* event) override; - void resizeEvent(QResizeEvent * event) override; + void resizeEvent(QResizeEvent* event) override; QSize sizeHint() const override; QSize minimumSizeHint() const override; @@ -63,10 +67,8 @@ private: Q_DISABLE_COPY(CategoryListWidget) }; - /* =============================================================================================== */ - class CategoryListWidgetDelegate : public QStyledItemDelegate { Q_OBJECT @@ -77,10 +79,9 @@ public: protected: void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; - QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override; private: - const int ICON_SIZE = 32; QPointer m_listWidget; @@ -88,3 +89,5 @@ private: Q_DISABLE_COPY(CategoryListWidgetDelegate) }; + +#endif diff --git a/src/gui/ChangeMasterKeyWidget.cpp b/src/gui/ChangeMasterKeyWidget.cpp deleted file mode 100644 index 28a0991db..000000000 --- a/src/gui/ChangeMasterKeyWidget.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (C) 2012 Felix Geyer - * Copyright (C) 2017 KeePassXC Team - * - * This program 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 2 or (at your option) - * version 3 of the License. - * - * This program 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 this program. If not, see . - */ - -#include "ChangeMasterKeyWidget.h" -#include "ui_ChangeMasterKeyWidget.h" - -#include "core/FilePath.h" -#include "keys/FileKey.h" -#include "keys/PasswordKey.h" -#include "keys/YkChallengeResponseKey.h" -#include "gui/FileDialog.h" -#include "gui/MessageBox.h" -#include "crypto/Random.h" -#include "MainWindow.h" - -#include "config-keepassx.h" - -#include -#include - -ChangeMasterKeyWidget::ChangeMasterKeyWidget(QWidget* parent) - : DialogyWidget(parent) - , m_ui(new Ui::ChangeMasterKeyWidget()) -{ - m_ui->setupUi(this); - - m_ui->messageWidget->setHidden(true); - - m_ui->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show")); - m_ui->repeatPasswordEdit->enableVerifyMode(m_ui->enterPasswordEdit); - - connect(m_ui->passwordGroup, SIGNAL(clicked(bool)), SLOT(setOkEnabled())); - connect(m_ui->togglePasswordButton, SIGNAL(toggled(bool)), m_ui->enterPasswordEdit, SLOT(setShowPassword(bool))); - - connect(m_ui->keyFileGroup, SIGNAL(clicked(bool)), SLOT(setOkEnabled())); - connect(m_ui->createKeyFileButton, SIGNAL(clicked()), SLOT(createKeyFile())); - connect(m_ui->browseKeyFileButton, SIGNAL(clicked()), SLOT(browseKeyFile())); - connect(m_ui->keyFileCombo, SIGNAL(editTextChanged(QString)), SLOT(setOkEnabled())); - - connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(generateKey())); - connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); - -#ifdef WITH_XC_YUBIKEY - m_ui->yubikeyProgress->setVisible(false); - QSizePolicy sp = m_ui->yubikeyProgress->sizePolicy(); - sp.setRetainSizeWhenHidden(true); - m_ui->yubikeyProgress->setSizePolicy(sp); - - connect(m_ui->challengeResponseGroup, SIGNAL(clicked(bool)), SLOT(challengeResponseGroupToggled(bool))); - connect(m_ui->challengeResponseGroup, SIGNAL(clicked(bool)), SLOT(setOkEnabled())); - connect(m_ui->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollYubikey())); - - connect(YubiKey::instance(), SIGNAL(detected(int,bool)), SLOT(yubikeyDetected(int,bool)), Qt::QueuedConnection); - connect(YubiKey::instance(), SIGNAL(notFound()), SLOT(noYubikeyFound()), Qt::QueuedConnection); -#else - m_ui->challengeResponseGroup->setVisible(false); -#endif -} - -ChangeMasterKeyWidget::~ChangeMasterKeyWidget() -{ -} - -void ChangeMasterKeyWidget::createKeyFile() -{ - QString filters = QString("%1 (*.key);;%2 (*)").arg(tr("Key files"), tr("All files")); - QString fileName = fileDialog()->getSaveFileName(this, tr("Create Key File..."), QString(), filters); - - if (!fileName.isEmpty()) { - QString errorMsg; - bool created = FileKey::create(fileName, &errorMsg); - if (!created) { - m_ui->messageWidget->showMessage(tr("Unable to create Key File : ").append(errorMsg), MessageWidget::Error); - } - else { - m_ui->keyFileCombo->setEditText(fileName); - } - } -} - -void ChangeMasterKeyWidget::browseKeyFile() -{ - QString filters = QString("%1 (*.key);;%2 (*)").arg(tr("Key files"), tr("All files")); - QString fileName = fileDialog()->getOpenFileName(this, tr("Select a key file"), QString(), filters); - - if (!fileName.isEmpty()) { - m_ui->keyFileCombo->setEditText(fileName); - } -} - -void ChangeMasterKeyWidget::clearForms() -{ - m_key.clear(); - - m_ui->passwordGroup->setChecked(true); - m_ui->enterPasswordEdit->setText(""); - m_ui->repeatPasswordEdit->setText(""); - m_ui->keyFileGroup->setChecked(false); - m_ui->togglePasswordButton->setChecked(false); - -#ifdef WITH_XC_YUBIKEY - m_ui->challengeResponseGroup->setChecked(false); - m_ui->comboChallengeResponse->clear(); -#endif - - m_ui->enterPasswordEdit->setFocus(); -} - -CompositeKey ChangeMasterKeyWidget::newMasterKey() -{ - return m_key; -} - -QLabel* ChangeMasterKeyWidget::headlineLabel() -{ - return m_ui->headlineLabel; -} - -void ChangeMasterKeyWidget::generateKey() -{ - m_key.clear(); - - if (m_ui->passwordGroup->isChecked()) { - if (m_ui->enterPasswordEdit->text() == m_ui->repeatPasswordEdit->text()) { - if (m_ui->enterPasswordEdit->text().isEmpty()) { - if (MessageBox::warning(this, tr("Empty password"), - tr("Do you really want to use an empty string as password?"), - QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { - return; - } - } - m_key.addKey(PasswordKey(m_ui->enterPasswordEdit->text())); - } - else { - m_ui->messageWidget->showMessage(tr("Different passwords supplied."), MessageWidget::Error); - m_ui->enterPasswordEdit->setText(""); - m_ui->repeatPasswordEdit->setText(""); - return; - } - } - if (m_ui->keyFileGroup->isChecked()) { - FileKey fileKey; - QString errorMsg; - QString fileKeyName = m_ui->keyFileCombo->currentText(); - if (!fileKey.load(fileKeyName, &errorMsg)) { - m_ui->messageWidget->showMessage( - tr("Failed to set %1 as the Key file:\n%2").arg(fileKeyName, errorMsg), MessageWidget::Error); - return; - } - if (fileKey.type() != FileKey::Hashed) { - QMessageBox::warning(this, - tr("Legacy key file format"), - tr("You are using a legacy key file format which may become\n" - "unsupported in the future.\n\n" - "Please consider generating a new key file."), - QMessageBox::Ok); - } - m_key.addKey(fileKey); - } - -#ifdef WITH_XC_YUBIKEY - if (m_ui->challengeResponseGroup->isChecked()) { - int selectionIndex = m_ui->comboChallengeResponse->currentIndex(); - int comboPayload = m_ui->comboChallengeResponse->itemData(selectionIndex).toInt(); - - if (0 == comboPayload) { - m_ui->messageWidget->showMessage(tr("Changing master key failed: no YubiKey inserted."), - MessageWidget::Error); - return; - } - - // read blocking mode from LSB and slot index number from second LSB - bool blocking = comboPayload & 1; - int slot = comboPayload >> 1; - auto key = QSharedPointer(new YkChallengeResponseKey(slot, blocking)); - m_key.addChallengeResponseKey(key); - } -#endif - - m_ui->messageWidget->hideMessage(); - emit editFinished(true); -} - - -void ChangeMasterKeyWidget::reject() -{ - emit editFinished(false); -} - -void ChangeMasterKeyWidget::challengeResponseGroupToggled(bool checked) -{ - if (checked) - pollYubikey(); -} - -void ChangeMasterKeyWidget::pollYubikey() -{ - m_ui->buttonRedetectYubikey->setEnabled(false); - m_ui->comboChallengeResponse->setEnabled(false); - m_ui->comboChallengeResponse->clear(); - m_ui->yubikeyProgress->setVisible(true); - setOkEnabled(); - - // YubiKey init is slow, detect asynchronously to not block the UI - QtConcurrent::run(YubiKey::instance(), &YubiKey::detect); -} - -void ChangeMasterKeyWidget::yubikeyDetected(int slot, bool blocking) -{ - YkChallengeResponseKey yk(slot, blocking); - // add detected YubiKey to combo box and encode blocking mode in LSB, slot number in second LSB - m_ui->comboChallengeResponse->addItem(yk.getName(), QVariant((slot << 1) | blocking)); - m_ui->comboChallengeResponse->setEnabled(m_ui->challengeResponseGroup->isChecked()); - m_ui->buttonRedetectYubikey->setEnabled(m_ui->challengeResponseGroup->isChecked()); - m_ui->yubikeyProgress->setVisible(false); - setOkEnabled(); -} - -void ChangeMasterKeyWidget::noYubikeyFound() -{ - m_ui->buttonRedetectYubikey->setEnabled(m_ui->challengeResponseGroup->isChecked()); - m_ui->yubikeyProgress->setVisible(false); - setOkEnabled(); -} - -void ChangeMasterKeyWidget::setOkEnabled() -{ - bool ok = m_ui->passwordGroup->isChecked() || - (m_ui->challengeResponseGroup->isChecked() && !m_ui->comboChallengeResponse->currentText().isEmpty()) || - (m_ui->keyFileGroup->isChecked() && !m_ui->keyFileCombo->currentText().isEmpty()); - - m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(ok); -} - -void ChangeMasterKeyWidget::setCancelEnabled(bool enabled) -{ - m_ui->buttonBox->button(QDialogButtonBox::Cancel)->setEnabled(enabled); -} diff --git a/src/gui/ChangeMasterKeyWidget.h b/src/gui/ChangeMasterKeyWidget.h deleted file mode 100644 index 2825d8d55..000000000 --- a/src/gui/ChangeMasterKeyWidget.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2012 Felix Geyer - * Copyright (C) 2017 KeePassXC Team - * - * This program 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 2 or (at your option) - * version 3 of the License. - * - * This program 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 this program. If not, see . - */ - -#ifndef KEEPASSX_CHANGEMASTERKEYWIDGET_H -#define KEEPASSX_CHANGEMASTERKEYWIDGET_H - -#include - -#include "gui/DialogyWidget.h" -#include "keys/CompositeKey.h" - -class QLabel; -namespace Ui { - class ChangeMasterKeyWidget; -} - -class ChangeMasterKeyWidget : public DialogyWidget -{ - Q_OBJECT - -public: - explicit ChangeMasterKeyWidget(QWidget* parent = nullptr); - ~ChangeMasterKeyWidget(); - void clearForms(); - CompositeKey newMasterKey(); - QLabel* headlineLabel(); - -public slots: - void setOkEnabled(); - void setCancelEnabled(bool enabled); - -signals: - void editFinished(bool accepted); - -private slots: - void generateKey(); - void reject(); - void createKeyFile(); - void browseKeyFile(); - void yubikeyDetected(int slot, bool blocking); - void noYubikeyFound(); - void challengeResponseGroupToggled(bool checked); - void pollYubikey(); - -private: - const QScopedPointer m_ui; - CompositeKey m_key; - - Q_DISABLE_COPY(ChangeMasterKeyWidget) -}; - -#endif // KEEPASSX_CHANGEMASTERKEYWIDGET_H diff --git a/src/gui/ChangeMasterKeyWidget.ui b/src/gui/ChangeMasterKeyWidget.ui deleted file mode 100644 index 693d8ac1d..000000000 --- a/src/gui/ChangeMasterKeyWidget.ui +++ /dev/null @@ -1,238 +0,0 @@ - - - ChangeMasterKeyWidget - - - - 0 - 0 - 818 - 471 - - - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 1 - 3 - - - - - - - - Password - - - true - - - true - - - - - - Enter password: - - - - - - - - - QLineEdit::Password - - - - - - - true - - - - - - - - - Repeat password: - - - - - - - QLineEdit::Password - - - - - - - - - - &Key file - - - true - - - - - - Browse - - - - - - - Create - - - - - - - - 0 - 0 - - - - true - - - - - - - - - - true - - - Cha&llenge Response - - - true - - - true - - - - - - 0 - - - - - Refresh - - - - - - - - 0 - 0 - - - - - - - - - 16777215 - 2 - - - - 0 - - - -1 - - - false - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - PasswordEdit - QLineEdit -
    gui/PasswordEdit.h
    -
    - - MessageWidget - QWidget -
    gui/MessageWidget.h
    - 1 -
    -
    - - passwordGroup - enterPasswordEdit - repeatPasswordEdit - togglePasswordButton - keyFileGroup - keyFileCombo - browseKeyFileButton - createKeyFileButton - buttonBox - - - -
    diff --git a/src/gui/Clipboard.cpp b/src/gui/Clipboard.cpp index 2c0d3d6ed..a0978bfd4 100644 --- a/src/gui/Clipboard.cpp +++ b/src/gui/Clipboard.cpp @@ -1,4 +1,5 @@ /* + * Copyright (C) 2017 KeePassXC Team * Copyright (C) 2012 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -19,12 +20,13 @@ #include #include +#include #include #include "core/Config.h" Clipboard* Clipboard::m_instance(nullptr); -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS QPointer Clipboard::m_pasteboard(nullptr); #endif @@ -32,7 +34,7 @@ Clipboard::Clipboard(QObject* parent) : QObject(parent) , m_timer(new QTimer(this)) { -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS if (!m_pasteboard) { m_pasteboard = new MacPasteboard(); } @@ -46,15 +48,20 @@ void Clipboard::setText(const QString& text) { QClipboard* clipboard = QApplication::clipboard(); -#ifdef Q_OS_MAC QMimeData* mime = new QMimeData; +#ifdef Q_OS_MACOS mime->setText(text); mime->setData("application/x-nspasteboard-concealed-type", text.toUtf8()); clipboard->setMimeData(mime, QClipboard::Clipboard); #else - clipboard->setText(text, QClipboard::Clipboard); + const QString secretStr = "secret"; + QByteArray secretBa = secretStr.toUtf8(); + mime->setText(text); + mime->setData("x-kde-passwordManagerHint", secretBa); + clipboard->setMimeData(mime, QClipboard::Clipboard); + if (clipboard->supportsSelection()) { - clipboard->setText(text, QClipboard::Selection); + clipboard->setMimeData(mime, QClipboard::Selection); } #endif @@ -88,8 +95,7 @@ void Clipboard::clearClipboard() clipboard->clear(QClipboard::Clipboard); } - if (clipboard->supportsSelection() - && (clipboard->text(QClipboard::Selection) == m_lastCopied)) { + if (clipboard->supportsSelection() && (clipboard->text(QClipboard::Selection) == m_lastCopied)) { clipboard->clear(QClipboard::Selection); } diff --git a/src/gui/Clipboard.h b/src/gui/Clipboard.h index 279ae7f03..2748ba6da 100644 --- a/src/gui/Clipboard.h +++ b/src/gui/Clipboard.h @@ -1,4 +1,5 @@ /* + * Copyright (C) 2017 KeePassXC Team * Copyright (C) 2012 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -19,7 +20,7 @@ #define KEEPASSX_CLIPBOARD_H #include -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS #include "core/MacPasteboard.h" #include #endif @@ -47,7 +48,7 @@ private: static Clipboard* m_instance; QTimer* m_timer; -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS // This object lives for the whole program lifetime and we cannot delete it on exit, // so ignore leak warnings. See https://bugreports.qt.io/browse/QTBUG-54832 static QPointer m_pasteboard; @@ -55,7 +56,8 @@ private: QString m_lastCopied; }; -inline Clipboard* clipboard() { +inline Clipboard* clipboard() +{ return Clipboard::instance(); } diff --git a/src/gui/CloneDialog.cpp b/src/gui/CloneDialog.cpp index 7af504395..e91df62c7 100644 --- a/src/gui/CloneDialog.cpp +++ b/src/gui/CloneDialog.cpp @@ -19,7 +19,6 @@ #include "ui_CloneDialog.h" #include "config-keepassx.h" -#include "version.h" #include "core/Database.h" #include "core/Entry.h" #include "core/FilePath.h" diff --git a/src/gui/CloneDialog.h b/src/gui/CloneDialog.h index a925bb47a..569938464 100644 --- a/src/gui/CloneDialog.h +++ b/src/gui/CloneDialog.h @@ -18,13 +18,14 @@ #ifndef KEEPASSX_CLONEDIALOG_H #define KEEPASSX_CLONEDIALOG_H +#include "core/Database.h" +#include "core/Entry.h" +#include "gui/DatabaseWidget.h" #include #include -#include "core/Entry.h" -#include "core/Database.h" -#include "gui/DatabaseWidget.h" -namespace Ui { +namespace Ui +{ class CloneDialog; } diff --git a/src/gui/DatabaseOpenDialog.cpp b/src/gui/DatabaseOpenDialog.cpp new file mode 100644 index 000000000..ff7d46f22 --- /dev/null +++ b/src/gui/DatabaseOpenDialog.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#include "DatabaseOpenDialog.h" +#include "DatabaseOpenWidget.h" +#include "DatabaseWidget.h" +#include "core/Database.h" + +DatabaseOpenDialog::DatabaseOpenDialog(QWidget* parent) + : QDialog(parent) + , m_view(new DatabaseOpenWidget(this)) +{ + setWindowTitle(tr("Unlock Database - KeePassXC")); +#ifdef Q_OS_MACOS + setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); +#else + setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint | Qt::ForeignWindow); +#endif + connect(m_view, SIGNAL(dialogFinished(bool)), this, SLOT(complete(bool))); +} + +void DatabaseOpenDialog::setFilePath(const QString& filePath) +{ + m_view->load(filePath); +} + +/** + * Set target DatabaseWidget to which signals are connected. + * + * @param dbWidget database widget + */ +void DatabaseOpenDialog::setTargetDatabaseWidget(DatabaseWidget* dbWidget) +{ + if (m_dbWidget) { + disconnect(this, nullptr, m_dbWidget, nullptr); + } + m_dbWidget = dbWidget; + connect(this, SIGNAL(dialogFinished(bool)), dbWidget, SLOT(unlockDatabase(bool))); +} + +void DatabaseOpenDialog::setIntent(DatabaseOpenDialog::Intent intent) +{ + m_intent = intent; +} + +DatabaseOpenDialog::Intent DatabaseOpenDialog::intent() const +{ + return m_intent; +} + +void DatabaseOpenDialog::clearForms() +{ + m_view->clearForms(); + m_db.reset(); + m_intent = Intent::None; + if (m_dbWidget) { + disconnect(this, nullptr, m_dbWidget, nullptr); + m_dbWidget = nullptr; + } +} + +QSharedPointer DatabaseOpenDialog::database() +{ + return m_db; +} + +void DatabaseOpenDialog::complete(bool accepted) +{ + // save DB, since DatabaseOpenWidget will reset its data after accept() is called + m_db = m_view->database(); + + if (accepted) { + accept(); + } else { + reject(); + } + emit dialogFinished(accepted); + clearForms(); +} diff --git a/src/gui/DatabaseOpenDialog.h b/src/gui/DatabaseOpenDialog.h new file mode 100644 index 000000000..f2860fccb --- /dev/null +++ b/src/gui/DatabaseOpenDialog.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2018 KeePassXC Team + * + * This program 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 2 or (at your option) + * version 3 of the License. + * + * This program 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 this program. If not, see . + */ + +#ifndef KEEPASSX_UNLOCKDATABASEDIALOG_H +#define KEEPASSX_UNLOCKDATABASEDIALOG_H + +#include "core/Global.h" + +#include +#include +#include + +class Database; +class DatabaseWidget; +class DatabaseOpenWidget; + +class DatabaseOpenDialog : public QDialog +{ + Q_OBJECT + +public: + enum class Intent + { + None, + AutoType, + Merge, + Browser + }; + + explicit DatabaseOpenDialog(QWidget* parent = nullptr); + void setFilePath(const QString& filePath); + void setTargetDatabaseWidget(DatabaseWidget* dbWidget); + void setIntent(Intent intent); + Intent intent() const; + QSharedPointer database(); + void clearForms(); + +signals: + void dialogFinished(bool); + +public slots: + void complete(bool accepted); + +private: + QPointer m_view; + QSharedPointer m_db; + QPointer m_dbWidget; + Intent m_intent = Intent::None; +}; + +#endif // KEEPASSX_UNLOCKDATABASEDIALOG_H diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp index d011e8b63..155846640 100644 --- a/src/gui/DatabaseOpenWidget.cpp +++ b/src/gui/DatabaseOpenWidget.cpp @@ -22,20 +22,20 @@ #include "core/Config.h" #include "core/Database.h" #include "core/FilePath.h" -#include "gui/MainWindow.h" -#include "gui/FileDialog.h" -#include "gui/MessageBox.h" +#include "crypto/Random.h" #include "format/KeePass2Reader.h" +#include "gui/FileDialog.h" +#include "gui/MainWindow.h" +#include "gui/MessageBox.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" -#include "crypto/Random.h" #include "keys/YkChallengeResponseKey.h" +#include "touchid/TouchID.h" #include "config-keepassx.h" -#include #include - +#include DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) : DialogyWidget(parent) @@ -45,6 +45,7 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) m_ui->setupUi(this); m_ui->messageWidget->setHidden(true); + m_ui->checkPassword->setChecked(true); QFont font = m_ui->labelHeadline->font(); font.setBold(true); @@ -52,8 +53,7 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) m_ui->labelHeadline->setFont(font); m_ui->buttonTogglePassword->setIcon(filePath()->onOffIcon("actions", "password-show")); - connect(m_ui->buttonTogglePassword, SIGNAL(toggled(bool)), - m_ui->editPassword, SLOT(setShowPassword(bool))); + connect(m_ui->buttonTogglePassword, SIGNAL(toggled(bool)), m_ui->editPassword, SLOT(setShowPassword(bool))); connect(m_ui->buttonBrowseFile, SIGNAL(clicked()), SLOT(browseKeyFile())); connect(m_ui->editPassword, SIGNAL(textChanged(QString)), SLOT(activatePassword())); @@ -83,6 +83,14 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) m_ui->gridLayout->setContentsMargins(10, 0, 0, 0); m_ui->labelLayout->setContentsMargins(10, 0, 10, 0); #endif + +#ifndef WITH_XC_TOUCHID + m_ui->checkTouchID->setVisible(false); +#else + if (!TouchID::getInstance().isAvailable()) { + m_ui->checkTouchID->setVisible(false); + } +#endif } DatabaseOpenWidget::~DatabaseOpenWidget() @@ -97,10 +105,11 @@ void DatabaseOpenWidget::showEvent(QShowEvent* event) #ifdef WITH_XC_YUBIKEY // showEvent() may be called twice, so make sure we are only polling once if (!m_yubiKeyBeingPolled) { - connect(YubiKey::instance(), SIGNAL(detected(int, bool)), SLOT(yubikeyDetected(int, bool)), - Qt::QueuedConnection); + // clang-format off + connect(YubiKey::instance(), SIGNAL(detected(int,bool)), SLOT(yubikeyDetected(int,bool)), Qt::QueuedConnection); connect(YubiKey::instance(), SIGNAL(detectComplete()), SLOT(yubikeyDetectComplete()), Qt::QueuedConnection); connect(YubiKey::instance(), SIGNAL(notFound()), SLOT(noYubikeyFound()), Qt::QueuedConnection); + // clang-format on pollYubikey(); m_yubiKeyBeingPolled = true; @@ -114,9 +123,15 @@ void DatabaseOpenWidget::hideEvent(QHideEvent* event) #ifdef WITH_XC_YUBIKEY // Don't listen to any Yubikey events if we are hidden - disconnect(YubiKey::instance(), 0, this, 0); + disconnect(YubiKey::instance(), nullptr, this, nullptr); m_yubiKeyBeingPolled = false; #endif + + if (isVisible()) { + return; + } + + clearForms(); } void DatabaseOpenWidget::load(const QString& filename) @@ -133,29 +148,33 @@ void DatabaseOpenWidget::load(const QString& filename) } } + QHash useTouchID = config()->get("UseTouchID").toHash(); + m_ui->checkTouchID->setChecked(useTouchID.value(m_filename, false).toBool()); + m_ui->editPassword->setFocus(); } void DatabaseOpenWidget::clearForms() { - m_ui->editPassword->clear(); + m_ui->editPassword->setText(""); m_ui->comboKeyFile->clear(); - m_ui->checkPassword->setChecked(false); + m_ui->comboKeyFile->setEditText(""); + m_ui->checkPassword->setChecked(true); m_ui->checkKeyFile->setChecked(false); m_ui->checkChallengeResponse->setChecked(false); + m_ui->checkTouchID->setChecked(false); m_ui->buttonTogglePassword->setChecked(false); - m_db = nullptr; + m_db.reset(); } - -Database* DatabaseOpenWidget::database() +QSharedPointer DatabaseOpenWidget::database() { return m_db; } void DatabaseOpenWidget::enterKey(const QString& pw, const QString& keyFile) { - if (!pw.isNull()) { + if (!pw.isEmpty()) { m_ui->editPassword->setText(pw); } if (!keyFile.isEmpty()) { @@ -167,37 +186,58 @@ void DatabaseOpenWidget::enterKey(const QString& pw, const QString& keyFile) void DatabaseOpenWidget::openDatabase() { - KeePass2Reader reader; QSharedPointer masterKey = databaseKey(); - if (masterKey.isNull()) { + if (!masterKey) { return; } - m_ui->editPassword->setShowPassword(false); + if (!m_ui->editPassword->isPasswordVisible()) { + m_ui->editPassword->setShowPassword(false); + } QCoreApplication::processEvents(); - QFile file(m_filename); - if (!file.open(QIODevice::ReadOnly)) { - m_ui->messageWidget->showMessage( - tr("Unable to open the database.").append("\n").append(file.errorString()), MessageWidget::Error); + m_db.reset(new Database()); + QString error; + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + bool ok = m_db->open(m_filename, masterKey, &error, false); + QApplication::restoreOverrideCursor(); + if (!ok) { + m_ui->messageWidget->showMessage(tr("Unable to open the database:\n%1").arg(error), + MessageWidget::MessageType::Error); return; } - if (m_db) { - delete m_db; - } - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - m_db = reader.readDatabase(&file, *masterKey); - QApplication::restoreOverrideCursor(); if (m_db) { +#ifdef WITH_XC_TOUCHID + QHash useTouchID = config()->get("UseTouchID").toHash(); + + // check if TouchID can & should be used to unlock the database next time + if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable()) { + // encrypt and store key blob + if (TouchID::getInstance().storeKey(m_filename, PasswordKey(m_ui->editPassword->text()).rawKey())) { + useTouchID.insert(m_filename, true); + } + } else { + // when TouchID not available or unchecked, reset for the current database + TouchID::getInstance().reset(m_filename); + useTouchID.insert(m_filename, false); + } + + config()->set("UseTouchID", useTouchID); +#endif + if (m_ui->messageWidget->isVisible()) { m_ui->messageWidget->animatedHide(); } - emit editFinished(true); + emit dialogFinished(true); } else { - m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(reader.errorString()), - MessageWidget::Error); - m_ui->editPassword->clear(); + m_ui->messageWidget->showMessage(tr("Unable to open the database:\n%1").arg(error), MessageWidget::Error); + m_ui->editPassword->setText(""); + +#ifdef WITH_XC_TOUCHID + // unable to unlock database, reset TouchID for the current database + TouchID::getInstance().reset(m_filename); +#endif } } @@ -206,33 +246,51 @@ QSharedPointer DatabaseOpenWidget::databaseKey() auto masterKey = QSharedPointer::create(); if (m_ui->checkPassword->isChecked()) { - masterKey->addKey(PasswordKey(m_ui->editPassword->text())); + masterKey->addKey(QSharedPointer::create(m_ui->editPassword->text())); } +#ifdef WITH_XC_TOUCHID + // check if TouchID is available and enabled for unlocking the database + if (m_ui->checkTouchID->isChecked() && TouchID::getInstance().isAvailable() + && m_ui->editPassword->text().isEmpty()) { + // clear empty password from composite key + masterKey->clear(); + + // try to get, decrypt and use PasswordKey + QSharedPointer passwordKey = TouchID::getInstance().getKey(m_filename); + if (passwordKey != NULL) { + // check if the user cancelled the operation + if (passwordKey.isNull()) + return QSharedPointer(); + + masterKey->addKey(PasswordKey::fromRawKey(*passwordKey)); + } + } +#endif + QHash lastKeyFiles = config()->get("LastKeyFiles").toHash(); QHash lastChallengeResponse = config()->get("LastChallengeResponse").toHash(); if (m_ui->checkKeyFile->isChecked()) { - FileKey key; + auto key = QSharedPointer::create(); QString keyFilename = m_ui->comboKeyFile->currentText(); QString errorMsg; - if (!key.load(keyFilename, &errorMsg)) { - m_ui->messageWidget->showMessage(tr("Can't open key file").append(":\n").append(errorMsg), - MessageWidget::Error); - return QSharedPointer(); + if (!key->load(keyFilename, &errorMsg)) { + m_ui->messageWidget->showMessage(tr("Can't open key file:\n%1").arg(errorMsg), MessageWidget::Error); + return {}; } - if (key.type() != FileKey::Hashed && !config()->get("Messages/NoLegacyKeyFileWarning").toBool()) { + if (key->type() != FileKey::Hashed && !config()->get("Messages/NoLegacyKeyFileWarning").toBool()) { QMessageBox legacyWarning; legacyWarning.setWindowTitle(tr("Legacy key file format")); legacyWarning.setText(tr("You are using a legacy key file format which may become\n" - "unsupported in the future.\n\n" - "Please consider generating a new key file.")); + "unsupported in the future.\n\n" + "Please consider generating a new key file.")); legacyWarning.setIcon(QMessageBox::Icon::Warning); legacyWarning.addButton(QMessageBox::Ok); legacyWarning.setDefaultButton(QMessageBox::Ok); legacyWarning.setCheckBox(new QCheckBox(tr("Don't show this warning again"))); - connect(legacyWarning.checkBox(), &QCheckBox::stateChanged, [](int state){ + connect(legacyWarning.checkBox(), &QCheckBox::stateChanged, [](int state) { config()->set("Messages/NoLegacyKeyFileWarning", state == Qt::CheckState::Checked); }); @@ -276,7 +334,7 @@ QSharedPointer DatabaseOpenWidget::databaseKey() void DatabaseOpenWidget::reject() { - emit editFinished(false); + emit dialogFinished(false); } void DatabaseOpenWidget::activatePassword() diff --git a/src/gui/DatabaseOpenWidget.h b/src/gui/DatabaseOpenWidget.h index aade111c3..72f07cfa8 100644 --- a/src/gui/DatabaseOpenWidget.h +++ b/src/gui/DatabaseOpenWidget.h @@ -27,7 +27,8 @@ class Database; class QFile; -namespace Ui { +namespace Ui +{ class DatabaseOpenWidget; } @@ -41,13 +42,13 @@ public: void load(const QString& filename); void clearForms(); void enterKey(const QString& pw, const QString& keyFile); - Database* database(); + QSharedPointer database(); public slots: void pollYubikey(); signals: - void editFinished(bool accepted); + void dialogFinished(bool accepted); protected: void showEvent(QShowEvent* event) override; @@ -69,7 +70,7 @@ private slots: protected: const QScopedPointer m_ui; - Database* m_db; + QSharedPointer m_db; QString m_filename; private: diff --git a/src/gui/DatabaseOpenWidget.ui b/src/gui/DatabaseOpenWidget.ui index dba71d0fa..641d67da0 100644 --- a/src/gui/DatabaseOpenWidget.ui +++ b/src/gui/DatabaseOpenWidget.ui @@ -6,11 +6,11 @@ 0 0 - 596 - 302 + 841 + 467 - + 8 @@ -55,10 +55,13 @@ Qt::Vertical + + QSizePolicy::Fixed + 20 - 40 + 20 @@ -142,7 +145,7 @@
    - + 5 @@ -153,7 +156,7 @@ 0 - + true @@ -163,7 +166,7 @@ - + false @@ -179,7 +182,7 @@ - + @@ -203,25 +206,35 @@ - - - - 0 + + + + false - - 2 + + Challenge Response: - - - - false - - - Challenge Response: - - - - + + + + + + TouchID for quick unlock + + + + + + + Qt::Vertical + + + + 20 + 40 + + + diff --git a/src/gui/DatabaseRepairWidget.cpp b/src/gui/DatabaseRepairWidget.cpp deleted file mode 100644 index d3dddf14f..000000000 --- a/src/gui/DatabaseRepairWidget.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2016 Felix Geyer - * Copyright (C) 2017 KeePassXC Team - * - * This program 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 2 or (at your option) - * version 3 of the License. - * - * This program 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 this program. If not, see . - */ - -#include "DatabaseRepairWidget.h" - -#include -#include - -#include "ui_DatabaseOpenWidget.h" -#include "core/Database.h" -#include "core/Metadata.h" -#include "format/KeePass2Repair.h" -#include "gui/MessageBox.h" -#include "keys/FileKey.h" -#include "keys/PasswordKey.h" - -DatabaseRepairWidget::DatabaseRepairWidget(QWidget* parent) - : DatabaseOpenWidget(parent) -{ - m_ui->labelHeadline->setText(tr("Repair database")); - - connect(this, SIGNAL(editFinished(bool)), this, SLOT(processEditFinished(bool))); -} - -void DatabaseRepairWidget::openDatabase() -{ - CompositeKey masterKey; - - if (m_ui->checkPassword->isChecked()) { - masterKey.addKey(PasswordKey(m_ui->editPassword->text())); - } - - if (m_ui->checkKeyFile->isChecked()) { - FileKey key; - QString keyFilename = m_ui->comboKeyFile->currentText(); - QString errorMsg; - if (!key.load(keyFilename, &errorMsg)) { - MessageBox::warning(this, tr("Error"), tr("Can't open key file").append(":\n").append(errorMsg)); - emit editFinished(false); - return; - } - masterKey.addKey(key); - } - - KeePass2Repair repair; - - QFile file(m_filename); - if (!file.open(QIODevice::ReadOnly)) { - MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") - .append(file.errorString())); - emit editFinished(false); - return; - } - if (m_db) { - delete m_db; - } - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - auto repairOutcome = repair.repairDatabase(&file, masterKey); - KeePass2Repair::RepairResult repairResult = repairOutcome.first; - QApplication::restoreOverrideCursor(); - - switch (repairResult) { - case KeePass2Repair::NothingTodo: - MessageBox::information(this, tr("Error"), tr("Database opened fine. Nothing to do.")); - emit editFinished(false); - return; - case KeePass2Repair::UnableToOpen: - MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") - .append(repair.errorString())); - emit editFinished(false); - return; - case KeePass2Repair::RepairSuccess: - m_db = repairOutcome.second; - MessageBox::warning(this, tr("Success"), tr("The database has been successfully repaired\nYou can now save it.")); - emit editFinished(true); - return; - case KeePass2Repair::RepairFailed: - MessageBox::warning(this, tr("Error"), tr("Unable to repair the database.")); - emit editFinished(false); - return; - } -} - -void DatabaseRepairWidget::processEditFinished(bool result) -{ - if (result) { - emit success(); - } - else { - emit error(); - } -} diff --git a/src/gui/DatabaseSettingsWidget.cpp b/src/gui/DatabaseSettingsWidget.cpp deleted file mode 100644 index 79b84f88c..000000000 --- a/src/gui/DatabaseSettingsWidget.cpp +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (C) 2018 KeePassXC Team - * Copyright (C) 2012 Felix Geyer - * - * This program 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 2 or (at your option) - * version 3 of the License. - * - * This program 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 this program. If not, see . - */ - -#include "DatabaseSettingsWidget.h" -#include "ui_DatabaseSettingsWidget.h" -#include "ui_DatabaseSettingsWidgetGeneral.h" -#include "ui_DatabaseSettingsWidgetEncryption.h" - -#include -#include -#include - -#include "core/Global.h" -#include "core/FilePath.h" -#include "core/AsyncTask.h" -#include "core/Database.h" -#include "core/Group.h" -#include "core/Metadata.h" -#include "crypto/SymmetricCipher.h" -#include "crypto/kdf/Argon2Kdf.h" -#include "MessageBox.h" - -DatabaseSettingsWidget::DatabaseSettingsWidget(QWidget* parent) - : DialogyWidget(parent) - , m_ui(new Ui::DatabaseSettingsWidget()) - , m_uiGeneral(new Ui::DatabaseSettingsWidgetGeneral()) - , m_uiEncryption(new Ui::DatabaseSettingsWidgetEncryption()) - , m_uiGeneralPage(new QWidget()) - , m_uiEncryptionPage(new QWidget()) - , m_db(nullptr) -{ - m_ui->setupUi(this); - m_uiGeneral->setupUi(m_uiGeneralPage); - m_uiEncryption->setupUi(m_uiEncryptionPage); - - connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(save())); - connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); - connect(m_uiGeneral->historyMaxItemsCheckBox, SIGNAL(toggled(bool)), - m_uiGeneral->historyMaxItemsSpinBox, SLOT(setEnabled(bool))); - connect(m_uiGeneral->historyMaxSizeCheckBox, SIGNAL(toggled(bool)), - m_uiGeneral->historyMaxSizeSpinBox, SLOT(setEnabled(bool))); - connect(m_uiEncryption->transformBenchmarkButton, SIGNAL(clicked()), SLOT(transformRoundsBenchmark())); - connect(m_uiEncryption->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(kdfChanged(int))); - - connect(m_uiEncryption->memorySpinBox, SIGNAL(valueChanged(int)), this, SLOT(memoryChanged(int))); - connect(m_uiEncryption->parallelismSpinBox, SIGNAL(valueChanged(int)), this, SLOT(parallelismChanged(int))); - - m_ui->categoryList->addCategory(tr("General"), FilePath::instance()->icon("categories", "preferences-other")); - m_ui->categoryList->addCategory(tr("Encryption"), FilePath::instance()->icon("actions", "document-encrypt")); - m_ui->stackedWidget->addWidget(m_uiGeneralPage); - m_ui->stackedWidget->addWidget(m_uiEncryptionPage); - - connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); -} - -DatabaseSettingsWidget::~DatabaseSettingsWidget() -{ -} - -void DatabaseSettingsWidget::load(Database* db) -{ - m_db = db; - - Metadata* meta = m_db->metadata(); - - m_uiGeneral->dbNameEdit->setText(meta->name()); - m_uiGeneral->dbDescriptionEdit->setText(meta->description()); - m_uiGeneral->recycleBinEnabledCheckBox->setChecked(meta->recycleBinEnabled()); - m_uiGeneral->defaultUsernameEdit->setText(meta->defaultUserName()); - m_uiGeneral->compressionCheckbox->setChecked(m_db->compressionAlgo() != Database::CompressionNone); - - if (meta->historyMaxItems() > -1) { - m_uiGeneral->historyMaxItemsSpinBox->setValue(meta->historyMaxItems()); - m_uiGeneral->historyMaxItemsCheckBox->setChecked(true); - } else { - m_uiGeneral->historyMaxItemsSpinBox->setValue(Metadata::DefaultHistoryMaxItems); - m_uiGeneral->historyMaxItemsCheckBox->setChecked(false); - } - int historyMaxSizeMiB = qRound(meta->historyMaxSize() / qreal(1048576)); - if (historyMaxSizeMiB > 0) { - m_uiGeneral->historyMaxSizeSpinBox->setValue(historyMaxSizeMiB); - m_uiGeneral->historyMaxSizeCheckBox->setChecked(true); - } else { - m_uiGeneral->historyMaxSizeSpinBox->setValue(Metadata::DefaultHistoryMaxSize); - m_uiGeneral->historyMaxSizeCheckBox->setChecked(false); - } - - m_uiEncryption->algorithmComboBox->clear(); - for (auto& cipher: asConst(KeePass2::CIPHERS)) { - m_uiEncryption->algorithmComboBox->addItem(QCoreApplication::translate("KeePass2", cipher.second.toUtf8()), cipher.first.toByteArray()); - } - int cipherIndex = m_uiEncryption->algorithmComboBox->findData(m_db->cipher().toByteArray()); - if (cipherIndex > -1) { - m_uiEncryption->algorithmComboBox->setCurrentIndex(cipherIndex); - } - - // Setup kdf combo box - m_uiEncryption->kdfComboBox->blockSignals(true); - m_uiEncryption->kdfComboBox->clear(); - for (auto& kdf: asConst(KeePass2::KDFS)) { - m_uiEncryption->kdfComboBox->addItem(QCoreApplication::translate("KeePass2", kdf.second.toUtf8()), kdf.first.toByteArray()); - } - m_uiEncryption->kdfComboBox->blockSignals(false); - - auto kdfUuid = m_db->kdf()->uuid(); - int kdfIndex = m_uiEncryption->kdfComboBox->findData(kdfUuid.toByteArray()); - if (kdfIndex > -1) { - m_uiEncryption->kdfComboBox->setCurrentIndex(kdfIndex); - kdfChanged(kdfIndex); - } - - m_uiEncryption->memorySpinBox->setValue(64); - m_uiEncryption->parallelismSpinBox->setValue(QThread::idealThreadCount()); - - // Setup kdf parameters - auto kdf = m_db->kdf(); - m_uiEncryption->transformRoundsSpinBox->setValue(kdf->rounds()); - if (kdfUuid == KeePass2::KDF_ARGON2) { - auto argon2Kdf = kdf.staticCast(); - m_uiEncryption->memorySpinBox->setValue(static_cast(argon2Kdf->memory()) / (1 << 10)); - m_uiEncryption->parallelismSpinBox->setValue(argon2Kdf->parallelism()); - } - - m_uiGeneral->dbNameEdit->setFocus(); - m_ui->categoryList->setCurrentCategory(0); -} - -void DatabaseSettingsWidget::save() -{ - // first perform safety check for KDF rounds - auto kdf = KeePass2::uuidToKdf(Uuid(m_uiEncryption->kdfComboBox->currentData().toByteArray())); - if (kdf->uuid() == KeePass2::KDF_ARGON2 && m_uiEncryption->transformRoundsSpinBox->value() > 10000) { - QMessageBox warning; - warning.setIcon(QMessageBox::Warning); - warning.setWindowTitle(tr("Number of rounds too high", "Key transformation rounds")); - warning.setText(tr("You are using a very high number of key transform rounds with Argon2.\n\n" - "If you keep this number, your database may take hours or days (or even longer) to open!")); - auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); - auto cancel = warning.addButton(tr("Cancel"), QMessageBox::ButtonRole::RejectRole); - warning.setDefaultButton(cancel); - warning.exec(); - if (warning.clickedButton() != ok) { - return; - } - } else if ((kdf->uuid() == KeePass2::KDF_AES_KDBX3 || kdf->uuid() == KeePass2::KDF_AES_KDBX4) - && m_uiEncryption->transformRoundsSpinBox->value() < 100000) { - QMessageBox warning; - warning.setIcon(QMessageBox::Warning); - warning.setWindowTitle(tr("Number of rounds too low", "Key transformation rounds")); - warning.setText(tr("You are using a very low number of key transform rounds with AES-KDF.\n\n" - "If you keep this number, your database may be too easy to crack!")); - auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); - auto cancel = warning.addButton(tr("Cancel"), QMessageBox::ButtonRole::RejectRole); - warning.setDefaultButton(cancel); - warning.exec(); - if (warning.clickedButton() != ok) { - return; - } - } - - m_db->setCompressionAlgo(m_uiGeneral->compressionCheckbox->isChecked() ? Database::CompressionGZip : Database::CompressionNone); - - Metadata* meta = m_db->metadata(); - - meta->setName(m_uiGeneral->dbNameEdit->text()); - meta->setDescription(m_uiGeneral->dbDescriptionEdit->text()); - meta->setDefaultUserName(m_uiGeneral->defaultUsernameEdit->text()); - meta->setRecycleBinEnabled(m_uiGeneral->recycleBinEnabledCheckBox->isChecked()); - meta->setSettingsChanged(QDateTime::currentDateTimeUtc()); - - bool truncate = false; - - int historyMaxItems; - if (m_uiGeneral->historyMaxItemsCheckBox->isChecked()) { - historyMaxItems = m_uiGeneral->historyMaxItemsSpinBox->value(); - } else { - historyMaxItems = -1; - } - if (historyMaxItems != meta->historyMaxItems()) { - meta->setHistoryMaxItems(historyMaxItems); - truncate = true; - } - - int historyMaxSize; - if (m_uiGeneral->historyMaxSizeCheckBox->isChecked()) { - historyMaxSize = m_uiGeneral->historyMaxSizeSpinBox->value() * 1048576; - } else { - historyMaxSize = -1; - } - if (historyMaxSize != meta->historyMaxSize()) { - meta->setHistoryMaxSize(historyMaxSize); - truncate = true; - } - - if (truncate) { - truncateHistories(); - } - - m_db->setCipher(Uuid(m_uiEncryption->algorithmComboBox->currentData().toByteArray())); - - // Save kdf parameters - kdf->setRounds(m_uiEncryption->transformRoundsSpinBox->value()); - if (kdf->uuid() == KeePass2::KDF_ARGON2) { - auto argon2Kdf = kdf.staticCast(); - argon2Kdf->setMemory(static_cast(m_uiEncryption->memorySpinBox->value()) * (1 << 10)); - argon2Kdf->setParallelism(static_cast(m_uiEncryption->parallelismSpinBox->value())); - } - - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - // TODO: we should probably use AsyncTask::runAndWaitForFuture() here, - // but not without making Database thread-safe - bool ok = m_db->changeKdf(kdf); - QApplication::restoreOverrideCursor(); - - if (!ok) { - MessageBox::warning(this, tr("KDF unchanged"), - tr("Failed to transform key with new KDF parameters; KDF unchanged."), - QMessageBox::Ok); - } - - emit editFinished(true); -} - -void DatabaseSettingsWidget::reject() -{ - emit editFinished(false); -} - -void DatabaseSettingsWidget::transformRoundsBenchmark() -{ - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - m_uiEncryption->transformBenchmarkButton->setEnabled(false); - m_uiEncryption->transformRoundsSpinBox->setFocus(); - - // Create a new kdf with the current parameters - auto kdf = KeePass2::uuidToKdf(Uuid(m_uiEncryption->kdfComboBox->currentData().toByteArray())); - kdf->setRounds(m_uiEncryption->transformRoundsSpinBox->value()); - if (kdf->uuid() == KeePass2::KDF_ARGON2) { - auto argon2Kdf = kdf.staticCast(); - if (!argon2Kdf->setMemory(static_cast(m_uiEncryption->memorySpinBox->value()) * (1 << 10))) { - m_uiEncryption->memorySpinBox->setValue(static_cast(argon2Kdf->memory() / (1 << 10))); - } - if (!argon2Kdf->setParallelism(static_cast(m_uiEncryption->parallelismSpinBox->value()))) { - m_uiEncryption->parallelismSpinBox->setValue(argon2Kdf->parallelism()); - } - } - - // Determine the number of rounds required to meet 1 second delay - int rounds = AsyncTask::runAndWaitForFuture([&kdf]() { - return kdf->benchmark(1000); - }); - - m_uiEncryption->transformRoundsSpinBox->setValue(rounds); - m_uiEncryption->transformBenchmarkButton->setEnabled(true); - QApplication::restoreOverrideCursor(); -} - -void DatabaseSettingsWidget::truncateHistories() -{ - const QList allEntries = m_db->rootGroup()->entriesRecursive(false); - for (Entry* entry : allEntries) { - entry->truncateHistory(); - } -} - -void DatabaseSettingsWidget::kdfChanged(int index) -{ - Uuid id(m_uiEncryption->kdfComboBox->itemData(index).toByteArray()); - - bool memoryEnabled = id == KeePass2::KDF_ARGON2; - m_uiEncryption->memoryUsageLabel->setEnabled(memoryEnabled); - m_uiEncryption->memorySpinBox->setEnabled(memoryEnabled); - - bool parallelismEnabled = id == KeePass2::KDF_ARGON2; - m_uiEncryption->parallelismLabel->setEnabled(parallelismEnabled); - m_uiEncryption->parallelismSpinBox->setEnabled(parallelismEnabled); - - transformRoundsBenchmark(); -} - -/** - * Update memory spin box suffix on value change. - */ -void DatabaseSettingsWidget::memoryChanged(int value) -{ - m_uiEncryption->memorySpinBox->setSuffix( - tr(" MiB", "Abbreviation for Mebibytes (KDF settings)", value)); -} - -/** - * Update parallelism spin box suffix on value change. - */ -void DatabaseSettingsWidget::parallelismChanged(int value) -{ - m_uiEncryption->parallelismSpinBox->setSuffix( - tr(" thread(s)", "Threads for parallel execution (KDF settings)", value)); -} diff --git a/src/gui/DatabaseSettingsWidget.h b/src/gui/DatabaseSettingsWidget.h deleted file mode 100644 index b0cae5dbc..000000000 --- a/src/gui/DatabaseSettingsWidget.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2012 Felix Geyer - * - * This program 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 2 or (at your option) - * version 3 of the License. - * - * This program 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 this program. If not, see . - */ - -#ifndef KEEPASSX_DATABASESETTINGSWIDGET_H -#define KEEPASSX_DATABASESETTINGSWIDGET_H - -#include -#include -#include -#include - -#include "gui/DialogyWidget.h" -#include "crypto/kdf/Kdf.h" - -class Database; - -namespace Ui -{ -class DatabaseSettingsWidget; -class DatabaseSettingsWidgetGeneral; -class DatabaseSettingsWidgetEncryption; -} - -class DatabaseSettingsWidget: public DialogyWidget -{ -Q_OBJECT - -public: - explicit DatabaseSettingsWidget(QWidget* parent = nullptr); - ~DatabaseSettingsWidget(); - Q_DISABLE_COPY(DatabaseSettingsWidget) - - void load(Database* db); - -signals: - void editFinished(bool accepted); - -private slots: - void save(); - void reject(); - void transformRoundsBenchmark(); - void kdfChanged(int index); - void memoryChanged(int value); - void parallelismChanged(int value); - -private: - void truncateHistories(); - - const QScopedPointer m_ui; - const QScopedPointer m_uiGeneral; - const QScopedPointer m_uiEncryption; - QWidget* m_uiGeneralPage; - QWidget* m_uiEncryptionPage; - Database* m_db; -}; - -#endif // KEEPASSX_DATABASESETTINGSWIDGET_H diff --git a/src/gui/DatabaseSettingsWidgetEncryption.ui b/src/gui/DatabaseSettingsWidgetEncryption.ui deleted file mode 100644 index 502bc012c..000000000 --- a/src/gui/DatabaseSettingsWidgetEncryption.ui +++ /dev/null @@ -1,183 +0,0 @@ - - - DatabaseSettingsWidgetEncryption - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Encryption Algorithm: - - - - - - - - 0 - 0 - - - - - AES: 256 Bit (default) - - - - - Twofish: 256 Bit - - - - - - - - Key Derivation Function: - - - - - - - - 0 - 0 - - - - - - - - Transform rounds: - - - - - - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 1 - - - 1000000000 - - - - - - - Qt::WheelFocus - - - Benchmark 1-second delay - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Memory Usage: - - - - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - 1 - - - 1048576 - - - - - - - Parallelism: - - - - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - 1 - - - 128 - - - - - - - - diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index a171a938d..c908a82ec 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -1,6 +1,5 @@ /* - * Copyright (C) 2011 Felix Geyer - * Copyright (C) 2017 KeePassXC Team + * Copyright (C) 2018 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,18 +18,20 @@ #include "DatabaseTabWidget.h" #include -#include #include +#include #include "autotype/AutoType.h" +#include "core/AsyncTask.h" #include "core/Config.h" -#include "core/Global.h" #include "core/Database.h" +#include "core/Global.h" #include "core/Group.h" #include "core/Metadata.h" -#include "core/AsyncTask.h" +#include "core/Tools.h" #include "format/CsvExporter.h" #include "gui/Clipboard.h" +#include "gui/DatabaseOpenDialog.h" #include "gui/DatabaseWidget.h" #include "gui/DatabaseWidgetStateSync.h" #include "gui/DragTabBar.h" @@ -38,42 +39,34 @@ #include "gui/MessageBox.h" #include "gui/entry/EntryView.h" #include "gui/group/GroupView.h" -#include "gui/UnlockDatabaseDialog.h" - -DatabaseManagerStruct::DatabaseManagerStruct() - : dbWidget(nullptr) - , modified(false) - , readOnly(false) - , saveAttempts(0) -{ -} - - -const int DatabaseTabWidget::LastDatabasesCount = 5; +#ifdef Q_OS_MACOS +#include "gui/macutils/MacUtils.h" +#endif +#include "gui/wizard/NewDatabaseWizard.h" DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) : QTabWidget(parent) , m_dbWidgetStateSync(new DatabaseWidgetStateSync(this)) - , m_dbPendingLock(nullptr) + , m_dbWidgetPendingLock(nullptr) + , m_databaseOpenDialog(new DatabaseOpenDialog()) { - DragTabBar* tabBar = new DragTabBar(this); + auto* tabBar = new DragTabBar(this); setTabBar(tabBar); setDocumentMode(true); - connect(this, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabase(int))); + // clang-format off + connect(this, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabaseTab(int))); connect(this, SIGNAL(currentChanged(int)), SLOT(emitActivateDatabaseChanged())); - connect(this, SIGNAL(activateDatabaseChanged(DatabaseWidget*)), m_dbWidgetStateSync, SLOT(setActive(DatabaseWidget*))); + connect(this, SIGNAL(activateDatabaseChanged(DatabaseWidget*)), + m_dbWidgetStateSync, SLOT(setActive(DatabaseWidget*))); connect(autoType(), SIGNAL(globalShortcutTriggered()), SLOT(performGlobalAutoType())); connect(autoType(), SIGNAL(autotypePerformed()), SLOT(relockPendingDatabase())); + connect(autoType(), SIGNAL(autotypeRejected()), SLOT(relockPendingDatabase())); + // clang-format on } DatabaseTabWidget::~DatabaseTabWidget() { - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - deleteDatabase(i.key()); - } } void DatabaseTabWidget::toggleTabbar() @@ -85,344 +78,253 @@ void DatabaseTabWidget::toggleTabbar() } } +/** + * Helper method for invoking the new database wizard. + * The user of this method MUST take ownership of the returned pointer. + * + * @return pointer to the configured new database, nullptr on failure + */ +QSharedPointer DatabaseTabWidget::execNewDatabaseWizard() +{ + // use QScopedPointer to ensure deletion after scope ends, but still parent + // it to this to make it modal and allow easier access in unit tests + QScopedPointer wizard(new NewDatabaseWizard(this)); + if (!wizard->exec()) { + return {}; + } + + auto db = wizard->takeDatabase(); + if (!db) { + return {}; + } + Q_ASSERT(db->key()); + Q_ASSERT(db->kdf()); + if (!db->key() || !db->kdf()) { + MessageBox::critical(this, + tr("Database creation error"), + tr("The created database has no key or KDF, refusing to save it.\n" + "This is definitely a bug, please report it to the developers."), + MessageBox::Ok, + MessageBox::Ok); + return {}; + } + + return db; +} + void DatabaseTabWidget::newDatabase() { - DatabaseManagerStruct dbStruct; - Database* db = new Database(); - db->rootGroup()->setName(tr("Root", "Root group")); - dbStruct.dbWidget = new DatabaseWidget(db, this); - - CompositeKey emptyKey; - db->setKey(emptyKey); - - insertDatabase(db, dbStruct); - - if (!saveDatabaseAs(db)) { - closeDatabase(db); + auto db = execNewDatabaseWizard(); + if (!db) { return; } - dbStruct.dbWidget->switchToMasterKeyChange(true); + addDatabaseTab(new DatabaseWidget(db, this)); + db->markAsModified(); } void DatabaseTabWidget::openDatabase() { QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); - QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), QDir::homePath(), - filter); + QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), "", filter); if (!fileName.isEmpty()) { - openDatabase(fileName); + addDatabaseTab(fileName); } } -void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw, - const QString& keyFile) +/** + * Add a new database tab or switch to an existing one if the + * database has been opened already. + * + * @param filePath database file path + * @param password optional, password to unlock database + * @param inBackground optional, don't focus tab after opening + */ +void DatabaseTabWidget::addDatabaseTab(const QString& filePath, bool inBackground, const QString& password) { - QFileInfo fileInfo(fileName); + QFileInfo fileInfo(filePath); QString canonicalFilePath = fileInfo.canonicalFilePath(); if (canonicalFilePath.isEmpty()) { - emit messageGlobal(tr("File not found!"), MessageWidget::Error); + emit messageGlobal(tr("The database file does not exist or is not accessible."), MessageWidget::Error); return; } - - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - if (i.value().fileInfo.canonicalFilePath() == canonicalFilePath) { - if (!i.value().dbWidget->dbHasKey() && !(pw.isNull() && keyFile.isEmpty())) { - // If the database is locked and a pw or keyfile is provided, unlock it - i.value().dbWidget->switchToOpenDatabase(i.value().fileInfo.absoluteFilePath(), pw, keyFile); - } else { - setCurrentIndex(databaseIndex(i.key())); + for (int i = 0, c = count(); i < c; ++i) { + auto* dbWidget = databaseWidgetFromIndex(i); + Q_ASSERT(dbWidget); + if (dbWidget && dbWidget->database()->filePath() == canonicalFilePath) { + if (!password.isEmpty()) { + dbWidget->performUnlockDatabase(password); + } + if (!inBackground) { + // switch to existing tab if file is already open + setCurrentIndex(indexOf(dbWidget)); } return; } } - DatabaseManagerStruct dbStruct; - - // test if we can read/write or read the file - QFile file(fileName); - if (!file.open(QIODevice::ReadWrite)) { - if (!file.open(QIODevice::ReadOnly)) { - // can't open - emit messageGlobal( - tr("Unable to open the database.").append("\n").append(file.errorString()), MessageWidget::Error); - return; - } - else { - // can only open read-only - dbStruct.readOnly = true; - } + auto* dbWidget = new DatabaseWidget(QSharedPointer::create(filePath), this); + addDatabaseTab(dbWidget, inBackground); + if (!password.isEmpty()) { + dbWidget->performUnlockDatabase(password); } - file.close(); + updateLastDatabases(filePath); +} - Database* db = new Database(); - dbStruct.dbWidget = new DatabaseWidget(db, this); - dbStruct.fileInfo = fileInfo; +/** + * Add a new database tab containing the given DatabaseWidget + * @param filePath + * @param inBackground optional, don't focus tab after opening + */ +void DatabaseTabWidget::addDatabaseTab(DatabaseWidget* dbWidget, bool inBackground) +{ + Q_ASSERT(dbWidget->database()); - insertDatabase(db, dbStruct); + int index = addTab(dbWidget, ""); + updateTabName(index); + toggleTabbar(); - if (dbStruct.readOnly) { - emit messageTab(tr("File opened in read only mode."), MessageWidget::Warning); + if (!inBackground) { + setCurrentIndex(index); } - updateLastDatabases(dbStruct.fileInfo.absoluteFilePath()); - - if (!pw.isNull() || !keyFile.isEmpty()) { - dbStruct.dbWidget->switchToOpenDatabase(dbStruct.fileInfo.absoluteFilePath(), pw, keyFile); - } else { - dbStruct.dbWidget->switchToOpenDatabase(dbStruct.fileInfo.absoluteFilePath()); - } - - emit messageDismissTab(); + connect(dbWidget, SIGNAL(databaseFilePathChanged(QString, QString)), SLOT(updateTabName())); + connect( + dbWidget, SIGNAL(requestOpenDatabase(QString, bool, QString)), SLOT(addDatabaseTab(QString, bool, QString))); + connect(dbWidget, SIGNAL(closeRequest()), SLOT(closeDatabaseTabFromSender())); + connect(dbWidget, SIGNAL(databaseModified()), SLOT(updateTabName())); + connect(dbWidget, SIGNAL(databaseSaved()), SLOT(updateTabName())); + connect(dbWidget, SIGNAL(databaseUnlocked()), SLOT(updateTabName())); + connect(dbWidget, SIGNAL(databaseUnlocked()), SLOT(emitDatabaseLockChanged())); + connect(dbWidget, SIGNAL(databaseLocked()), SLOT(updateTabName())); + connect(dbWidget, SIGNAL(databaseLocked()), SLOT(emitDatabaseLockChanged())); } void DatabaseTabWidget::importCsv() { - QString fileName = fileDialog()->getOpenFileName(this, tr("Open CSV file"), QString(), - tr("CSV file") + " (*.csv);;" + tr("All files (*)")); + QString filter = QString("%1 (*.csv);;%2 (*)").arg(tr("CSV file"), tr("All files")); + QString fileName = fileDialog()->getOpenFileName(this, tr("Select CSV file"), "", filter); if (fileName.isEmpty()) { return; } - Database* db = new Database(); - DatabaseManagerStruct dbStruct; - dbStruct.dbWidget = new DatabaseWidget(db, this); + auto db = execNewDatabaseWizard(); + if (!db) { + return; + } - insertDatabase(db, dbStruct); - dbStruct.dbWidget->switchToImportCsv(fileName); + auto* dbWidget = new DatabaseWidget(db, this); + addDatabaseTab(dbWidget); + dbWidget->switchToCsvImport(fileName); } void DatabaseTabWidget::mergeDatabase() { auto dbWidget = currentDatabaseWidget(); - if (dbWidget && dbWidget->currentMode() != DatabaseWidget::LockedMode) { + if (dbWidget && !dbWidget->isLocked()) { QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); - const QString fileName = fileDialog()->getOpenFileName(this, tr("Merge database"), QString(), - filter); + const QString fileName = fileDialog()->getOpenFileName(this, tr("Merge database"), QString(), filter); if (!fileName.isEmpty()) { mergeDatabase(fileName); } } } -void DatabaseTabWidget::mergeDatabase(const QString& fileName) +void DatabaseTabWidget::mergeDatabase(const QString& filePath) { - currentDatabaseWidget()->switchToOpenMergeDatabase(fileName); + unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::Merge, filePath); } void DatabaseTabWidget::importKeePass1Database() { - QString fileName = fileDialog()->getOpenFileName(this, tr("Open KeePass 1 database"), QString(), - tr("KeePass 1 database") + " (*.kdb);;" + tr("All files (*)")); + QString filter = QString("%1 (*.kdb);;%2 (*)").arg(tr("KeePass 1 database"), tr("All files")); + QString fileName = fileDialog()->getOpenFileName(this, tr("Open KeePass 1 database"), QString(), filter); if (fileName.isEmpty()) { return; } - Database* db = new Database(); - DatabaseManagerStruct dbStruct; - dbStruct.dbWidget = new DatabaseWidget(db, this); - dbStruct.dbWidget->databaseModified(); - dbStruct.modified = true; - - insertDatabase(db, dbStruct); - - dbStruct.dbWidget->switchToImportKeepass1(fileName); + auto db = QSharedPointer::create(); + auto* dbWidget = new DatabaseWidget(db, this); + addDatabaseTab(dbWidget); + dbWidget->switchToImportKeepass1(fileName); } -bool DatabaseTabWidget::closeDatabase(Database* db) +/** + * Attempt to close the current database and remove its tab afterwards. + * + * @param index index of the database tab to close + * @return true if database was closed successully + */ +bool DatabaseTabWidget::closeCurrentDatabaseTab() { - Q_ASSERT(db); - - const DatabaseManagerStruct& dbStruct = m_dbList.value(db); - int index = databaseIndex(db); - Q_ASSERT(index != -1); - - dbStruct.dbWidget->closeUnlockDialog(); - QString dbName = tabText(index); - if (dbName.right(1) == "*") { - dbName.chop(1); - } - if (dbStruct.dbWidget->isInEditMode() && db->hasKey() && dbStruct.dbWidget->isEditWidgetModified()) { - QMessageBox::StandardButton result = - MessageBox::question( - this, tr("Close?"), - tr("\"%1\" is in edit mode.\nDiscard changes and close anyway?").arg(dbName.toHtmlEscaped()), - QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel); - if (result == QMessageBox::Cancel) { - return false; - } - } - if (dbStruct.modified) { - if (config()->get("AutoSaveOnExit").toBool()) { - if (!saveDatabase(db)) { - return false; - } - } else if (dbStruct.dbWidget->currentMode() != DatabaseWidget::LockedMode) { - QMessageBox::StandardButton result = - MessageBox::question( - this, tr("Save changes?"), - tr("\"%1\" was modified.\nSave changes?").arg(dbName.toHtmlEscaped()), - QMessageBox::Yes | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Yes); - if (result == QMessageBox::Yes) { - if (!saveDatabase(db)) { - return false; - } - } else if (result == QMessageBox::Cancel) { - return false; - } - } - } - - deleteDatabase(db); - - return true; + return closeDatabaseTab(currentIndex()); } -void DatabaseTabWidget::deleteDatabase(Database* db) +/** + * Attempt to close the database tab that sent the close request. + * + * @param index index of the database tab to close + * @return true if database was closed successully + */ +bool DatabaseTabWidget::closeDatabaseTabFromSender() { - const DatabaseManagerStruct dbStruct = m_dbList.value(db); - bool emitDatabaseWithFileClosed = dbStruct.fileInfo.exists() && !dbStruct.readOnly; - QString filePath = dbStruct.fileInfo.absoluteFilePath(); - - int index = databaseIndex(db); - - removeTab(index); - toggleTabbar(); - m_dbList.remove(db); - delete dbStruct.dbWidget; - delete db; - - if (emitDatabaseWithFileClosed) { - emit databaseWithFileClosed(filePath); - } + return closeDatabaseTab(qobject_cast(sender())); } -bool DatabaseTabWidget::closeAllDatabases() +/** + * Attempt to close a database and remove its tab afterwards. + * + * @param index index of the database tab to close + * @return true if database was closed successully + */ +bool DatabaseTabWidget::closeDatabaseTab(int index) { - while (!m_dbList.isEmpty()) { - if (!closeDatabase()) { - return false; - } - } - return true; + return closeDatabaseTab(qobject_cast(widget(index))); } -bool DatabaseTabWidget::saveDatabase(Database* db, QString filePath) +/** + * Attempt to close a database and remove its tab afterwards. + * + * @param dbWidget \link DatabaseWidget to close + * @return true if database was closed successully + */ +bool DatabaseTabWidget::closeDatabaseTab(DatabaseWidget* dbWidget) { - DatabaseManagerStruct& dbStruct = m_dbList[db]; - - // Never allow saving a locked database; it causes corruption - Q_ASSERT(dbStruct.dbWidget->currentMode() != DatabaseWidget::LockedMode); - // Release build interlock - if (dbStruct.dbWidget->currentMode() == DatabaseWidget::LockedMode) { - // We return true since a save is not required - return true; - } - - if (!dbStruct.readOnly) { - if (filePath.isEmpty()) { - filePath = dbStruct.fileInfo.canonicalFilePath(); - } - - dbStruct.dbWidget->blockAutoReload(true); - // TODO: Make this async, but lock out the database widget to prevent re-entrance - bool useAtomicSaves = config()->get("UseAtomicSaves", true).toBool(); - QString errorMessage = db->saveToFile(filePath, useAtomicSaves, config()->get("BackupBeforeSave").toBool()); - dbStruct.dbWidget->blockAutoReload(false); - - if (errorMessage.isEmpty()) { - // successfully saved database file - dbStruct.modified = false; - dbStruct.saveAttempts = 0; - dbStruct.fileInfo = QFileInfo(filePath); - dbStruct.dbWidget->databaseSaved(); - updateTabName(db); - emit messageDismissTab(); - return true; - } else { - dbStruct.modified = true; - updateTabName(db); - - if (++dbStruct.saveAttempts > 2 && useAtomicSaves) { - // Saving failed 3 times, issue a warning and attempt to resolve - auto choice = MessageBox::question(this, tr("Disable safe saves?"), - tr("KeePassXC has failed to save the database multiple times. " - "This is likely caused by file sync services holding a lock on " - "the save file.\nDisable safe saves and try again?"), - QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); - if (choice == QMessageBox::Yes) { - config()->set("UseAtomicSaves", false); - return saveDatabase(db, filePath); - } - // Reset save attempts without changing anything - dbStruct.saveAttempts = 0; - } - - emit messageTab(tr("Writing the database failed.").append("\n").append(errorMessage), - MessageWidget::Error); - return false; - } - } else { - return saveDatabaseAs(db); - } -} - -bool DatabaseTabWidget::saveDatabaseAs(Database* db) -{ - while (true) { - DatabaseManagerStruct& dbStruct = m_dbList[db]; - QString oldFilePath; - if (dbStruct.fileInfo.exists()) { - oldFilePath = dbStruct.fileInfo.absoluteFilePath(); - } else { - oldFilePath = QDir::toNativeSeparators(QDir::homePath() + "/" + tr("Passwords").append(".kdbx")); - } - QString newFilePath = fileDialog()->getSaveFileName(this, tr("Save database as"), oldFilePath, - tr("KeePass 2 Database").append(" (*.kdbx)"), - nullptr, 0, "kdbx"); - if (!newFilePath.isEmpty()) { - // Ensure we don't recurse back into this function - dbStruct.readOnly = false; - - if (!saveDatabase(db, newFilePath)) { - // Failed to save, try again - continue; - } - - dbStruct.dbWidget->updateFilePath(dbStruct.fileInfo.absoluteFilePath()); - updateLastDatabases(dbStruct.fileInfo.absoluteFilePath()); - return true; - } - - // Canceled file selection + int tabIndex = indexOf(dbWidget); + if (!dbWidget || tabIndex < 0) { return false; } -} -bool DatabaseTabWidget::closeDatabase(int index) -{ - if (index == -1) { - index = currentIndex(); + QString filePath = dbWidget->database()->filePath(); + if (!dbWidget->close()) { + return false; } - setCurrentIndex(index); - - return closeDatabase(indexDatabase(index)); + removeTab(tabIndex); + dbWidget->deleteLater(); + toggleTabbar(); + emit databaseClosed(filePath); + return true; } -void DatabaseTabWidget::closeDatabaseFromSender() +/** + * Attempt to close all opened databases. + * The attempt will be aborted with the first database that cannot be closed. + * + * @return true if all databases could be closed. + */ +bool DatabaseTabWidget::closeAllDatabaseTabs() { - Q_ASSERT(sender()); - DatabaseWidget* dbWidget = static_cast(sender()); - Database* db = databaseFromDatabaseWidget(dbWidget); - int index = databaseIndex(db); - setCurrentIndex(index); - closeDatabase(db); + while (count() > 0) { + if (!closeDatabaseTab(0)) { + return false; + } + } + + return true; } bool DatabaseTabWidget::saveDatabase(int index) @@ -431,7 +333,7 @@ bool DatabaseTabWidget::saveDatabase(int index) index = currentIndex(); } - return saveDatabase(indexDatabase(index)); + return databaseWidgetFromIndex(index)->save(); } bool DatabaseTabWidget::saveDatabaseAs(int index) @@ -440,29 +342,39 @@ bool DatabaseTabWidget::saveDatabaseAs(int index) index = currentIndex(); } - return saveDatabaseAs(indexDatabase(index)); + auto* dbWidget = databaseWidgetFromIndex(index); + bool ok = dbWidget->saveAs(); + if (ok) { + updateLastDatabases(dbWidget->database()->filePath()); + } + return ok; +} + +void DatabaseTabWidget::closeDatabaseFromSender() +{ + auto* dbWidget = qobject_cast(sender()); + Q_ASSERT(dbWidget); + closeDatabaseTab(dbWidget); } void DatabaseTabWidget::exportToCsv() { - Database* db = indexDatabase(currentIndex()); + auto db = databaseWidgetFromIndex(currentIndex())->database(); if (!db) { Q_ASSERT(false); return; } - QString fileName = fileDialog()->getSaveFileName(this, tr("Export database to CSV file"), - QString(), tr("CSV file").append(" (*.csv)"), - nullptr, 0, "csv"); + QString fileName = fileDialog()->getSaveFileName( + this, tr("Export database to CSV file"), QString(), tr("CSV file").append(" (*.csv)"), nullptr, nullptr, "csv"); if (fileName.isEmpty()) { return; } CsvExporter csvExporter; if (!csvExporter.exportDatabase(fileName, db)) { - emit messageGlobal( - tr("Writing the CSV file failed.").append("\n") - .append(csvExporter.errorString()), MessageWidget::Error); + emit messageGlobal(tr("Writing the CSV file failed.").append("\n").append(csvExporter.errorString()), + MessageWidget::Error); } } @@ -476,384 +388,256 @@ void DatabaseTabWidget::changeDatabaseSettings() currentDatabaseWidget()->switchToDatabaseSettings(); } -bool DatabaseTabWidget::readOnly(int index) +bool DatabaseTabWidget::isReadOnly(int index) const { + if (count() == 0) { + return false; + } + if (index == -1) { index = currentIndex(); } - return indexDatabaseManagerStruct(index).readOnly; + auto db = databaseWidgetFromIndex(index)->database(); + return db && db->isReadOnly(); } -bool DatabaseTabWidget::canSave(int index) +bool DatabaseTabWidget::isModified(int index) const { + if (count() == 0) { + return false; + } + if (index == -1) { index = currentIndex(); } - const DatabaseManagerStruct& dbStruct = indexDatabaseManagerStruct(index); - return dbStruct.modified && !dbStruct.readOnly; + auto db = databaseWidgetFromIndex(index)->database(); + return db && db->isModified(); } -bool DatabaseTabWidget::isModified(int index) +bool DatabaseTabWidget::canSave(int index) const { - if (index == -1) { - index = currentIndex(); - } - - return indexDatabaseManagerStruct(index).modified; -} - -QString DatabaseTabWidget::databasePath(int index) -{ - if (index == -1) { - index = currentIndex(); - } - - return indexDatabaseManagerStruct(index).fileInfo.absoluteFilePath(); -} - - -void DatabaseTabWidget::updateTabName(Database* db) -{ - int index = databaseIndex(db); - Q_ASSERT(index != -1); - - const DatabaseManagerStruct& dbStruct = m_dbList.value(db); - - QString tabName; - - if (dbStruct.fileInfo.exists()) { - if (db->metadata()->name().isEmpty()) { - tabName = dbStruct.fileInfo.fileName(); - } else { - tabName = db->metadata()->name(); - } - - setTabToolTip(index, dbStruct.fileInfo.absoluteFilePath()); - } else { - if (db->metadata()->name().isEmpty()) { - tabName = tr("New database"); - } else { - tabName = QString("%1 [%2]").arg(db->metadata()->name(), tr("New database")); - } - } - - if (dbStruct.dbWidget->currentMode() == DatabaseWidget::LockedMode) { - tabName.append(QString(" [%1]").arg(tr("locked"))); - } - - if (dbStruct.modified) { - tabName.append("*"); - } - - setTabText(index, tabName); - emit tabNameChanged(); -} - -void DatabaseTabWidget::updateTabNameFromDbSender() -{ - Q_ASSERT(qobject_cast(sender())); - - updateTabName(static_cast(sender())); -} - -void DatabaseTabWidget::updateTabNameFromDbWidgetSender() -{ - Q_ASSERT(qobject_cast(sender())); - Q_ASSERT(databaseFromDatabaseWidget(qobject_cast(sender()))); - - DatabaseWidget* dbWidget = static_cast(sender()); - updateTabName(databaseFromDatabaseWidget(dbWidget)); - - Database* db = dbWidget->database(); - Group *autoload = db->rootGroup()->findChildByName("AutoOpen"); - if (autoload) { - const DatabaseManagerStruct& dbStruct = m_dbList.value(db); - QDir dbFolder(dbStruct.fileInfo.canonicalPath()); - for (auto entry : autoload->entries()) { - if (entry->url().isEmpty() || entry->password().isEmpty()) { - continue; - } - QFileInfo filepath; - if (entry->url().startsWith("file://")) { - QUrl url(entry->url()); - filepath.setFile(url.toLocalFile()); - } - else { - filepath.setFile(entry->url()); - if (filepath.isRelative()) { - filepath.setFile(dbFolder, entry->url()); - } - } - - if (!filepath.isFile()) { - continue; - } - - openDatabase(filepath.canonicalFilePath(), entry->password(), ""); - } - } -} - -int DatabaseTabWidget::databaseIndex(Database* db) -{ - QWidget* dbWidget = m_dbList.value(db).dbWidget; - return indexOf(dbWidget); -} - -Database* DatabaseTabWidget::indexDatabase(int index) -{ - QWidget* dbWidget = widget(index); - - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - if (i.value().dbWidget == dbWidget) { - return i.key(); - } - } - - return nullptr; -} - -DatabaseManagerStruct DatabaseTabWidget::indexDatabaseManagerStruct(int index) -{ - QWidget* dbWidget = widget(index); - - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - if (i.value().dbWidget == dbWidget) { - return i.value(); - } - } - - return DatabaseManagerStruct(); -} - -Database* DatabaseTabWidget::databaseFromDatabaseWidget(DatabaseWidget* dbWidget) -{ - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - if (i.value().dbWidget == dbWidget) { - return i.key(); - } - } - - return nullptr; -} - -void DatabaseTabWidget::insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct) -{ - m_dbList.insert(db, dbStruct); - - addTab(dbStruct.dbWidget, ""); - toggleTabbar(); - updateTabName(db); - int index = databaseIndex(db); - setCurrentIndex(index); - connectDatabase(db); - connect(dbStruct.dbWidget, SIGNAL(closeRequest()), SLOT(closeDatabaseFromSender())); - connect(dbStruct.dbWidget, SIGNAL(databaseChanged(Database*, bool)), SLOT(changeDatabase(Database*, bool))); - connect(dbStruct.dbWidget, SIGNAL(unlockedDatabase()), SLOT(updateTabNameFromDbWidgetSender())); - connect(dbStruct.dbWidget, SIGNAL(unlockedDatabase()), SLOT(emitDatabaseUnlockedFromDbWidgetSender())); -} - -DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget() -{ - Database* db = indexDatabase(currentIndex()); - if (db) { - return m_dbList[db].dbWidget; - } - else { - return nullptr; - } + return !isReadOnly(index) && isModified(index); } bool DatabaseTabWidget::hasLockableDatabases() const { - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - DatabaseWidget::Mode mode = i.value().dbWidget->currentMode(); - - if ((mode == DatabaseWidget::ViewMode || mode == DatabaseWidget::EditMode) - && i.value().dbWidget->dbHasKey()) { + for (int i = 0, c = count(); i < c; ++i) { + if (!databaseWidgetFromIndex(i)->isLocked()) { return true; } } - return false; } +/** + * Get the tab's (original) display name without platform-specific + * mangling that may occur when reading back the actual widget's \link tabText() + * + * @param index tab index + * @return tab name + */ +QString DatabaseTabWidget::tabName(int index) +{ + if (index == -1 || index > count()) { + return ""; + } + + auto* dbWidget = databaseWidgetFromIndex(index); + + auto db = dbWidget->database(); + Q_ASSERT(db); + if (!db) { + return ""; + } + + QString tabName; + + if (!db->filePath().isEmpty()) { + QFileInfo fileInfo(db->filePath()); + + if (db->metadata()->name().isEmpty()) { + tabName = fileInfo.fileName(); + } else { + tabName = db->metadata()->name(); + } + + setTabToolTip(index, fileInfo.absoluteFilePath()); + } else { + if (db->metadata()->name().isEmpty()) { + tabName = tr("New Database"); + } else { + tabName = tr("%1 [New Database]", "Database tab name modifier").arg(db->metadata()->name()); + } + } + + if (dbWidget->isLocked()) { + tabName = tr("%1 [Locked]", "Database tab name modifier").arg(tabName); + } + + if (db->isReadOnly()) { + tabName = tr("%1 [Read-only]", "Database tab name modifier").arg(tabName); + } + + if (db->isModified()) { + tabName.append("*"); + } + + return tabName; +} + +/** + * Update of the given tab index or of the sending + * DatabaseWidget if `index` == -1. + */ +void DatabaseTabWidget::updateTabName(int index) +{ + auto* dbWidget = databaseWidgetFromIndex(index); + if (!dbWidget) { + dbWidget = qobject_cast(sender()); + } + Q_ASSERT(dbWidget); + if (!dbWidget) { + return; + } + index = indexOf(dbWidget); + setTabText(index, tabName(index)); + emit tabNameChanged(); +} + +DatabaseWidget* DatabaseTabWidget::databaseWidgetFromIndex(int index) const +{ + return qobject_cast(widget(index)); +} + +DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget() +{ + return qobject_cast(currentWidget()); +} + void DatabaseTabWidget::lockDatabases() { - clipboard()->clearCopiedText(); - - for (int i = 0; i < count(); i++) { - DatabaseWidget* dbWidget = static_cast(widget(i)); - Database* db = databaseFromDatabaseWidget(dbWidget); - - if (dbWidget->currentMode() == DatabaseWidget::LockedMode || !dbWidget->dbHasKey()) { - continue; + for (int i = 0, c = count(); i < c; ++i) { + auto dbWidget = databaseWidgetFromIndex(i); + if (dbWidget->lock() && dbWidget->database()->filePath().isEmpty()) { + // If we locked a database without a file close the tab + closeDatabaseTab(dbWidget); } - - // show the correct tab widget before we are asking questions about it - setCurrentWidget(dbWidget); - - if (dbWidget->currentMode() == DatabaseWidget::EditMode && dbWidget->isEditWidgetModified()) { - QMessageBox::StandardButton result = - MessageBox::question( - this, tr("Lock database"), - tr("Can't lock the database as you are currently editing it.\nPlease press cancel to finish your changes or discard them."), - QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel); - if (result == QMessageBox::Cancel) { - continue; - } - } - - if (m_dbList[db].modified) { - QMessageBox::StandardButton result = - MessageBox::question( - this, tr("Lock database"), - tr("This database has been modified.\nDo you want to save the database before locking it?\nOtherwise your changes are lost."), - QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel); - if (result == QMessageBox::Save) { - if (!saveDatabase(db)) { - continue; - } - } - else if (result == QMessageBox::Discard) { - m_dbList[db].modified = false; - m_dbList[db].dbWidget->databaseSaved(); - } - else if (result == QMessageBox::Cancel) { - continue; - } - } - - dbWidget->lock(); - // database has changed so we can't use the db variable anymore - updateTabName(dbWidget->database()); - - emit databaseLocked(dbWidget); } } +/** + * Unlock a database with an unlock popup dialog. + * + * @param dbWidget DatabaseWidget which to connect signals to + * @param intent intent for unlocking + */ +void DatabaseTabWidget::unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent) +{ + unlockDatabaseInDialog(dbWidget, intent, dbWidget->database()->filePath()); +} + +/** + * Unlock a database with an unlock popup dialog. + * + * @param dbWidget DatabaseWidget which to connect signals to + * @param intent intent for unlocking + * @param file path of the database to be unlocked + */ +void DatabaseTabWidget::unlockDatabaseInDialog(DatabaseWidget* dbWidget, + DatabaseOpenDialog::Intent intent, + const QString& filePath) +{ + m_databaseOpenDialog->setTargetDatabaseWidget(dbWidget); + m_databaseOpenDialog->setIntent(intent); + m_databaseOpenDialog->setFilePath(filePath); + +#ifdef Q_OS_MACOS + if (intent == DatabaseOpenDialog::Intent::AutoType || intent == DatabaseOpenDialog::Intent::Browser) { + macUtils()->raiseOwnWindow(); + Tools::wait(500); + } +#endif + + m_databaseOpenDialog->show(); + m_databaseOpenDialog->raise(); + m_databaseOpenDialog->activateWindow(); +} + /** * This function relock the pending database when autotype has been performed successfully * A database is marked as pending when it's unlocked after a global Auto-Type invocation */ void DatabaseTabWidget::relockPendingDatabase() { - if (!m_dbPendingLock || !config()->get("security/relockautotype").toBool()) { + if (!m_dbWidgetPendingLock || !config()->get("security/relockautotype").toBool()) { return; } - if (m_dbPendingLock->currentMode() == DatabaseWidget::LockedMode || !m_dbPendingLock->dbHasKey()) { - m_dbPendingLock = nullptr; + if (m_dbWidgetPendingLock->isLocked() || !m_dbWidgetPendingLock->database()->hasKey()) { + m_dbWidgetPendingLock = nullptr; return; } - m_dbPendingLock->lock(); - - emit databaseLocked(m_dbPendingLock); - m_dbPendingLock = nullptr; -} - -void DatabaseTabWidget::modified() -{ - Q_ASSERT(qobject_cast(sender())); - - Database* db = static_cast(sender()); - DatabaseManagerStruct& dbStruct = m_dbList[db]; - - if (config()->get("AutoSaveAfterEveryChange").toBool() && !dbStruct.readOnly) { - saveDatabase(db); - return; - } - - if (!dbStruct.modified) { - dbStruct.modified = true; - dbStruct.dbWidget->databaseModified(); - updateTabName(db); - } + m_dbWidgetPendingLock->lock(); + m_dbWidgetPendingLock = nullptr; } void DatabaseTabWidget::updateLastDatabases(const QString& filename) { if (!config()->get("RememberLastDatabases").toBool()) { config()->set("LastDatabases", QVariant()); - } - else { + } else { QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList(); lastDatabases.prepend(filename); lastDatabases.removeDuplicates(); - while (lastDatabases.count() > LastDatabasesCount) { + while (lastDatabases.count() > config()->get("NumberOfRememberedLastDatabases").toInt()) { lastDatabases.removeLast(); } config()->set("LastDatabases", lastDatabases); } } -void DatabaseTabWidget::changeDatabase(Database* newDb, bool unsavedChanges) -{ - Q_ASSERT(sender()); - Q_ASSERT(!m_dbList.contains(newDb)); - - DatabaseWidget* dbWidget = static_cast(sender()); - Database* oldDb = databaseFromDatabaseWidget(dbWidget); - DatabaseManagerStruct dbStruct = m_dbList[oldDb]; - dbStruct.modified = unsavedChanges; - m_dbList.remove(oldDb); - m_dbList.insert(newDb, dbStruct); - - updateTabName(newDb); - connectDatabase(newDb, oldDb); -} - void DatabaseTabWidget::emitActivateDatabaseChanged() { emit activateDatabaseChanged(currentDatabaseWidget()); } -void DatabaseTabWidget::emitDatabaseUnlockedFromDbWidgetSender() +void DatabaseTabWidget::emitDatabaseLockChanged() { - emit databaseUnlocked(static_cast(sender())); -} - -void DatabaseTabWidget::connectDatabase(Database* newDb, Database* oldDb) -{ - if (oldDb) { - oldDb->disconnect(this); + auto* dbWidget = qobject_cast(sender()); + Q_ASSERT(dbWidget); + if (!dbWidget) { + return; } - connect(newDb, SIGNAL(nameTextChanged()), SLOT(updateTabNameFromDbSender())); - connect(newDb, SIGNAL(modified()), SLOT(modified())); - newDb->setEmitModified(true); + if (dbWidget->isLocked()) { + emit databaseLocked(dbWidget); + } else { + emit databaseUnlocked(dbWidget); + } } void DatabaseTabWidget::performGlobalAutoType() { - QList unlockedDatabases; + QList> unlockedDatabases; - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - DatabaseWidget::Mode mode = i.value().dbWidget->currentMode(); - - if (mode != DatabaseWidget::LockedMode) { - unlockedDatabases.append(i.key()); + for (int i = 0, c = count(); i < c; ++i) { + auto* dbWidget = databaseWidgetFromIndex(i); + if (!dbWidget->isLocked()) { + unlockedDatabases.append(dbWidget->database()); } } - if (unlockedDatabases.size() > 0) { + // TODO: allow for database selection during Auto-Type instead of using the current tab + if (!unlockedDatabases.isEmpty()) { autoType()->performGlobalAutoType(unlockedDatabases); - } else if (m_dbList.size() > 0){ - m_dbPendingLock = indexDatabaseManagerStruct(0).dbWidget; - m_dbPendingLock->showUnlockDialog(); + } else if (count() > 0) { + if (config()->get("security/relockautotype").toBool()) { + m_dbWidgetPendingLock = currentDatabaseWidget(); + } + unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::AutoType); } } diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h index 38f9b8474..eda28839a 100644 --- a/src/gui/DatabaseTabWidget.h +++ b/src/gui/DatabaseTabWidget.h @@ -1,6 +1,5 @@ /* - * Copyright (C) 2017 KeePassXC Team - * Copyright (C) 2011 Felix Geyer + * Copyright (C) 2018 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,31 +18,16 @@ #ifndef KEEPASSX_DATABASETABWIDGET_H #define KEEPASSX_DATABASETABWIDGET_H -#include -#include -#include - -#include "gui/DatabaseWidget.h" +#include "DatabaseOpenDialog.h" #include "gui/MessageWidget.h" +#include +#include + +class Database; class DatabaseWidget; class DatabaseWidgetStateSync; class DatabaseOpenWidget; -class QFile; -class MessageWidget; - -struct DatabaseManagerStruct -{ - DatabaseManagerStruct(); - - DatabaseWidget* dbWidget; - QFileInfo fileInfo; - bool modified; - bool readOnly; - int saveAttempts; -}; - -Q_DECLARE_TYPEINFO(DatabaseManagerStruct, Q_MOVABLE_TYPE); class DatabaseTabWidget : public QTabWidget { @@ -52,73 +36,67 @@ class DatabaseTabWidget : public QTabWidget public: explicit DatabaseTabWidget(QWidget* parent = nullptr); ~DatabaseTabWidget() override; - void openDatabase(const QString& fileName, const QString& pw = QString(), - const QString& keyFile = QString()); - void mergeDatabase(const QString& fileName); + void mergeDatabase(const QString& filePath); + + QString tabName(int index); DatabaseWidget* currentDatabaseWidget(); + DatabaseWidget* databaseWidgetFromIndex(int index) const; + + bool isReadOnly(int index = -1) const; + bool canSave(int index = -1) const; + bool isModified(int index = -1) const; bool hasLockableDatabases() const; - static const int LastDatabasesCount; - public slots: + void addDatabaseTab(const QString& filePath, bool inBackground = false, const QString& password = {}); + void addDatabaseTab(DatabaseWidget* dbWidget, bool inBackground = false); + bool closeDatabaseTab(int index); + bool closeDatabaseTab(DatabaseWidget* dbWidget); + bool closeAllDatabaseTabs(); + bool closeCurrentDatabaseTab(); + bool closeDatabaseTabFromSender(); + void updateTabName(int index = -1); + void newDatabase(); void openDatabase(); - void importCsv(); void mergeDatabase(); + void importCsv(); void importKeePass1Database(); bool saveDatabase(int index = -1); bool saveDatabaseAs(int index = -1); void exportToCsv(); - bool closeDatabase(int index = -1); + + void lockDatabases(); void closeDatabaseFromSender(); - bool closeAllDatabases(); + void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent); + void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent, const QString& filePath); + void relockPendingDatabase(); + void changeMasterKey(); void changeDatabaseSettings(); - bool readOnly(int index = -1); - bool canSave(int index = -1); - bool isModified(int index = -1); void performGlobalAutoType(); - void lockDatabases(); - void relockPendingDatabase(); - QString databasePath(int index = -1); signals: - void tabNameChanged(); - void databaseWithFileClosed(QString filePath); - void activateDatabaseChanged(DatabaseWidget* dbWidget); - void databaseLocked(DatabaseWidget* dbWidget); + void databaseClosed(const QString& filePath); void databaseUnlocked(DatabaseWidget* dbWidget); + void databaseLocked(DatabaseWidget* dbWidget); + void activateDatabaseChanged(DatabaseWidget* dbWidget); + void tabNameChanged(); void messageGlobal(const QString&, MessageWidget::MessageType type); - void messageTab(const QString&, MessageWidget::MessageType type); void messageDismissGlobal(); - void messageDismissTab(); private slots: - void updateTabName(Database* db); - void updateTabNameFromDbSender(); - void updateTabNameFromDbWidgetSender(); - void modified(); void toggleTabbar(); - void changeDatabase(Database* newDb, bool unsavedChanges); void emitActivateDatabaseChanged(); - void emitDatabaseUnlockedFromDbWidgetSender(); + void emitDatabaseLockChanged(); private: - bool saveDatabase(Database* db, QString filePath = ""); - bool saveDatabaseAs(Database* db); - bool closeDatabase(Database* db); - void deleteDatabase(Database* db); - int databaseIndex(Database* db); - Database* indexDatabase(int index); - DatabaseManagerStruct indexDatabaseManagerStruct(int index); - Database* databaseFromDatabaseWidget(DatabaseWidget* dbWidget); - void insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct); + QSharedPointer execNewDatabaseWizard(); void updateLastDatabases(const QString& filename); - void connectDatabase(Database* newDb, Database* oldDb = nullptr); - QHash m_dbList; QPointer m_dbWidgetStateSync; - QPointer m_dbPendingLock; + QPointer m_dbWidgetPendingLock; + QScopedPointer m_databaseOpenDialog; }; #endif // KEEPASSX_DATABASETABWIDGET_H diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 69c0e7c81..8728c331f 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 KeePassXC Team + * Copyright (C) 2018 KeePassXC Team * Copyright (C) 2010 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -19,256 +19,249 @@ #include "DatabaseWidget.h" #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "autotype/AutoType.h" #include "core/Config.h" +#include "core/Database.h" #include "core/EntrySearcher.h" #include "core/FilePath.h" +#include "core/FileWatcher.h" #include "core/Group.h" +#include "core/Merger.h" #include "core/Metadata.h" #include "core/Tools.h" #include "format/KeePass2Reader.h" -#include "gui/ChangeMasterKeyWidget.h" #include "gui/Clipboard.h" #include "gui/CloneDialog.h" -#include "gui/SetupTotpDialog.h" -#include "gui/TotpDialog.h" +#include "gui/DatabaseOpenDialog.h" #include "gui/DatabaseOpenWidget.h" -#include "gui/DatabaseSettingsWidget.h" -#include "gui/DetailsWidget.h" +#include "gui/EntryPreviewWidget.h" +#include "gui/FileDialog.h" #include "gui/KeePass1OpenWidget.h" #include "gui/MessageBox.h" -#include "gui/UnlockDatabaseWidget.h" -#include "gui/UnlockDatabaseDialog.h" +#include "gui/TotpDialog.h" +#include "gui/TotpExportSettingsDialog.h" +#include "gui/TotpSetupDialog.h" +#include "gui/dbsettings/DatabaseSettingsDialog.h" #include "gui/entry/EditEntryWidget.h" #include "gui/entry/EntryView.h" #include "gui/group/EditGroupWidget.h" #include "gui/group/GroupView.h" +#include "keeshare/KeeShare.h" +#include "touchid/TouchID.h" -#include "config-keepassx.h" +#ifdef Q_OS_LINUX +#include +#endif #ifdef WITH_XC_SSHAGENT #include "sshagent/SSHAgent.h" #endif -DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent) +DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) : QStackedWidget(parent) - , m_db(db) - , m_newGroup(nullptr) - , m_newEntry(nullptr) - , m_newParent(nullptr) - , m_importingCsv(false) + , m_db(std::move(db)) + , m_mainWidget(new QWidget(this)) + , m_mainSplitter(new QSplitter(m_mainWidget)) + , m_messageWidget(new MessageWidget(this)) + , m_previewView(new EntryPreviewWidget(this)) + , m_previewSplitter(new QSplitter(m_mainWidget)) + , m_searchingLabel(new QLabel(this)) +#ifdef WITH_XC_KEESHARE + , m_shareLabel(new QLabel(this)) +#endif + , m_csvImportWizard(new CsvImportWizard(this)) + , m_editEntryWidget(new EditEntryWidget(this)) + , m_editGroupWidget(new EditGroupWidget(this)) + , m_historyEditEntryWidget(new EditEntryWidget(this)) + , m_databaseSettingDialog(new DatabaseSettingsDialog(this)) + , m_databaseOpenWidget(new DatabaseOpenWidget(this)) + , m_keepass1OpenWidget(new KeePass1OpenWidget(this)) + , m_groupView(new GroupView(m_db.data(), m_mainSplitter)) + , m_fileWatcher(new DelayingFileWatcher(this)) { - m_mainWidget = new QWidget(this); - - m_messageWidget = new MessageWidget(this); m_messageWidget->setHidden(true); auto* mainLayout = new QVBoxLayout(); - QLayout* layout = new QHBoxLayout(); mainLayout->addWidget(m_messageWidget); - mainLayout->addLayout(layout); - m_mainSplitter = new QSplitter(m_mainWidget); + auto* hbox = new QHBoxLayout(); + mainLayout->addLayout(hbox); + hbox->addWidget(m_mainSplitter); + m_mainWidget->setLayout(mainLayout); + + auto* rightHandSideWidget = new QWidget(m_mainSplitter); + auto* vbox = new QVBoxLayout(); + vbox->setMargin(0); + vbox->addWidget(m_searchingLabel); +#ifdef WITH_XC_KEESHARE + vbox->addWidget(m_shareLabel); +#endif + vbox->addWidget(m_previewSplitter); + rightHandSideWidget->setLayout(vbox); + m_entryView = new EntryView(rightHandSideWidget); + m_mainSplitter->setChildrenCollapsible(false); - m_detailSplitter = new QSplitter(m_mainWidget); - m_detailSplitter->setOrientation(Qt::Vertical); - m_detailSplitter->setChildrenCollapsible(true); + m_mainSplitter->addWidget(m_groupView); + m_mainSplitter->addWidget(rightHandSideWidget); + m_mainSplitter->setStretchFactor(0, 30); + m_mainSplitter->setStretchFactor(1, 70); - QWidget* rightHandSideWidget = new QWidget(m_mainSplitter); + m_previewSplitter->setOrientation(Qt::Vertical); + m_previewSplitter->setChildrenCollapsible(true); - m_groupView = new GroupView(db, m_mainSplitter); m_groupView->setObjectName("groupView"); m_groupView->setContextMenuPolicy(Qt::CustomContextMenu); - connect(m_groupView, SIGNAL(customContextMenuRequested(QPoint)), - SLOT(emitGroupContextMenuRequested(QPoint))); + connect(m_groupView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitGroupContextMenuRequested(QPoint))); - m_entryView = new EntryView(rightHandSideWidget); m_entryView->setObjectName("entryView"); m_entryView->setContextMenuPolicy(Qt::CustomContextMenu); - m_entryView->setGroup(db->rootGroup()); - connect(m_entryView, SIGNAL(customContextMenuRequested(QPoint)), - SLOT(emitEntryContextMenuRequested(QPoint))); + m_entryView->displayGroup(m_db->rootGroup()); + connect(m_entryView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitEntryContextMenuRequested(QPoint))); // Add a notification for when we are searching - m_searchingLabel = new QLabel(); m_searchingLabel->setText(tr("Searching...")); m_searchingLabel->setAlignment(Qt::AlignCenter); m_searchingLabel->setStyleSheet("color: rgb(0, 0, 0);" "background-color: rgb(255, 253, 160);" "border: 2px solid rgb(190, 190, 190);" - "border-radius: 5px;"); - - m_detailsView = new DetailsWidget(this); - m_detailsView->hide(); - connect(this, SIGNAL(pressedEntry(Entry*)), m_detailsView, SLOT(setEntry(Entry*))); - connect(this, SIGNAL(pressedGroup(Group*)), m_detailsView, SLOT(setGroup(Group*))); - connect(this, SIGNAL(currentModeChanged(DatabaseWidget::Mode)), - m_detailsView, SLOT(setDatabaseMode(DatabaseWidget::Mode))); - connect(m_detailsView, SIGNAL(errorOccurred(QString)), this, SLOT(showErrorMessage(QString))); - - - auto* vLayout = new QVBoxLayout(rightHandSideWidget); - vLayout->setMargin(0); - vLayout->addWidget(m_searchingLabel); - vLayout->addWidget(m_detailSplitter); - - m_detailSplitter->addWidget(m_entryView); - m_detailSplitter->addWidget(m_detailsView); - - m_detailSplitter->setStretchFactor(0, 100); - m_detailSplitter->setStretchFactor(1, 0); - m_detailSplitter->setSizes({1, 1}); - + "border-radius: 4px;"); m_searchingLabel->setVisible(false); - rightHandSideWidget->setLayout(vLayout); +#ifdef WITH_XC_KEESHARE + m_shareLabel->setText(tr("Shared group...")); + m_shareLabel->setAlignment(Qt::AlignCenter); + m_shareLabel->setStyleSheet("color: rgb(0, 0, 0);" + "background-color: rgb(255, 253, 160);" + "border: 2px solid rgb(190, 190, 190);" + "border-radius: 4px;"); + m_shareLabel->setVisible(false); +#endif - setTabOrder(m_entryView, m_groupView); + m_previewView->hide(); + m_previewSplitter->addWidget(m_entryView); + m_previewSplitter->addWidget(m_previewView); + m_previewSplitter->setStretchFactor(0, 100); + m_previewSplitter->setStretchFactor(1, 0); + m_previewSplitter->setSizes({1, 1}); - m_mainSplitter->addWidget(m_groupView); - m_mainSplitter->addWidget(rightHandSideWidget); - - m_mainSplitter->setStretchFactor(0, 30); - m_mainSplitter->setStretchFactor(1, 70); - - layout->addWidget(m_mainSplitter); - m_mainWidget->setLayout(mainLayout); - - m_editEntryWidget = new EditEntryWidget(); m_editEntryWidget->setObjectName("editEntryWidget"); - m_historyEditEntryWidget = new EditEntryWidget(); - m_editGroupWidget = new EditGroupWidget(); m_editGroupWidget->setObjectName("editGroupWidget"); - m_changeMasterKeyWidget = new ChangeMasterKeyWidget(); - m_changeMasterKeyWidget->setObjectName("changeMasterKeyWidget"); - m_changeMasterKeyWidget->headlineLabel()->setText(tr("Change master key")); - QFont headlineLabelFont = m_changeMasterKeyWidget->headlineLabel()->font(); - headlineLabelFont.setBold(true); - headlineLabelFont.setPointSize(headlineLabelFont.pointSize() + 2); - m_changeMasterKeyWidget->headlineLabel()->setFont(headlineLabelFont); - m_csvImportWizard = new CsvImportWizard(); m_csvImportWizard->setObjectName("csvImportWizard"); - m_databaseSettingsWidget = new DatabaseSettingsWidget(); - m_databaseSettingsWidget->setObjectName("databaseSettingsWidget"); - m_databaseOpenWidget = new DatabaseOpenWidget(); + m_databaseSettingDialog->setObjectName("databaseSettingsDialog"); m_databaseOpenWidget->setObjectName("databaseOpenWidget"); - m_databaseOpenMergeWidget = new DatabaseOpenWidget(); - m_databaseOpenMergeWidget->setObjectName("databaseOpenMergeWidget"); - m_keepass1OpenWidget = new KeePass1OpenWidget(); m_keepass1OpenWidget->setObjectName("keepass1OpenWidget"); - m_unlockDatabaseWidget = new UnlockDatabaseWidget(); - m_unlockDatabaseWidget->setObjectName("unlockDatabaseWidget"); - m_unlockDatabaseDialog = new UnlockDatabaseDialog(); - m_unlockDatabaseDialog->setObjectName("unlockDatabaseDialog"); - addWidget(m_mainWidget); - addWidget(m_editEntryWidget); - addWidget(m_editGroupWidget); - addWidget(m_changeMasterKeyWidget); - addWidget(m_databaseSettingsWidget); - addWidget(m_historyEditEntryWidget); - addWidget(m_databaseOpenWidget); - addWidget(m_csvImportWizard); - addWidget(m_databaseOpenMergeWidget); - addWidget(m_keepass1OpenWidget); - addWidget(m_unlockDatabaseWidget); + addChildWidget(m_mainWidget); + addChildWidget(m_editEntryWidget); + addChildWidget(m_editGroupWidget); + addChildWidget(m_databaseSettingDialog); + addChildWidget(m_historyEditEntryWidget); + addChildWidget(m_databaseOpenWidget); + addChildWidget(m_csvImportWizard); + addChildWidget(m_keepass1OpenWidget); + + // clang-format off connect(m_mainSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(mainSplitterSizesChanged())); - connect(m_detailSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(detailSplitterSizesChanged())); + connect(m_previewSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(previewSplitterSizesChanged())); + connect(this, SIGNAL(currentModeChanged(DatabaseWidget::Mode)), m_previewView, SLOT(setDatabaseMode(DatabaseWidget::Mode))); + connect(m_previewView, SIGNAL(errorOccurred(QString)), this, SLOT(showErrorMessage(QString))); connect(m_entryView, SIGNAL(viewStateChanged()), SIGNAL(entryViewStateChanged())); - connect(m_groupView, SIGNAL(groupChanged(Group*)), this, SLOT(onGroupChanged(Group*))); - connect(m_groupView, SIGNAL(groupChanged(Group*)), SIGNAL(groupChanged())); - connect(m_entryView, SIGNAL(entryActivated(Entry*, EntryModel::ModelColumn)), - SLOT(entryActivationSignalReceived(Entry*, EntryModel::ModelColumn))); - connect(m_entryView, SIGNAL(entrySelectionChanged()), SIGNAL(entrySelectionChanged())); - connect(m_editEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchToView(bool))); + connect(m_groupView, SIGNAL(groupSelectionChanged(Group*)), SLOT(onGroupChanged(Group*))); + connect(m_groupView, SIGNAL(groupSelectionChanged(Group*)), SIGNAL(groupChanged())); + connect(m_entryView, SIGNAL(entryActivated(Entry*,EntryModel::ModelColumn)), + SLOT(entryActivationSignalReceived(Entry*,EntryModel::ModelColumn))); + connect(m_entryView, SIGNAL(entrySelectionChanged(Entry*)), SLOT(onEntryChanged(Entry*))); + connect(m_editEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); connect(m_editEntryWidget, SIGNAL(historyEntryActivated(Entry*)), SLOT(switchToHistoryView(Entry*))); connect(m_historyEditEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchBackToEntryEdit())); - connect(m_editGroupWidget, SIGNAL(editFinished(bool)), SLOT(switchToView(bool))); - connect(m_changeMasterKeyWidget, SIGNAL(editFinished(bool)), SLOT(updateMasterKey(bool))); - connect(m_databaseSettingsWidget, SIGNAL(editFinished(bool)), SLOT(switchToView(bool))); - connect(m_databaseOpenWidget, SIGNAL(editFinished(bool)), SLOT(openDatabase(bool))); - connect(m_databaseOpenMergeWidget, SIGNAL(editFinished(bool)), SLOT(mergeDatabase(bool))); - connect(m_keepass1OpenWidget, SIGNAL(editFinished(bool)), SLOT(openDatabase(bool))); + connect(m_editGroupWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); + connect(m_databaseSettingDialog, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); + connect(m_databaseOpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); + connect(m_keepass1OpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); connect(m_csvImportWizard, SIGNAL(importFinished(bool)), SLOT(csvImportFinished(bool))); - connect(m_unlockDatabaseWidget, SIGNAL(editFinished(bool)), SLOT(unlockDatabase(bool))); - connect(m_unlockDatabaseDialog, SIGNAL(unlockDone(bool)), SLOT(unlockDatabase(bool))); - connect(&m_fileWatcher, SIGNAL(fileChanged(QString)), this, SLOT(onWatchedFileChanged())); - connect(&m_fileWatchTimer, SIGNAL(timeout()), this, SLOT(reloadDatabaseFile())); - connect(&m_fileWatchUnblockTimer, SIGNAL(timeout()), this, SLOT(unblockAutoReload())); + connect(m_fileWatcher.data(), SIGNAL(fileChanged()), this, SLOT(reloadDatabaseFile())); connect(this, SIGNAL(currentChanged(int)), this, SLOT(emitCurrentModeChanged())); + // clang-format on - connect(m_groupView, SIGNAL(groupPressed(Group*)), SLOT(emitPressedGroup(Group*))); - connect(m_groupView, SIGNAL(groupChanged(Group*)), SLOT(emitPressedGroup(Group*))); - connect(m_entryView, SIGNAL(entryPressed(Entry*)), SLOT(emitPressedEntry(Entry*))); - connect(m_entryView, SIGNAL(entrySelectionChanged()), SLOT(emitPressedEntry())); - connect(m_editEntryWidget, SIGNAL(editFinished(bool)), SLOT(emitPressedEntry())); + connectDatabaseSignals(); - m_databaseModified = false; + m_blockAutoSave = false; - m_fileWatchTimer.setSingleShot(true); - m_fileWatchUnblockTimer.setSingleShot(true); - m_ignoreAutoReload = false; - - m_searchCaseSensitive = false; + m_EntrySearcher = new EntrySearcher(false); m_searchLimitGroup = config()->get("SearchLimitGroup", false).toBool(); #ifdef WITH_XC_SSHAGENT if (config()->get("SSHAgent", false).toBool()) { - connect(this, SIGNAL(currentModeChanged(DatabaseWidget::Mode)), SSHAgent::instance(), SLOT(databaseModeChanged(DatabaseWidget::Mode))); - connect(this, SIGNAL(closeRequest()), SSHAgent::instance(), SLOT(databaseModeChanged())); + connect(this, SIGNAL(databaseLocked()), SSHAgent::instance(), SLOT(databaseModeChanged())); + connect(this, SIGNAL(databaseUnlocked()), SSHAgent::instance(), SLOT(databaseModeChanged())); } #endif - setCurrentWidget(m_mainWidget); +#ifdef WITH_XC_KEESHARE + // We need to reregister the database to allow exports + // from a newly created database + KeeShare::instance()->connectDatabase(m_db, {}); +#endif + + switchToMainView(); +} + +DatabaseWidget::DatabaseWidget(const QString& filePath, QWidget* parent) + : DatabaseWidget(QSharedPointer::create(filePath), parent) +{ } DatabaseWidget::~DatabaseWidget() { + delete m_EntrySearcher; +} + +QSharedPointer DatabaseWidget::database() const +{ + return m_db; } DatabaseWidget::Mode DatabaseWidget::currentMode() const { if (currentWidget() == nullptr) { - return DatabaseWidget::None; - } - else if (currentWidget() == m_csvImportWizard) { - return DatabaseWidget::ImportMode; - } - else if (currentWidget() == m_mainWidget) { - return DatabaseWidget::ViewMode; - } - else if (currentWidget() == m_unlockDatabaseWidget || - currentWidget() == m_databaseOpenWidget) { - return DatabaseWidget::LockedMode; - } - else { - return DatabaseWidget::EditMode; + return DatabaseWidget::Mode::None; + } else if (currentWidget() == m_mainWidget) { + return DatabaseWidget::Mode::ViewMode; + } else if (currentWidget() == m_databaseOpenWidget || currentWidget() == m_keepass1OpenWidget) { + return DatabaseWidget::Mode::LockedMode; + } else if (currentWidget() == m_csvImportWizard) { + return DatabaseWidget::Mode::ImportMode; + } else { + return DatabaseWidget::Mode::EditMode; } } -bool DatabaseWidget::isInEditMode() const +bool DatabaseWidget::isLocked() const { - return currentMode() == DatabaseWidget::EditMode; + return currentMode() == Mode::LockedMode; +} + +bool DatabaseWidget::isSearchActive() const +{ + return m_entryView->inSearchMode(); } bool DatabaseWidget::isEditWidgetModified() const { if (currentWidget() == m_editEntryWidget) { return m_editEntryWidget->hasBeenModified(); - } - else { + } else { // other edit widget don't have a hasBeenModified() method yet // assume that they already have been modified return true; @@ -285,14 +278,14 @@ void DatabaseWidget::setMainSplitterSizes(const QList& sizes) m_mainSplitter->setSizes(sizes); } -QList DatabaseWidget::detailSplitterSizes() const +QList DatabaseWidget::previewSplitterSizes() const { - return m_detailSplitter->sizes(); + return m_previewSplitter->sizes(); } -void DatabaseWidget::setDetailSplitterSizes(const QList &sizes) +void DatabaseWidget::setPreviewSplitterSizes(const QList& sizes) { - m_detailSplitter->setSizes(sizes); + m_previewSplitter->setSizes(sizes); } /** @@ -306,7 +299,7 @@ bool DatabaseWidget::isUsernamesHidden() const /** * Set state of entry view 'Hide Usernames' setting */ -void DatabaseWidget::setUsernamesHidden(const bool hide) +void DatabaseWidget::setUsernamesHidden(bool hide) { m_entryView->setUsernamesHidden(hide); } @@ -322,7 +315,7 @@ bool DatabaseWidget::isPasswordsHidden() const /** * Set state of entry view 'Hide Passwords' setting */ -void DatabaseWidget::setPasswordsHidden(const bool hide) +void DatabaseWidget::setPasswordsHidden(bool hide) { m_entryView->setPasswordsHidden(hide); } @@ -355,11 +348,6 @@ void DatabaseWidget::emitCurrentModeChanged() emit currentModeChanged(currentMode()); } -Database* DatabaseWidget::database() -{ - return m_db; -} - void DatabaseWidget::createEntry() { Q_ASSERT(m_groupView->currentGroup()); @@ -367,17 +355,17 @@ void DatabaseWidget::createEntry() return; } - m_newEntry = new Entry(); + m_newEntry.reset(new Entry()); - if (isInSearchMode()) { + if (isSearchActive()) { m_newEntry->setTitle(getCurrentSearch()); endSearch(); } - m_newEntry->setUuid(Uuid::random()); + m_newEntry->setUuid(QUuid::createUuid()); m_newEntry->setUsername(m_db->metadata()->defaultUserName()); m_newParent = m_groupView->currentGroup(); setIconFromParent(); - switchToEntryEdit(m_newEntry, true); + switchToEntryEdit(m_newEntry.data(), true); } void DatabaseWidget::setIconFromParent() @@ -392,19 +380,27 @@ void DatabaseWidget::setIconFromParent() if (m_newParent->iconUuid().isNull()) { m_newEntry->setIcon(m_newParent->iconNumber()); - } - else { + } else { m_newEntry->setIcon(m_newParent->iconUuid()); } } -void DatabaseWidget::replaceDatabase(Database* db) +void DatabaseWidget::replaceDatabase(QSharedPointer db) { - Database* oldDb = m_db; - m_db = db; + // TODO: instead of increasing the ref count temporarily, there should be a clean + // break from the old database. Without this crashes occur due to the change + // signals triggering dangling pointers. + auto oldDb = m_db; + m_db = std::move(db); + connectDatabaseSignals(); m_groupView->changeDatabase(m_db); - emit databaseChanged(m_db, m_databaseModified); - delete oldDb; + processAutoOpen(); +#if defined(WITH_XC_KEESHARE) + KeeShare::instance()->connectDatabase(m_db, oldDb); +#else + // Keep the instance active till the end of this function + Q_UNUSED(oldDb); +#endif } void DatabaseWidget::cloneEntry() @@ -415,7 +411,7 @@ void DatabaseWidget::cloneEntry() return; } - auto cloneDialog = new CloneDialog(this, m_db, currentEntry); + auto cloneDialog = new CloneDialog(this, m_db.data(), currentEntry); cloneDialog->show(); } @@ -449,156 +445,186 @@ void DatabaseWidget::setupTotp() return; } - auto setupTotpDialog = new SetupTotpDialog(this, currentEntry); - if (currentEntry->hasTotp()) { - setupTotpDialog->setSeed(currentEntry->totpSeed()); - setupTotpDialog->setStep(currentEntry->totpStep()); - setupTotpDialog->setDigits(currentEntry->totpDigits()); - // now that all settings are set, decide whether it's default, steam or custom - setupTotpDialog->setSettings(currentEntry->totpDigits()); - } - + auto setupTotpDialog = new TotpSetupDialog(this, currentEntry); + connect(setupTotpDialog, SIGNAL(totpUpdated()), SIGNAL(entrySelectionChanged())); setupTotpDialog->open(); } - -void DatabaseWidget::deleteEntries() +void DatabaseWidget::deleteSelectedEntries() { const QModelIndexList selected = m_entryView->selectionModel()->selectedRows(); - - Q_ASSERT(!selected.isEmpty()); if (selected.isEmpty()) { return; } - // get all entry pointers as the indexes change when removing multiple entries + // Resolve entries from the selection model QList selectedEntries; for (const QModelIndex& index : selected) { selectedEntries.append(m_entryView->entryFromIndex(index)); } - bool inRecycleBin = Tools::hasChild(m_db->metadata()->recycleBin(), selectedEntries.first()); - if (inRecycleBin || !m_db->metadata()->recycleBinEnabled()) { - QMessageBox::StandardButton result; + // Confirm entry removal before moving forward + auto* recycleBin = m_db->metadata()->recycleBin(); + bool permanent = (recycleBin && recycleBin->findEntryByUuid(selectedEntries.first()->uuid())) + || !m_db->metadata()->recycleBinEnabled(); - if (selected.size() == 1) { - result = MessageBox::question( - this, tr("Delete entry?"), - tr("Do you really want to delete the entry \"%1\" for good?") - .arg(selectedEntries.first()->title().toHtmlEscaped()), - QMessageBox::Yes | QMessageBox::No); - } - else { - result = MessageBox::question( - this, tr("Delete entries?"), - tr("Do you really want to delete %1 entries for good?") - .arg(selected.size()), - QMessageBox::Yes | QMessageBox::No); - } - - if (result == QMessageBox::Yes) { - for (Entry* entry : asConst(selectedEntries)) { - delete entry; - } - refreshSearch(); - } + if (!confirmDeleteEntries(selectedEntries, permanent)) { + return; } - else { - QMessageBox::StandardButton result; - if (selected.size() == 1) { - result = MessageBox::question( - this, tr("Move entry to recycle bin?"), - tr("Do you really want to move entry \"%1\" to the recycle bin?") - .arg(selectedEntries.first()->title().toHtmlEscaped()), - QMessageBox::Yes | QMessageBox::No); - } - else { - result = MessageBox::question( - this, tr("Move entries to recycle bin?"), - tr("Do you really want to move %n entry(s) to the recycle bin?", 0, selected.size()), - QMessageBox::Yes | QMessageBox::No); + // Find references to selected entries and prompt for direction if necessary + auto it = selectedEntries.begin(); + while (it != selectedEntries.end()) { + auto references = m_db->rootGroup()->referencesRecursive(*it); + if (!references.isEmpty()) { + // Ignore references that are selected for deletion + for (auto* entry : selectedEntries) { + references.removeAll(entry); + } + + if (!references.isEmpty()) { + // Prompt for reference handling + auto result = MessageBox::question( + this, + tr("Replace references to entry?"), + tr("Entry \"%1\" has %2 reference(s). " + "Do you want to overwrite references with values, skip this entry, or delete anyway?", + "", + references.size()) + .arg((*it)->title().toHtmlEscaped()) + .arg(references.size()), + MessageBox::Overwrite | MessageBox::Skip | MessageBox::Delete, + MessageBox::Overwrite); + + if (result == MessageBox::Overwrite) { + for (auto* entry : references) { + entry->replaceReferencesWithValues(*it); + } + } else if (result == MessageBox::Skip) { + it = selectedEntries.erase(it); + continue; + } + } } - if (result == QMessageBox::No) { - return; - } + it++; + } - for (Entry* entry : asConst(selectedEntries)) { + if (permanent) { + for (auto* entry : asConst(selectedEntries)) { + delete entry; + } + } else { + for (auto* entry : asConst(selectedEntries)) { m_db->recycleEntry(entry); } } + + refreshSearch(); +} + +bool DatabaseWidget::confirmDeleteEntries(QList entries, bool permanent) +{ + if (entries.isEmpty()) { + return false; + } + + if (permanent) { + QString prompt; + if (entries.size() == 1) { + prompt = tr("Do you really want to delete the entry \"%1\" for good?") + .arg(entries.first()->title().toHtmlEscaped()); + } else { + prompt = tr("Do you really want to delete %n entry(s) for good?", "", entries.size()); + } + + auto answer = MessageBox::question(this, + tr("Delete entry(s)?", "", entries.size()), + prompt, + MessageBox::Delete | MessageBox::Cancel, + MessageBox::Cancel); + + return answer == MessageBox::Delete; + } else { + QString prompt; + if (entries.size() == 1) { + prompt = tr("Do you really want to move entry \"%1\" to the recycle bin?") + .arg(entries.first()->title().toHtmlEscaped()); + } else { + prompt = tr("Do you really want to move %n entry(s) to the recycle bin?", "", entries.size()); + } + + auto answer = MessageBox::question(this, + tr("Move entry(s) to recycle bin?", "", entries.size()), + prompt, + MessageBox::Move | MessageBox::Cancel, + MessageBox::Cancel); + + return answer == MessageBox::Move; + } } void DatabaseWidget::setFocus() { - m_entryView->setFocus(); + m_entryView->setFocus(); } void DatabaseWidget::copyTitle() { Entry* currentEntry = m_entryView->currentEntry(); - Q_ASSERT(currentEntry); - if (!currentEntry) { - return; + if (currentEntry) { + setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->title())); } - - setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->title())); } void DatabaseWidget::copyUsername() { Entry* currentEntry = m_entryView->currentEntry(); - Q_ASSERT(currentEntry); - if (!currentEntry) { - return; + if (currentEntry) { + setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->username())); } - - setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->username())); } void DatabaseWidget::copyPassword() { Entry* currentEntry = m_entryView->currentEntry(); - Q_ASSERT(currentEntry); - if (!currentEntry) { - return; + if (currentEntry) { + setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->password())); } - - setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->password())); } void DatabaseWidget::copyURL() { Entry* currentEntry = m_entryView->currentEntry(); - Q_ASSERT(currentEntry); - if (!currentEntry) { - return; + if (currentEntry) { + setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->url())); } - - setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->url())); } void DatabaseWidget::copyNotes() { Entry* currentEntry = m_entryView->currentEntry(); - Q_ASSERT(currentEntry); - if (!currentEntry) { - return; + if (currentEntry) { + setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->notes())); } - - setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->notes())); } void DatabaseWidget::copyAttribute(QAction* action) { Entry* currentEntry = m_entryView->currentEntry(); - Q_ASSERT(currentEntry); - if (!currentEntry) { - return; + if (currentEntry) { + setClipboardTextAndMinimize( + currentEntry->resolveMultiplePlaceholders(currentEntry->attributes()->value(action->data().toString()))); } +} - setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->attributes()->value(action->data().toString()))); +void DatabaseWidget::showTotpKeyQrCode() +{ + Entry* currentEntry = m_entryView->currentEntry(); + if (currentEntry) { + auto totpDisplayDialog = new TotpExportSettingsDialog(this, currentEntry); + totpDisplayDialog->open(); + } } void DatabaseWidget::setClipboardTextAndMinimize(const QString& text) @@ -612,27 +638,22 @@ void DatabaseWidget::setClipboardTextAndMinimize(const QString& text) void DatabaseWidget::performAutoType() { Entry* currentEntry = m_entryView->currentEntry(); - Q_ASSERT(currentEntry); - if (!currentEntry) { - return; + if (currentEntry) { + autoType()->performAutoType(currentEntry, window()); } - - autoType()->performAutoType(currentEntry, window()); } void DatabaseWidget::openUrl() { Entry* currentEntry = m_entryView->currentEntry(); - Q_ASSERT(currentEntry); - if (!currentEntry) { - return; + if (currentEntry) { + openUrlForEntry(currentEntry); } - - openUrlForEntry(currentEntry); } void DatabaseWidget::openUrlForEntry(Entry* entry) { + Q_ASSERT(entry); QString cmdString = entry->resolveMultiplePlaceholders(entry->url()); if (cmdString.startsWith("cmd://")) { // check if decision to execute command was stored @@ -654,8 +675,7 @@ void DatabaseWidget::openUrlForEntry(Entry* entry) tr("Do you really want to execute the following command?

    %1
    ") .arg(cmdTruncated.toHtmlEscaped()), QMessageBox::Yes | QMessageBox::No, - this - ); + this); msgbox.setDefaultButton(QMessageBox::No); QCheckBox* checkbox = new QCheckBox(tr("Remember my choice"), &msgbox); @@ -663,8 +683,8 @@ void DatabaseWidget::openUrlForEntry(Entry* entry) bool remember = false; QObject::connect(checkbox, &QCheckBox::stateChanged, [&](int state) { if (static_cast(state) == Qt::CheckState::Checked) { - remember = true; - } + remember = true; + } }); int result = msgbox.exec(); @@ -673,8 +693,7 @@ void DatabaseWidget::openUrlForEntry(Entry* entry) } if (remember) { - entry->attributes()->set(EntryAttributes::RememberCmdExecAttr, - result == QMessageBox::Yes ? "1" : "0"); + entry->attributes()->set(EntryAttributes::RememberCmdExecAttr, result == QMessageBox::Yes ? "1" : "0"); } } } else { @@ -692,10 +711,10 @@ void DatabaseWidget::createGroup() return; } - m_newGroup = new Group(); - m_newGroup->setUuid(Uuid::random()); + m_newGroup.reset(new Group()); + m_newGroup->setUuid(QUuid::createUuid()); m_newParent = m_groupView->currentGroup(); - switchToGroupEdit(m_newGroup, true); + switchToGroupEdit(m_newGroup.data(), true); } void DatabaseWidget::deleteGroup() @@ -706,95 +725,74 @@ void DatabaseWidget::deleteGroup() return; } - bool inRecycleBin = Tools::hasChild(m_db->metadata()->recycleBin(), currentGroup); - bool isRecycleBin = (currentGroup == m_db->metadata()->recycleBin()); - bool isRecycleBinSubgroup = Tools::hasChild(currentGroup, m_db->metadata()->recycleBin()); + auto* recycleBin = m_db->metadata()->recycleBin(); + bool inRecycleBin = recycleBin && recycleBin->findGroupByUuid(currentGroup->uuid()); + bool isRecycleBin = recycleBin && (currentGroup == recycleBin); + bool isRecycleBinSubgroup = recycleBin && currentGroup->findGroupByUuid(recycleBin->uuid()); if (inRecycleBin || isRecycleBin || isRecycleBinSubgroup || !m_db->metadata()->recycleBinEnabled()) { - QMessageBox::StandardButton result = MessageBox::question( - this, tr("Delete group?"), - tr("Do you really want to delete the group \"%1\" for good?") - .arg(currentGroup->name().toHtmlEscaped()), - QMessageBox::Yes | QMessageBox::No); - if (result == QMessageBox::Yes) { + auto result = MessageBox::question( + this, + tr("Delete group"), + tr("Do you really want to delete the group \"%1\" for good?").arg(currentGroup->name().toHtmlEscaped()), + MessageBox::Delete | MessageBox::Cancel, + MessageBox::Cancel); + + if (result == MessageBox::Delete) { delete currentGroup; } - } - else { - m_db->recycleGroup(currentGroup); + } else { + auto result = MessageBox::question(this, + tr("Move group to recycle bin?"), + tr("Do you really want to move the group " + "\"%1\" to the recycle bin?") + .arg(currentGroup->name().toHtmlEscaped()), + MessageBox::Move | MessageBox::Cancel, + MessageBox::Cancel); + if (result == MessageBox::Move) { + m_db->recycleGroup(currentGroup); + } } } -int DatabaseWidget::addWidget(QWidget* w) +int DatabaseWidget::addChildWidget(QWidget* w) { w->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - int index = QStackedWidget::addWidget(w); - adjustSize(); - return index; } -void DatabaseWidget::setCurrentIndex(int index) -{ - // use setCurrentWidget() instead - // index is not reliable - Q_UNUSED(index); - Q_ASSERT(false); -} - -void DatabaseWidget::setCurrentWidget(QWidget* widget) -{ - if (currentWidget()) { - currentWidget()->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - } - - QStackedWidget::setCurrentWidget(widget); - - if (currentWidget()) { - currentWidget()->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - } - - adjustSize(); -} - -void DatabaseWidget::csvImportFinished(bool accepted) -{ - if (!accepted) { - emit closeRequest(); - } - else { - setCurrentWidget(m_mainWidget); - } -} - -void DatabaseWidget::switchToView(bool accepted) +void DatabaseWidget::switchToMainView(bool previousDialogAccepted) { if (m_newGroup) { - if (accepted) { + if (previousDialogAccepted) { m_newGroup->setParent(m_newParent); - m_groupView->setCurrentGroup(m_newGroup); + m_groupView->setCurrentGroup(m_newGroup.take()); m_groupView->expandGroup(m_newParent); } else { - delete m_newGroup; + m_newGroup.reset(); } - m_newGroup = nullptr; m_newParent = nullptr; } else if (m_newEntry) { - if (accepted) { + if (previousDialogAccepted) { m_newEntry->setGroup(m_newParent); m_entryView->setFocus(); - m_entryView->setCurrentEntry(m_newEntry); + m_entryView->setCurrentEntry(m_newEntry.take()); } else { - delete m_newEntry; + m_newEntry.reset(); } - m_newEntry = nullptr; m_newParent = nullptr; } setCurrentWidget(m_mainWidget); + + if (sender() == m_entryView || sender() == m_editEntryWidget) { + onEntryChanged(m_entryView->currentEntry()); + } else if (sender() == m_groupView || sender() == m_editGroupWidget) { + onGroupChanged(m_groupView->currentGroup()); + } } void DatabaseWidget::switchToHistoryView(Entry* entry) @@ -837,51 +835,35 @@ void DatabaseWidget::switchToGroupEdit(Group* group, bool create) setCurrentWidget(m_editGroupWidget); } -void DatabaseWidget::updateMasterKey(bool accepted) +void DatabaseWidget::connectDatabaseSignals() { - if (m_importingCsv) { - setCurrentWidget(m_csvImportWizard); - m_csvImportWizard->keyFinished(accepted, m_changeMasterKeyWidget->newMasterKey()); - return; - } + // relayed Database events + connect(m_db.data(), + SIGNAL(filePathChanged(QString, QString)), - if (accepted) { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - bool result = m_db->setKey(m_changeMasterKeyWidget->newMasterKey(), true, true); - QApplication::restoreOverrideCursor(); - - if (!result) { - m_messageWidget->showMessage(tr("Unable to calculate master key"), MessageWidget::Error); - return; - } - } - else if (!m_db->hasKey()) { - emit closeRequest(); - return; - } - - setCurrentWidget(m_mainWidget); + SIGNAL(databaseFilePathChanged(QString, QString))); + connect(m_db.data(), SIGNAL(databaseModified()), SIGNAL(databaseModified())); + connect(m_db.data(), SIGNAL(databaseModified()), SLOT(onDatabaseModified())); + connect(m_db.data(), SIGNAL(databaseSaved()), SIGNAL(databaseSaved())); } -void DatabaseWidget::openDatabase(bool accepted) +void DatabaseWidget::loadDatabase(bool accepted) { - if (accepted) { - replaceDatabase(static_cast(sender())->database()); - setCurrentWidget(m_mainWidget); - emit unlockedDatabase(); - - // We won't need those anymore and KeePass1OpenWidget closes - // the file in its dtor. - delete m_databaseOpenWidget; - m_databaseOpenWidget = nullptr; - delete m_keepass1OpenWidget; - m_keepass1OpenWidget = nullptr; - m_fileWatcher.addPath(m_filePath); + auto* openWidget = qobject_cast(sender()); + Q_ASSERT(openWidget); + if (!openWidget) { + return; } - else { - m_fileWatcher.removePath(m_filePath); + + if (accepted) { + replaceDatabase(openWidget->database()); + switchToMainView(); + m_fileWatcher->restart(); + emit databaseUnlocked(); + } else { + m_fileWatcher->stop(); if (m_databaseOpenWidget->database()) { - delete m_databaseOpenWidget->database(); + m_databaseOpenWidget->database().reset(); } emit closeRequest(); } @@ -891,51 +873,78 @@ void DatabaseWidget::mergeDatabase(bool accepted) { if (accepted) { if (!m_db) { - m_messageWidget->showMessage(tr("No current database."), MessageWidget::Error); + showMessage(tr("No current database."), MessageWidget::Error); return; } - Database* srcDb = static_cast(sender())->database(); + auto* senderDialog = qobject_cast(sender()); + + Q_ASSERT(senderDialog); + if (!senderDialog) { + return; + } + auto srcDb = senderDialog->database(); if (!srcDb) { - m_messageWidget->showMessage(tr("No source database, nothing to do."), MessageWidget::Error); + showMessage(tr("No source database, nothing to do."), MessageWidget::Error); return; } - m_db->merge(srcDb); + Merger merger(srcDb.data(), m_db.data()); + bool databaseChanged = merger.merge(); + + if (databaseChanged) { + showMessage(tr("Successfully merged the database files."), MessageWidget::Information); + } else { + showMessage(tr("Database was not modified by merge operation."), MessageWidget::Information); + } } - m_databaseOpenMergeWidget->clearForms(); - setCurrentWidget(m_mainWidget); + switchToMainView(); emit databaseMerged(m_db); } +/** + * Unlock the database. + * + * @param accepted true if the unlock dialog or widget was confirmed with OK + */ void DatabaseWidget::unlockDatabase(bool accepted) { + auto* senderDialog = qobject_cast(sender()); + if (!accepted) { - emit closeRequest(); + if (!senderDialog && (!m_db || !m_db->isInitialized())) { + emit closeRequest(); + } return; } - Database* db = nullptr; - if (sender() == m_unlockDatabaseDialog) { - db = m_unlockDatabaseDialog->database(); - } else if (sender() == m_unlockDatabaseWidget) { - db = m_unlockDatabaseWidget->database(); + if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::Merge) { + mergeDatabase(accepted); + return; } + QSharedPointer db; + if (senderDialog) { + db = senderDialog->database(); + } else { + db = m_databaseOpenWidget->database(); + } replaceDatabase(db); + if (db->isReadOnly()) { + showMessage(tr("File opened in read only mode."), MessageWidget::Warning, false, -1); + } restoreGroupEntryFocus(m_groupBeforeLock, m_entryBeforeLock); - m_groupBeforeLock = Uuid(); - m_entryBeforeLock = Uuid(); + m_groupBeforeLock = QUuid(); + m_entryBeforeLock = QUuid(); - setCurrentWidget(m_mainWidget); - m_unlockDatabaseWidget->clearForms(); - emit unlockedDatabase(); + switchToMainView(); + emit databaseUnlocked(); - if (sender() == m_unlockDatabaseDialog) { - QList dbList; + if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::AutoType) { + QList> dbList; dbList.append(m_db); autoType()->performGlobalAutoType(dbList); } @@ -961,17 +970,77 @@ void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::Mod openUrlForEntry(entry); } break; + case EntryModel::Totp: + if (entry->hasTotp()) { + setClipboardTextAndMinimize(entry->totp()); + } else { + setupTotp(); + } + break; + case EntryModel::ParentGroup: + // Call this first to clear out of search mode, otherwise + // the desired entry is not properly selected + endSearch(); + m_groupView->setCurrentGroup(entry->group()); + m_entryView->setCurrentEntry(entry); + break; // TODO: switch to 'Notes' tab in details view/pane - //case EntryModel::Notes: + // case EntryModel::Notes: // break; // TODO: switch to 'Attachments' tab in details view/pane - //case EntryModel::Attachments: + // case EntryModel::Attachments: // break; default: switchToEntryEdit(entry); } } +void DatabaseWidget::switchToDatabaseSettings() +{ + m_databaseSettingDialog->load(m_db); + setCurrentWidget(m_databaseSettingDialog); +} + +void DatabaseWidget::switchToOpenDatabase() +{ + switchToOpenDatabase(m_db->filePath()); +} + +void DatabaseWidget::switchToOpenDatabase(const QString& filePath) +{ + updateFilePath(filePath); + m_databaseOpenWidget->load(filePath); + setCurrentWidget(m_databaseOpenWidget); +} + +void DatabaseWidget::switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile) +{ + switchToOpenDatabase(filePath); + m_databaseOpenWidget->enterKey(password, keyFile); +} + +void DatabaseWidget::switchToCsvImport(const QString& filePath) +{ + setCurrentWidget(m_csvImportWizard); + m_csvImportWizard->load(filePath, m_db.data()); +} + +void DatabaseWidget::csvImportFinished(bool accepted) +{ + if (!accepted) { + emit closeRequest(); + } else { + switchToMainView(); + } +} + +void DatabaseWidget::switchToImportKeepass1(const QString& filePath) +{ + updateFilePath(filePath); + m_keepass1OpenWidget->load(filePath); + setCurrentWidget(m_keepass1OpenWidget); +} + void DatabaseWidget::switchToEntryEdit() { Entry* entry = m_entryView->currentEntry(); @@ -994,127 +1063,63 @@ void DatabaseWidget::switchToGroupEdit() switchToGroupEdit(group, false); } -void DatabaseWidget::switchToMasterKeyChange(bool disableCancel) +void DatabaseWidget::switchToMasterKeyChange() { - m_changeMasterKeyWidget->clearForms(); - m_changeMasterKeyWidget->setCancelEnabled(!disableCancel); - setCurrentWidget(m_changeMasterKeyWidget); - m_importingCsv = false; + switchToDatabaseSettings(); + m_databaseSettingDialog->showMasterKeySettings(); } -void DatabaseWidget::switchToDatabaseSettings() +void DatabaseWidget::performUnlockDatabase(const QString& password, const QString& keyfile) { - m_databaseSettingsWidget->load(m_db); - setCurrentWidget(m_databaseSettingsWidget); -} + if (password.isEmpty() && keyfile.isEmpty()) { + return; + } -void DatabaseWidget::switchToOpenDatabase(const QString& filePath) -{ - updateFilePath(filePath); - if (m_databaseOpenWidget) { - m_databaseOpenWidget->load(filePath); - setCurrentWidget(m_databaseOpenWidget); - } else if (m_unlockDatabaseWidget) { - m_unlockDatabaseWidget->load(filePath); - setCurrentWidget(m_unlockDatabaseWidget); + if (!m_db->isInitialized() || isLocked()) { + switchToOpenDatabase(); + m_databaseOpenWidget->enterKey(password, keyfile); } } -void DatabaseWidget::switchToOpenDatabase(const QString& filePath, const QString& password, - const QString& keyFile) +void DatabaseWidget::refreshSearch() { - updateFilePath(filePath); - switchToOpenDatabase(filePath); - if (m_databaseOpenWidget) { - m_databaseOpenWidget->enterKey(password, keyFile); - } else if (m_unlockDatabaseWidget) { - m_unlockDatabaseWidget->enterKey(password, keyFile); - } -} - -void DatabaseWidget::switchToImportCsv(const QString& filePath) -{ - updateFilePath(filePath); - m_csvImportWizard->load(filePath, m_db); - m_changeMasterKeyWidget->clearForms(); - m_changeMasterKeyWidget->setCancelEnabled(false); - setCurrentWidget(m_changeMasterKeyWidget); - m_importingCsv = true; -} - -void DatabaseWidget::switchToOpenMergeDatabase(const QString& filePath) -{ - m_databaseOpenMergeWidget->clearForms(); - m_databaseOpenMergeWidget->load(filePath); - setCurrentWidget(m_databaseOpenMergeWidget); -} - - -void DatabaseWidget::switchToOpenMergeDatabase(const QString& filePath, const QString& password, - const QString& keyFile) -{ - switchToOpenMergeDatabase(filePath); - m_databaseOpenMergeWidget->enterKey(password, keyFile); -} - -void DatabaseWidget::switchToImportKeepass1(const QString& filePath) -{ - updateFilePath(filePath); - m_keepass1OpenWidget->load(filePath); - setCurrentWidget(m_keepass1OpenWidget); -} - -void DatabaseWidget::databaseModified() -{ - m_databaseModified = true; -} - -void DatabaseWidget::databaseSaved() -{ - m_databaseModified = false; -} - -void DatabaseWidget::refreshSearch() { - if (isInSearchMode()) { + if (isSearchActive()) { search(m_lastSearchText); } } void DatabaseWidget::search(const QString& searchtext) { - if (searchtext.isEmpty()) - { + if (searchtext.isEmpty()) { endSearch(); return; } emit searchModeAboutToActivate(); - Qt::CaseSensitivity caseSensitive = m_searchCaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive; - Group* searchGroup = m_searchLimitGroup ? currentGroup() : m_db->rootGroup(); - QList searchResult = EntrySearcher().search(searchtext, searchGroup, caseSensitive); + QList searchResult = m_EntrySearcher->search(searchtext, searchGroup); - m_entryView->setEntryList(searchResult); + m_entryView->displaySearch(searchResult); m_lastSearchText = searchtext; // Display a label detailing our search results - if (searchResult.size() > 0) { + if (!searchResult.isEmpty()) { m_searchingLabel->setText(tr("Search Results (%1)").arg(searchResult.size())); - } - else { + } else { m_searchingLabel->setText(tr("No Results")); } m_searchingLabel->setVisible(true); + m_shareLabel->setVisible(false); emit searchModeActivated(); } void DatabaseWidget::setSearchCaseSensitive(bool state) { - m_searchCaseSensitive = state; + m_EntrySearcher->setCaseSensitive(state); refreshSearch(); } @@ -1127,10 +1132,34 @@ void DatabaseWidget::setSearchLimitGroup(bool state) void DatabaseWidget::onGroupChanged(Group* group) { // Intercept group changes if in search mode - if (isInSearchMode()) + if (isSearchActive() && m_searchLimitGroup) { search(m_lastSearchText); - else - m_entryView->setGroup(group); + } else if (isSearchActive()) { + endSearch(); + } else { + m_entryView->displayGroup(group); + } + + m_previewView->setGroup(group); + +#ifdef WITH_XC_KEESHARE + auto shareLabel = KeeShare::sharingLabel(group); + if (!shareLabel.isEmpty()) { + m_shareLabel->setText(shareLabel); + m_shareLabel->setVisible(true); + } else { + m_shareLabel->setVisible(false); + } +#endif +} + +void DatabaseWidget::onDatabaseModified() +{ + if (!m_blockAutoSave && config()->get("AutoSaveAfterEveryChange").toBool()) { + save(); + } + + m_blockAutoSave = false; } QString DatabaseWidget::getCurrentSearch() @@ -1140,12 +1169,12 @@ QString DatabaseWidget::getCurrentSearch() void DatabaseWidget::endSearch() { - if (isInSearchMode()) - { + if (isSearchActive()) { emit listModeAboutToActivate(); // Show the normal entry view of the current group - m_entryView->setGroup(currentGroup()); + m_entryView->displayGroup(currentGroup()); + onGroupChanged(currentGroup()); emit listModeActivated(); } @@ -1154,6 +1183,9 @@ void DatabaseWidget::endSearch() m_searchingLabel->setText(tr("Searching...")); m_lastSearchText.clear(); + + // Tell the search widget to clear + emit clearSearch(); } void DatabaseWidget::emitGroupContextMenuRequested(const QPoint& pos) @@ -1166,35 +1198,13 @@ void DatabaseWidget::emitEntryContextMenuRequested(const QPoint& pos) emit entryContextMenuRequested(m_entryView->viewport()->mapToGlobal(pos)); } -void DatabaseWidget::emitPressedEntry() +void DatabaseWidget::onEntryChanged(Entry* entry) { - Entry* currentEntry = m_entryView->currentEntry(); - emitPressedEntry(currentEntry); -} - -void DatabaseWidget::emitPressedEntry(Entry* currentEntry) -{ - if (!currentEntry) { - // if no entry is pressed, leave in details the last entry - return; + if (entry) { + m_previewView->setEntry(entry); } - emit pressedEntry(currentEntry); -} - -void DatabaseWidget::emitPressedGroup(Group* currentGroup) -{ - if (!currentGroup) { - // if no group is pressed, leave in details the last group - return; - } - - emit pressedGroup(currentGroup); -} - -bool DatabaseWidget::dbHasKey() const -{ - return m_db->hasKey(); + emit entrySelectionChanged(); } bool DatabaseWidget::canDeleteCurrentGroup() const @@ -1203,24 +1213,79 @@ bool DatabaseWidget::canDeleteCurrentGroup() const return !isRootGroup; } -bool DatabaseWidget::isInSearchMode() const -{ - return m_entryView->inSearchMode(); -} - Group* DatabaseWidget::currentGroup() const { return m_groupView->currentGroup(); } -void DatabaseWidget::lock() +void DatabaseWidget::closeEvent(QCloseEvent* event) { - Q_ASSERT(currentMode() != DatabaseWidget::LockedMode); + if (!isLocked() && !lock()) { + event->ignore(); + return; + } + + event->accept(); +} + +void DatabaseWidget::showEvent(QShowEvent* event) +{ + if (!m_db->isInitialized() || isLocked()) { + switchToOpenDatabase(); + } + + event->accept(); +} + +bool DatabaseWidget::lock() +{ + if (isLocked()) { + return true; + } + + clipboard()->clearCopiedText(); + + if (currentMode() == DatabaseWidget::Mode::EditMode) { + auto result = MessageBox::question(this, + tr("Lock Database?"), + tr("You are editing an entry. Discard changes and lock anyway?"), + MessageBox::Discard | MessageBox::Cancel, + MessageBox::Cancel); + if (result == MessageBox::Cancel) { + return false; + } + } + + if (m_db->isModified()) { + if (config()->get("AutoSaveOnExit").toBool()) { + if (!save()) { + return false; + } + } else { + QString msg; + if (!m_db->metadata()->name().toHtmlEscaped().isEmpty()) { + msg = tr("\"%1\" was modified.\nSave changes?").arg(m_db->metadata()->name().toHtmlEscaped()); + } else { + msg = tr("Database was modified.\nSave changes?"); + } + auto result = MessageBox::question(this, + tr("Save changes?"), + msg, + MessageBox::Save | MessageBox::Discard | MessageBox::Cancel, + MessageBox::Save); + if (result == MessageBox::Save) { + if (!save()) { + return false; + } + } else if (result == MessageBox::Cancel) { + return false; + } + } + } if (m_groupView->currentGroup()) { m_groupBeforeLock = m_groupView->currentGroup()->uuid(); - } - else { + } else { m_groupBeforeLock = m_db->rootGroup()->uuid(); } @@ -1230,128 +1295,99 @@ void DatabaseWidget::lock() endSearch(); clearAllWidgets(); - m_unlockDatabaseWidget->load(m_filePath); - setCurrentWidget(m_unlockDatabaseWidget); - Database* newDb = new Database(); - newDb->metadata()->setName(m_db->metadata()->name()); + switchToOpenDatabase(m_db->filePath()); + + auto newDb = QSharedPointer::create(m_db->filePath()); replaceDatabase(newDb); + + emit databaseLocked(); + + return true; } -void DatabaseWidget::updateFilePath(const QString &filePath) +void DatabaseWidget::updateFilePath(const QString& filePath) { - if (!m_filePath.isEmpty()) { - m_fileWatcher.removePath(m_filePath); - } - - m_fileWatcher.addPath(filePath); - m_filePath = filePath; + m_fileWatcher->start(filePath); + m_db->setFilePath(filePath); } void DatabaseWidget::blockAutoReload(bool block) { if (block) { - m_ignoreAutoReload = true; - m_fileWatchTimer.stop(); + m_fileWatcher->ignoreFileChanges(); } else { - m_fileWatchUnblockTimer.start(500); + m_fileWatcher->observeFileChanges(true); } } -void DatabaseWidget::unblockAutoReload() -{ - m_ignoreAutoReload = false; - updateFilePath(m_filePath); -} - -void DatabaseWidget::onWatchedFileChanged() -{ - if (m_ignoreAutoReload) { - return; - } - if (m_fileWatchTimer.isActive()) - return; - - m_fileWatchTimer.start(500); -} - void DatabaseWidget::reloadDatabaseFile() { - if (!m_db || currentMode() == DatabaseWidget::LockedMode) { + if (!m_db || isLocked()) { return; } - if (currentMode() == DatabaseWidget::LockedMode) { - return; - } + m_blockAutoSave = true; - if (! config()->get("AutoReloadOnChange").toBool()) { + if (!config()->get("AutoReloadOnChange").toBool()) { // Ask if we want to reload the db - QMessageBox::StandardButton mb = MessageBox::question(this, tr("File has changed"), - tr("The database file has changed. Do you want to load the changes?"), - QMessageBox::Yes | QMessageBox::No); + auto result = MessageBox::question(this, + tr("File has changed"), + tr("The database file has changed. Do you want to load the changes?"), + MessageBox::Yes | MessageBox::No); - if (mb == QMessageBox::No) { + if (result == MessageBox::No) { // Notify everyone the database does not match the file - emit m_db->modified(); - m_databaseModified = true; + m_db->markAsModified(); // Rewatch the database file - m_fileWatcher.addPath(m_filePath); + m_fileWatcher->restart(); return; } } - KeePass2Reader reader; - QFile file(m_filePath); - if (file.open(QIODevice::ReadOnly)) { - Database* db = reader.readDatabase(&file, database()->key()); - if (db != nullptr) { - if (m_databaseModified) { - // Ask if we want to merge changes into new database - QMessageBox::StandardButton mb = MessageBox::question(this, tr("Merge Request"), - tr("The database file has changed and you have unsaved changes.\n" - "Do you want to merge your changes?"), - QMessageBox::Yes | QMessageBox::No); + QString error; + auto db = QSharedPointer::create(m_db->filePath()); + if (db->open(database()->key(), &error, true)) { + if (m_db->isModified()) { + // Ask if we want to merge changes into new database + auto result = MessageBox::question( + this, + tr("Merge Request"), + tr("The database file has changed and you have unsaved changes.\nDo you want to merge your changes?"), + MessageBox::Merge | MessageBox::Cancel, + MessageBox::Merge); - if (mb == QMessageBox::Yes) { - // Merge the old database into the new one - m_db->setEmitModified(false); - db->merge(m_db); - } else { - // Since we are accepting the new file as-is, internally mark as unmodified - // TODO: when saving is moved out of DatabaseTabWidget, this should be replaced - m_databaseModified = false; - } + if (result == MessageBox::Merge) { + // Merge the old database into the new one + Merger merger(m_db.data(), db.data()); + merger.merge(); } - - Uuid groupBeforeReload; - if (m_groupView && m_groupView->currentGroup()) { - groupBeforeReload = m_groupView->currentGroup()->uuid(); - } - else { - groupBeforeReload = m_db->rootGroup()->uuid(); - } - - Uuid entryBeforeReload; - if (m_entryView && m_entryView->currentEntry()) { - entryBeforeReload = m_entryView->currentEntry()->uuid(); - } - - replaceDatabase(db); - restoreGroupEntryFocus(groupBeforeReload, entryBeforeReload); - } + + QUuid groupBeforeReload; + if (m_groupView && m_groupView->currentGroup()) { + groupBeforeReload = m_groupView->currentGroup()->uuid(); + } else { + groupBeforeReload = m_db->rootGroup()->uuid(); + } + + QUuid entryBeforeReload; + if (m_entryView && m_entryView->currentEntry()) { + entryBeforeReload = m_entryView->currentEntry()->uuid(); + } + + bool isReadOnly = m_db->isReadOnly(); + replaceDatabase(db); + m_db->setReadOnly(isReadOnly); + restoreGroupEntryFocus(groupBeforeReload, entryBeforeReload); } else { - m_messageWidget->showMessage( - tr("Could not open the new database file while attempting to autoreload this database.") - .append("\n").append(file.errorString()), - MessageWidget::Error); - // HACK: Directly calling the database's signal + showMessage(tr("Could not open the new database file while attempting to autoreload.\nError: %1").arg(error), + MessageWidget::Error); // Mark db as modified since existing data may differ from file or file was deleted - m_db->modified(); + m_db->markAsModified(); } // Rewatch the database file - m_fileWatcher.addPath(m_filePath); + m_fileWatcher->restart(); } int DatabaseWidget::numberOfSelectedEntries() const @@ -1370,37 +1406,28 @@ QStringList DatabaseWidget::customEntryAttributes() const } /* - * Restores the focus on the group and entry that was focused - * before the database was locked or reloaded. + * Restores the focus on the group and entry provided */ -void DatabaseWidget::restoreGroupEntryFocus(Uuid groupUuid, Uuid entryUuid) +void DatabaseWidget::restoreGroupEntryFocus(const QUuid& groupUuid, const QUuid& entryUuid) { - Group* restoredGroup = nullptr; - const QList groups = m_db->rootGroup()->groupsRecursive(true); - for (Group* group : groups) { - if (group->uuid() == groupUuid) { - restoredGroup = group; - break; + auto group = m_db->rootGroup()->findGroupByUuid(groupUuid); + if (group) { + m_groupView->setCurrentGroup(group); + auto entry = group->findEntryByUuid(entryUuid); + if (entry) { + m_entryView->setCurrentEntry(entry); } } - - if (restoredGroup != nullptr) { - m_groupView->setCurrentGroup(restoredGroup); - - const QList entries = restoredGroup->entries(); - for (Entry* entry : entries) { - if (entry->uuid() == entryUuid) { - m_entryView->setCurrentEntry(entry); - break; - } - } - } - } bool DatabaseWidget::isGroupSelected() const { - return m_groupView->currentGroup() != nullptr; + return m_groupView->currentGroup(); +} + +bool DatabaseWidget::currentEntryHasFocus() +{ + return m_entryView->numberOfSelectedEntries() > 0 && m_entryView->hasFocus(); } bool DatabaseWidget::currentEntryHasTitle() @@ -1443,7 +1470,6 @@ bool DatabaseWidget::currentEntryHasUrl() return !currentEntry->resolveMultiplePlaceholders(currentEntry->url()).isEmpty(); } - bool DatabaseWidget::currentEntryHasTotp() { Entry* currentEntry = m_entryView->currentEntry(); @@ -1464,34 +1490,117 @@ bool DatabaseWidget::currentEntryHasNotes() return !currentEntry->resolveMultiplePlaceholders(currentEntry->notes()).isEmpty(); } -GroupView* DatabaseWidget::groupView() { +GroupView* DatabaseWidget::groupView() +{ return m_groupView; } -EntryView* DatabaseWidget::entryView() { +EntryView* DatabaseWidget::entryView() +{ return m_entryView; } -void DatabaseWidget::showUnlockDialog() +/** + * Save the database to disk. + * + * This method will try to save several times in case of failure and + * ask to disable safe saves if it is unable to save after the third attempt. + * Set `attempt` to -1 to disable this behavior. + * + * @param attempt current save attempt or -1 to disable attempts + * @return true on success + */ +bool DatabaseWidget::save(int attempt) { - m_unlockDatabaseDialog->clearForms(); - m_unlockDatabaseDialog->setFilePath(m_filePath); + // Never allow saving a locked database; it causes corruption + Q_ASSERT(!isLocked()); + // Release build interlock + if (isLocked()) { + // We return true since a save is not required + return true; + } -#if defined(Q_OS_MAC) - autoType()->raiseWindow(); - Tools::wait(500); -#endif + if (m_db->isReadOnly() || m_db->filePath().isEmpty()) { + return saveAs(); + } - m_unlockDatabaseDialog->show(); - m_unlockDatabaseDialog->activateWindow(); + blockAutoReload(true); + // TODO: Make this async, but lock out the database widget to prevent re-entrance + bool useAtomicSaves = config()->get("UseAtomicSaves", true).toBool(); + QString errorMessage; + bool ok = m_db->save(&errorMessage, useAtomicSaves, config()->get("BackupBeforeSave").toBool()); + blockAutoReload(false); + + if (ok) { + return true; + } + + if (attempt >= 0 && attempt <= 2) { + return save(attempt + 1); + } + + if (attempt > 2 && useAtomicSaves) { + // Saving failed 3 times, issue a warning and attempt to resolve + auto result = MessageBox::question(this, + tr("Disable safe saves?"), + tr("KeePassXC has failed to save the database multiple times. " + "This is likely caused by file sync services holding a lock on " + "the save file.\nDisable safe saves and try again?"), + MessageBox::Disable | MessageBox::Cancel, + MessageBox::Disable); + if (result == MessageBox::Disable) { + config()->set("UseAtomicSaves", false); + return save(attempt + 1); + } + } + + showMessage(tr("Writing the database failed.\n%1").arg(errorMessage), MessageWidget::Error); + return false; } -void DatabaseWidget::closeUnlockDialog() +/** + * Save database under a new user-selected filename. + * + * @return true on success + */ +bool DatabaseWidget::saveAs() { - m_unlockDatabaseDialog->close(); + while (true) { + QString oldFilePath = m_db->filePath(); + if (!QFileInfo::exists(oldFilePath)) { + oldFilePath = QDir::toNativeSeparators(config()->get("LastDir", QDir::homePath()).toString() + "/" + + tr("Passwords").append(".kdbx")); + } + QString newFilePath = fileDialog()->getSaveFileName(this, + tr("Save database as"), + oldFilePath, + tr("KeePass 2 Database").append(" (*.kdbx)"), + nullptr, + nullptr, + "kdbx"); + + if (!newFilePath.isEmpty()) { + // Ensure we don't recurse back into this function + m_db->setReadOnly(false); + m_db->setFilePath(newFilePath); + + if (!save(-1)) { + // Failed to save, try again + continue; + } + + return true; + } + + // Canceled file selection + return false; + } } -void DatabaseWidget::showMessage(const QString& text, MessageWidget::MessageType type, bool showClosebutton, int autoHideTimeout) +void DatabaseWidget::showMessage(const QString& text, + MessageWidget::MessageType type, + bool showClosebutton, + int autoHideTimeout) { m_messageWidget->setCloseButtonVisible(showClosebutton); m_messageWidget->showMessage(text, type, autoHideTimeout); @@ -1516,17 +1625,53 @@ bool DatabaseWidget::isRecycleBinSelected() const void DatabaseWidget::emptyRecycleBin() { - if(!isRecycleBinSelected()) { + if (!isRecycleBinSelected()) { return; } - QMessageBox::StandardButton result = MessageBox::question( - this, tr("Empty recycle bin?"), - tr("Are you sure you want to permanently delete everything from your recycle bin?"), - QMessageBox::Yes | QMessageBox::No); + auto result = + MessageBox::question(this, + tr("Empty recycle bin?"), + tr("Are you sure you want to permanently delete everything from your recycle bin?"), + MessageBox::Empty | MessageBox::Cancel, + MessageBox::Cancel); - if (result == QMessageBox::Yes) { + if (result == MessageBox::Empty) { m_db->emptyRecycleBin(); refreshSearch(); } } + +void DatabaseWidget::processAutoOpen() +{ + Q_ASSERT(m_db); + + auto* autoopenGroup = m_db->rootGroup()->findGroupByPath("/AutoOpen"); + if (!autoopenGroup) { + return; + } + + for (const auto* entry : autoopenGroup->entries()) { + if (entry->url().isEmpty() || entry->password().isEmpty()) { + continue; + } + QFileInfo filepath; + if (entry->url().startsWith("file://")) { + QUrl url(entry->url()); + filepath.setFile(url.toLocalFile()); + } else { + filepath.setFile(entry->url()); + if (filepath.isRelative()) { + QFileInfo currentpath(m_db->filePath()); + filepath.setFile(currentpath.absoluteDir(), entry->url()); + } + } + + if (!filepath.isFile()) { + continue; + } + + // Request to open the database file in the background + emit requestOpenDatabase(filepath.canonicalFilePath(), true, entry->password()); + } +} diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index 464a543ab..9c2788995 100644 --- a/src/gui/DatabaseWidget.h +++ b/src/gui/DatabaseWidget.h @@ -1,6 +1,6 @@ /* + * Copyright (C) 2018 KeePassXC Team * Copyright (C) 2010 Felix Geyer - * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,39 +19,39 @@ #ifndef KEEPASSX_DATABASEWIDGET_H #define KEEPASSX_DATABASEWIDGET_H +#include #include #include -#include #include -#include "core/Uuid.h" - -#include "gui/entry/EntryModel.h" +#include "DatabaseOpenDialog.h" #include "gui/MessageWidget.h" #include "gui/csvImport/CsvImportWizard.h" +#include "gui/entry/EntryModel.h" + +#include "config-keepassx.h" -class ChangeMasterKeyWidget; class DatabaseOpenWidget; -class DatabaseSettingsWidget; +class KeePass1OpenWidget; +class DatabaseSettingsDialog; class Database; +class DelayingFileWatcher; class EditEntryWidget; class EditGroupWidget; class Entry; class EntryView; +class EntrySearcher; class Group; class GroupView; -class KeePass1OpenWidget; class QFile; class QMenu; class QSplitter; class QLabel; -class UnlockDatabaseWidget; class MessageWidget; -class DetailsWidget; -class UnlockDatabaseDialog; -class QFileSystemWatcher; +class EntryPreviewWidget; -namespace Ui { +namespace Ui +{ class SearchWidget; } @@ -60,7 +60,9 @@ class DatabaseWidget : public QStackedWidget Q_OBJECT public: - enum Mode + friend class DatabaseOpenDialog; + + enum class Mode { None, ImportMode, @@ -69,75 +71,86 @@ public: LockedMode }; - explicit DatabaseWidget(Database* db, QWidget* parent = nullptr); + explicit DatabaseWidget(QSharedPointer db, QWidget* parent = nullptr); + explicit DatabaseWidget(const QString& filePath, QWidget* parent = nullptr); ~DatabaseWidget(); - Database* database(); - bool dbHasKey() const; - bool canDeleteCurrentGroup() const; - bool isInSearchMode() const; - QString getCurrentSearch(); - Group* currentGroup() const; - int addWidget(QWidget* w); - void setCurrentIndex(int index); - void setCurrentWidget(QWidget* widget); + + QSharedPointer database() const; + DatabaseWidget::Mode currentMode() const; - void lock(); - void updateFilePath(const QString &filePath); - int numberOfSelectedEntries() const; - QStringList customEntryAttributes() const; + bool isLocked() const; + bool isSearchActive() const; + + QString getCurrentSearch(); + void refreshSearch(); + + GroupView* groupView(); + EntryView* entryView(); + + Group* currentGroup() const; + bool canDeleteCurrentGroup() const; bool isGroupSelected() const; - bool isInEditMode() const; + bool isRecycleBinSelected() const; + int numberOfSelectedEntries() const; + + QStringList customEntryAttributes() const; bool isEditWidgetModified() const; - QList mainSplitterSizes() const; - void setMainSplitterSizes(const QList& sizes); - QList detailSplitterSizes() const; - void setDetailSplitterSizes(const QList& sizes); bool isUsernamesHidden() const; - void setUsernamesHidden(const bool hide); + void setUsernamesHidden(bool hide); bool isPasswordsHidden() const; - void setPasswordsHidden(const bool hide); - QByteArray entryViewState() const; - bool setEntryViewState(const QByteArray& state) const; + void setPasswordsHidden(bool hide); void clearAllWidgets(); + bool currentEntryHasFocus(); bool currentEntryHasTitle(); bool currentEntryHasUsername(); bool currentEntryHasPassword(); bool currentEntryHasUrl(); bool currentEntryHasNotes(); bool currentEntryHasTotp(); - GroupView* groupView(); - EntryView* entryView(); - void showUnlockDialog(); - void closeUnlockDialog(); + void blockAutoReload(bool block = true); - void refreshSearch(); - bool isRecycleBinSelected() const; + + QByteArray entryViewState() const; + bool setEntryViewState(const QByteArray& state) const; + QList mainSplitterSizes() const; + void setMainSplitterSizes(const QList& sizes); + QList previewSplitterSizes() const; + void setPreviewSplitterSizes(const QList& sizes); signals: + // relayed Database signals + void databaseFilePathChanged(const QString& oldPath, const QString& newPath); + void databaseModified(); + void databaseSaved(); + void databaseUnlocked(); + void databaseLocked(); + void closeRequest(); void currentModeChanged(DatabaseWidget::Mode mode); void groupChanged(); void entrySelectionChanged(); - void databaseChanged(Database* newDb, bool unsavedChanges); - void databaseMerged(Database* mergedDb); + void requestOpenDatabase(const QString& filePath, bool inBackground, const QString& password); + void databaseMerged(QSharedPointer mergedDb); void groupContextMenuRequested(const QPoint& globalPos); void entryContextMenuRequested(const QPoint& globalPos); - void pressedEntry(Entry* selectedEntry); - void pressedGroup(Group* selectedGroup); - void unlockedDatabase(); void listModeAboutToActivate(); void listModeActivated(); void searchModeAboutToActivate(); void searchModeActivated(); void mainSplitterSizesChanged(); - void detailSplitterSizesChanged(); + void previewSplitterSizesChanged(); void entryViewStateChanged(); - void updateSearch(QString text); + void clearSearch(); public slots: + bool lock(); + bool save(int attempt = 0); + bool saveAs(); + + void replaceDatabase(QSharedPointer db); void createEntry(); void cloneEntry(); - void deleteEntries(); + void deleteSelectedEntries(); void setFocus(); void copyTitle(); void copyUsername(); @@ -146,6 +159,7 @@ public slots: void copyNotes(); void copyAttribute(QAction* action); void showTotp(); + void showTotpKeyQrCode(); void copyTotp(); void setupTotp(); void performAutoType(); @@ -153,21 +167,18 @@ public slots: void openUrlForEntry(Entry* entry); void createGroup(); void deleteGroup(); - void onGroupChanged(Group* group); - void switchToView(bool accepted); + void switchToMainView(bool previousDialogAccepted = false); void switchToEntryEdit(); void switchToGroupEdit(); - void switchToMasterKeyChange(bool disableCancel = false); + void switchToMasterKeyChange(); void switchToDatabaseSettings(); + void switchToOpenDatabase(); void switchToOpenDatabase(const QString& filePath); void switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile); - void switchToImportCsv(const QString& filePath); + void switchToCsvImport(const QString& filePath); + void performUnlockDatabase(const QString& password, const QString& keyfile = {}); void csvImportFinished(bool accepted); - void switchToOpenMergeDatabase(const QString& filePath); - void switchToOpenMergeDatabase(const QString& filePath, const QString& password, const QString& keyFile); void switchToImportKeepass1(const QString& filePath); - void databaseModified(); - void databaseSaved(); void emptyRecycleBin(); // Search related slots @@ -176,80 +187,82 @@ public slots: void setSearchLimitGroup(bool state); void endSearch(); - void showMessage(const QString& text, MessageWidget::MessageType type, bool showClosebutton = true, + void showMessage(const QString& text, + MessageWidget::MessageType type, + bool showClosebutton = true, int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); void showErrorMessage(const QString& errorMessage); void hideMessage(); +protected: + void closeEvent(QCloseEvent* event) override; + void showEvent(QShowEvent* event) override; + private slots: + void updateFilePath(const QString& filePath); void entryActivationSignalReceived(Entry* entry, EntryModel::ModelColumn column); void switchBackToEntryEdit(); void switchToHistoryView(Entry* entry); - void switchToEntryEdit(Entry* entry); + void switchToEntryEdit(Entry*); void switchToEntryEdit(Entry* entry, bool create); void switchToGroupEdit(Group* entry, bool create); void emitGroupContextMenuRequested(const QPoint& pos); void emitEntryContextMenuRequested(const QPoint& pos); - void emitPressedEntry(); - void emitPressedEntry(Entry* currentEntry); - void emitPressedGroup(Group* currentGroup); - void updateMasterKey(bool accepted); - void openDatabase(bool accepted); - void mergeDatabase(bool accepted); + void onEntryChanged(Entry* entry); + void onGroupChanged(Group* group); + void onDatabaseModified(); + void connectDatabaseSignals(); + void loadDatabase(bool accepted); void unlockDatabase(bool accepted); + void mergeDatabase(bool accepted); void emitCurrentModeChanged(); // Database autoreload slots - void onWatchedFileChanged(); void reloadDatabaseFile(); - void restoreGroupEntryFocus(Uuid groupUuid, Uuid EntryUuid); - void unblockAutoReload(); + void restoreGroupEntryFocus(const QUuid& groupUuid, const QUuid& EntryUuid); private: + int addChildWidget(QWidget* w); void setClipboardTextAndMinimize(const QString& text); void setIconFromParent(); - void replaceDatabase(Database* db); + void processAutoOpen(); + bool confirmDeleteEntries(QList entries, bool permanent); - Database* m_db; - QWidget* m_mainWidget; - EditEntryWidget* m_editEntryWidget; - EditEntryWidget* m_historyEditEntryWidget; - EditGroupWidget* m_editGroupWidget; - ChangeMasterKeyWidget* m_changeMasterKeyWidget; - CsvImportWizard* m_csvImportWizard; - DatabaseSettingsWidget* m_databaseSettingsWidget; - DatabaseOpenWidget* m_databaseOpenWidget; - DatabaseOpenWidget* m_databaseOpenMergeWidget; - KeePass1OpenWidget* m_keepass1OpenWidget; - UnlockDatabaseWidget* m_unlockDatabaseWidget; - UnlockDatabaseDialog* m_unlockDatabaseDialog; - QSplitter* m_mainSplitter; - QSplitter* m_detailSplitter; - GroupView* m_groupView; - EntryView* m_entryView; - QLabel* m_searchingLabel; - Group* m_newGroup; - Entry* m_newEntry; - Group* m_newParent; - QString m_filePath; - Uuid m_groupBeforeLock; - Uuid m_entryBeforeLock; - MessageWidget* m_messageWidget; - DetailsWidget* m_detailsView; + QSharedPointer m_db; + + QPointer m_mainWidget; + QPointer m_mainSplitter; + QPointer m_messageWidget; + QPointer m_previewView; + QPointer m_previewSplitter; + QPointer m_searchingLabel; +#ifdef WITH_XC_KEESHARE + QPointer m_shareLabel; +#endif + QPointer m_csvImportWizard; + QPointer m_editEntryWidget; + QPointer m_editGroupWidget; + QPointer m_historyEditEntryWidget; + QPointer m_databaseSettingDialog; + QPointer m_databaseOpenWidget; + QPointer m_keepass1OpenWidget; + QPointer m_groupView; + QPointer m_entryView; + + QScopedPointer m_newGroup; + QScopedPointer m_newEntry; + QPointer m_newParent; + + QUuid m_groupBeforeLock; + QUuid m_entryBeforeLock; // Search state + EntrySearcher* m_EntrySearcher; QString m_lastSearchText; - bool m_searchCaseSensitive; bool m_searchLimitGroup; - // CSV import state - bool m_importingCsv; - // Autoreload - QFileSystemWatcher m_fileWatcher; - QTimer m_fileWatchTimer; - QTimer m_fileWatchUnblockTimer; - bool m_ignoreAutoReload; - bool m_databaseModified; + QPointer m_fileWatcher; + bool m_blockAutoSave; }; #endif // KEEPASSX_DATABASEWIDGET_H diff --git a/src/gui/DatabaseWidgetStateSync.cpp b/src/gui/DatabaseWidgetStateSync.cpp index 9b89412ea..5579b30cd 100644 --- a/src/gui/DatabaseWidgetStateSync.cpp +++ b/src/gui/DatabaseWidgetStateSync.cpp @@ -28,7 +28,7 @@ DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent) , m_blockUpdates(false) { m_mainSplitterSizes = variantToIntList(config()->get("GUI/SplitterState")); - m_detailSplitterSizes = variantToIntList(config()->get("GUI/DetailSplitterState")); + m_previewSplitterSizes = variantToIntList(config()->get("GUI/PreviewSplitterState")); m_hideUsernames = config()->get("GUI/HideUsernames").toBool(); m_hidePasswords = config()->get("GUI/HidePasswords").toBool(); m_listViewState = config()->get("GUI/ListViewState").toByteArray(); @@ -47,7 +47,7 @@ DatabaseWidgetStateSync::~DatabaseWidgetStateSync() void DatabaseWidgetStateSync::sync() { config()->set("GUI/SplitterState", intListToVariant(m_mainSplitterSizes)); - config()->set("GUI/DetailSplitterState", intListToVariant(m_detailSplitterSizes)); + config()->set("GUI/PreviewSplitterState", intListToVariant(m_previewSplitterSizes)); config()->set("GUI/HideUsernames", m_hideUsernames); config()->set("GUI/HidePasswords", m_hidePasswords); config()->set("GUI/ListViewState", m_listViewState); @@ -70,11 +70,11 @@ void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget) m_activeDbWidget->setMainSplitterSizes(m_mainSplitterSizes); } - if (!m_detailSplitterSizes.isEmpty()) { - m_activeDbWidget->setDetailSplitterSizes(m_detailSplitterSizes); + if (!m_previewSplitterSizes.isEmpty()) { + m_activeDbWidget->setPreviewSplitterSizes(m_previewSplitterSizes); } - if (m_activeDbWidget->isInSearchMode()) { + if (m_activeDbWidget->isSearchActive()) { restoreSearchView(); } else { restoreListView(); @@ -82,20 +82,13 @@ void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget) m_blockUpdates = false; - connect(m_activeDbWidget, SIGNAL(mainSplitterSizesChanged()), - SLOT(updateSplitterSizes())); - connect(m_activeDbWidget, SIGNAL(detailSplitterSizesChanged()), - SLOT(updateSplitterSizes())); - connect(m_activeDbWidget, SIGNAL(entryViewStateChanged()), - SLOT(updateViewState())); - connect(m_activeDbWidget, SIGNAL(listModeActivated()), - SLOT(restoreListView())); - connect(m_activeDbWidget, SIGNAL(searchModeActivated()), - SLOT(restoreSearchView())); - connect(m_activeDbWidget, SIGNAL(listModeAboutToActivate()), - SLOT(blockUpdates())); - connect(m_activeDbWidget, SIGNAL(searchModeAboutToActivate()), - SLOT(blockUpdates())); + connect(m_activeDbWidget, SIGNAL(mainSplitterSizesChanged()), SLOT(updateSplitterSizes())); + connect(m_activeDbWidget, SIGNAL(previewSplitterSizesChanged()), SLOT(updateSplitterSizes())); + connect(m_activeDbWidget, SIGNAL(entryViewStateChanged()), SLOT(updateViewState())); + connect(m_activeDbWidget, SIGNAL(listModeActivated()), SLOT(restoreListView())); + connect(m_activeDbWidget, SIGNAL(searchModeActivated()), SLOT(restoreSearchView())); + connect(m_activeDbWidget, SIGNAL(listModeAboutToActivate()), SLOT(blockUpdates())); + connect(m_activeDbWidget, SIGNAL(searchModeAboutToActivate()), SLOT(blockUpdates())); } } @@ -165,7 +158,7 @@ void DatabaseWidgetStateSync::updateSplitterSizes() } m_mainSplitterSizes = m_activeDbWidget->mainSplitterSizes(); - m_detailSplitterSizes = m_activeDbWidget->detailSplitterSizes(); + m_previewSplitterSizes = m_activeDbWidget->previewSplitterSizes(); } /** @@ -184,7 +177,7 @@ void DatabaseWidgetStateSync::updateViewState() m_hideUsernames = m_activeDbWidget->isUsernamesHidden(); m_hidePasswords = m_activeDbWidget->isPasswordsHidden(); - if (m_activeDbWidget->isInSearchMode()) { + if (m_activeDbWidget->isSearchActive()) { m_searchViewState = m_activeDbWidget->entryViewState(); } else { m_listViewState = m_activeDbWidget->entryViewState(); diff --git a/src/gui/DatabaseWidgetStateSync.h b/src/gui/DatabaseWidgetStateSync.h index 0b1c9b7cb..bf254e1f5 100644 --- a/src/gui/DatabaseWidgetStateSync.h +++ b/src/gui/DatabaseWidgetStateSync.h @@ -49,7 +49,7 @@ private: bool m_blockUpdates; QList m_mainSplitterSizes; - QList m_detailSplitterSizes; + QList m_previewSplitterSizes; bool m_hideUsernames; bool m_hidePasswords; diff --git a/src/gui/DetailsWidget.ui b/src/gui/DetailsWidget.ui deleted file mode 100644 index 38906150e..000000000 --- a/src/gui/DetailsWidget.ui +++ /dev/null @@ -1,737 +0,0 @@ - - - DetailsWidget - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QLayout::SetDefaultConstraint - - - 9 - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::AutoText - - - - - - - - 0 - - - 0 - - - 0 - - - - - - 10 - 75 - true - - - - - - - - - - - - - - Generate TOTP Token - - - - - - true - - - - - - - Close - - - - - - true - - - - - - - - - 0 - - - false - - - false - - - false - - - - General - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - PointingHandCursor - - - - - - Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Qt::LeftToRight - - - Username - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Expiration - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - URL - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Password - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - - - Attributes - - - - - - Qt::ClickFocus - - - true - - - - - - - - Attachments - - - - - - - - - - Notes - - - - - - Qt::ClickFocus - - - true - - - - - - - - Autotype - - - - - - QFrame::Sunken - - - true - - - true - - - false - - - 2 - - - false - - - 250 - - - 50 - - - true - - - - Window - - - - - Sequence - - - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QLayout::SetDefaultConstraint - - - 9 - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::AutoText - - - - - - - Close - - - - - - true - - - - - - - - - 0 - - - false - - - false - - - false - - - - General - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Expiration - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Autotype - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Searching - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Qt::Vertical - - - - - - - - - - - Notes - - - - - - Qt::ClickFocus - - - true - - - - - - - - - - - - - - - Search - - - - - Clear - - - - - - EntryAttachmentsWidget - QWidget -
    gui/entry/EntryAttachmentsWidget.h
    - 1 -
    - - ElidedLabel - QLabel -
    gui/widgets/ElidedLabel.h
    -
    -
    - - -
    diff --git a/src/gui/DialogyWidget.cpp b/src/gui/DialogyWidget.cpp index d8e05a911..858d2949b 100644 --- a/src/gui/DialogyWidget.cpp +++ b/src/gui/DialogyWidget.cpp @@ -28,34 +28,32 @@ DialogyWidget::DialogyWidget(QWidget* parent) void DialogyWidget::keyPressEvent(QKeyEvent* e) { -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS if (e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_Period) { if (!clickButton(QDialogButtonBox::Cancel)) { e->ignore(); } - } - else + } else #endif - if (!e->modifiers() || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) { + if (!e->modifiers() || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) { switch (e->key()) { - case Qt::Key_Enter: - case Qt::Key_Return: - if (!clickButton(QDialogButtonBox::Ok)) { + case Qt::Key_Enter: + case Qt::Key_Return: + if (!clickButton(QDialogButtonBox::Ok)) { + e->ignore(); + } + break; + case Qt::Key_Escape: + if (!clickButton(QDialogButtonBox::Cancel)) { + if (!clickButton(QDialogButtonBox::Close)) { e->ignore(); } - break; - case Qt::Key_Escape: - if (!clickButton(QDialogButtonBox::Cancel)) { - if (!clickButton(QDialogButtonBox::Close)) { - e->ignore(); - } - } - break; - default: - e->ignore(); + } + break; + default: + e->ignore(); } - } - else { + } else { e->ignore(); } } @@ -73,8 +71,7 @@ bool DialogyWidget::clickButton(QDialogButtonBox::StandardButton standardButton) } QList buttonBoxes = findChildren(); - for (int i = 0; i < buttonBoxes.size(); ++i) { - QDialogButtonBox* buttonBox = buttonBoxes.at(i); + for (auto buttonBox : buttonBoxes) { pb = buttonBox->button(standardButton); if (pb && pb->isVisible() && pb->isEnabled()) { pb->click(); diff --git a/src/gui/DragTabBar.cpp b/src/gui/DragTabBar.cpp index a19031a8d..c40cceb75 100644 --- a/src/gui/DragTabBar.cpp +++ b/src/gui/DragTabBar.cpp @@ -42,8 +42,7 @@ void DragTabBar::dragEnterEvent(QDragEnterEvent* event) m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); } event->setAccepted(true); - } - else { + } else { QTabBar::dragEnterEvent(event); } } @@ -55,14 +54,12 @@ void DragTabBar::dragMoveEvent(QDragMoveEvent* event) if (tab != -1) { if (tab == currentIndex()) { m_tabSwitchTimer->stop(); - } - else if (tab != m_tabSwitchIndex) { + } else if (tab != m_tabSwitchIndex) { m_tabSwitchIndex = tab; m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); } event->setAccepted(true); - } - else { + } else { m_tabSwitchIndex = -1; m_tabSwitchTimer->stop(); QTabBar::dragMoveEvent(event); diff --git a/src/gui/EditWidget.cpp b/src/gui/EditWidget.cpp index 7950fe987..be7ea01df 100644 --- a/src/gui/EditWidget.cpp +++ b/src/gui/EditWidget.cpp @@ -18,8 +18,9 @@ #include "EditWidget.h" #include "ui_EditWidget.h" -#include + #include +#include #include "core/FilePath.h" @@ -38,8 +39,7 @@ EditWidget::EditWidget(QWidget* parent) headlineLabel()->setFont(headerLabelFont); headlineLabel()->setTextFormat(Qt::PlainText); - connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), - m_ui->stackedWidget, SLOT(setCurrentIndex(int))); + connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); connect(m_ui->buttonBox, SIGNAL(accepted()), SIGNAL(accepted())); connect(m_ui->buttonBox, SIGNAL(rejected()), SIGNAL(rejected())); @@ -57,8 +57,9 @@ void EditWidget::addPage(const QString& labelText, const QIcon& icon, QWidget* w * from automatic resizing and it now should be able to fit into a user's monitor even if the monitor is only 768 * pixels high. */ - QScrollArea* scrollArea = new QScrollArea(m_ui->stackedWidget); + auto* scrollArea = new QScrollArea(m_ui->stackedWidget); scrollArea->setFrameShape(QFrame::NoFrame); + scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollArea->setWidget(widget); scrollArea->setWidgetResizable(true); m_ui->stackedWidget->addWidget(scrollArea); @@ -97,14 +98,17 @@ QLabel* EditWidget::headlineLabel() return m_ui->headerLabel; } -void EditWidget::setReadOnly(bool readOnly, bool applyEnabled) +void EditWidget::setReadOnly(bool readOnly) { m_readOnly = readOnly; if (readOnly) { m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Close); } else { - setupButtons(applyEnabled); + m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply); + // Find and connect the apply button + QPushButton* applyButton = m_ui->buttonBox->button(QDialogButtonBox::Apply); + connect(applyButton, SIGNAL(clicked()), SIGNAL(apply())); } } @@ -113,23 +117,24 @@ bool EditWidget::readOnly() const return m_readOnly; } -void EditWidget::setupButtons(bool applyEnabled) +void EditWidget::enableApplyButton(bool enabled) { - if (applyEnabled) { - m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply); - // Find and connect the apply button - QPushButton* applyButton = m_ui->buttonBox->button(QDialogButtonBox::Apply); - connect(applyButton, SIGNAL(clicked()), SIGNAL(apply())); - } else { - m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - disconnect(SIGNAL(apply())); + QPushButton* applyButton = m_ui->buttonBox->button(QDialogButtonBox::Apply); + if (applyButton) { + applyButton->setEnabled(enabled); } } void EditWidget::showMessage(const QString& text, MessageWidget::MessageType type) { - m_ui->messageWidget->setCloseButtonVisible(false); - m_ui->messageWidget->showMessage(text, type, 2000); + // Show error messages for a longer time to make sure the user can read them + if (type == MessageWidget::Error) { + m_ui->messageWidget->setCloseButtonVisible(true); + m_ui->messageWidget->showMessage(text, type, 15000); + } else { + m_ui->messageWidget->setCloseButtonVisible(false); + m_ui->messageWidget->showMessage(text, type, 2000); + } } void EditWidget::hideMessage() diff --git a/src/gui/EditWidget.h b/src/gui/EditWidget.h index 8b89f1f8f..f0d157c49 100644 --- a/src/gui/EditWidget.h +++ b/src/gui/EditWidget.h @@ -20,15 +20,16 @@ #define KEEPASSX_EDITWIDGET_H #include -#include #include +#include #include "gui/DialogyWidget.h" #include "gui/MessageWidget.h" class QLabel; -namespace Ui { +namespace Ui +{ class EditWidget; } @@ -45,8 +46,9 @@ public: void setCurrentPage(int index); void setHeadline(const QString& text); QLabel* headlineLabel(); - void setReadOnly(bool readOnly, bool applyEnabled = true); + void setReadOnly(bool readOnly); bool readOnly() const; + void enableApplyButton(bool enabled); signals: void apply(); @@ -58,8 +60,6 @@ protected slots: void hideMessage(); private: - void setupButtons(bool applyEnabled); - const QScopedPointer m_ui; bool m_readOnly; diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp index 8242c4399..242ae4542 100644 --- a/src/gui/EditWidgetIcons.cpp +++ b/src/gui/EditWidgetIcons.cpp @@ -30,39 +30,23 @@ #include "gui/MessageBox.h" #ifdef WITH_XC_NETWORKING +#include +#include #include #endif IconStruct::IconStruct() - : uuid(Uuid()) + : uuid(QUuid()) , number(0) { } -UrlFetchProgressDialog::UrlFetchProgressDialog(const QUrl &url, QWidget *parent) - : QProgressDialog(parent) -{ - setWindowTitle(tr("Download Progress")); - setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - setLabelText(tr("Downloading %1.").arg(url.toDisplayString())); - setMinimumDuration(2000); - setMinimumSize(QSize(400, 75)); -} - -void UrlFetchProgressDialog::networkReplyProgress(qint64 bytesRead, qint64 totalBytes) -{ - if (totalBytes > 0) { - setValue(static_cast(bytesRead / totalBytes)); - } else { - setValue(0); - } -} - EditWidgetIcons::EditWidgetIcons(QWidget* parent) : QWidget(parent) , m_ui(new Ui::EditWidgetIcons()) - , m_database(nullptr) + , m_db(nullptr) #ifdef WITH_XC_NETWORKING + , m_netMgr(new QNetworkAccessManager(this)) , m_reply(nullptr) #endif , m_defaultIconModel(new DefaultIconModel(this)) @@ -73,19 +57,24 @@ EditWidgetIcons::EditWidgetIcons(QWidget* parent) m_ui->defaultIconsView->setModel(m_defaultIconModel); m_ui->customIconsView->setModel(m_customIconModel); - connect(m_ui->defaultIconsView, SIGNAL(clicked(QModelIndex)), - this, SLOT(updateRadioButtonDefaultIcons())); - connect(m_ui->customIconsView, SIGNAL(clicked(QModelIndex)), - this, SLOT(updateRadioButtonCustomIcons())); - connect(m_ui->defaultIconsRadio, SIGNAL(toggled(bool)), - this, SLOT(updateWidgetsDefaultIcons(bool))); - connect(m_ui->customIconsRadio, SIGNAL(toggled(bool)), - this, SLOT(updateWidgetsCustomIcons(bool))); + // clang-format off + connect(m_ui->defaultIconsView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateRadioButtonDefaultIcons())); + connect(m_ui->customIconsView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateRadioButtonCustomIcons())); + connect(m_ui->defaultIconsRadio, SIGNAL(toggled(bool)), this, SLOT(updateWidgetsDefaultIcons(bool))); + connect(m_ui->customIconsRadio, SIGNAL(toggled(bool)), this, SLOT(updateWidgetsCustomIcons(bool))); connect(m_ui->addButton, SIGNAL(clicked()), SLOT(addCustomIconFromFile())); connect(m_ui->deleteButton, SIGNAL(clicked()), SLOT(removeCustomIcon())); connect(m_ui->faviconButton, SIGNAL(clicked()), SLOT(downloadFavicon())); + connect(m_ui->defaultIconsRadio, SIGNAL(toggled(bool)), this, SIGNAL(widgetUpdated())); + connect(m_ui->defaultIconsView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SIGNAL(widgetUpdated())); + connect(m_ui->customIconsView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SIGNAL(widgetUpdated())); + // clang-format on + m_ui->faviconButton->setVisible(false); + m_ui->addButton->setEnabled(true); } EditWidgetIcons::~EditWidgetIcons() @@ -94,7 +83,7 @@ EditWidgetIcons::~EditWidgetIcons() IconStruct EditWidgetIcons::state() { - Q_ASSERT(m_database); + Q_ASSERT(m_db); Q_ASSERT(!m_currentUuid.isNull()); IconStruct iconStruct; @@ -119,23 +108,26 @@ IconStruct EditWidgetIcons::state() void EditWidgetIcons::reset() { - m_database = nullptr; - m_currentUuid = Uuid(); + m_db.reset(); + m_currentUuid = QUuid(); } -void EditWidgetIcons::load(const Uuid& currentUuid, Database* database, const IconStruct& iconStruct, const QString& url) +void EditWidgetIcons::load(const QUuid& currentUuid, + const QSharedPointer& database, + const IconStruct& iconStruct, + const QString& url) { Q_ASSERT(database); Q_ASSERT(!currentUuid.isNull()); - m_database = database; + m_db = database; m_currentUuid = currentUuid; setUrl(url); m_customIconModel->setIcons(database->metadata()->customIconsScaledPixmaps(), database->metadata()->customIconsOrder()); - Uuid iconUuid = iconStruct.uuid; + QUuid iconUuid = iconStruct.uuid; if (iconUuid.isNull()) { int iconNumber = iconStruct.number; m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(iconNumber, 0)); @@ -164,11 +156,12 @@ void EditWidgetIcons::setUrl(const QString& url) } #ifdef WITH_XC_NETWORKING -namespace { +namespace +{ // Try to get the 2nd level domain of the host part of a QUrl. For example, // "foo.bar.example.com" would become "example.com", and "foo.bar.example.co.uk" // would become "example.co.uk". - QString getSecondLevelDomain(QUrl url) + QString getSecondLevelDomain(const QUrl& url) { QString fqdn = url.host(); fqdn.truncate(fqdn.length() - url.topLevelDomain().length()); @@ -177,21 +170,21 @@ namespace { return newdom; } - QUrl convertVariantToUrl(QVariant var) + QUrl convertVariantToUrl(const QVariant& var) { QUrl url; if (var.canConvert()) - url = var.value(); + url = var.toUrl(); return url; } - QUrl getRedirectTarget(QNetworkReply *reply) + QUrl getRedirectTarget(QNetworkReply* reply) { QVariant var = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); QUrl url = convertVariantToUrl(var); return url; } -} +} // namespace #endif void EditWidgetIcons::downloadFavicon() @@ -203,20 +196,43 @@ void EditWidgetIcons::downloadFavicon() m_urlsToTry.clear(); QString fullyQualifiedDomain = m_url.host(); - QString secondLevelDomain = getSecondLevelDomain(m_url); - // Attempt to simply load the favicon.ico file - if (fullyQualifiedDomain != secondLevelDomain) { - m_urlsToTry.append(QUrl(m_url.scheme() + "://" + fullyQualifiedDomain + "/favicon.ico")); + m_urlsToTry.append(QUrl(m_url.scheme() + "://" + fullyQualifiedDomain + "/favicon.ico")); + + // Determine if host portion of URL is an IP address by resolving it and + // searching for a match with the returned address(es). + bool hostIsIp = false; + QList hostAddressess = QHostInfo::fromName(fullyQualifiedDomain).addresses(); + for (auto addr : hostAddressess) { + if (addr.toString() == fullyQualifiedDomain) { + hostIsIp = true; + } } - m_urlsToTry.append(QUrl(m_url.scheme() + "://" + secondLevelDomain + "/favicon.ico")); - // Try to use Google fallback, if enabled - if (config()->get("security/IconDownloadFallbackToGoogle", false).toBool()) { - QUrl urlGoogle = QUrl("https://www.google.com/s2/favicons"); + if (!hostIsIp) { + QString secondLevelDomain = getSecondLevelDomain(m_url); - urlGoogle.setQuery("domain=" + QUrl::toPercentEncoding(secondLevelDomain)); - m_urlsToTry.append(urlGoogle); + // Attempt to simply load the favicon.ico file + if (fullyQualifiedDomain != secondLevelDomain) { + m_urlsToTry.append(QUrl(m_url.scheme() + "://" + secondLevelDomain + "/favicon.ico")); + } + } + + // Try to use alternative fallback URL, if enabled + if (config()->get("security/IconDownloadFallback", false).toBool()) { + QUrl fallbackUrl = QUrl("https://icons.duckduckgo.com"); + fallbackUrl.setPath("/ip3/" + QUrl::toPercentEncoding(fullyQualifiedDomain) + ".ico"); + + m_urlsToTry.append(fallbackUrl); + + if (!hostIsIp) { + QString secondLevelDomain = getSecondLevelDomain(m_url); + + if (fullyQualifiedDomain != secondLevelDomain) { + fallbackUrl.setPath("/ip3/" + QUrl::toPercentEncoding(secondLevelDomain) + ".ico"); + m_urlsToTry.append(fallbackUrl); + } + } } startFetchFavicon(m_urlsToTry.takeFirst()); @@ -234,7 +250,7 @@ void EditWidgetIcons::fetchFinished() { #ifdef WITH_XC_NETWORKING QImage image; - bool googleFallbackEnabled = config()->get("security/IconDownloadFallbackToGoogle", false).toBool(); + bool fallbackEnabled = config()->get("security/IconDownloadFallback", false).toBool(); bool error = (m_reply->error() != QNetworkReply::NoError); QUrl redirectTarget = getRedirectTarget(m_reply); @@ -259,16 +275,22 @@ void EditWidgetIcons::fetchFinished() } if (!image.isNull()) { - addCustomIcon(image); + if (!addCustomIcon(image)) { + emit messageEditEntry(tr("Custom icon already exists"), MessageWidget::Information); + } else if (!this->isVisible()) { + // Show confirmation message if triggered from Entry tab download button + emit messageEditEntry(tr("Custom icon successfully downloaded"), MessageWidget::Positive); + } } else if (!m_urlsToTry.empty()) { m_redirects = 0; startFetchFavicon(m_urlsToTry.takeFirst()); return; } else { - if (!googleFallbackEnabled) { - emit messageEditEntry(tr("Unable to fetch favicon.") + "\n" + - tr("Hint: You can enable Google as a fallback under Tools>Settings>Security"), - MessageWidget::Error); + if (!fallbackEnabled) { + emit messageEditEntry( + tr("Unable to fetch favicon.") + "\n" + + tr("Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security"), + MessageWidget::Error); } else { emit messageEditEntry(tr("Unable to fetch favicon."), MessageWidget::Error); } @@ -278,7 +300,7 @@ void EditWidgetIcons::fetchFinished() #endif } -void EditWidgetIcons::fetchCanceled() +void EditWidgetIcons::abortRequests() { #ifdef WITH_XC_NETWORKING if (m_reply) { @@ -296,17 +318,9 @@ void EditWidgetIcons::startFetchFavicon(const QUrl& url) QNetworkRequest request(url); - m_reply = m_netMgr.get(request); + m_reply = m_netMgr->get(request); connect(m_reply, &QNetworkReply::finished, this, &EditWidgetIcons::fetchFinished); connect(m_reply, &QIODevice::readyRead, this, &EditWidgetIcons::fetchReadyRead); - - UrlFetchProgressDialog *progress = new UrlFetchProgressDialog(url, this); - progress->setAttribute(Qt::WA_DeleteOnClose); - connect(m_reply, &QNetworkReply::finished, progress, &QProgressDialog::hide); - connect(m_reply, &QNetworkReply::downloadProgress, progress, &UrlFetchProgressDialog::networkReplyProgress); - connect(progress, &QProgressDialog::canceled, this, &EditWidgetIcons::fetchCanceled); - - progress->show(); #else Q_UNUSED(url); #endif @@ -314,57 +328,91 @@ void EditWidgetIcons::startFetchFavicon(const QUrl& url) void EditWidgetIcons::addCustomIconFromFile() { - if (m_database) { - QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), - Tools::imageReaderFilter(), tr("All files")); + if (m_db) { + QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), Tools::imageReaderFilter(), tr("All files")); - QString filename = QFileDialog::getOpenFileName( - this, tr("Select Image"), "", filter); - if (!filename.isEmpty()) { - auto icon = QImage(filename); - if (!icon.isNull()) { - addCustomIcon(QImage(filename)); + auto filenames = QFileDialog::getOpenFileNames(this, tr("Select Image(s)"), "", filter); + if (!filenames.empty()) { + QStringList errornames; + int numexisting = 0; + for (const auto& filename : filenames) { + if (!filename.isEmpty()) { + auto icon = QImage(filename); + if (icon.isNull()) { + errornames << filename; + } else if (!addCustomIcon(icon)) { + // Icon already exists in database + ++numexisting; + } + } + } + + int numloaded = filenames.size() - errornames.size() - numexisting; + QString msg; + + if (numloaded > 0) { + msg = tr("Successfully loaded %1 of %n icon(s)", "", filenames.size()).arg(numloaded); } else { - emit messageEditEntry(tr("Can't read icon"), MessageWidget::Error); + msg = tr("No icons were loaded"); + } + + if (numexisting > 0) { + msg += "\n" + tr("%n icon(s) already exist in the database", "", numexisting); + } + + if (!errornames.empty()) { + // Show the first 8 icons that failed to load + errornames = errornames.mid(0, 8); + emit messageEditEntry(msg + "\n" + tr("The following icon(s) failed:", "", errornames.size()) + "\n" + + errornames.join("\n"), + MessageWidget::Error); + } else if (numloaded > 0) { + emit messageEditEntry(msg, MessageWidget::Positive); + } else { + emit messageEditEntry(msg, MessageWidget::Information); } } } } -void EditWidgetIcons::addCustomIcon(const QImage& icon) +bool EditWidgetIcons::addCustomIcon(const QImage& icon) { - if (m_database) { - Uuid uuid = m_database->metadata()->findCustomIcon(icon); - if (uuid.isNull()) { - uuid = Uuid::random(); - // Don't add an icon larger than 128x128, but retain original size if smaller - if (icon.width() > 128 || icon.height() > 128) { - m_database->metadata()->addCustomIcon(uuid, icon.scaled(128, 128)); - } else { - m_database->metadata()->addCustomIcon(uuid, icon); - } + bool added = false; + if (m_db) { + // Don't add an icon larger than 128x128, but retain original size if smaller + auto scaledicon = icon; + if (icon.width() > 128 || icon.height() > 128) { + scaledicon = icon.scaled(128, 128); + } - m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(), - m_database->metadata()->customIconsOrder()); - } else { - emit messageEditEntry(tr("Custom icon already exists"), MessageWidget::Information); + QUuid uuid = m_db->metadata()->findCustomIcon(scaledicon); + if (uuid.isNull()) { + uuid = QUuid::createUuid(); + m_db->metadata()->addCustomIcon(uuid, scaledicon); + m_customIconModel->setIcons(m_db->metadata()->customIconsScaledPixmaps(), + m_db->metadata()->customIconsOrder()); + added = true; } // Select the new or existing icon updateRadioButtonCustomIcons(); QModelIndex index = m_customIconModel->indexFromUuid(uuid); m_ui->customIconsView->setCurrentIndex(index); + + emit widgetUpdated(); } + + return added; } void EditWidgetIcons::removeCustomIcon() { - if (m_database) { + if (m_db) { QModelIndex index = m_ui->customIconsView->currentIndex(); if (index.isValid()) { - Uuid iconUuid = m_customIconModel->uuidFromIndex(index); + QUuid iconUuid = m_customIconModel->uuidFromIndex(index); - const QList allEntries = m_database->rootGroup()->entriesRecursive(true); + const QList allEntries = m_db->rootGroup()->entriesRecursive(true); QList entriesWithSameIcon; QList historyEntriesWithSameIcon; @@ -379,7 +427,7 @@ void EditWidgetIcons::removeCustomIcon() } } - const QList allGroups = m_database->rootGroup()->groupsRecursive(true); + const QList allGroups = m_db->rootGroup()->groupsRecursive(true); QList groupsWithSameIcon; for (Group* group : allGroups) { @@ -390,12 +438,17 @@ void EditWidgetIcons::removeCustomIcon() int iconUseCount = entriesWithSameIcon.size() + groupsWithSameIcon.size(); if (iconUseCount > 0) { - QMessageBox::StandardButton ans = MessageBox::question(this, tr("Confirm Delete"), - tr("This icon is used by %1 entries, and will be replaced " - "by the default icon. Are you sure you want to delete it?") - .arg(iconUseCount), QMessageBox::Yes | QMessageBox::No); - if (ans == QMessageBox::No) { + auto result = MessageBox::question(this, + tr("Confirm Delete"), + tr("This icon is used by %n entry(s), and will be replaced " + "by the default icon. Are you sure you want to delete it?", + "", + iconUseCount), + MessageBox::Delete | MessageBox::Cancel, + MessageBox::Cancel); + + if (result == MessageBox::Cancel) { // Early out, nothing is changed return; } else { @@ -411,7 +464,6 @@ void EditWidgetIcons::removeCustomIcon() } } - // Remove the icon from history entries for (Entry* entry : asConst(historyEntriesWithSameIcon)) { entry->setUpdateTimeinfo(false); @@ -420,18 +472,20 @@ void EditWidgetIcons::removeCustomIcon() } // Remove the icon from the database - m_database->metadata()->removeCustomIcon(iconUuid); - m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(), - m_database->metadata()->customIconsOrder()); + m_db->metadata()->removeCustomIcon(iconUuid); + m_customIconModel->setIcons(m_db->metadata()->customIconsScaledPixmaps(), + m_db->metadata()->customIconsOrder()); // Reset the current icon view updateRadioButtonDefaultIcons(); - if (m_database->resolveEntry(m_currentUuid) != nullptr) { + if (m_db->rootGroup()->findEntryByUuid(m_currentUuid) != nullptr) { m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(Entry::DefaultIconNumber)); } else { m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(Group::DefaultIconNumber)); } + + emit widgetUpdated(); } } } @@ -446,7 +500,6 @@ void EditWidgetIcons::updateWidgetsDefaultIcons(bool check) m_ui->defaultIconsView->setCurrentIndex(index); } m_ui->customIconsView->selectionModel()->clearSelection(); - m_ui->addButton->setEnabled(false); m_ui->deleteButton->setEnabled(false); } } @@ -461,7 +514,6 @@ void EditWidgetIcons::updateWidgetsCustomIcons(bool check) m_ui->customIconsView->setCurrentIndex(index); } m_ui->defaultIconsView->selectionModel()->clearSelection(); - m_ui->addButton->setEnabled(true); m_ui->deleteButton->setEnabled(true); } } diff --git a/src/gui/EditWidgetIcons.h b/src/gui/EditWidgetIcons.h index 82fcdeeb5..dcff02f56 100644 --- a/src/gui/EditWidgetIcons.h +++ b/src/gui/EditWidgetIcons.h @@ -19,25 +19,24 @@ #ifndef KEEPASSX_EDITWIDGETICONS_H #define KEEPASSX_EDITWIDGETICONS_H -#include -#include -#include #include -#include +#include +#include #include "config-keepassx.h" #include "core/Global.h" -#include "core/Uuid.h" #include "gui/MessageWidget.h" class Database; class DefaultIconModel; class CustomIconModel; #ifdef WITH_XC_NETWORKING +class QNetworkAccessManager; class QNetworkReply; #endif -namespace Ui { +namespace Ui +{ class EditWidgetIcons; } @@ -45,21 +44,10 @@ struct IconStruct { IconStruct(); - Uuid uuid; + QUuid uuid; int number; }; -class UrlFetchProgressDialog : public QProgressDialog -{ - Q_OBJECT - -public: - explicit UrlFetchProgressDialog(const QUrl &url, QWidget *parent = nullptr); - -public slots: - void networkReplyProgress(qint64 bytesRead, qint64 totalBytes); -}; - class EditWidgetIcons : public QWidget { Q_OBJECT @@ -70,23 +58,27 @@ public: IconStruct state(); void reset(); - void load(const Uuid& currentUuid, Database* database, const IconStruct& iconStruct, const QString& url = ""); + void load(const QUuid& currentUuid, + const QSharedPointer& database, + const IconStruct& iconStruct, + const QString& url = ""); public slots: void setUrl(const QString& url); + void abortRequests(); signals: void messageEditEntry(QString, MessageWidget::MessageType); void messageEditEntryDismiss(); + void widgetUpdated(); private slots: void downloadFavicon(); void startFetchFavicon(const QUrl& url); void fetchFinished(); void fetchReadyRead(); - void fetchCanceled(); void addCustomIconFromFile(); - void addCustomIcon(const QImage& icon); + bool addCustomIcon(const QImage& icon); void removeCustomIcon(); void updateWidgetsDefaultIcons(bool checked); void updateWidgetsCustomIcons(bool checked); @@ -95,15 +87,15 @@ private slots: private: const QScopedPointer m_ui; - Database* m_database; - Uuid m_currentUuid; + QSharedPointer m_db; + QUuid m_currentUuid; #ifdef WITH_XC_NETWORKING QUrl m_url; QUrl m_fetchUrl; QList m_urlsToTry; QByteArray m_bytesReceived; - QNetworkAccessManager m_netMgr; - QNetworkReply *m_reply; + QNetworkAccessManager* m_netMgr; + QNetworkReply* m_reply; int m_redirects; #endif DefaultIconModel* const m_defaultIconModel; diff --git a/src/gui/EditWidgetProperties.cpp b/src/gui/EditWidgetProperties.cpp index a06928c46..dbaaf4148 100644 --- a/src/gui/EditWidgetProperties.cpp +++ b/src/gui/EditWidgetProperties.cpp @@ -17,20 +17,27 @@ #include "EditWidgetProperties.h" #include "ui_EditWidgetProperties.h" + #include "MessageBox.h" +#include "core/CustomData.h" +#include "core/TimeInfo.h" + +#include EditWidgetProperties::EditWidgetProperties(QWidget* parent) : QWidget(parent) , m_ui(new Ui::EditWidgetProperties()) - , m_customData(new CustomData(this)) , m_customDataModel(new QStandardItemModel(this)) { m_ui->setupUi(this); m_ui->removeCustomDataButton->setEnabled(false); m_ui->customDataTable->setModel(m_customDataModel); - connect(m_ui->customDataTable->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + // clang-format off + connect(m_ui->customDataTable->selectionModel(), + SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(toggleRemoveButton(QItemSelection))); + // clang-format on connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedPluginData())); } @@ -38,38 +45,40 @@ EditWidgetProperties::~EditWidgetProperties() { } -void EditWidgetProperties::setFields(const TimeInfo& timeInfo, const Uuid& uuid) +void EditWidgetProperties::setFields(const TimeInfo& timeInfo, const QUuid& uuid) { static const QString timeFormat("d MMM yyyy HH:mm:ss"); - m_ui->modifiedEdit->setText( - timeInfo.lastModificationTime().toLocalTime().toString(timeFormat)); - m_ui->createdEdit->setText( - timeInfo.creationTime().toLocalTime().toString(timeFormat)); - m_ui->accessedEdit->setText( - timeInfo.lastAccessTime().toLocalTime().toString(timeFormat)); - m_ui->uuidEdit->setText(uuid.toHex()); + m_ui->modifiedEdit->setText(timeInfo.lastModificationTime().toLocalTime().toString(timeFormat)); + m_ui->createdEdit->setText(timeInfo.creationTime().toLocalTime().toString(timeFormat)); + m_ui->accessedEdit->setText(timeInfo.lastAccessTime().toLocalTime().toString(timeFormat)); + m_ui->uuidEdit->setText(uuid.toRfc4122().toHex()); } -void EditWidgetProperties::setCustomData(const CustomData* customData) +void EditWidgetProperties::setCustomData(CustomData* customData) { - Q_ASSERT(customData); - m_customData->copyDataFrom(customData); + if (m_customData) { + m_customData->disconnect(this); + } - updateModel(); -} + m_customData = customData; -const CustomData* EditWidgetProperties::customData() const -{ - return m_customData; + if (m_customData) { + connect(m_customData, SIGNAL(customDataModified()), SLOT(update())); + } + + update(); } void EditWidgetProperties::removeSelectedPluginData() { - if (QMessageBox::Yes != MessageBox::question(this, - tr("Delete plugin data?"), - tr("Do you really want to delete the selected plugin data?\n" - "This may cause the affected plugins to malfunction."), - QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel)) { + auto result = MessageBox::question(this, + tr("Delete plugin data?"), + tr("Do you really want to delete the selected plugin data?\n" + "This may cause the affected plugins to malfunction."), + MessageBox::Delete | MessageBox::Cancel, + MessageBox::Cancel); + + if (result == MessageBox::Cancel) { return; } @@ -79,7 +88,7 @@ void EditWidgetProperties::removeSelectedPluginData() const QString key = index.data().toString(); m_customData->remove(key); } - updateModel(); + update(); } } @@ -88,17 +97,17 @@ void EditWidgetProperties::toggleRemoveButton(const QItemSelection& selected) m_ui->removeCustomDataButton->setEnabled(!selected.isEmpty()); } -void EditWidgetProperties::updateModel() +void EditWidgetProperties::update() { m_customDataModel->clear(); - m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value")}); - - for (const QString& key : m_customData->keys()) { - m_customDataModel->appendRow(QList() - << new QStandardItem(key) - << new QStandardItem(m_customData->value(key))); + if (!m_customData) { + m_ui->removeCustomDataButton->setEnabled(false); + } else { + for (const QString& key : m_customData->keys()) { + m_customDataModel->appendRow(QList() + << new QStandardItem(key) << new QStandardItem(m_customData->value(key))); + } + m_ui->removeCustomDataButton->setEnabled(!m_customData->isEmpty()); } - - m_ui->removeCustomDataButton->setEnabled(false); } diff --git a/src/gui/EditWidgetProperties.h b/src/gui/EditWidgetProperties.h index a1fd198d7..30a983e98 100644 --- a/src/gui/EditWidgetProperties.h +++ b/src/gui/EditWidgetProperties.h @@ -18,16 +18,17 @@ #ifndef KEEPASSX_EDITWIDGETPROPERTIES_H #define KEEPASSX_EDITWIDGETPROPERTIES_H -#include #include #include +#include #include -#include "core/CustomData.h" -#include "core/TimeInfo.h" -#include "core/Uuid.h" +class CustomData; +class TimeInfo; +class QUuid; -namespace Ui { +namespace Ui +{ class EditWidgetProperties; } @@ -39,22 +40,20 @@ public: explicit EditWidgetProperties(QWidget* parent = nullptr); ~EditWidgetProperties(); - void setFields(const TimeInfo& timeInfo, const Uuid& uuid); - void setCustomData(const CustomData* customData); - - const CustomData* customData() const; + void setFields(const TimeInfo& timeInfo, const QUuid& uuid); + void setCustomData(CustomData* customData); private slots: + void update(); void removeSelectedPluginData(); void toggleRemoveButton(const QItemSelection& selected); private: - void updateModel(); - const QScopedPointer m_ui; QPointer m_customData; QPointer m_customDataModel; + Q_DISABLE_COPY(EditWidgetProperties) }; diff --git a/src/gui/EditWidgetProperties.ui b/src/gui/EditWidgetProperties.ui index f97562661..fb8ed5030 100644 --- a/src/gui/EditWidgetProperties.ui +++ b/src/gui/EditWidgetProperties.ui @@ -28,6 +28,9 @@ + + QFormLayout::ExpandingFieldsGrow + diff --git a/src/gui/DetailsWidget.cpp b/src/gui/EntryPreviewWidget.cpp similarity index 64% rename from src/gui/DetailsWidget.cpp rename to src/gui/EntryPreviewWidget.cpp index 93b4b9f6e..0fd8826c8 100644 --- a/src/gui/DetailsWidget.cpp +++ b/src/gui/EntryPreviewWidget.cpp @@ -16,30 +16,31 @@ * along with this program. If not, see . */ -#include "DetailsWidget.h" -#include "ui_DetailsWidget.h" +#include "EntryPreviewWidget.h" +#include "ui_EntryPreviewWidget.h" -#include -#include #include +#include #include "core/Config.h" #include "core/FilePath.h" -#include "gui/Clipboard.h" #include "entry/EntryAttachmentsModel.h" +#include "gui/Clipboard.h" +#if defined(WITH_XC_KEESHARE) +#include "keeshare/KeeShare.h" +#endif -namespace { -constexpr int GeneralTabIndex = 0; +namespace +{ + constexpr int GeneralTabIndex = 0; } -DetailsWidget::DetailsWidget(QWidget* parent) +EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) : QWidget(parent) - , m_ui(new Ui::DetailsWidget()) + , m_ui(new Ui::EntryPreviewWidget()) , m_locked(false) , m_currentEntry(nullptr) , m_currentGroup(nullptr) - , m_step(0) - , m_totpTimer(nullptr) , m_selectedTabEntry(0) , m_selectedTabGroup(0) { @@ -48,26 +49,28 @@ DetailsWidget::DetailsWidget(QWidget* parent) // Entry m_ui->entryTotpButton->setIcon(filePath()->icon("actions", "chronometer")); m_ui->entryCloseButton->setIcon(filePath()->icon("actions", "dialog-close")); + m_ui->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show")); m_ui->entryAttachmentsWidget->setReadOnly(true); m_ui->entryAttachmentsWidget->setButtonsVisible(false); connect(m_ui->entryTotpButton, SIGNAL(toggled(bool)), m_ui->entryTotpWidget, SLOT(setVisible(bool))); - connect(m_ui->entryCloseButton, SIGNAL(toggled(bool)), SLOT(hide())); + connect(m_ui->entryCloseButton, SIGNAL(clicked()), SLOT(hide())); + connect(m_ui->togglePasswordButton, SIGNAL(clicked(bool)), SLOT(setPasswordVisible(bool))); connect(m_ui->entryTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection); + connect(&m_totpTimer, SIGNAL(timeout()), this, SLOT(updateTotpLabel())); // Group m_ui->groupCloseButton->setIcon(filePath()->icon("actions", "dialog-close")); - connect(m_ui->groupCloseButton, SIGNAL(toggled(bool)), SLOT(hide())); + connect(m_ui->groupCloseButton, SIGNAL(clicked()), SLOT(hide())); connect(m_ui->groupTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection); } -DetailsWidget::~DetailsWidget() +EntryPreviewWidget::~EntryPreviewWidget() { - deleteTotpTimer(); } -void DetailsWidget::setEntry(Entry* selectedEntry) +void EntryPreviewWidget::setEntry(Entry* selectedEntry) { if (!selectedEntry) { hide(); @@ -84,16 +87,15 @@ void DetailsWidget::setEntry(Entry* selectedEntry) updateEntryAttachmentsTab(); updateEntryAutotypeTab(); - setVisible(!config()->get("GUI/HideDetailsView").toBool()); + setVisible(!config()->get("GUI/HidePreviewPanel").toBool()); m_ui->stackedWidget->setCurrentWidget(m_ui->pageEntry); - const int tabIndex = m_ui->entryTabWidget->isTabEnabled(m_selectedTabEntry) ? m_selectedTabEntry - : GeneralTabIndex; + const int tabIndex = m_ui->entryTabWidget->isTabEnabled(m_selectedTabEntry) ? m_selectedTabEntry : GeneralTabIndex; Q_ASSERT(m_ui->entryTabWidget->isTabEnabled(GeneralTabIndex)); m_ui->entryTabWidget->setCurrentIndex(tabIndex); } -void DetailsWidget::setGroup(Group* selectedGroup) +void EntryPreviewWidget::setGroup(Group* selectedGroup) { if (!selectedGroup) { hide(); @@ -105,23 +107,26 @@ void DetailsWidget::setGroup(Group* selectedGroup) updateGroupGeneralTab(); updateGroupNotesTab(); - setVisible(!config()->get("GUI/HideDetailsView").toBool()); +#if defined(WITH_XC_KEESHARE) + updateGroupSharingTab(); +#endif + + setVisible(!config()->get("GUI/HidePreviewPanel").toBool()); m_ui->stackedWidget->setCurrentWidget(m_ui->pageGroup); - const int tabIndex = m_ui->groupTabWidget->isTabEnabled(m_selectedTabGroup) ? m_selectedTabGroup - : GeneralTabIndex; + const int tabIndex = m_ui->groupTabWidget->isTabEnabled(m_selectedTabGroup) ? m_selectedTabGroup : GeneralTabIndex; Q_ASSERT(m_ui->groupTabWidget->isTabEnabled(GeneralTabIndex)); m_ui->groupTabWidget->setCurrentIndex(tabIndex); } -void DetailsWidget::setDatabaseMode(DatabaseWidget::Mode mode) +void EntryPreviewWidget::setDatabaseMode(DatabaseWidget::Mode mode) { - m_locked = mode == DatabaseWidget::LockedMode; + m_locked = mode == DatabaseWidget::Mode::LockedMode; if (m_locked) { return; } - if (mode == DatabaseWidget::ViewMode) { + if (mode == DatabaseWidget::Mode::ViewMode) { if (m_ui->stackedWidget->currentWidget() == m_ui->pageGroup) { setGroup(m_currentGroup); } else { @@ -130,7 +135,7 @@ void DetailsWidget::setDatabaseMode(DatabaseWidget::Mode mode) } } -void DetailsWidget::updateEntryHeaderLine() +void EntryPreviewWidget::updateEntryHeaderLine() { Q_ASSERT(m_currentEntry); const QString title = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->title()); @@ -138,7 +143,7 @@ void DetailsWidget::updateEntryHeaderLine() m_ui->entryIcon->setPixmap(preparePixmap(m_currentEntry->iconPixmap(), 16)); } -void DetailsWidget::updateEntryTotp() +void EntryPreviewWidget::updateEntryTotp() { Q_ASSERT(m_currentEntry); const bool hasTotp = m_currentEntry->hasTotp(); @@ -147,31 +152,48 @@ void DetailsWidget::updateEntryTotp() m_ui->entryTotpButton->setChecked(false); if (hasTotp) { - deleteTotpTimer(); - m_totpTimer = new QTimer(m_currentEntry); - connect(m_totpTimer, SIGNAL(timeout()), this, SLOT(updateTotpLabel())); - m_totpTimer->start(1000); - - m_step = m_currentEntry->totpStep(); + m_totpTimer.start(1000); updateTotpLabel(); } else { m_ui->entryTotpLabel->clear(); - stopTotpTimer(); + m_totpTimer.stop(); } } -void DetailsWidget::updateEntryGeneralTab() +void EntryPreviewWidget::setPasswordVisible(bool state) +{ + const QString password = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->password()); + auto flags = m_ui->entryPasswordLabel->textInteractionFlags(); + if (state) { + m_ui->entryPasswordLabel->setRawText(password); + m_ui->entryPasswordLabel->setToolTip(password); + m_ui->entryPasswordLabel->setTextInteractionFlags(flags | Qt::TextSelectableByMouse); + } else { + m_ui->entryPasswordLabel->setTextInteractionFlags(flags & ~Qt::TextSelectableByMouse); + m_ui->entryPasswordLabel->setToolTip({}); + if (password.isEmpty() && config()->get("security/passwordemptynodots").toBool()) { + m_ui->entryPasswordLabel->setRawText(""); + } else { + m_ui->entryPasswordLabel->setRawText(QString("\u25cf").repeated(6)); + } + } +} + +void EntryPreviewWidget::updateEntryGeneralTab() { Q_ASSERT(m_currentEntry); m_ui->entryUsernameLabel->setText(m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->username())); - if (!config()->get("security/hidepassworddetails").toBool()) { - const QString password = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->password()); - m_ui->entryPasswordLabel->setRawText(password); - m_ui->entryPasswordLabel->setToolTip(password); + if (config()->get("security/HidePasswordPreviewPanel").toBool()) { + // Hide password + setPasswordVisible(false); + // Show the password toggle button if there are dots in the label + m_ui->togglePasswordButton->setVisible(!m_ui->entryPasswordLabel->rawText().isEmpty()); + m_ui->togglePasswordButton->setChecked(false); } else { - m_ui->entryPasswordLabel->setRawText(QString("\u25cf").repeated(6)); - m_ui->entryPasswordLabel->setToolTip({}); + // Show password + setPasswordVisible(true); + m_ui->togglePasswordButton->setVisible(false); } m_ui->entryUrlLabel->setRawText(m_currentEntry->displayUrl()); @@ -186,12 +208,12 @@ void DetailsWidget::updateEntryGeneralTab() } const TimeInfo entryTime = m_currentEntry->timeInfo(); - const QString expires = entryTime.expires() ? entryTime.expiryTime().toString(Qt::DefaultLocaleShortDate) - : tr("Never"); + const QString expires = + entryTime.expires() ? entryTime.expiryTime().toLocalTime().toString(Qt::DefaultLocaleShortDate) : tr("Never"); m_ui->entryExpirationLabel->setText(expires); } -void DetailsWidget::updateEntryNotesTab() +void EntryPreviewWidget::updateEntryNotesTab() { Q_ASSERT(m_currentEntry); const QString notes = m_currentEntry->notes(); @@ -199,13 +221,13 @@ void DetailsWidget::updateEntryNotesTab() m_ui->entryNotesEdit->setText(notes); } -void DetailsWidget::updateEntryAttributesTab() +void EntryPreviewWidget::updateEntryAttributesTab() { Q_ASSERT(m_currentEntry); m_ui->entryAttributesEdit->clear(); const EntryAttributes* attributes = m_currentEntry->attributes(); const QStringList customAttributes = attributes->customKeys(); - const bool haveAttributes = customAttributes.size() > 0; + const bool haveAttributes = !customAttributes.isEmpty(); setTabEnabled(m_ui->entryTabWidget, m_ui->entryAttributesTab, haveAttributes); if (haveAttributes) { QString attributesText; @@ -214,13 +236,13 @@ void DetailsWidget::updateEntryAttributesTab() if (m_currentEntry->attributes()->isProtected(key)) { value = "" + tr("[PROTECTED]") + ""; } - attributesText.append(QString("%1: %2
    ").arg(key, value)); + attributesText.append(tr("%1: %2", "attributes line").arg(key, value).append("
    ")); } m_ui->entryAttributesEdit->setText(attributesText); } } -void DetailsWidget::updateEntryAttachmentsTab() +void EntryPreviewWidget::updateEntryAttachmentsTab() { Q_ASSERT(m_currentEntry); const bool hasAttachments = !m_currentEntry->attachments()->isEmpty(); @@ -228,7 +250,7 @@ void DetailsWidget::updateEntryAttachmentsTab() m_ui->entryAttachmentsWidget->setEntryAttachments(m_currentEntry->attachments()); } -void DetailsWidget::updateEntryAutotypeTab() +void EntryPreviewWidget::updateEntryAutotypeTab() { Q_ASSERT(m_currentEntry); m_ui->entryAutotypeTree->clear(); @@ -236,8 +258,8 @@ void DetailsWidget::updateEntryAutotypeTab() const AutoTypeAssociations* autotypeAssociations = m_currentEntry->autoTypeAssociations(); const auto associations = autotypeAssociations->getAll(); for (const auto& assoc : associations) { - const QString sequence = assoc.sequence.isEmpty() ? m_currentEntry->effectiveAutoTypeSequence() - : assoc.sequence; + const QString sequence = + assoc.sequence.isEmpty() ? m_currentEntry->effectiveAutoTypeSequence() : assoc.sequence; items.append(new QTreeWidgetItem(m_ui->entryAutotypeTree, {assoc.window, sequence})); } @@ -245,14 +267,14 @@ void DetailsWidget::updateEntryAutotypeTab() setTabEnabled(m_ui->entryTabWidget, m_ui->entryAutotypeTab, !items.isEmpty()); } -void DetailsWidget::updateGroupHeaderLine() +void EntryPreviewWidget::updateGroupHeaderLine() { Q_ASSERT(m_currentGroup); m_ui->groupTitleLabel->setRawText(hierarchy(m_currentGroup, {})); m_ui->groupIcon->setPixmap(preparePixmap(m_currentGroup->iconPixmap(), 32)); } -void DetailsWidget::updateGroupGeneralTab() +void EntryPreviewWidget::updateGroupGeneralTab() { Q_ASSERT(m_currentGroup); const QString searchingText = m_currentGroup->resolveSearchingEnabled() ? tr("Enabled") : tr("Disabled"); @@ -262,12 +284,12 @@ void DetailsWidget::updateGroupGeneralTab() m_ui->groupAutotypeLabel->setText(autotypeText); const TimeInfo groupTime = m_currentGroup->timeInfo(); - const QString expiresText = groupTime.expires() ? groupTime.expiryTime().toString(Qt::DefaultLocaleShortDate) - : tr("Never"); + const QString expiresText = + groupTime.expires() ? groupTime.expiryTime().toString(Qt::DefaultLocaleShortDate) : tr("Never"); m_ui->groupExpirationLabel->setText(expiresText); } -void DetailsWidget::updateGroupNotesTab() +void EntryPreviewWidget::updateGroupNotesTab() { Q_ASSERT(m_currentGroup); const QString notes = m_currentGroup->notes(); @@ -275,47 +297,44 @@ void DetailsWidget::updateGroupNotesTab() m_ui->groupNotesEdit->setText(notes); } -void DetailsWidget::stopTotpTimer() +#if defined(WITH_XC_KEESHARE) +void EntryPreviewWidget::updateGroupSharingTab() { - if (m_totpTimer) { - m_totpTimer->stop(); - } + Q_ASSERT(m_currentGroup); + setTabEnabled(m_ui->groupTabWidget, m_ui->groupShareTab, KeeShare::isShared(m_currentGroup)); + auto reference = KeeShare::referenceOf(m_currentGroup); + m_ui->groupShareTypeLabel->setText(KeeShare::referenceTypeLabel(reference)); + m_ui->groupSharePathLabel->setText(reference.path); } +#endif -void DetailsWidget::deleteTotpTimer() +void EntryPreviewWidget::updateTotpLabel() { - if (m_totpTimer) { - delete m_totpTimer; - } -} - -void DetailsWidget::updateTotpLabel() -{ - if (!m_locked && m_currentEntry) { + if (!m_locked && m_currentEntry && m_currentEntry->hasTotp()) { const QString totpCode = m_currentEntry->totp(); const QString firstHalf = totpCode.left(totpCode.size() / 2); const QString secondHalf = totpCode.mid(totpCode.size() / 2); m_ui->entryTotpLabel->setText(firstHalf + " " + secondHalf); } else { m_ui->entryTotpLabel->clear(); - stopTotpTimer(); + m_totpTimer.stop(); } } -void DetailsWidget::updateTabIndexes() +void EntryPreviewWidget::updateTabIndexes() { m_selectedTabEntry = m_ui->entryTabWidget->currentIndex(); m_selectedTabGroup = m_ui->groupTabWidget->currentIndex(); } -void DetailsWidget::setTabEnabled(QTabWidget* tabWidget, QWidget* widget, bool enabled) +void EntryPreviewWidget::setTabEnabled(QTabWidget* tabWidget, QWidget* widget, bool enabled) { const int tabIndex = tabWidget->indexOf(widget); Q_ASSERT(tabIndex != -1); tabWidget->setTabEnabled(tabIndex, enabled); } -QPixmap DetailsWidget::preparePixmap(const QPixmap& pixmap, int size) +QPixmap EntryPreviewWidget::preparePixmap(const QPixmap& pixmap, int size) { if (pixmap.width() > size || pixmap.height() > size) { return pixmap.scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); @@ -323,7 +342,7 @@ QPixmap DetailsWidget::preparePixmap(const QPixmap& pixmap, int size) return pixmap; } -QString DetailsWidget::hierarchy(const Group* group, const QString& title) +QString EntryPreviewWidget::hierarchy(const Group* group, const QString& title) { const QString separator(" / "); QStringList hierarchy = group->hierarchy(); diff --git a/src/gui/DetailsWidget.h b/src/gui/EntryPreviewWidget.h similarity index 82% rename from src/gui/DetailsWidget.h rename to src/gui/EntryPreviewWidget.h index abec33400..5bfd9dbd6 100644 --- a/src/gui/DetailsWidget.h +++ b/src/gui/EntryPreviewWidget.h @@ -18,21 +18,23 @@ #ifndef KEEPASSX_DETAILSWIDGET_H #define KEEPASSX_DETAILSWIDGET_H +#include "config-keepassx.h" #include "gui/DatabaseWidget.h" #include -namespace Ui { - class DetailsWidget; +namespace Ui +{ + class EntryPreviewWidget; } -class DetailsWidget : public QWidget +class EntryPreviewWidget : public QWidget { Q_OBJECT public: - explicit DetailsWidget(QWidget* parent = nullptr); - ~DetailsWidget(); + explicit EntryPreviewWidget(QWidget* parent = nullptr); + ~EntryPreviewWidget() override; public slots: void setEntry(Entry* selectedEntry); @@ -50,13 +52,15 @@ private slots: void updateEntryAttributesTab(); void updateEntryAttachmentsTab(); void updateEntryAutotypeTab(); + void setPasswordVisible(bool state); void updateGroupHeaderLine(); void updateGroupGeneralTab(); void updateGroupNotesTab(); +#if defined(WITH_XC_KEESHARE) + void updateGroupSharingTab(); +#endif - void stopTotpTimer(); - void deleteTotpTimer(); void updateTotpLabel(); void updateTabIndexes(); @@ -66,12 +70,11 @@ private: static QPixmap preparePixmap(const QPixmap& pixmap, int size); static QString hierarchy(const Group* group, const QString& title); - const QScopedPointer m_ui; + const QScopedPointer m_ui; bool m_locked; Entry* m_currentEntry; Group* m_currentGroup; - quint8 m_step; - QPointer m_totpTimer; + QTimer m_totpTimer; quint8 m_selectedTabEntry; quint8 m_selectedTabGroup; }; diff --git a/src/gui/EntryPreviewWidget.ui b/src/gui/EntryPreviewWidget.ui new file mode 100644 index 000000000..8322946bb --- /dev/null +++ b/src/gui/EntryPreviewWidget.ui @@ -0,0 +1,934 @@ + + + EntryPreviewWidget + + + + 0 + 0 + 573 + 330 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QLayout::SetDefaultConstraint + + + 9 + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::AutoText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + 10 + 75 + true + + + + + + + + + + + + + + Qt::ClickFocus + + + Generate TOTP Token + + + + + + true + + + + + + + Qt::ClickFocus + + + Close + + + + + + + + + + + + Qt::ClickFocus + + + 0 + + + false + + + false + + + false + + + + General + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Qt::LeftToRight + + + Username + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + username + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Password + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Expiration + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + PointingHandCursor + + + https://example.com + + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + + + + + + + + 0 + 0 + + + + expired + + + + + + + + 0 + 0 + + + + + 75 + true + + + + URL + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 6 + + + 4 + + + + + + + + true + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + password + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + + Attributes + + + + + + Qt::ClickFocus + + + true + + + + + + + + Attachments + + + + + + + + + + Notes + + + + + + Qt::ClickFocus + + + true + + + + + + + + Autotype + + + + + + QFrame::Sunken + + + true + + + true + + + false + + + 2 + + + false + + + 250 + + + 50 + + + true + + + + Window + + + + + Sequence + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QLayout::SetDefaultConstraint + + + 9 + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::AutoText + + + + + + + Close + + + + + + + + + + + + 0 + + + false + + + false + + + false + + + + General + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Expiration + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Autotype + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Searching + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + + + Notes + + + + + + Qt::ClickFocus + + + true + + + + + + + + Share + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + <path> + + + + + + + + 75 + true + + + + <type> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + 20 + 147 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + + + + + + + + + Search + + + + + Clear + + + + + + EntryAttachmentsWidget + QWidget +
    gui/entry/EntryAttachmentsWidget.h
    + 1 +
    + + ElidedLabel + QLabel +
    gui/widgets/ElidedLabel.h
    +
    +
    + + entryTotpButton + entryAutotypeTree + entryTabWidget + groupCloseButton + groupTabWidget + + + +
    diff --git a/src/gui/FileDialog.cpp b/src/gui/FileDialog.cpp index 9f3caf6da..a003bd5b7 100644 --- a/src/gui/FileDialog.cpp +++ b/src/gui/FileDialog.cpp @@ -21,22 +21,23 @@ FileDialog* FileDialog::m_instance(nullptr); -QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, QString dir, - const QString& filter, QString* selectedFilter, +QString FileDialog::getOpenFileName(QWidget* parent, + const QString& caption, + QString dir, + const QString& filter, + QString* selectedFilter, QFileDialog::Options options) { if (!m_nextFileName.isEmpty()) { QString result = m_nextFileName; m_nextFileName.clear(); return result; - } - else { + } else { if (dir.isEmpty()) { dir = config()->get("LastDir").toString(); } - QString result = QFileDialog::getOpenFileName(parent, caption, dir, filter, - selectedFilter, options); + QString result = QFileDialog::getOpenFileName(parent, caption, dir, filter, selectedFilter, options); // on Mac OS X the focus is lost after closing the native dialog if (parent) { @@ -48,22 +49,23 @@ QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, QSt } } -QStringList FileDialog::getOpenFileNames(QWidget *parent, const QString &caption, QString dir, - const QString &filter, QString *selectedFilter, - QFileDialog::Options options) +QStringList FileDialog::getOpenFileNames(QWidget* parent, + const QString& caption, + QString dir, + const QString& filter, + QString* selectedFilter, + QFileDialog::Options options) { if (!m_nextFileNames.isEmpty()) { QStringList results = m_nextFileNames; m_nextFileNames.clear(); return results; - } - else { + } else { if (dir.isEmpty()) { dir = config()->get("LastDir").toString(); } - QStringList results = QFileDialog::getOpenFileNames(parent, caption, dir, filter, - selectedFilter, options); + QStringList results = QFileDialog::getOpenFileNames(parent, caption, dir, filter, selectedFilter, options); // on Mac OS X the focus is lost after closing the native dialog if (parent) { @@ -77,26 +79,88 @@ QStringList FileDialog::getOpenFileNames(QWidget *parent, const QString &caption } } -QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, QString dir, - const QString& filter, QString* selectedFilter, - QFileDialog::Options options, const QString& defaultExtension) +QString FileDialog::getFileName(QWidget* parent, + const QString& caption, + QString dir, + const QString& filter, + QString* selectedFilter, + QFileDialog::Options options, + const QString& defaultExtension, + const QString& defaultName) { if (!m_nextFileName.isEmpty()) { QString result = m_nextFileName; m_nextFileName.clear(); return result; - } - else { + } else { if (dir.isEmpty()) { dir = config()->get("LastDir").toString(); } QString result; #if defined(Q_OS_MAC) || defined(Q_OS_WIN) + Q_UNUSED(defaultName); Q_UNUSED(defaultExtension); // the native dialogs on these platforms already append the file extension - result = QFileDialog::getSaveFileName(parent, caption, dir, filter, - selectedFilter, options); + result = QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options); +#else + QFileDialog dialog(parent, caption, dir, filter); + dialog.setFileMode(QFileDialog::AnyFile); + dialog.setAcceptMode(QFileDialog::AcceptSave); + if (selectedFilter) { + dialog.selectNameFilter(*selectedFilter); + } + if (!defaultName.isEmpty()) { + dialog.selectFile(defaultName); + } + dialog.setOptions(options); + if (!defaultExtension.isEmpty()) { + dialog.setDefaultSuffix(defaultExtension); + } + dialog.setLabelText(QFileDialog::Accept, QFileDialog::tr("Select")); + QStringList results; + if (dialog.exec()) { + results = dialog.selectedFiles(); + if (!results.isEmpty()) { + result = results[0]; + } + } +#endif + + // on Mac OS X the focus is lost after closing the native dialog + if (parent) { + parent->activateWindow(); + } + + saveLastDir(result); + return result; + } +} + +QString FileDialog::getSaveFileName(QWidget* parent, + const QString& caption, + QString dir, + const QString& filter, + QString* selectedFilter, + QFileDialog::Options options, + const QString& defaultExtension, + const QString& defaultName) +{ + if (!m_nextFileName.isEmpty()) { + QString result = m_nextFileName; + m_nextFileName.clear(); + return result; + } else { + if (dir.isEmpty()) { + dir = config()->get("LastDir").toString(); + } + + QString result; +#if defined(Q_OS_MACOS) || defined(Q_OS_WIN) + Q_UNUSED(defaultName); + Q_UNUSED(defaultExtension); + // the native dialogs on these platforms already append the file extension + result = QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options); #else QFileDialog dialog(parent, caption, dir, filter); dialog.setAcceptMode(QFileDialog::AcceptSave); @@ -104,6 +168,9 @@ QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, QSt if (selectedFilter) { dialog.selectNameFilter(*selectedFilter); } + if (!defaultName.isEmpty()) { + dialog.selectFile(defaultName); + } dialog.setOptions(options); dialog.setDefaultSuffix(defaultExtension); @@ -126,15 +193,14 @@ QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, QSt } } -QString FileDialog::getExistingDirectory(QWidget *parent, const QString &caption, QString dir, - QFileDialog::Options options) +QString +FileDialog::getExistingDirectory(QWidget* parent, const QString& caption, QString dir, QFileDialog::Options options) { if (!m_nextDirName.isEmpty()) { QString result = m_nextDirName; m_nextDirName.clear(); return result; - } - else { + } else { if (dir.isEmpty()) { dir = config()->get("LastDir").toString(); } @@ -156,12 +222,12 @@ void FileDialog::setNextFileName(const QString& fileName) m_nextFileName = fileName; } -void FileDialog::setNextFileNames(const QStringList &fileNames) +void FileDialog::setNextFileNames(const QStringList& fileNames) { m_nextFileNames = fileNames; } -void FileDialog::setNextDirName(const QString &dirName) +void FileDialog::setNextDirName(const QString& dirName) { m_nextDirName = dirName; } @@ -175,7 +241,8 @@ FileDialog::FileDialog() { } -void FileDialog::saveLastDir(QString dir) { +void FileDialog::saveLastDir(const QString& dir) +{ if (!dir.isEmpty() && !m_forgetLastDir) { config()->set("LastDir", QFileInfo(dir).absolutePath()); } diff --git a/src/gui/FileDialog.h b/src/gui/FileDialog.h index 9a57a9218..eedb691da 100644 --- a/src/gui/FileDialog.h +++ b/src/gui/FileDialog.h @@ -23,18 +23,42 @@ class FileDialog { public: - QString getOpenFileName(QWidget* parent = nullptr, const QString& caption = QString(), - QString dir = QString(), const QString& filter = QString(), - QString* selectedFilter = nullptr, QFileDialog::Options options = 0); - QStringList getOpenFileNames(QWidget* parent = nullptr, const QString& caption = QString(), - QString dir = QString(), const QString& filter = QString(), - QString* selectedFilter = nullptr, QFileDialog::Options options = 0); - QString getSaveFileName(QWidget* parent = nullptr, const QString& caption = QString(), - QString dir = QString(), const QString& filter = QString(), - QString* selectedFilter = nullptr, QFileDialog::Options options = 0, - const QString& defaultExtension = QString()); - QString getExistingDirectory(QWidget* parent = nullptr, const QString& caption = QString(), - QString dir = QString(), QFileDialog::Options options = QFileDialog::ShowDirsOnly); + QString getOpenFileName(QWidget* parent = nullptr, + const QString& caption = QString(), + QString dir = QString(), + const QString& filter = QString(), + QString* selectedFilter = nullptr, + QFileDialog::Options options = 0); + + QStringList getOpenFileNames(QWidget* parent = nullptr, + const QString& caption = QString(), + QString dir = QString(), + const QString& filter = QString(), + QString* selectedFilter = nullptr, + QFileDialog::Options options = 0); + + QString getFileName(QWidget* parent = nullptr, + const QString& caption = QString(), + QString dir = QString(), + const QString& filter = QString(), + QString* selectedFilter = nullptr, + QFileDialog::Options options = 0, + const QString& defaultExtension = QString(), + const QString& defaultName = QString()); + + QString getSaveFileName(QWidget* parent = nullptr, + const QString& caption = QString(), + QString dir = QString(), + const QString& filter = QString(), + QString* selectedFilter = nullptr, + QFileDialog::Options options = 0, + const QString& defaultExtension = QString(), + const QString& defaultName = QString()); + + QString getExistingDirectory(QWidget* parent = nullptr, + const QString& caption = QString(), + QString dir = QString(), + QFileDialog::Options options = QFileDialog::ShowDirsOnly); void setNextForgetDialog(); /** @@ -54,14 +78,15 @@ private: QString m_nextDirName; bool m_forgetLastDir = false; - void saveLastDir(QString); + void saveLastDir(const QString&); static FileDialog* m_instance; Q_DISABLE_COPY(FileDialog) }; -inline FileDialog* fileDialog() { +inline FileDialog* fileDialog() +{ return FileDialog::instance(); } diff --git a/src/gui/Font.h b/src/gui/Font.h index bfc3d7d36..076c42770 100644 --- a/src/gui/Font.h +++ b/src/gui/Font.h @@ -24,8 +24,11 @@ class Font { public: static QFont fixedFont(); + private: - Font() {} + Font() + { + } }; #endif // KEEPASSX_FONT_H diff --git a/src/gui/IconModels.cpp b/src/gui/IconModels.cpp index 1c181eae2..39732c502 100644 --- a/src/gui/IconModels.cpp +++ b/src/gui/IconModels.cpp @@ -17,6 +17,8 @@ #include "IconModels.h" +#include + #include "core/DatabaseIcons.h" DefaultIconModel::DefaultIconModel(QObject* parent) @@ -28,8 +30,7 @@ int DefaultIconModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { return DatabaseIcons::IconCount; - } - else { + } else { return 0; } } @@ -54,7 +55,7 @@ CustomIconModel::CustomIconModel(QObject* parent) { } -void CustomIconModel::setIcons(const QHash& icons, const QList& iconsOrder) +void CustomIconModel::setIcons(const QHash& icons, const QList& iconsOrder) { beginResetModel(); @@ -69,8 +70,7 @@ int CustomIconModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { return m_icons.size(); - } - else { + } else { return 0; } } @@ -82,27 +82,26 @@ QVariant CustomIconModel::data(const QModelIndex& index, int role) const } if (role == Qt::DecorationRole) { - Uuid uuid = uuidFromIndex(index); + QUuid uuid = uuidFromIndex(index); return m_icons.value(uuid); } return QVariant(); } -Uuid CustomIconModel::uuidFromIndex(const QModelIndex& index) const +QUuid CustomIconModel::uuidFromIndex(const QModelIndex& index) const { Q_ASSERT(index.isValid()); return m_iconsOrder.value(index.row()); } -QModelIndex CustomIconModel::indexFromUuid(const Uuid& uuid) const +QModelIndex CustomIconModel::indexFromUuid(const QUuid& uuid) const { int idx = m_iconsOrder.indexOf(uuid); if (idx > -1) { return index(idx, 0); - } - else { + } else { return QModelIndex(); } } diff --git a/src/gui/IconModels.h b/src/gui/IconModels.h index 868ce4426..1a603bc7a 100644 --- a/src/gui/IconModels.h +++ b/src/gui/IconModels.h @@ -21,8 +21,6 @@ #include #include -#include "core/Uuid.h" - class DefaultIconModel : public QAbstractListModel { Q_OBJECT @@ -43,13 +41,13 @@ public: int rowCount(const QModelIndex& parent = QModelIndex()) const override; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; - void setIcons(const QHash& icons, const QList& iconsOrder); - Uuid uuidFromIndex(const QModelIndex& index) const; - QModelIndex indexFromUuid(const Uuid& uuid) const; + void setIcons(const QHash& icons, const QList& iconsOrder); + QUuid uuidFromIndex(const QModelIndex& index) const; + QModelIndex indexFromUuid(const QUuid& uuid) const; private: - QHash m_icons; - QList m_iconsOrder; + QHash m_icons; + QList m_iconsOrder; }; #endif // KEEPASSX_ICONMODELS_H diff --git a/src/gui/KMessageWidget.cpp b/src/gui/KMessageWidget.cpp index 910f0c91b..fabc52952 100644 --- a/src/gui/KMessageWidget.cpp +++ b/src/gui/KMessageWidget.cpp @@ -102,7 +102,7 @@ void KMessageWidgetPrivate::init(KMessageWidget *q_ptr) closeButton->setAutoRaise(true); closeButton->setDefaultAction(closeAction); closeButtonPixmap = QPixmap(closeButton->icon().pixmap(closeButton->icon().actualSize(QSize(16, 16)))); -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS closeButton->setStyleSheet("QToolButton { background: transparent;" "border-radius: 2px; padding: 3px; }" "QToolButton::hover, QToolButton::focus {" @@ -287,7 +287,6 @@ void KMessageWidget::setMessageType(KMessageWidget::MessageType type) // Tint close icon auto closeButtonPixmap = d->closeButtonPixmap; - QPixmap mask(closeButtonPixmap); QPainter painter; painter.begin(&closeButtonPixmap); painter.setRenderHints(QPainter::HighQualityAntialiasing); @@ -309,10 +308,10 @@ void KMessageWidget::setMessageType(KMessageWidget::MessageType type) "}" ".QLabel { color: %6; }" )) - .arg(bg0.name()) - .arg(bg1.name()) - .arg(bg2.name()) - .arg(border.name()) + .arg(bg0.name(), + bg1.name(), + bg2.name(), + border.name()) // DefaultFrameWidth returns the size of the external margin + border width. We know our border is 1px, // so we subtract this from the frame normal QStyle FrameWidth to get our margin .arg(style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, this) - 1) @@ -411,7 +410,7 @@ void KMessageWidget::removeAction(QAction *action) void KMessageWidget::animatedShow() { - if (!style()->styleHint(QStyle::SH_Widget_Animate, 0, this)) { + if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)) { show(); emit showAnimationFinished(); return; @@ -436,7 +435,7 @@ void KMessageWidget::animatedShow() void KMessageWidget::animatedHide() { - if (!style()->styleHint(QStyle::SH_Widget_Animate, 0, this)) { + if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)) { hide(); emit hideAnimationFinished(); return; diff --git a/src/gui/KeePass1OpenWidget.cpp b/src/gui/KeePass1OpenWidget.cpp index 915864241..834425ec1 100644 --- a/src/gui/KeePass1OpenWidget.cpp +++ b/src/gui/KeePass1OpenWidget.cpp @@ -16,11 +16,11 @@ */ #include "KeePass1OpenWidget.h" +#include "ui_DatabaseOpenWidget.h" #include #include -#include "ui_DatabaseOpenWidget.h" #include "core/Database.h" #include "core/Metadata.h" #include "format/KeePass1Reader.h" @@ -49,25 +49,21 @@ void KeePass1OpenWidget::openDatabase() QFile file(m_filename); if (!file.open(QIODevice::ReadOnly)) { - m_ui->messageWidget->showMessage( tr("Unable to open the database.").append("\n") - .append(file.errorString()), MessageWidget::Error); + m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(file.errorString()), + MessageWidget::Error); return; } - if (m_db) { - delete m_db; - } + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_db = reader.readDatabase(&file, password, keyFileName); QApplication::restoreOverrideCursor(); if (m_db) { m_db->metadata()->setName(QFileInfo(m_filename).completeBaseName()); - emit editFinished(true); - } - else { - m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n") - .append(reader.errorString()), MessageWidget::Error); - - m_ui->editPassword->clear(); + emit dialogFinished(true); + clearForms(); + } else { + m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(reader.errorString()), + MessageWidget::Error); } } diff --git a/src/gui/LineEdit.cpp b/src/gui/LineEdit.cpp index 148dc3d17..4ad18fef5 100644 --- a/src/gui/LineEdit.cpp +++ b/src/gui/LineEdit.cpp @@ -31,13 +31,13 @@ LineEdit::LineEdit(QWidget* parent) m_clearButton->setObjectName("clearButton"); QIcon icon; - QString iconNameDirected = QString("edit-clear-locationbar-").append( - (layoutDirection() == Qt::LeftToRight) ? "rtl" : "ltr"); + QString iconNameDirected = + QString("edit-clear-locationbar-").append((layoutDirection() == Qt::LeftToRight) ? "rtl" : "ltr"); icon = QIcon::fromTheme(iconNameDirected); if (icon.isNull()) { icon = QIcon::fromTheme("edit-clear"); if (icon.isNull()) { - icon = filePath()->icon("actions", iconNameDirected, false); + icon = filePath()->icon("actions", iconNameDirected); } } @@ -48,8 +48,8 @@ LineEdit::LineEdit(QWidget* parent) connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clear())); connect(this, SIGNAL(textChanged(QString)), this, SLOT(updateCloseButton(QString))); int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); - setStyleSheet(QString("QLineEdit { padding-right: %1px; } ") - .arg(m_clearButton->sizeHint().width() + frameWidth + 1)); + setStyleSheet( + QString("QLineEdit { padding-right: %1px; } ").arg(m_clearButton->sizeHint().width() + frameWidth + 1)); QSize msz = minimumSizeHint(); setMinimumSize(qMax(msz.width(), m_clearButton->sizeHint().height() + frameWidth * 2 + 2), qMax(msz.height(), m_clearButton->sizeHint().height() + frameWidth * 2 + 2)); @@ -63,8 +63,7 @@ void LineEdit::resizeEvent(QResizeEvent* event) if (layoutDirection() == Qt::LeftToRight) { m_clearButton->move(rect().right() - frameWidth - sz.width(), y); - } - else { + } else { m_clearButton->move(rect().left() + frameWidth, y); } diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index f6cc2e4bb..6e3c96af0 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -20,10 +20,11 @@ #include "ui_MainWindow.h" #include +#include +#include #include #include #include -#include #include "config-keepassx.h" @@ -32,54 +33,62 @@ #include "core/FilePath.h" #include "core/InactivityTimer.h" #include "core/Metadata.h" -#include "format/KeePass2Writer.h" +#include "core/Tools.h" #include "gui/AboutDialog.h" #include "gui/DatabaseWidget.h" -#include "gui/DatabaseRepairWidget.h" -#include "gui/FileDialog.h" -#include "gui/MessageBox.h" #include "gui/SearchWidget.h" +#include "keys/CompositeKey.h" +#include "keys/FileKey.h" +#include "keys/PasswordKey.h" -#ifdef WITH_XC_HTTP -#include "http/Service.h" -#include "http/HttpSettings.h" -#include "http/OptionDialog.h" +#ifdef WITH_XC_NETWORKING +#include "gui/MessageBox.h" +#include "gui/UpdateCheckDialog.h" +#include "updatecheck/UpdateChecker.h" #endif #ifdef WITH_XC_SSHAGENT #include "sshagent/AgentSettingsPage.h" #include "sshagent/SSHAgent.h" #endif - +#if defined(WITH_XC_KEESHARE) +#include "keeshare/KeeShare.h" +#include "keeshare/SettingsPageKeeShare.h" +#endif #ifdef WITH_XC_BROWSER -#include "browser/NativeMessagingHost.h" -#include "browser/BrowserSettings.h" #include "browser/BrowserOptionDialog.h" +#include "browser/BrowserSettings.h" +#include "browser/NativeMessagingHost.h" #endif -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(QT_NO_DBUS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) +#include "gui/MainWindowAdaptor.h" #include #include -#include "gui/MainWindowAdaptor.h" #endif -#include "gui/SettingsWidget.h" +#include "gui/ApplicationSettingsWidget.h" #include "gui/PasswordGeneratorWidget.h" -#ifdef WITH_XC_HTTP -class HttpPlugin: public ISettingsPage +#include "touchid/TouchID.h" + +#ifdef WITH_XC_BROWSER +class BrowserPlugin : public ISettingsPage { public: - HttpPlugin(DatabaseTabWidget* tabWidget) + explicit BrowserPlugin(DatabaseTabWidget* tabWidget) { - m_service = new Service(tabWidget); + m_nativeMessagingHost = + QSharedPointer(new NativeMessagingHost(tabWidget, browserSettings()->isEnabled())); } - ~HttpPlugin() = default; + ~BrowserPlugin() + { + } QString name() override { - return QObject::tr("Legacy Browser Integration"); + return QObject::tr("Browser Integration"); } QIcon icon() override @@ -87,91 +96,51 @@ public: return FilePath::instance()->icon("apps", "internet-web-browser"); } - QWidget * createWidget() override + QWidget* createWidget() override { - OptionDialog* dlg = new OptionDialog(); - QObject::connect(dlg, SIGNAL(removeSharedEncryptionKeys()), m_service, SLOT(removeSharedEncryptionKeys())); - QObject::connect(dlg, SIGNAL(removeStoredPermissions()), m_service, SLOT(removeStoredPermissions())); + BrowserOptionDialog* dlg = new BrowserOptionDialog(); return dlg; } void loadSettings(QWidget* widget) override { - qobject_cast(widget)->loadSettings(); + qobject_cast(widget)->loadSettings(); } void saveSettings(QWidget* widget) override { - qobject_cast(widget)->saveSettings(); - if (HttpSettings::isEnabled()) - m_service->start(); - else - m_service->stop(); + qobject_cast(widget)->saveSettings(); + if (browserSettings()->isEnabled()) { + m_nativeMessagingHost->run(); + } else { + m_nativeMessagingHost->stop(); + } } + private: - Service* m_service; -}; -#endif - -#ifdef WITH_XC_BROWSER -class BrowserPlugin: public ISettingsPage -{ - public: - BrowserPlugin(DatabaseTabWidget* tabWidget) { - m_nativeMessagingHost = QSharedPointer(new NativeMessagingHost(tabWidget, BrowserSettings::isEnabled())); - } - - ~BrowserPlugin() { - - } - - QString name() override - { - return QObject::tr("Browser Integration"); - } - - QIcon icon() override - { - return FilePath::instance()->icon("apps", "internet-web-browser"); - } - - QWidget* createWidget() override { - BrowserOptionDialog* dlg = new BrowserOptionDialog(); - QObject::connect(dlg, SIGNAL(removeSharedEncryptionKeys()), m_nativeMessagingHost.data(), SLOT(removeSharedEncryptionKeys())); - QObject::connect(dlg, SIGNAL(removeStoredPermissions()), m_nativeMessagingHost.data(), SLOT(removeStoredPermissions())); - return dlg; - } - - void loadSettings(QWidget* widget) override - { - qobject_cast(widget)->loadSettings(); - } - - void saveSettings(QWidget* widget) override - { - qobject_cast(widget)->saveSettings(); - if (BrowserSettings::isEnabled()) { - m_nativeMessagingHost->run(); - } else { - m_nativeMessagingHost->stop(); - } - } - private: - QSharedPointer m_nativeMessagingHost; + QSharedPointer m_nativeMessagingHost; }; #endif const QString MainWindow::BaseWindowTitle = "KeePassXC"; +MainWindow* g_MainWindow = nullptr; +MainWindow* getMainWindow() +{ + return g_MainWindow; +} + MainWindow::MainWindow() : m_ui(new Ui::MainWindow()) , m_trayIcon(nullptr) , m_appExitCalled(false) , m_appExiting(false) { + g_MainWindow = this; + m_ui->setupUi(this); - -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(QT_NO_DBUS) + +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) new MainWindowAdaptor(this); QDBusConnection dbus = QDBusConnection::sessionBus(); dbus.registerObject("/keepassxc", this); @@ -180,10 +149,8 @@ MainWindow::MainWindow() setAcceptDrops(true); - m_ui->toolBar->setContextMenuPolicy(Qt::PreventContextMenu); - // Setup the search widget in the toolbar - SearchWidget *search = new SearchWidget(); + auto* search = new SearchWidget(); search->connectSignals(m_actionMultiplexer); m_searchWidgetAction = m_ui->toolBar->addWidget(search); m_searchWidgetAction->setEnabled(false); @@ -191,23 +158,31 @@ MainWindow::MainWindow() m_countDefaultAttributes = m_ui->menuEntryCopyAttribute->actions().size(); restoreGeometry(config()->get("GUI/MainWindowGeometry").toByteArray()); + restoreState(config()->get("GUI/MainWindowState").toByteArray()); #ifdef WITH_XC_BROWSER m_ui->settingsWidget->addSettingsPage(new BrowserPlugin(m_ui->tabWidget)); #endif -#ifdef WITH_XC_HTTP - m_ui->settingsWidget->addSettingsPage(new HttpPlugin(m_ui->tabWidget)); -#endif + #ifdef WITH_XC_SSHAGENT SSHAgent::init(this); connect(SSHAgent::instance(), SIGNAL(error(QString)), this, SLOT(showErrorMessage(QString))); m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage(m_ui->tabWidget)); #endif +#if defined(WITH_XC_KEESHARE) + KeeShare::init(this); + m_ui->settingsWidget->addSettingsPage(new SettingsPageKeeShare(m_ui->tabWidget)); + connect(KeeShare::instance(), + SIGNAL(sharingMessage(QString, MessageWidget::MessageType)), + SLOT(displayGlobalMessage(QString, MessageWidget::MessageType))); +#endif setWindowIcon(filePath()->applicationIcon()); m_ui->globalMessageWidget->setHidden(true); - connect(m_ui->globalMessageWidget, &MessageWidget::linkActivated, &MessageWidget::openHttpUrl); - connect(m_ui->globalMessageWidget, SIGNAL(showAnimationStarted()), m_ui->globalMessageWidgetContainer, SLOT(show())); - connect(m_ui->globalMessageWidget, SIGNAL(hideAnimationFinished()), m_ui->globalMessageWidgetContainer, SLOT(hide())); + // clang-format off + connect(m_ui->globalMessageWidget, &MessageWidget::linkActivated, &MessageWidget::openHttpUrl); + connect(m_ui->globalMessageWidget, SIGNAL(showAnimationStarted()), m_ui->globalMessageWidgetContainer, SLOT(show())); + connect(m_ui->globalMessageWidget, SIGNAL(hideAnimationFinished()), m_ui->globalMessageWidgetContainer, SLOT(hide())); + // clang-format on m_clearHistoryAction = new QAction(tr("Clear history"), m_ui->menuFile); m_lastDatabasesActions = new QActionGroup(m_ui->menuRecentDatabases); @@ -216,14 +191,13 @@ MainWindow::MainWindow() connect(m_ui->menuRecentDatabases, SIGNAL(aboutToShow()), this, SLOT(updateLastDatabasesMenu())); m_copyAdditionalAttributeActions = new QActionGroup(m_ui->menuEntryCopyAttribute); - m_actionMultiplexer.connect(m_copyAdditionalAttributeActions, SIGNAL(triggered(QAction*)), - SLOT(copyAttribute(QAction*))); - connect(m_ui->menuEntryCopyAttribute, SIGNAL(aboutToShow()), - this, SLOT(updateCopyAttributesMenu())); + m_actionMultiplexer.connect( + m_copyAdditionalAttributeActions, SIGNAL(triggered(QAction*)), SLOT(copyAttribute(QAction*))); + connect(m_ui->menuEntryCopyAttribute, SIGNAL(aboutToShow()), this, SLOT(updateCopyAttributesMenu())); Qt::Key globalAutoTypeKey = static_cast(config()->get("GlobalAutoTypeKey").toInt()); - Qt::KeyboardModifiers globalAutoTypeModifiers = static_cast( - config()->get("GlobalAutoTypeModifiers").toInt()); + Qt::KeyboardModifiers globalAutoTypeModifiers = + static_cast(config()->get("GlobalAutoTypeModifiers").toInt()); if (globalAutoTypeKey > 0 && globalAutoTypeModifiers > 0) { autoType()->registerGlobalShortcut(globalAutoTypeKey, globalAutoTypeModifiers); } @@ -231,14 +205,17 @@ MainWindow::MainWindow() m_ui->actionEntryAutoType->setVisible(autoType()->isAvailable()); m_inactivityTimer = new InactivityTimer(this); - connect(m_inactivityTimer, SIGNAL(inactivityDetected()), - this, SLOT(lockDatabasesAfterInactivity())); + connect(m_inactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(lockDatabasesAfterInactivity())); +#ifdef WITH_XC_TOUCHID + m_touchIDinactivityTimer = new InactivityTimer(this); + connect(m_touchIDinactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(forgetTouchIDAfterInactivity())); +#endif applySettingsChanges(); m_ui->actionDatabaseNew->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_N); setShortcut(m_ui->actionDatabaseOpen, QKeySequence::Open, Qt::CTRL + Qt::Key_O); setShortcut(m_ui->actionDatabaseSave, QKeySequence::Save, Qt::CTRL + Qt::Key_S); - setShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs); + setShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs, Qt::CTRL + Qt::SHIFT + Qt::Key_S); setShortcut(m_ui->actionDatabaseClose, QKeySequence::Close, Qt::CTRL + Qt::Key_W); m_ui->actionLockDatabases->setShortcut(Qt::CTRL + Qt::Key_L); setShortcut(m_ui->actionQuit, QKeySequence::Quit, Qt::CTRL + Qt::Key_Q); @@ -251,11 +228,37 @@ MainWindow::MainWindow() m_ui->actionEntryCopyTotp->setShortcut(Qt::CTRL + Qt::Key_T); m_ui->actionEntryCopyUsername->setShortcut(Qt::CTRL + Qt::Key_B); m_ui->actionEntryCopyPassword->setShortcut(Qt::CTRL + Qt::Key_C); - setShortcut(m_ui->actionEntryAutoType, QKeySequence::Paste, Qt::CTRL + Qt::Key_V); - m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::Key_U); - m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_U); + m_ui->actionEntryAutoType->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_V); + m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_U); + m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::Key_U); +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + // Qt 5.10 introduced a new "feature" to hide shortcuts in context menus + // Unfortunately, Qt::AA_DontShowShortcutsInContextMenus is broken, have to manually enable them + m_ui->actionEntryNew->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryEdit->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryDelete->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryClone->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryTotp->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryCopyTotp->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryCopyUsername->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryCopyPassword->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryAutoType->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryOpenUrl->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryCopyURL->setShortcutVisibleInContextMenu(true); +#endif + + // Control window state new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(showMinimized())); + new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_M, this, SLOT(hideWindow())); + // Control database tabs + new QShortcut(Qt::CTRL + Qt::Key_Tab, this, SLOT(selectNextDatabaseTab())); + new QShortcut(Qt::CTRL + Qt::Key_PageUp, this, SLOT(selectNextDatabaseTab())); + new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab, this, SLOT(selectPreviousDatabaseTab())); + new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(selectPreviousDatabaseTab())); + // Toggle password and username visibility in entry view + new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_C, this, SLOT(togglePasswordsHidden())); + new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_B, this, SLOT(toggleUsernamesHidden())); m_ui->actionDatabaseNew->setIcon(filePath()->icon("actions", "document-new")); m_ui->actionDatabaseOpen->setIcon(filePath()->icon("actions", "document-open")); @@ -263,58 +266,50 @@ MainWindow::MainWindow() m_ui->actionDatabaseSaveAs->setIcon(filePath()->icon("actions", "document-save-as")); m_ui->actionDatabaseClose->setIcon(filePath()->icon("actions", "document-close")); m_ui->actionChangeDatabaseSettings->setIcon(filePath()->icon("actions", "document-edit")); - m_ui->actionChangeMasterKey->setIcon(filePath()->icon("actions", "database-change-key", false)); - m_ui->actionLockDatabases->setIcon(filePath()->icon("actions", "document-encrypt", false)); + m_ui->actionChangeMasterKey->setIcon(filePath()->icon("actions", "database-change-key")); + m_ui->actionLockDatabases->setIcon(filePath()->icon("actions", "document-encrypt")); m_ui->actionQuit->setIcon(filePath()->icon("actions", "application-exit")); - m_ui->actionEntryNew->setIcon(filePath()->icon("actions", "entry-new", false)); - m_ui->actionEntryClone->setIcon(filePath()->icon("actions", "entry-clone", false)); - m_ui->actionEntryEdit->setIcon(filePath()->icon("actions", "entry-edit", false)); - m_ui->actionEntryDelete->setIcon(filePath()->icon("actions", "entry-delete", false)); - m_ui->actionEntryAutoType->setIcon(filePath()->icon("actions", "auto-type", false)); - m_ui->actionEntryCopyUsername->setIcon(filePath()->icon("actions", "username-copy", false)); - m_ui->actionEntryCopyPassword->setIcon(filePath()->icon("actions", "password-copy", false)); - m_ui->actionEntryCopyURL->setIcon(filePath()->icon("actions", "url-copy", false)); + m_ui->actionEntryNew->setIcon(filePath()->icon("actions", "entry-new")); + m_ui->actionEntryClone->setIcon(filePath()->icon("actions", "entry-clone")); + m_ui->actionEntryEdit->setIcon(filePath()->icon("actions", "entry-edit")); + m_ui->actionEntryDelete->setIcon(filePath()->icon("actions", "entry-delete")); + m_ui->actionEntryAutoType->setIcon(filePath()->icon("actions", "auto-type")); + m_ui->actionEntryCopyUsername->setIcon(filePath()->icon("actions", "username-copy")); + m_ui->actionEntryCopyPassword->setIcon(filePath()->icon("actions", "password-copy")); + m_ui->actionEntryCopyURL->setIcon(filePath()->icon("actions", "url-copy")); - m_ui->actionGroupNew->setIcon(filePath()->icon("actions", "group-new", false)); - m_ui->actionGroupEdit->setIcon(filePath()->icon("actions", "group-edit", false)); - m_ui->actionGroupDelete->setIcon(filePath()->icon("actions", "group-delete", false)); - m_ui->actionGroupEmptyRecycleBin->setIcon(filePath()->icon("actions", "group-empty-trash", false)); + m_ui->actionGroupNew->setIcon(filePath()->icon("actions", "group-new")); + m_ui->actionGroupEdit->setIcon(filePath()->icon("actions", "group-edit")); + m_ui->actionGroupDelete->setIcon(filePath()->icon("actions", "group-delete")); + m_ui->actionGroupEmptyRecycleBin->setIcon(filePath()->icon("actions", "group-empty-trash")); m_ui->actionSettings->setIcon(filePath()->icon("actions", "configure")); - m_ui->actionPasswordGenerator->setIcon(filePath()->icon("actions", "password-generator", false)); + m_ui->actionPasswordGenerator->setIcon(filePath()->icon("actions", "password-generator")); m_ui->actionAbout->setIcon(filePath()->icon("actions", "help-about")); + m_ui->actionCheckForUpdates->setIcon(filePath()->icon("actions", "system-software-update")); - m_actionMultiplexer.connect(SIGNAL(currentModeChanged(DatabaseWidget::Mode)), - this, SLOT(setMenuActionState(DatabaseWidget::Mode))); - m_actionMultiplexer.connect(SIGNAL(groupChanged()), - this, SLOT(setMenuActionState())); - m_actionMultiplexer.connect(SIGNAL(entrySelectionChanged()), - this, SLOT(setMenuActionState())); - m_actionMultiplexer.connect(SIGNAL(groupContextMenuRequested(QPoint)), - this, SLOT(showGroupContextMenu(QPoint))); - m_actionMultiplexer.connect(SIGNAL(entryContextMenuRequested(QPoint)), - this, SLOT(showEntryContextMenu(QPoint))); + m_actionMultiplexer.connect( + SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(setMenuActionState(DatabaseWidget::Mode))); + m_actionMultiplexer.connect(SIGNAL(groupChanged()), this, SLOT(setMenuActionState())); + m_actionMultiplexer.connect(SIGNAL(entrySelectionChanged()), this, SLOT(setMenuActionState())); + m_actionMultiplexer.connect(SIGNAL(groupContextMenuRequested(QPoint)), this, SLOT(showGroupContextMenu(QPoint))); + m_actionMultiplexer.connect(SIGNAL(entryContextMenuRequested(QPoint)), this, SLOT(showEntryContextMenu(QPoint))); // Notify search when the active database changes or gets locked - connect(m_ui->tabWidget, SIGNAL(activateDatabaseChanged(DatabaseWidget*)), - search, SLOT(databaseChanged(DatabaseWidget*))); - connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), - search, SLOT(databaseChanged())); + connect(m_ui->tabWidget, + SIGNAL(activateDatabaseChanged(DatabaseWidget*)), + search, + SLOT(databaseChanged(DatabaseWidget*))); + connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), search, SLOT(databaseChanged())); - connect(m_ui->tabWidget, SIGNAL(tabNameChanged()), - SLOT(updateWindowTitle())); - connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), - SLOT(updateWindowTitle())); - connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), - SLOT(databaseTabChanged(int))); - connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), - SLOT(setMenuActionState())); - connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), - SLOT(databaseStatusChanged(DatabaseWidget*))); - connect(m_ui->tabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), - SLOT(databaseStatusChanged(DatabaseWidget*))); + connect(m_ui->tabWidget, SIGNAL(tabNameChanged()), SLOT(updateWindowTitle())); + connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); + connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(databaseTabChanged(int))); + connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); + connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*))); + connect(m_ui->tabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*))); connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(applySettingsChanges())); @@ -322,73 +317,42 @@ MainWindow::MainWindow() connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(switchToDatabases())); connect(m_ui->settingsWidget, SIGNAL(rejected()), SLOT(switchToDatabases())); - connect(m_ui->actionDatabaseNew, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(newDatabase())); - connect(m_ui->actionDatabaseOpen, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(openDatabase())); - connect(m_ui->actionDatabaseSave, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(saveDatabase())); - connect(m_ui->actionDatabaseSaveAs, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(saveDatabaseAs())); - connect(m_ui->actionDatabaseClose, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(closeDatabase())); - connect(m_ui->actionDatabaseMerge, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(mergeDatabase())); - connect(m_ui->actionChangeMasterKey, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(changeMasterKey())); - connect(m_ui->actionChangeDatabaseSettings, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(changeDatabaseSettings())); - connect(m_ui->actionImportCsv, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(importCsv())); - connect(m_ui->actionImportKeePass1, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(importKeePass1Database())); - connect(m_ui->actionRepairDatabase, SIGNAL(triggered()), this, - SLOT(repairDatabase())); - connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(exportToCsv())); - connect(m_ui->actionLockDatabases, SIGNAL(triggered()), m_ui->tabWidget, - SLOT(lockDatabases())); + connect(m_ui->actionDatabaseNew, SIGNAL(triggered()), m_ui->tabWidget, SLOT(newDatabase())); + connect(m_ui->actionDatabaseOpen, SIGNAL(triggered()), m_ui->tabWidget, SLOT(openDatabase())); + connect(m_ui->actionDatabaseSave, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabase())); + connect(m_ui->actionDatabaseSaveAs, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseAs())); + connect(m_ui->actionDatabaseClose, SIGNAL(triggered()), m_ui->tabWidget, SLOT(closeCurrentDatabaseTab())); + connect(m_ui->actionDatabaseMerge, SIGNAL(triggered()), m_ui->tabWidget, SLOT(mergeDatabase())); + connect(m_ui->actionChangeMasterKey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(changeMasterKey())); + connect(m_ui->actionChangeDatabaseSettings, SIGNAL(triggered()), m_ui->tabWidget, SLOT(changeDatabaseSettings())); + connect(m_ui->actionImportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importCsv())); + connect(m_ui->actionImportKeePass1, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importKeePass1Database())); + connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToCsv())); + connect(m_ui->actionLockDatabases, SIGNAL(triggered()), m_ui->tabWidget, SLOT(lockDatabases())); connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(appExit())); - m_actionMultiplexer.connect(m_ui->actionEntryNew, SIGNAL(triggered()), - SLOT(createEntry())); - m_actionMultiplexer.connect(m_ui->actionEntryClone, SIGNAL(triggered()), - SLOT(cloneEntry())); - m_actionMultiplexer.connect(m_ui->actionEntryEdit, SIGNAL(triggered()), - SLOT(switchToEntryEdit())); - m_actionMultiplexer.connect(m_ui->actionEntryDelete, SIGNAL(triggered()), - SLOT(deleteEntries())); + m_actionMultiplexer.connect(m_ui->actionEntryNew, SIGNAL(triggered()), SLOT(createEntry())); + m_actionMultiplexer.connect(m_ui->actionEntryClone, SIGNAL(triggered()), SLOT(cloneEntry())); + m_actionMultiplexer.connect(m_ui->actionEntryEdit, SIGNAL(triggered()), SLOT(switchToEntryEdit())); + m_actionMultiplexer.connect(m_ui->actionEntryDelete, SIGNAL(triggered()), SLOT(deleteSelectedEntries())); - m_actionMultiplexer.connect(m_ui->actionEntryTotp, SIGNAL(triggered()), - SLOT(showTotp())); - m_actionMultiplexer.connect(m_ui->actionEntrySetupTotp, SIGNAL(triggered()), - SLOT(setupTotp())); + m_actionMultiplexer.connect(m_ui->actionEntryTotp, SIGNAL(triggered()), SLOT(showTotp())); + m_actionMultiplexer.connect(m_ui->actionEntrySetupTotp, SIGNAL(triggered()), SLOT(setupTotp())); - m_actionMultiplexer.connect(m_ui->actionEntryCopyTotp, SIGNAL(triggered()), - SLOT(copyTotp())); - m_actionMultiplexer.connect(m_ui->actionEntryCopyTitle, SIGNAL(triggered()), - SLOT(copyTitle())); - m_actionMultiplexer.connect(m_ui->actionEntryCopyUsername, SIGNAL(triggered()), - SLOT(copyUsername())); - m_actionMultiplexer.connect(m_ui->actionEntryCopyPassword, SIGNAL(triggered()), - SLOT(copyPassword())); - m_actionMultiplexer.connect(m_ui->actionEntryCopyURL, SIGNAL(triggered()), - SLOT(copyURL())); - m_actionMultiplexer.connect(m_ui->actionEntryCopyNotes, SIGNAL(triggered()), - SLOT(copyNotes())); - m_actionMultiplexer.connect(m_ui->actionEntryAutoType, SIGNAL(triggered()), - SLOT(performAutoType())); - m_actionMultiplexer.connect(m_ui->actionEntryOpenUrl, SIGNAL(triggered()), - SLOT(openUrl())); + m_actionMultiplexer.connect(m_ui->actionEntryCopyTotp, SIGNAL(triggered()), SLOT(copyTotp())); + m_actionMultiplexer.connect(m_ui->actionEntryTotpQRCode, SIGNAL(triggered()), SLOT(showTotpKeyQrCode())); + m_actionMultiplexer.connect(m_ui->actionEntryCopyTitle, SIGNAL(triggered()), SLOT(copyTitle())); + m_actionMultiplexer.connect(m_ui->actionEntryCopyUsername, SIGNAL(triggered()), SLOT(copyUsername())); + m_actionMultiplexer.connect(m_ui->actionEntryCopyPassword, SIGNAL(triggered()), SLOT(copyPassword())); + m_actionMultiplexer.connect(m_ui->actionEntryCopyURL, SIGNAL(triggered()), SLOT(copyURL())); + m_actionMultiplexer.connect(m_ui->actionEntryCopyNotes, SIGNAL(triggered()), SLOT(copyNotes())); + m_actionMultiplexer.connect(m_ui->actionEntryAutoType, SIGNAL(triggered()), SLOT(performAutoType())); + m_actionMultiplexer.connect(m_ui->actionEntryOpenUrl, SIGNAL(triggered()), SLOT(openUrl())); - m_actionMultiplexer.connect(m_ui->actionGroupNew, SIGNAL(triggered()), - SLOT(createGroup())); - m_actionMultiplexer.connect(m_ui->actionGroupEdit, SIGNAL(triggered()), - SLOT(switchToGroupEdit())); - m_actionMultiplexer.connect(m_ui->actionGroupDelete, SIGNAL(triggered()), - SLOT(deleteGroup())); - m_actionMultiplexer.connect(m_ui->actionGroupEmptyRecycleBin, SIGNAL(triggered()), - SLOT(emptyRecycleBin())); + m_actionMultiplexer.connect(m_ui->actionGroupNew, SIGNAL(triggered()), SLOT(createGroup())); + m_actionMultiplexer.connect(m_ui->actionGroupEdit, SIGNAL(triggered()), SLOT(switchToGroupEdit())); + m_actionMultiplexer.connect(m_ui->actionGroupDelete, SIGNAL(triggered()), SLOT(deleteGroup())); + m_actionMultiplexer.connect(m_ui->actionGroupEmptyRecycleBin, SIGNAL(triggered()), SLOT(emptyRecycleBin())); connect(m_ui->actionSettings, SIGNAL(toggled(bool)), SLOT(switchToSettings(bool))); connect(m_ui->actionPasswordGenerator, SIGNAL(toggled(bool)), SLOT(switchToPasswordGen(bool))); @@ -398,20 +362,34 @@ MainWindow::MainWindow() connect(m_ui->welcomeWidget, SIGNAL(openDatabase()), SLOT(switchToOpenDatabase())); connect(m_ui->welcomeWidget, SIGNAL(openDatabaseFile(QString)), SLOT(switchToDatabaseFile(QString))); connect(m_ui->welcomeWidget, SIGNAL(importKeePass1Database()), SLOT(switchToKeePass1Database())); - connect(m_ui->welcomeWidget, SIGNAL(importCsv()), SLOT(switchToImportCsv())); + connect(m_ui->welcomeWidget, SIGNAL(importCsv()), SLOT(switchToCsvImport())); connect(m_ui->actionAbout, SIGNAL(triggered()), SLOT(showAboutDialog())); connect(m_ui->actionDonate, SIGNAL(triggered()), SLOT(openDonateUrl())); connect(m_ui->actionBugReport, SIGNAL(triggered()), SLOT(openBugReportUrl())); -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS setUnifiedTitleAndToolBarOnMac(true); #endif - connect(m_ui->tabWidget, SIGNAL(messageGlobal(QString,MessageWidget::MessageType)), this, SLOT(displayGlobalMessage(QString, MessageWidget::MessageType))); +#ifdef WITH_XC_NETWORKING + connect(m_ui->actionCheckForUpdates, SIGNAL(triggered()), SLOT(showUpdateCheckDialog())); + connect(UpdateChecker::instance(), + SIGNAL(updateCheckFinished(bool, QString, bool)), + SLOT(hasUpdateAvailable(bool, QString, bool))); + QTimer::singleShot(3000, this, SLOT(showUpdateCheckStartup())); +#else + m_ui->actionCheckForUpdates->setVisible(false); +#endif + + // clang-format off + connect(m_ui->tabWidget, + SIGNAL(messageGlobal(QString,MessageWidget::MessageType)), + this, + SLOT(displayGlobalMessage(QString,MessageWidget::MessageType))); + // clang-format on + connect(m_ui->tabWidget, SIGNAL(messageDismissGlobal()), this, SLOT(hideGlobalMessage())); - connect(m_ui->tabWidget, SIGNAL(messageTab(QString,MessageWidget::MessageType)), this, SLOT(displayTabMessage(QString, MessageWidget::MessageType))); - connect(m_ui->tabWidget, SIGNAL(messageDismissTab()), this, SLOT(hideTabMessage())); m_screenLockListener = new ScreenLockListener(this); connect(m_screenLockListener, SIGNAL(screenLocked()), SLOT(handleScreenLock())); @@ -419,31 +397,32 @@ MainWindow::MainWindow() updateTrayIcon(); if (config()->hasAccessError()) { - m_ui->globalMessageWidget->showMessage( - tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error); + m_ui->globalMessageWidget->showMessage(tr("Access error for config file %1").arg(config()->getFileName()), + MessageWidget::Error); } -#ifdef WITH_XC_HTTP - if (config()->get("Http/Enabled", false).toBool() && config()->get("Http/DeprecationNoticeShown", 0).toInt() < 3) { - // show message after global widget dismissed all messages - connect(m_ui->globalMessageWidget, SIGNAL(hideAnimationFinished()), this, SLOT(showKeePassHTTPDeprecationNotice())); - } -#endif -#if !defined(KEEPASSXC_BUILD_TYPE_RELEASE) - m_ui->globalMessageWidget->showMessage(tr("WARNING: You are using an unstable build of KeePassXC!\n" - "There is a high risk of corruption, maintain a backup of your databases.\n" - "This version is not meant for production use."), - MessageWidget::Warning, -1); +#if defined(KEEPASSXC_BUILD_TYPE_SNAPSHOT) + m_ui->globalMessageWidget->showMessage( + tr("WARNING: You are using an unstable build of KeePassXC!\n" + "There is a high risk of corruption, maintain a backup of your databases.\n" + "This version is not meant for production use."), + MessageWidget::Warning, + -1); +#elif defined(KEEPASSXC_BUILD_TYPE_PRE_RELEASE) + m_ui->globalMessageWidget->showMessage( + tr("NOTE: You are using a pre-release version of KeePassXC!\n" + "Expect some bugs and minor issues, this version is not meant for production use."), + MessageWidget::Information, + 15000); #elif (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) && QT_VERSION < QT_VERSION_CHECK(5, 6, 0)) if (!config()->get("QtErrorMessageShown", false).toBool()) { - m_ui->globalMessageWidget->showMessage(tr("WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!\n" - "We recommend you use the AppImage available on our downloads page."), - MessageWidget::Warning, -1); + m_ui->globalMessageWidget->showMessage( + tr("WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!\n" + "We recommend you use the AppImage available on our downloads page."), + MessageWidget::Warning, + -1); config()->set("QtErrorMessageShown", true); } -#else - // Show the HTTP deprecation message if enabled above - emit m_ui->globalMessageWidget->hideAnimationFinished(); #endif } @@ -451,20 +430,6 @@ MainWindow::~MainWindow() { } -void MainWindow::showKeePassHTTPDeprecationNotice() -{ - int warningNum = config()->get("Http/DeprecationNoticeShown", 0).toInt(); - displayGlobalMessage(tr("

    It looks like you are using KeePassHTTP for browser integration. " - "This feature has been deprecated and will be removed in the future.
    " - "Please switch to KeePassXC-Browser instead! For help with migration, " - "visit our " - "migration guide (warning %1 of 3).

    ").arg(warningNum + 1), - MessageWidget::Warning, true, -1); - - config()->set("Http/DeprecationNoticeShown", warningNum + 1); - disconnect(m_ui->globalMessageWidget, SIGNAL(hideAnimationFinished()), this, SLOT(showKeePassHTTPDeprecationNotice())); -} - void MainWindow::showErrorMessage(const QString& message) { m_ui->globalMessageWidget->showMessage(message, MessageWidget::Error); @@ -529,30 +494,60 @@ void MainWindow::clearLastDatabases() } } -void MainWindow::openDatabase(const QString& fileName, const QString& pw, const QString& keyFile) +void MainWindow::openDatabase(const QString& filePath, const QString& pw, const QString& keyFile) { - m_ui->tabWidget->openDatabase(fileName, pw, keyFile); + if (pw.isEmpty() && keyFile.isEmpty()) { + m_ui->tabWidget->addDatabaseTab(filePath); + return; + } + + auto db = QSharedPointer::create(); + auto key = QSharedPointer::create(); + if (!pw.isEmpty()) { + key->addKey(QSharedPointer::create(pw)); + } + if (!keyFile.isEmpty()) { + auto fileKey = QSharedPointer::create(); + fileKey->load(keyFile); + key->addKey(fileKey); + } + if (db->open(filePath, key, nullptr, false)) { + auto* dbWidget = new DatabaseWidget(db, this); + m_ui->tabWidget->addDatabaseTab(dbWidget); + dbWidget->switchToMainView(true); + } } void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) { int currentIndex = m_ui->stackedWidget->currentIndex(); + bool inDatabaseTabWidget = (currentIndex == DatabaseTabScreen); bool inWelcomeWidget = (currentIndex == WelcomeScreen); + bool inDatabaseTabWidgetOrWelcomeWidget = inDatabaseTabWidget || inWelcomeWidget; + + m_ui->actionDatabaseMerge->setEnabled(inDatabaseTabWidget); + + m_ui->actionDatabaseNew->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); + m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); + m_ui->menuRecentDatabases->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); + m_ui->menuImport->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); + + m_ui->actionLockDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases()); if (inDatabaseTabWidget && m_ui->tabWidget->currentIndex() != -1) { DatabaseWidget* dbWidget = m_ui->tabWidget->currentDatabaseWidget(); Q_ASSERT(dbWidget); - if (mode == DatabaseWidget::None) { + if (mode == DatabaseWidget::Mode::None) { mode = dbWidget->currentMode(); } switch (mode) { - case DatabaseWidget::ViewMode: { - //bool inSearch = dbWidget->isInSearchMode(); - bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1; - bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0; + case DatabaseWidget::Mode::ViewMode: { + // bool inSearch = dbWidget->isInSearchMode(); + bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1 && dbWidget->currentEntryHasFocus(); + bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0 && dbWidget->currentEntryHasFocus(); bool groupSelected = dbWidget->isGroupSelected(); bool recycleBinSelected = dbWidget->isRecycleBinSelected(); @@ -566,12 +561,13 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) m_ui->actionEntryCopyURL->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); m_ui->actionEntryCopyNotes->setEnabled(singleEntrySelected && dbWidget->currentEntryHasNotes()); m_ui->menuEntryCopyAttribute->setEnabled(singleEntrySelected); - m_ui->menuEntryTotp->setEnabled(true); + m_ui->menuEntryTotp->setEnabled(singleEntrySelected); m_ui->actionEntryAutoType->setEnabled(singleEntrySelected); m_ui->actionEntryOpenUrl->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); m_ui->actionEntryTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); m_ui->actionEntryCopyTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); m_ui->actionEntrySetupTotp->setEnabled(singleEntrySelected); + m_ui->actionEntryTotpQRCode->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); m_ui->actionGroupNew->setEnabled(groupSelected); m_ui->actionGroupEdit->setEnabled(groupSelected); m_ui->actionGroupDelete->setEnabled(groupSelected && dbWidget->canDeleteCurrentGroup()); @@ -588,9 +584,9 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) break; } - case DatabaseWidget::EditMode: - case DatabaseWidget::ImportMode: - case DatabaseWidget::LockedMode: { + case DatabaseWidget::Mode::EditMode: + case DatabaseWidget::Mode::ImportMode: + case DatabaseWidget::Mode::LockedMode: { const QList entryActions = m_ui->menuEntries->actions(); for (QAction* action : entryActions) { action->setEnabled(false); @@ -600,13 +596,6 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) for (QAction* action : groupActions) { action->setEnabled(false); } - m_ui->actionEntryCopyTitle->setEnabled(false); - m_ui->actionEntryCopyUsername->setEnabled(false); - m_ui->actionEntryCopyPassword->setEnabled(false); - m_ui->actionEntryCopyURL->setEnabled(false); - m_ui->actionEntryCopyNotes->setEnabled(false); - m_ui->menuEntryCopyAttribute->setEnabled(false); - m_ui->menuEntryTotp->setEnabled(false); m_ui->actionChangeMasterKey->setEnabled(false); m_ui->actionChangeDatabaseSettings->setEnabled(false); @@ -622,8 +611,7 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) Q_ASSERT(false); } m_ui->actionDatabaseClose->setEnabled(true); - } - else { + } else { const QList entryActions = m_ui->menuEntries->actions(); for (QAction* action : entryActions) { action->setEnabled(false); @@ -633,13 +621,6 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) for (QAction* action : groupActions) { action->setEnabled(false); } - m_ui->actionEntryCopyTitle->setEnabled(false); - m_ui->actionEntryCopyUsername->setEnabled(false); - m_ui->actionEntryCopyPassword->setEnabled(false); - m_ui->actionEntryCopyURL->setEnabled(false); - m_ui->actionEntryCopyNotes->setEnabled(false); - m_ui->menuEntryCopyAttribute->setEnabled(false); - m_ui->menuEntryTotp->setEnabled(false); m_ui->actionChangeMasterKey->setEnabled(false); m_ui->actionChangeDatabaseSettings->setEnabled(false); @@ -652,15 +633,6 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) m_searchWidgetAction->setEnabled(false); } - bool inDatabaseTabWidgetOrWelcomeWidget = inDatabaseTabWidget || inWelcomeWidget; - m_ui->actionDatabaseNew->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); - m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); - m_ui->menuRecentDatabases->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); - m_ui->menuImport->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); - m_ui->actionRepairDatabase->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); - - m_ui->actionLockDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases()); - if ((currentIndex == PasswordGeneratorScreen) != m_ui->actionPasswordGenerator->isChecked()) { bool blocked = m_ui->actionPasswordGenerator->blockSignals(true); m_ui->actionPasswordGenerator->toggle(); @@ -680,14 +652,11 @@ void MainWindow::updateWindowTitle() bool isModified = m_ui->tabWidget->isModified(tabWidgetIndex); if (stackedWidgetIndex == DatabaseTabScreen && tabWidgetIndex != -1) { - customWindowTitlePart = m_ui->tabWidget->tabText(tabWidgetIndex); + customWindowTitlePart = m_ui->tabWidget->tabName(tabWidgetIndex); if (isModified) { // remove asterisk '*' from title customWindowTitlePart.remove(customWindowTitlePart.size() - 1, 1); } - if (m_ui->tabWidget->readOnly(tabWidgetIndex)) { - customWindowTitlePart.append(QString(" [%1]").arg(tr("read-only"))); - } m_ui->actionDatabaseSave->setEnabled(m_ui->tabWidget->canSave(tabWidgetIndex)); } else if (stackedWidgetIndex == 1) { customWindowTitlePart = tr("Settings"); @@ -703,20 +672,66 @@ void MainWindow::updateWindowTitle() if (customWindowTitlePart.isEmpty() || stackedWidgetIndex == 1) { setWindowFilePath(""); } else { - setWindowFilePath(m_ui->tabWidget->databasePath(tabWidgetIndex)); + setWindowFilePath(m_ui->tabWidget->databaseWidgetFromIndex(tabWidgetIndex)->database()->filePath()); } - setWindowModified(isModified); - setWindowTitle(windowTitle); + setWindowModified(isModified); } void MainWindow::showAboutDialog() { - AboutDialog* aboutDialog = new AboutDialog(this); + auto* aboutDialog = new AboutDialog(this); aboutDialog->open(); } +void MainWindow::showUpdateCheckStartup() +{ +#ifdef WITH_XC_NETWORKING + if (!config()->get("UpdateCheckMessageShown", false).toBool()) { + auto result = + MessageBox::question(this, + tr("Check for updates on startup?"), + tr("Would you like KeePassXC to check for updates on startup?") + "\n\n" + + tr("You can always check for updates manually from the application menu."), + MessageBox::Yes | MessageBox::No, + MessageBox::Yes); + + config()->set("GUI/CheckForUpdates", (result == MessageBox::Yes)); + config()->set("UpdateCheckMessageShown", true); + } + + if (config()->get("GUI/CheckForUpdates", false).toBool()) { + updateCheck()->checkForUpdates(false); + } + +#endif +} + +void MainWindow::hasUpdateAvailable(bool hasUpdate, const QString& version, bool isManuallyRequested) +{ +#ifdef WITH_XC_NETWORKING + if (hasUpdate && !isManuallyRequested) { + auto* updateCheckDialog = new UpdateCheckDialog(this); + updateCheckDialog->showUpdateCheckResponse(hasUpdate, version); + updateCheckDialog->show(); + } +#else + Q_UNUSED(hasUpdate) + Q_UNUSED(version) + Q_UNUSED(isManuallyRequested) +#endif +} + +void MainWindow::showUpdateCheckDialog() +{ +#ifdef WITH_XC_NETWORKING + updateCheck()->checkForUpdates(true); + auto* updateCheckDialog = new UpdateCheckDialog(this); + updateCheckDialog->show(); +#endif +} + void MainWindow::openDonateUrl() { QDesktopServices::openUrl(QUrl("https://keepassxc.org/donate")); @@ -731,8 +746,7 @@ void MainWindow::switchToDatabases() { if (m_ui->tabWidget->currentIndex() == -1) { m_ui->stackedWidget->setCurrentIndex(WelcomeScreen); - } - else { + } else { m_ui->stackedWidget->setCurrentIndex(DatabaseTabScreen); } } @@ -750,13 +764,13 @@ void MainWindow::switchToSettings(bool enabled) void MainWindow::switchToPasswordGen(bool enabled) { if (enabled) { - m_ui->passwordGeneratorWidget->loadSettings(); - m_ui->passwordGeneratorWidget->regeneratePassword(); - m_ui->passwordGeneratorWidget->setStandaloneMode(true); - m_ui->stackedWidget->setCurrentIndex(PasswordGeneratorScreen); + m_ui->passwordGeneratorWidget->loadSettings(); + m_ui->passwordGeneratorWidget->regeneratePassword(); + m_ui->passwordGeneratorWidget->setStandaloneMode(true); + m_ui->stackedWidget->setCurrentIndex(PasswordGeneratorScreen); } else { - m_ui->passwordGeneratorWidget->saveSettings(); - switchToDatabases(); + m_ui->passwordGeneratorWidget->saveSettings(); + switchToDatabases(); } } @@ -777,9 +791,9 @@ void MainWindow::switchToOpenDatabase() switchToDatabases(); } -void MainWindow::switchToDatabaseFile(QString file) +void MainWindow::switchToDatabaseFile(const QString& file) { - m_ui->tabWidget->openDatabase(file); + m_ui->tabWidget->addDatabaseTab(file); switchToDatabases(); } @@ -789,29 +803,69 @@ void MainWindow::switchToKeePass1Database() switchToDatabases(); } -void MainWindow::switchToImportCsv() +void MainWindow::switchToCsvImport() { m_ui->tabWidget->importCsv(); switchToDatabases(); } -void MainWindow::databaseStatusChanged(DatabaseWidget *) +void MainWindow::databaseStatusChanged(DatabaseWidget* dbWidget) { + Q_UNUSED(dbWidget); updateTrayIcon(); } +void MainWindow::selectNextDatabaseTab() +{ + if (m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { + int index = m_ui->tabWidget->currentIndex() + 1; + if (index >= m_ui->tabWidget->count()) { + m_ui->tabWidget->setCurrentIndex(0); + } else { + m_ui->tabWidget->setCurrentIndex(index); + } + } +} + +void MainWindow::selectPreviousDatabaseTab() +{ + if (m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { + int index = m_ui->tabWidget->currentIndex() - 1; + if (index < 0) { + m_ui->tabWidget->setCurrentIndex(m_ui->tabWidget->count() - 1); + } else { + m_ui->tabWidget->setCurrentIndex(index); + } + } +} + void MainWindow::databaseTabChanged(int tabIndex) { if (tabIndex != -1 && m_ui->stackedWidget->currentIndex() == WelcomeScreen) { m_ui->stackedWidget->setCurrentIndex(DatabaseTabScreen); - } - else if (tabIndex == -1 && m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { + } else if (tabIndex == -1 && m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { m_ui->stackedWidget->setCurrentIndex(WelcomeScreen); } m_actionMultiplexer.setCurrentObject(m_ui->tabWidget->currentDatabaseWidget()); } +void MainWindow::togglePasswordsHidden() +{ + auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); + if (dbWidget) { + dbWidget->setPasswordsHidden(!dbWidget->isPasswordsHidden()); + } +} + +void MainWindow::toggleUsernamesHidden() +{ + auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); + if (dbWidget) { + dbWidget->setUsernamesHidden(!dbWidget->isUsernamesHidden()); + } +} + void MainWindow::closeEvent(QCloseEvent* event) { // ignore double close events (happens on macOS when closing from the dock) @@ -820,17 +874,9 @@ void MainWindow::closeEvent(QCloseEvent* event) return; } - bool minimizeOnClose = isTrayIconEnabled() && - config()->get("GUI/MinimizeOnClose").toBool(); - if (minimizeOnClose && !m_appExitCalled) - { - event->accept(); + if (config()->get("GUI/MinimizeOnClose").toBool() && !m_appExitCalled) { + event->ignore(); hideWindow(); - - if (config()->get("security/lockdatabaseminimize").toBool()) { - m_ui->tabWidget->lockDatabases(); - } - return; } @@ -842,8 +888,7 @@ void MainWindow::closeEvent(QCloseEvent* event) event->accept(); QApplication::quit(); - } - else { + } else { event->ignore(); } } @@ -852,8 +897,7 @@ void MainWindow::changeEvent(QEvent* event) { if ((event->type() == QEvent::WindowStateChange) && isMinimized()) { if (isTrayIconEnabled() && m_trayIcon && m_trayIcon->isVisible() - && config()->get("GUI/MinimizeToTray").toBool()) - { + && config()->get("GUI/MinimizeToTray").toBool()) { event->ignore(); QTimer::singleShot(0, this, SLOT(hide())); } @@ -861,8 +905,7 @@ void MainWindow::changeEvent(QEvent* event) if (config()->get("security/lockdatabaseminimize").toBool()) { m_ui->tabWidget->lockDatabases(); } - } - else { + } else { QMainWindow::changeEvent(event); } } @@ -871,6 +914,7 @@ void MainWindow::saveWindowInformation() { if (isVisible()) { config()->set("GUI/MainWindowGeometry", saveGeometry()); + config()->set("GUI/MainWindowState", saveState()); } } @@ -881,20 +925,15 @@ bool MainWindow::saveLastDatabases() bool openPreviousDatabasesOnStartup = config()->get("OpenPreviousDatabasesOnStartup").toBool(); if (openPreviousDatabasesOnStartup) { - connect(m_ui->tabWidget, SIGNAL(databaseWithFileClosed(QString)), - this, SLOT(rememberOpenDatabases(QString))); + connect( + m_ui->tabWidget, SIGNAL(databaseClosed(const QString&)), this, SLOT(rememberOpenDatabases(const QString&))); } - if (!m_ui->tabWidget->closeAllDatabases()) { - accept = false; - } - else { - accept = true; - } + accept = m_ui->tabWidget->closeAllDatabaseTabs(); if (openPreviousDatabasesOnStartup) { - disconnect(m_ui->tabWidget, SIGNAL(databaseWithFileClosed(QString)), - this, SLOT(rememberOpenDatabases(QString))); + disconnect( + m_ui->tabWidget, SIGNAL(databaseClosed(const QString&)), this, SLOT(rememberOpenDatabases(const QString&))); config()->set("LastOpenedDatabases", m_openDatabases); } @@ -911,7 +950,7 @@ void MainWindow::updateTrayIcon() QAction* actionToggle = new QAction(tr("Toggle window"), menu); menu->addAction(actionToggle); -#ifdef Q_OS_MAC +#ifdef Q_OS_MACOS QAction* actionQuit = new QAction(tr("Quit KeePassXC"), menu); menu->addAction(actionQuit); @@ -919,24 +958,23 @@ void MainWindow::updateTrayIcon() #else menu->addAction(m_ui->actionQuit); - connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), + connect(m_trayIcon, + SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(trayIconTriggered(QSystemTrayIcon::ActivationReason))); #endif connect(actionToggle, SIGNAL(triggered()), SLOT(toggleWindow())); m_trayIcon->setContextMenu(menu); - + m_trayIcon->setIcon(filePath()->trayIcon()); m_trayIcon->show(); } if (m_ui->tabWidget->hasLockableDatabases()) { m_trayIcon->setIcon(filePath()->trayIconUnlocked()); - } - else { + } else { m_trayIcon->setIcon(filePath()->trayIconLocked()); } - } - else { + } else { if (m_trayIcon) { m_trayIcon->hide(); delete m_trayIcon; @@ -959,8 +997,7 @@ void MainWindow::setShortcut(QAction* action, QKeySequence::StandardKey standard { if (!QKeySequence::keyBindings(standard).isEmpty()) { action->setShortcuts(standard); - } - else if (fallback != 0) { + } else if (fallback != 0) { action->setShortcut(QKeySequence(fallback)); } } @@ -980,11 +1017,34 @@ void MainWindow::applySettingsChanges() m_inactivityTimer->setInactivityTimeout(timeout); if (config()->get("security/lockdatabaseidle").toBool()) { m_inactivityTimer->activate(); - } - else { + } else { m_inactivityTimer->deactivate(); } +#ifdef WITH_XC_TOUCHID + // forget TouchID (in minutes) + timeout = config()->get("security/resettouchidtimeout").toInt() * 60 * 1000; + if (timeout <= 0) { + timeout = 30 * 60 * 1000; + } + + m_touchIDinactivityTimer->setInactivityTimeout(timeout); + if (config()->get("security/resettouchid").toBool()) { + m_touchIDinactivityTimer->activate(); + } else { + m_touchIDinactivityTimer->deactivate(); + } +#endif + + m_ui->toolBar->setHidden(config()->get("GUI/HideToolbar").toBool()); + m_ui->toolBar->setMovable(config()->get("GUI/MovableToolbar").toBool()); + + bool isOk = false; + const auto toolButtonStyle = static_cast(config()->get("GUI/ToolButtonStyle").toInt(&isOk)); + if (isOk) { + m_ui->toolBar->setToolButtonStyle(toolButtonStyle); + } + updateTrayIcon(); } @@ -998,14 +1058,19 @@ void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason) void MainWindow::hideWindow() { saveWindowInformation(); -#if !defined(Q_OS_LINUX) && !defined(Q_OS_MAC) +#if !defined(Q_OS_LINUX) && !defined(Q_OS_MACOS) // On some Linux systems, the window should NOT be minimized and hidden (i.e. not shown), at // the same time (which would happen if both minimize on startup and minimize to tray are set) // since otherwise it causes problems on restore as seen on issue #1595. Hiding it is enough. // TODO: Add an explanation for why this is also not done on Mac (or remove the check) setWindowState(windowState() | Qt::WindowMinimized); #endif - QTimer::singleShot(0, this, SLOT(hide())); + // Only hide if tray icon is active, otherwise window will be gone forever + if (isTrayIconEnabled()) { + hide(); + } else { + showMinimized(); + } if (config()->get("security/lockdatabaseminimize").toBool()) { m_ui->tabWidget->lockDatabases(); @@ -1019,17 +1084,19 @@ void MainWindow::toggleWindow() } else { bringToFront(); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(QT_NO_DBUS) && (QT_VERSION < QT_VERSION_CHECK(5, 9, 0)) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) && (QT_VERSION < QT_VERSION_CHECK(5, 9, 0)) // re-register global D-Bus menu (needed on Ubuntu with Unity) // see https://github.com/keepassxreboot/keepassxc/issues/271 // and https://bugreports.qt.io/browse/QTBUG-58723 // check for !isVisible(), because isNativeMenuBar() does not work with appmenu-qt5 - if (!m_ui->menubar->isVisible()) { - QDBusMessage msg = QDBusMessage::createMethodCall( - "com.canonical.AppMenu.Registrar", - "/com/canonical/AppMenu/Registrar", - "com.canonical.AppMenu.Registrar", - "RegisterWindow"); + const static auto isDesktopSessionUnity = qgetenv("XDG_CURRENT_DESKTOP") == "Unity"; + + if (isDesktopSessionUnity && Tools::qtRuntimeVersion() < QT_VERSION_CHECK(5, 9, 0) + && !m_ui->menubar->isVisible()) { + QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.AppMenu.Registrar"), + QStringLiteral("/com/canonical/AppMenu/Registrar"), + QStringLiteral("com.canonical.AppMenu.Registrar"), + QStringLiteral("RegisterWindow")); QList args; args << QVariant::fromValue(static_cast(winId())) << QVariant::fromValue(QDBusObjectPath("/MenuBar/1")); @@ -1050,51 +1117,30 @@ void MainWindow::lockDatabasesAfterInactivity() m_ui->tabWidget->lockDatabases(); } -void MainWindow::repairDatabase() +void MainWindow::forgetTouchIDAfterInactivity() { - QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); - QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), QString(), - filter); - if (fileName.isEmpty()) { - return; - } - - QScopedPointer dialog(new QDialog(this)); - DatabaseRepairWidget* dbRepairWidget = new DatabaseRepairWidget(dialog.data()); - connect(dbRepairWidget, SIGNAL(success()), dialog.data(), SLOT(accept())); - connect(dbRepairWidget, SIGNAL(error()), dialog.data(), SLOT(reject())); - dbRepairWidget->load(fileName); - if (dialog->exec() == QDialog::Accepted && dbRepairWidget->database()) { - QString saveFileName = fileDialog()->getSaveFileName(this, tr("Save repaired database"), QString(), - tr("KeePass 2 Database").append(" (*.kdbx)"), - nullptr, 0, "kdbx"); - - if (!saveFileName.isEmpty()) { - KeePass2Writer writer; - writer.writeDatabase(saveFileName, dbRepairWidget->database()); - if (writer.hasError()) { - displayGlobalMessage( - tr("Writing the database failed.").append("\n").append(writer.errorString()), - MessageWidget::Error); - } - } - } +#ifdef WITH_XC_TOUCHID + TouchID::getInstance().reset(); +#endif } bool MainWindow::isTrayIconEnabled() const { - return config()->get("GUI/ShowTrayIcon").toBool() - && QSystemTrayIcon::isSystemTrayAvailable(); + return config()->get("GUI/ShowTrayIcon").toBool() && QSystemTrayIcon::isSystemTrayAvailable(); } -void MainWindow::displayGlobalMessage(const QString& text, MessageWidget::MessageType type, bool showClosebutton, +void MainWindow::displayGlobalMessage(const QString& text, + MessageWidget::MessageType type, + bool showClosebutton, int autoHideTimeout) { m_ui->globalMessageWidget->setCloseButtonVisible(showClosebutton); m_ui->globalMessageWidget->showMessage(text, type, autoHideTimeout); } -void MainWindow::displayTabMessage(const QString& text, MessageWidget::MessageType type, bool showClosebutton, +void MainWindow::displayTabMessage(const QString& text, + MessageWidget::MessageType type, + bool showClosebutton, int autoHideTimeout) { m_ui->tabWidget->currentDatabaseWidget()->showMessage(text, type, showClosebutton, autoHideTimeout); @@ -1105,17 +1151,12 @@ void MainWindow::hideGlobalMessage() m_ui->globalMessageWidget->hideMessage(); } -void MainWindow::hideTabMessage() -{ - if (m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { - m_ui->tabWidget->currentDatabaseWidget()->hideMessage(); - } -} - void MainWindow::showYubiKeyPopup() { - displayGlobalMessage(tr("Please touch the button on your YubiKey!"), MessageWidget::Information, - false, MessageWidget::DisableAutoHide); + displayGlobalMessage(tr("Please touch the button on your YubiKey!"), + MessageWidget::Information, + false, + MessageWidget::DisableAutoHide); setEnabled(false); } @@ -1128,7 +1169,7 @@ void MainWindow::hideYubiKeyPopup() void MainWindow::bringToFront() { ensurePolished(); - setWindowState(windowState() & ~Qt::WindowMinimized); + setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); show(); raise(); activateWindow(); @@ -1136,15 +1177,21 @@ void MainWindow::bringToFront() void MainWindow::handleScreenLock() { - if (config()->get("security/lockdatabasescreenlock").toBool()){ + if (config()->get("security/lockdatabasescreenlock").toBool()) { lockDatabasesAfterInactivity(); } + +#ifdef WITH_XC_TOUCHID + if (config()->get("security/resettouchidscreenlock").toBool()) { + forgetTouchIDAfterInactivity(); + } +#endif } QStringList MainWindow::kdbxFilesFromUrls(const QList& urls) { QStringList kdbxFiles; - for (const QUrl& url: urls) { + for (const QUrl& url : urls) { const QFileInfo fInfo(url.toLocalFile()); const bool isKdbxFile = fInfo.isFile() && fInfo.suffix().toLower() == "kdbx"; if (isKdbxFile) { @@ -1174,7 +1221,7 @@ void MainWindow::dropEvent(QDropEvent* event) if (!kdbxFiles.isEmpty()) { event->acceptProposedAction(); } - for (const QString& kdbxFile: kdbxFiles) { + for (const QString& kdbxFile : kdbxFiles) { openDatabase(kdbxFile); } } @@ -1182,7 +1229,7 @@ void MainWindow::dropEvent(QDropEvent* event) void MainWindow::closeAllDatabases() { - m_ui->tabWidget->closeAllDatabases(); + m_ui->tabWidget->closeAllDatabaseTabs(); } void MainWindow::lockAllDatabases() diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index d23e9b35c..cd7b1a39b 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -23,12 +23,13 @@ #include #include -#include "core/SignalMultiplexer.h" #include "core/ScreenLockListener.h" -#include "gui/DatabaseWidget.h" +#include "core/SignalMultiplexer.h" #include "gui/Application.h" +#include "gui/DatabaseWidget.h" -namespace Ui { +namespace Ui +{ class MainWindow; } @@ -37,8 +38,8 @@ class InactivityTimer; class MainWindow : public QMainWindow { Q_OBJECT - -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(QT_NO_DBUS) + +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) Q_CLASSINFO("D-Bus Interface", "org.keepassxc.KeePassXC.MainWindow") #endif @@ -55,16 +56,21 @@ public: }; public slots: - void openDatabase(const QString& fileName, const QString& pw = QString(), - const QString& keyFile = QString()); + void openDatabase(const QString& filePath, const QString& pw = {}, const QString& keyFile = {}); void appExit(); - void displayGlobalMessage(const QString& text, MessageWidget::MessageType type, bool showClosebutton = true, + void displayGlobalMessage(const QString& text, + MessageWidget::MessageType type, + bool showClosebutton = true, int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); - void displayTabMessage(const QString& text, MessageWidget::MessageType type, bool showClosebutton = true, + void displayTabMessage(const QString& text, + MessageWidget::MessageType type, + bool showClosebutton = true, int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); void hideGlobalMessage(); void showYubiKeyPopup(); void hideYubiKeyPopup(); + void hideWindow(); + void toggleWindow(); void bringToFront(); void closeAllDatabases(); void lockAllDatabases(); @@ -74,9 +80,12 @@ protected: void changeEvent(QEvent* event) override; private slots: - void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::None); + void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::Mode::None); void updateWindowTitle(); void showAboutDialog(); + void showUpdateCheckStartup(); + void showUpdateCheckDialog(); + void hasUpdateAvailable(bool hasUpdate, const QString& version, bool isManuallyRequested); void openDonateUrl(); void openBugReportUrl(); void switchToDatabases(); @@ -84,11 +93,11 @@ private slots: void switchToPasswordGen(bool enabled); void switchToNewDatabase(); void switchToOpenDatabase(); - void switchToDatabaseFile(QString file); + void switchToDatabaseFile(const QString& file); void switchToKeePass1Database(); - void switchToImportCsv(); + void switchToCsvImport(); void closePasswordGen(); - void databaseStatusChanged(DatabaseWidget *dbWidget); + void databaseStatusChanged(DatabaseWidget* dbWidget); void databaseTabChanged(int tabIndex); void openRecentDatabase(QAction* action); void clearLastDatabases(); @@ -99,14 +108,14 @@ private slots: void rememberOpenDatabases(const QString& filePath); void applySettingsChanges(); void trayIconTriggered(QSystemTrayIcon::ActivationReason reason); - void hideWindow(); - void toggleWindow(); void lockDatabasesAfterInactivity(); - void repairDatabase(); - void hideTabMessage(); + void forgetTouchIDAfterInactivity(); void handleScreenLock(); - void showKeePassHTTPDeprecationNotice(); void showErrorMessage(const QString& message); + void selectNextDatabaseTab(); + void selectPreviousDatabaseTab(); + void togglePasswordsHidden(); + void toggleUsernamesHidden(); private: static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); @@ -130,6 +139,7 @@ private: QActionGroup* m_copyAdditionalAttributeActions; QStringList m_openDatabases; InactivityTimer* m_inactivityTimer; + InactivityTimer* m_touchIDinactivityTimer; int m_countDefaultAttributes; QSystemTrayIcon* m_trayIcon; ScreenLockListener* m_screenLockListener; @@ -140,7 +150,12 @@ private: bool m_appExiting; }; -#define KEEPASSXC_MAIN_WINDOW (qobject_cast(qApp) ? \ - qobject_cast(qobject_cast(qApp)->mainWindow()) : nullptr) +/** + * Return instance of MainWindow created on app load + * non-gui instances will return nullptr + * + * @return MainWindow instance or nullptr + */ +MainWindow* getMainWindow(); #endif // KEEPASSX_MAINWINDOW_H diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index e9eeb9e6b..004518eec 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -116,7 +116,7 @@ 0
    - +
    @@ -183,6 +183,9 @@ 21 + + Qt::PreventContextMenu + &Database @@ -194,7 +197,7 @@ - Import + &Import @@ -212,7 +215,6 @@ - @@ -221,6 +223,7 @@ &Help + @@ -232,8 +235,11 @@ false + + + - Copy att&ribute to clipboard + Copy att&ribute... @@ -245,22 +251,25 @@ false - Time-based one-time password + TOTP... + - - - - - - + - + + + + + + + + @@ -287,6 +296,9 @@ + + Qt::PreventContextMenu + false @@ -337,6 +349,14 @@ QAction::AboutRole + + + Check for Updates... + + + QAction::ApplicationSpecificRole + + &Open database... @@ -360,12 +380,18 @@ - &New database + &New database... + + + Create a new database - Merge from KeePassX database + &Merge from database... + + + Merge from another KDBX database @@ -373,7 +399,10 @@ false - &Add new entry + &New entry + + + Add a new entry @@ -381,7 +410,10 @@ false - &View/Edit entry + &Edit entry + + + View or edit entry @@ -397,7 +429,10 @@ false - &Add new group + &New group + + + Add a new group @@ -429,7 +464,7 @@ false - Change &master key... + Change master &key... @@ -437,7 +472,7 @@ false - &Database settings + &Database settings... Database settings @@ -470,7 +505,7 @@ false - Cop&y password + Copy &password Copy password to clipboard @@ -500,7 +535,7 @@ false - &Perform Auto-Type + Perform &Auto-Type @@ -508,7 +543,7 @@ false - &Open URL + Open &URL @@ -562,22 +597,28 @@ - Import KeePass 1 database... + KeePass 1 database... + + + Import a KeePass 1 database - Import CSV file... + CSV file... - - - - Re&pair database... + + Import a CSV file - Show TOTP + Show TOTP... + + + + + Show TOTP QR Code... @@ -608,8 +649,19 @@ Report a &bug + + + Share entry + + + + PasswordGeneratorWidget + QWidget +
    gui/PasswordGeneratorWidget.h
    + 1 +
    MessageWidget QWidget @@ -623,9 +675,9 @@ 1 - SettingsWidget + ApplicationSettingsWidget QWidget -
    gui/SettingsWidget.h
    +
    gui/ApplicationSettingsWidget.h
    1
    @@ -634,12 +686,6 @@
    gui/WelcomeWidget.h
    1
    - - PasswordGeneratorWidget - QWidget -
    gui/PasswordGeneratorWidget.h
    - 1 -
    diff --git a/src/gui/MainWindowAdaptor.cpp b/src/gui/MainWindowAdaptor.cpp index 8b229ce34..95edfdd9e 100644 --- a/src/gui/MainWindowAdaptor.cpp +++ b/src/gui/MainWindowAdaptor.cpp @@ -1,6 +1,7 @@ /* * This file was generated by qdbusxml2cpp version 0.8 - * Command line was: qdbusxml2cpp -c MainWindowAdaptor -a MainWindowAdaptor.h:MainWindowAdaptor.cpp org.keepassxc.MainWindow.xml + * Command line was: qdbusxml2cpp -c MainWindowAdaptor -a MainWindowAdaptor.h:MainWindowAdaptor.cpp + * org.keepassxc.MainWindow.xml * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * @@ -9,10 +10,10 @@ */ #include "MainWindowAdaptor.h" -#include #include #include #include +#include #include #include #include @@ -21,7 +22,7 @@ * Implementation of adaptor class MainWindowAdaptor */ -MainWindowAdaptor::MainWindowAdaptor(QObject *parent) +MainWindowAdaptor::MainWindowAdaptor(QObject* parent) : QDBusAbstractAdaptor(parent) { setAutoRelaySignals(true); @@ -46,18 +47,18 @@ void MainWindowAdaptor::lockAllDatabases() QMetaObject::invokeMethod(parent(), "lockAllDatabases"); } -void MainWindowAdaptor::openDatabase(const QString &fileName) +void MainWindowAdaptor::openDatabase(const QString& fileName) { QMetaObject::invokeMethod(parent(), "openDatabase", Q_ARG(QString, fileName)); } -void MainWindowAdaptor::openDatabase(const QString &fileName, const QString &pw) +void MainWindowAdaptor::openDatabase(const QString& fileName, const QString& pw) { QMetaObject::invokeMethod(parent(), "openDatabase", Q_ARG(QString, fileName), Q_ARG(QString, pw)); } -void MainWindowAdaptor::openDatabase(const QString &fileName, const QString &pw, const QString &keyFile) +void MainWindowAdaptor::openDatabase(const QString& fileName, const QString& pw, const QString& keyFile) { - QMetaObject::invokeMethod(parent(), "openDatabase", Q_ARG(QString, fileName), Q_ARG(QString, pw), Q_ARG(QString, keyFile)); + QMetaObject::invokeMethod( + parent(), "openDatabase", Q_ARG(QString, fileName), Q_ARG(QString, pw), Q_ARG(QString, keyFile)); } - diff --git a/src/gui/MainWindowAdaptor.h b/src/gui/MainWindowAdaptor.h index 06e0ce87e..a564f3745 100644 --- a/src/gui/MainWindowAdaptor.h +++ b/src/gui/MainWindowAdaptor.h @@ -1,6 +1,7 @@ /* * This file was generated by qdbusxml2cpp version 0.8 - * Command line was: qdbusxml2cpp -c MainWindowAdaptor -a MainWindowAdaptor.h:MainWindowAdaptor.cpp org.keepassxc.MainWindow.xml + * Command line was: qdbusxml2cpp -c MainWindowAdaptor -a MainWindowAdaptor.h:MainWindowAdaptor.cpp + * org.keepassxc.MainWindow.xml * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * @@ -16,8 +17,8 @@ #include QT_BEGIN_NAMESPACE class QByteArray; -template class QList; -template class QMap; +template class QList; +template class QMap; class QString; class QStringList; class QVariant; @@ -26,31 +27,32 @@ QT_END_NAMESPACE /* * Adaptor class for interface org.keepassxc.MainWindow */ -class MainWindowAdaptor: public QDBusAbstractAdaptor +class MainWindowAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.keepassxc.MainWindow") - Q_CLASSINFO("D-Bus Introspection", "" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" - "") + Q_CLASSINFO("D-Bus Introspection", + "" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "") public: - MainWindowAdaptor(QObject *parent); + MainWindowAdaptor(QObject* parent); virtual ~MainWindowAdaptor(); public: @@ -58,9 +60,9 @@ public slots: void appExit(); void closeAllDatabases(); void lockAllDatabases(); - void openDatabase(const QString &fileName); - void openDatabase(const QString &fileName, const QString &pw); - void openDatabase(const QString &fileName, const QString &pw, const QString &keyFile); + void openDatabase(const QString& fileName); + void openDatabase(const QString& fileName, const QString& pw); + void openDatabase(const QString& fileName, const QString& pw, const QString& keyFile); signals: }; diff --git a/src/gui/MessageBox.cpp b/src/gui/MessageBox.cpp index 40912b7e9..582baa5cc 100644 --- a/src/gui/MessageBox.cpp +++ b/src/gui/MessageBox.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2013 Felix Geyer + * Copyright (C) 2018 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,69 +18,145 @@ #include "MessageBox.h" -QMessageBox::StandardButton MessageBox::m_nextAnswer(QMessageBox::NoButton); +MessageBox::Button MessageBox::m_nextAnswer(MessageBox::NoButton); -QMessageBox::StandardButton MessageBox::critical(QWidget* parent, - const QString& title, const QString& text, - QMessageBox::StandardButtons buttons, - QMessageBox::StandardButton defaultButton) +QHash MessageBox::m_addedButtonLookup = + QHash(); + +QMap> MessageBox::m_buttonDefs = + QMap>(); + +void MessageBox::initializeButtonDefs() { - if (m_nextAnswer == QMessageBox::NoButton) { - return QMessageBox::critical(parent, title, text, buttons, defaultButton); - } - else { - QMessageBox::StandardButton returnButton = m_nextAnswer; - m_nextAnswer = QMessageBox::NoButton; + m_buttonDefs = QMap>{ + // Reimplementation of Qt StandardButtons + {Ok, {stdButtonText(QMessageBox::Ok), QMessageBox::ButtonRole::AcceptRole}}, + {Open, {stdButtonText(QMessageBox::Open), QMessageBox::ButtonRole::AcceptRole}}, + {Save, {stdButtonText(QMessageBox::Save), QMessageBox::ButtonRole::AcceptRole}}, + {Cancel, {stdButtonText(QMessageBox::Cancel), QMessageBox::ButtonRole::RejectRole}}, + {Close, {stdButtonText(QMessageBox::Close), QMessageBox::ButtonRole::RejectRole}}, + {Discard, {stdButtonText(QMessageBox::Discard), QMessageBox::ButtonRole::DestructiveRole}}, + {Apply, {stdButtonText(QMessageBox::Apply), QMessageBox::ButtonRole::ApplyRole}}, + {Reset, {stdButtonText(QMessageBox::Reset), QMessageBox::ButtonRole::ResetRole}}, + {RestoreDefaults, {stdButtonText(QMessageBox::RestoreDefaults), QMessageBox::ButtonRole::ResetRole}}, + {Help, {stdButtonText(QMessageBox::Help), QMessageBox::ButtonRole::HelpRole}}, + {SaveAll, {stdButtonText(QMessageBox::SaveAll), QMessageBox::ButtonRole::AcceptRole}}, + {Yes, {stdButtonText(QMessageBox::Yes), QMessageBox::ButtonRole::YesRole}}, + {YesToAll, {stdButtonText(QMessageBox::YesToAll), QMessageBox::ButtonRole::YesRole}}, + {No, {stdButtonText(QMessageBox::No), QMessageBox::ButtonRole::NoRole}}, + {NoToAll, {stdButtonText(QMessageBox::NoToAll), QMessageBox::ButtonRole::NoRole}}, + {Abort, {stdButtonText(QMessageBox::Abort), QMessageBox::ButtonRole::RejectRole}}, + {Retry, {stdButtonText(QMessageBox::Retry), QMessageBox::ButtonRole::AcceptRole}}, + {Ignore, {stdButtonText(QMessageBox::Ignore), QMessageBox::ButtonRole::AcceptRole}}, + + // KeePassXC Buttons + {Overwrite, {QMessageBox::tr("Overwrite"), QMessageBox::ButtonRole::AcceptRole}}, + {Delete, {QMessageBox::tr("Delete"), QMessageBox::ButtonRole::AcceptRole}}, + {Move, {QMessageBox::tr("Move"), QMessageBox::ButtonRole::AcceptRole}}, + {Empty, {QMessageBox::tr("Empty"), QMessageBox::ButtonRole::AcceptRole}}, + {Remove, {QMessageBox::tr("Remove"), QMessageBox::ButtonRole::AcceptRole}}, + {Skip, {QMessageBox::tr("Skip"), QMessageBox::ButtonRole::AcceptRole}}, + {Disable, {QMessageBox::tr("Disable"), QMessageBox::ButtonRole::AcceptRole}}, + {Merge, {QMessageBox::tr("Merge"), QMessageBox::ButtonRole::AcceptRole}}, + }; +} + +QString MessageBox::stdButtonText(QMessageBox::StandardButton button) +{ + QMessageBox buttonHost; + return buttonHost.addButton(button)->text(); +} + +MessageBox::Button MessageBox::messageBox(QWidget* parent, + QMessageBox::Icon icon, + const QString& title, + const QString& text, + MessageBox::Buttons buttons, + MessageBox::Button defaultButton, + MessageBox::Action action) +{ + if (m_nextAnswer == MessageBox::NoButton) { + QMessageBox msgBox(parent); + msgBox.setIcon(icon); + msgBox.setWindowTitle(title); + msgBox.setText(text); + + for (uint64_t b = First; b <= Last; b <<= 1) { + if (b & buttons) { + QString text = m_buttonDefs[static_cast