diff --git a/.clang-format b/.clang-format index 3838b6b1f3..64ab822b62 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 4f937513cb..89c3bb2eb5 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 cf8b88f103..0000000000 --- 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 0000000000..4b6d16c6c0 --- /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 0000000000..90c28c42b1 --- /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 0000000000..25b720168e --- /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 b9852f3c99..89b5485545 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 - +## 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) -## Motivation and context - - +## 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 ) -## How has this been tested? - - - -## Screenshots (if appropriate): +## 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! ) -## Types of changes - - -- ✅ Bug fix (non-breaking change which fixes an issue) -- ✅ New feature (non-breaking change which adds functionality) -- ✅ Breaking change (fix or feature that would cause existing functionality to change) ## 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 903910a37e..d02b6cacd3 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 3fcd5b969d..2092a4bb5a 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 9975f4939c..0000000000 --- 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 20545c4430..4f9943abea 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 70f14795c1..658548f70e 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() + 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") + 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(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 195650551c..b3eddd7669 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 cee347e693..33bdea6a20 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 a581d1ac7a..d3927536fd 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 b09a5d208c..608dfd3637 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 37b3742dda..0000000000 --- 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 d10c609a07..79e054efef 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 0000000000..70169ed72c --- /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 d10f79723a..d10791745a 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) - -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 - -SET(CMAKE_CXX_FLAGS_COVERAGE - "-g -O0 --coverage -fprofile-arcs -ftest-coverage" +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("${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(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" - - -# 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) - - IF(NOT LCOV_PATH) - MESSAGE(FATAL_ERROR "lcov not found! Aborting...") - ENDIF() # NOT LCOV_PATH - - IF(NOT GENHTML_PATH) - MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") - ENDIF() # NOT GENHTML_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") - - SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") - - # Setup target - ADD_CUSTOM_TARGET(${_targetname} - - # Cleanup lcov - ${LCOV_PATH} --directory . --zerocounters - - # Run tests - COMMAND ${test_command} ${ARGV3} - - # 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 ${CMAKE_BINARY_DIR} - COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." - ) - - # 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." - ) - -ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE - -# 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) - - IF(NOT PYTHON_EXECUTABLE) - MESSAGE(FATAL_ERROR "Python not found! Aborting...") - ENDIF() # NOT PYTHON_EXECUTABLE - - IF(NOT GCOVR_PATH) - MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") - ENDIF() # NOT GCOVR_PATH - - ADD_CUSTOM_TARGET(${_targetname} - - # Run tests - ${_testrunner} ${ARGV3} - - # 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." - ) - - # Show info where to find the report - ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD - COMMAND ; - COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." - ) - -ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA +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() + +# 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) + + set(options NONE) + set(oneValueArgs NAME) + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT LCOV_PATH) + message(FATAL_ERROR "lcov not found! Aborting...") + endif() # NOT LCOV_PATH + + if(NOT GENHTML_PATH) + message(FATAL_ERROR "genhtml not found! Aborting...") + endif() # NOT GENHTML_PATH + + # Setup target + add_custom_target(${Coverage_NAME} + + # 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 + + # Run tests + COMMAND ${Coverage_EXECUTABLE} + + # 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 + + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${Coverage_DEPENDENCIES} + 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 ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." + ) + +endfunction() # SETUP_TARGET_FOR_COVERAGE_LCOV + +# 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) + + 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} + + # 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." + ) + + # 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 bb2f5811d8..766e659b37 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 0775704625..59c6f473ad 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 0000000000..6328d9699c --- /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 0000000000..8d3091810d --- /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 2d311efafb..f66c1b33c1 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 d39671cd67..0000000000 --- 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 353c02521c..0000000000 --- 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 0000000000..8c736c2134 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 0000000000..e0b0f084ed 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 0000000000..a2d756712b 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 de4b39261a..0000000000 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 989294a4ef..0000000000 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 55b0f3d490..0000000000 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 0000000000..b12e6a04df 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 0000000000..ec89b51d50 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 0000000000..1cfd3f3310 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 0000000000..3824c0158b 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 0000000000..7385229e81 Binary files /dev/null and b/docs/KeeShare/GroupSettings_Sync.png differ diff --git a/docs/QUICKSTART.md b/docs/QUICKSTART.md index b4b2d38cae..c2afd0b98b 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 5dfdad4348..a04ad5de91 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 -} -checkTransifexCommandExists() { - command -v tx > /dev/null - if [ 0 -ne $? ]; then - exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'." + grep -qPzo "KEEPASSXC_BUILD_TYPE=Release" snapcraft.yaml + if [ $? -ne 0 ]; then + exitError "'snapcraft.yaml' is not set for a release build!" 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'." +checkTransifexCommandExists() { + if ! cmdExists tx; then + exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'." 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 81bb26938f..214c0ec927 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 - - # 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 - - # 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 - - # 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 - - # 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 - - # 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 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}) + # 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 + + # 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 + + # 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 + + # 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 + + # 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 + + # Shrink PNGs using pngcrush + COMMAND bash ./crushpng.sh icons + + # 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 77ceadb5fb..0000000000 --- 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 3d0e8974d7..0000000000 --- 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 0000000000..f36176d3c2 --- /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 57ad32062a..d2cc1d5803 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 0465596ec3..b850f577e8 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 69b0fe24ee..30a8202613 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 69b0fe24ee..30a8202613 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 0000000000..88a251701c 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 539823d923..dac32fed48 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 4839c61429..eaad4c44d8 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 3d4481d144..ee985dac41 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 f5f1bab882..80d1815c61 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 ef0b0301b3..186c07728f 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 411031eb8b..fcfaa46c0c 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 67059e3582..7ddca1fca6 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 ac2fd6f90f..b06801211f 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 b79e903148..a8e07a5e95 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 530940ce59..0dba17b670 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 41c52aaa9f..f0f278941b 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 5a29dae472..59a0e255a1 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 97c8e38a76..c16b812fcb 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 85e31eb30a..34e805d24f 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 43e5a521db..9846255b8b 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 0a21e090e6..d8f784c755 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 83f4eed2c9..c6f04a4942 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 3f6a25e4fa..b4ff1d8ebc 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 0000000000..3426fb937e 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 aa9d7321f9..d09e079356 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 7c524e5d47..225dbb6957 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 b3a44a232b..ddf5a667da 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 c09bde3b0e..b84d865d0f 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 7443d3fbab..4f0f502a0d 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 74578fb8d5..8f9c5aec8e 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 735459681e..1fd64960e2 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 24277f6dea..209062d785 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 ea53bd1c0b..a6b89cdabd 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 0000000000..adb2d8e210 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 354c0f98fb..ad7f3c59fb 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 113107c109..90fa595e79 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 65b48fdf5b..e2f855c89e 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 3c10ad4b76..1419cbffe3 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 711b3ba107..7f173c6402 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 2164f0335e..3b9c3f4a0e 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 2164f0335e..3b9c3f4a0e 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 7bfdf6d592..bd7d98e7ea 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 29d02664f3..dcc8b75d1f 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 71d6eabe5f..8e8d61de93 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 3ea98fa709..7bf8d05d33 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 ef0b6bdc66..81f85067de 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 8b12d79a4b..bb27eea88b 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 38dff012da..eed69ac51a 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 9ff24e2b28..50f67bfb40 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 317a3577a0..dff45686b5 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 a81e70d474..2ad801c13e 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 89383d9e04..fc4787dfd8 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 11b846e8ce..9ad1885cb1 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 f407cfab5e..8246bfe345 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 a1c0b34b37..ff53e2153b 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 0000000000..8759d957e2 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 56d90a4c00..ed0bb2b726 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 eb37d9a08c..4fefbf4c28 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 4b2f9ca4d7..f0850594fa 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 eb910311a7..739652646d 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 cd8c674250..590df6d4df 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 fab0d90b71..68d1763f11 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 0000000000..0a890cd593 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 931d932fff..f977b606c1 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 caa116dbc4..4a7c8acab9 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 872771d03a..81e6f5f443 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 2fc813f6f9..22734c82d7 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 86a92a4ee9..d27dcc8385 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 0222fcd726..91aa3829f8 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 e322849306..6ca3d718ea 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 f02157ecd8..396492ebe5 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 cb8485708d..6050adf22d 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 68c6cabc18..f3061b089d 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 68c6cabc18..f3061b089d 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 c14badcd6e..e2a8dbf0fb 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 d3b7c05438..a3820c501e 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 d1c1178133..03485c64eb 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 d1c1178133..03485c64eb 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 dd76354c4a..d7be16865a 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 b9819fda1e..173bf29ca9 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 00386b7050..7f93991403 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 c774740a1a..073f87ae95 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 dc9599228f..1eaab8c8ed 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 b049b6886a..82f6adb21b 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 bcb4367211..f1886d070e 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 23b094754e..03ff2b41a8 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 eb327b0a10..3f299e2b83 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 353a22ca25..e2c996e6c6 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 3d0f5cc1d5..4e24f6e240 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 a6d13863d8..4700a60d39 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 7fa489c0fe..23079aec05 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 023cfb804f..d2ab1c14f9 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 32b0666fa7..0207e82cd0 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 93866ad6a7..672003a577 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 d4aad094bd..f20821af12 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 cd7d34804b..44f83f5484 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 0226c2f3f2..9911728bf1 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 0000000000..c8d03d755c 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 f19899dd80..b272ecb565 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 d8197d61a3..dc047ffcad 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 60d11e2f11..5f20ee92ff 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 d80a0b0d17..9a623973f2 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 208af47e78..c3d42f754a 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 99e878cf94..cad78bc7b0 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 0a49a74b11..a06575f8cf 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 6072f70ccb..ff5fab697d 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 327ea8963c..72cebaa6fe 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 0000000000..19440a1908 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 62f67a23f1..9c25683474 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 16950eca68..0ca01aeb7f 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 16ca8cf314..b781df635b 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 a67c689ac5..fe9a9d113a 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 b4106a58b3..67aa94aff1 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 b2092359e6..eb3f274f30 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 dbe8f45dd3..cc08472c28 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 de06bf03ae..5aff3b570e 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 de06bf03ae..5aff3b570e 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 dcd605b254..3965468a5c 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 3e4d324c0c..3ce4cc2450 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 acafe44c68..24c03a1294 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 195f792d87..d7cf40a287 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 7178893c2d..01f7fcc467 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 08e396cd32..81cdcfa19f 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 5668dd7b51..c1e87f9d08 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 06a563d1a7..a784c36042 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 06a563d1a7..a784c36042 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 439ca7e8e9..5c50146f66 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 e4ca501a90..c6e7e239cd 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 8ade0e85e3..3e1d4e5cec 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 8ade0e85e3..3e1d4e5cec 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 dc97a7d246..f26e140f9f 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 0000000000..d296e68ff8 --- /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 0f8d75e701..0000000000 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 0000000000..82e7669409 --- /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 65aca0592b..0000000000 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 0000000000..c2d5758f0e --- /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 84ce139046..0000000000 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 0000000000..c2d5758f0e --- /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 84ce139046..0000000000 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 0000000000..4b33c5a69e --- /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 0ea2e0b076..0000000000 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 5656824986..86fa47f04c 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 03ef9a5700..dceb0a528f 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 474f63fc9c..0b8a56f470 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 bb8a316d29..00ed933167 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 a2c0cfb105..a451fe1d25 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 8aa2004795..d36534f597 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 604c3d5939..3318957583 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 4a52bb1c5a..8427b90544 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 3125ef8049..6baa733350 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 5e51272c26..0bf21df917 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 e4c5cdc0ee..08d441315a 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 45d1436aa2..e502227d00 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 89e7a97aba..4041042d3f 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 e68afac8ba..db6aa8ec7a 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 69c89a59bc..8cd59f809c 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 fa0f83dd7b..43f52ae8b8 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 7c2e6612ba..7f592c673f 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 e2e3f679af..9471903746 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 ededc0bd34..5348b7db25 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 2de442b800..ca7812aebd 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 98d4b9969e..f428e4f0d0 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 6c86544de8..e66e4aca86 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 8e771b7fda..dcdfbed307 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 df51f18f96..0fcc98bd68 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 0f6b9f9f87..b691fb3fec 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 90cf4878f9..3ef9fcb602 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 fd0048ded9..0d87f2531a 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 f6a8dd54a4..4c52384617 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 f0bc57a03e..59a1694912 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 e77ff5b0d2..010d33570b 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 b1366b1f05..292df84ced 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 3a87543224..4ff0f127c1 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 e167acf205..53dda269ab 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 751424557e..522b0a3f93 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 a4a3834abc..5314140ec6 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 6f02e877ec..b518beebd6 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 e2b67dcba2..e30bb09b90 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 2a15a078c6..64995d2de0 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 3f3b8ff0f9..4112a4f631 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 8d658e0de0..95e7d6e8ed 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 1e230e2e40..6dfbb958d7 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 5b51008bd7..ec47b76e3e 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 c74903467b..ee2560a023 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 aa9d7321f9..d09e079356 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 1e27e9cae7..f981a9a471 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 a432b492c4..443450f090 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 28a0f9e5e6..fc50cff740 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 fdb3644c6c..ac5d51789b 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 9232553fcd..e648b3fecb 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 2c55c5636e..baba6e00e8 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 2effa3950f..69f1c455d8 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 42dd93e266..1e239a7cc8 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 80357125c2..e1edec451b 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 5b0f6a6174..a2ae9cfc75 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 8834f3f592..ba5ac29dd4 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 91adff8dee..4c3a26d449 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 7f879f8cb5..e24b44ad3b 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 c688d5f6f9..afaa8132e9 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 a6ed9b4b73..a842c79713 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 df1fb742e3..b740c987b3 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 3525b0b737..8076b8e248 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 2a24b7e7f6..66478f4ad8 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 85392b2045..c22c15e2cf 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 cf95a5d19f..307deac8a7 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 d3b11ee285..d799fec0a6 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 de84d680b6..d3315b36cd 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 5db755dfab..619cea4b2e 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 2526fbe769..ba7a767993 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 ddb8630a21..9f7e4db396 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 0000000000..81868b89f2 --- /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 0ffd56bd3f..0000000000 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 6ee775350a..0000000000 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 0000000000..4b33c5a69e --- /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 0ea2e0b076..0000000000 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 90d13a126c..5e3c425351 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 0000000000..ebbb7dca17 --- /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 8c04b222a3..0000000000 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 0000000000..9b6b717cd6 --- /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 0112a24249..0000000000 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 0000000000..b09885d35c --- /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 545a1ace6c..0000000000 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 0000000000..35992e0fca --- /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 d73e7ac5d5..0000000000 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 0000000000..5ab1fad37a --- /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 e5c74d112c..0000000000 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 0000000000..80e215b6e2 --- /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 660e0f4dbd..0000000000 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 0000000000..44b4a6bedf --- /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 dc223c9291..0000000000 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 0000000000..4f462832cb --- /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 739ebbcc3f..0000000000 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 0000000000..399b5236c1 --- /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 8b08bf781d..0000000000 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 0000000000..c48f769406 --- /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 03a6d3258e..0000000000 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 0000000000..59337c4aa1 --- /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 7f166d7f28..0000000000 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 0000000000..833ebc6d35 --- /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 5fdefb8f08..0000000000 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 0000000000..8e681fdb71 --- /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 248589ba2d..0000000000 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 0000000000..010d954ac6 --- /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 3b4e2ad9f7..0000000000 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 0000000000..d656a0b0df --- /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 446a06a077..0000000000 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 0000000000..0d00ac6dc3 --- /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 f48f1415c2..0000000000 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 0000000000..7c983be54a --- /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 7176b5acb7..0000000000 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 0000000000..a36700faf7 --- /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 e06d868926..0000000000 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 0000000000..ad1b8d6167 --- /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 6c72fd09e7..0000000000 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 0000000000..8d7e33c02d --- /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 8cb4a44162..0000000000 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 7f08089bbf..440d690a01 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" /> + id="stop3682" /> + style="stop-color:#ffffff;stop-opacity:0.49803922;" /> + style="stop-color:#ffffff;stop-opacity:0;" /> + id="stop3688" /> + id="stop3690" /> + style="stop-color:#ffffff;stop-opacity:1;" /> + style="stop-color:#ffffff;stop-opacity:0;" /> - + 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" /> + id="stop2504" /> + style="stop-color:#ffffff;stop-opacity:0;" /> + 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;" /> - - - + cx="96.433075" + id="radialGradient2425" + xlink:href="#linearGradient2419" /> + + + - + - + id="linearGradient1432" + xlink:href="#linearGradient2496" /> + - + - + id="linearGradient1441" + xlink:href="#linearGradient2488" /> + id="radialGradient1456" + xlink:href="#linearGradient3225" /> + id="radialGradient1459" + xlink:href="#linearGradient3225" /> + id="radialGradient1463" + xlink:href="#linearGradient3225" /> + id="radialGradient1467" + xlink:href="#linearGradient3225" /> + id="radialGradient1471" + 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" /> + y2="12.660598" + x2="78.643684" + y1="153.80435" + x1="-90.709442" + id="linearGradient2387" + xlink:href="#linearGradient2381" /> - + 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" /> - - - - - - - - - - - - - - - - - - + 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" /> - + + style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + 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 0000000000..3d2fd2006f --- /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 1cd0a05265..0000000000 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 0000000000..41b0e60546 --- /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 4abeca3763..0000000000 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 0000000000..d5c23d1e83 --- /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 5edee37344..0000000000 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 0000000000..7a4bcbb49e --- /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 7a93fbc1f9..0000000000 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 0000000000..1d104240f9 --- /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 d6ac421c14..0000000000 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 0000000000..3a6f056f26 --- /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 ebec8c62ca..0000000000 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 0000000000..df601b7b40 --- /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 e913402f54..0000000000 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 0000000000..519a4d3eef --- /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 fff230f666..0000000000 Binary files a/share/icons/svg/view-history.svgz and /dev/null differ diff --git a/share/keepassxc.ini b/share/keepassxc.ini index 54920224a3..b91fefb4b6 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 554bcdefa5..45480333c8 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 8a0169800f..6ee0f74114 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 0000000000..a637055858 --- /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 dfb98d20d1..02baec7d46 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 d532bd15a1..ddffd7fa8f 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,87 +31,297 @@ Include the following information whenever you report a bug: - قم بتضمين المعلومات التالية عند الإبلاغ عن خطأ: + قم بتضمين المعلومات التالية عند الإبلاغ عن علة: Copy to clipboard نسخ إلى الحافظة - Version %1 - - الإصدار %1 - + Project Maintainers: + مشرفي المشروع: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + شكر خاص من فريق KeePassXC يذهب إلى debfx لإنشاء KeePassX الأصلي. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + تفعيل وكيل SSH (يتطلب إعادة التشغيل) + + + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Revision: %1 - مراجعة: %1 + Application Settings + إعدادات التطبيق - Distribution: %1 - مراجعة: %1 + General + العام - Libraries: - المكتبات: + Security + الأمان - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - نظام التشغيل: %1 -معمارية المعالج: %2 -النواة: %3 %4 + Access error for config file %1 + خطأ في الوصول لملف التكوين %1 - Enabled extensions: - الإضافات المُفعلة: + Icon only + - Project Maintainers: - مشرفي المشروع: + Text only + - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Text beside icon - Build Type: %1 - - نوع التكوين: %1 - + Text under icon + + + + Follow style + - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - تأكيد وصول KeePassXC ل HTTP + Basic Settings + الإعدادات الأساسية - Remember this decision - تذكر هذا القرار + Startup + بدأ التشغيل - Allow - اسمح + Start only a single instance of KeePassXC + شغل تطبيق واحد فقط من KeePassXC - Deny - رفض + Remember last databases + تذكر قواعد البيانات الأخيرة - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 طلب الدخول إلى كلمات المرور للعنصر التالي (العناصر) التالية. -يرجى تحديد ما إذا كنت تريد السماح بالوصول أم لا. + 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 + - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - تفعيل وكيل SSH (يتطلب إعادة التشغيل) + 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 + @@ -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. @@ -362,34 +584,58 @@ Please select whether you want to allow access. <b>تحذير:</b> قد تكون الخيارات التالية خطيرة! - Executable Files (*.exe);;All Files (*.*) - الملفات القابلة للتنفيذ (*.exe);;جميع الملفات (*.*) + Select custom proxy location + حدد موقع خادم الوكيل المخصص - Executable Files (*) - الملفات القابلة للتنفيذ (*) + &Tor Browser + - Select custom proxy location - حدد موقع خادم الوكيل المخصص + <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 + - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - نحن متأسفون, ولكن KeePassXC-Browser غير مدعوم لإصدارات Snap في الوقت الراهن. + 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: حُذفت الصلاحيات - - - Successfully removed permissions from %n entry(s). - - - - KeePassXC: No entry with permissions found! + Converting attributes to custom data… - The active database does not contain an entry with permissions. - لا تحتوي قاعدة البيانات النشطة على إدخال مع صلاحيات. - - - - ChangeMasterKeyWidget - - Password - كلمه السر - - - Enter password: - أدخل كلمة المرور: - - - Repeat password: - تكرار كلمة السر: - - - &Key file - &ملف المفتاح - - - Browse - تصّفح - - - Create - إنشاء - - - Cha&llenge Response + KeePassXC: Converted KeePassHTTP attributes - Refresh - تحديث - - - Key files - ملفات المفتاح - - - All files - كل الملفات - - - Create Key File... - إنشاء ملف مفتاح... - - - Unable to create Key File : - تعذر إنشاء ملف المفتاح : - - - Select a key file - حدد ملف المفتاح + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - Empty password - كلمة المرور فارغة + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - هل تريد حقًا استخدام كلمات فارغة ككلمة مرور؟ + KeePassXC: No entry with KeePassHTTP attributes found! + - Different passwords supplied. - توفير كلمات السر مختلفة. + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 + KeePassXC: Legacy browser integration settings detected - Legacy key file format - تنسيق ملف المفتاح القديم + KeePassXC: Create a new group + - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + A request for creating a new group "%1" has been received. +Do you want to create this group? + - 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? @@ -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 @@ -652,50 +795,90 @@ Please consider generating a new key file. البيانات الأصلية: - Error(s) detected in CSV file ! - تم إكتشاف خطأ (أخطاء) في ملف CSV ! + Error + خطأ - more messages skipped] - المزيد من الرسائل تم تخطيها] + Empty fieldname %1 + - Error - خطأ + column %1 + - CSV import: writer has errors: - - إستيراد CSV: الكاتب يحتوي أخطاء: - + Error(s) detected in CSV file! + - - - CsvImportWizard - - Error - خطأ + + [%n more message(s) skipped] + - Unable to calculate master key - تعذر حساب المفتاح الرئيسي + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - + %n column(s) + %n عمود%n عمود%n عمود%n عمود%n عمود%n عمود + + + %1, %2, %3 + file info: bytes, rows, columns + - %n row(s), + %n byte(s) - %n column(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 - لا يمكن فتح ملف المفتاح + Can't open key file: +%1 + + + + DatabaseSettingWidgetMetaData - Unable to open the database. - فتح قاعدة البيانات غير ممكن. + Passwords + كلمه السر + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - قاعدة البيانات فُتحت بشكل جيد. لا يوجد شيء لفعله. + Advanced Settings + - Success - نجاح + General + العام - The database has been successfully repaired -You can now save it. - تم إصلاح قاعدة البيانات بنجاح -يمكنك الآن حفظها. + Security + الأمان - Unable to repair the database. - تعذر إصلاح قاعدة البيانات. + Master Key + - - - DatabaseSettingsWidget - General - العام + Encryption Settings + - Encryption - التشفير + Browser Integration + تكامل المتصفح + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - عدد الجولات عالي جدًا + KeePassXC-Browser settings + - 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! + &Disconnect all browsers + &فصل جميع المتصفحات + + + Forg&et all site-specific settings on entries - Understood, keep number + Move KeePassHTTP attributes to KeePassXC-Browser &custom data - Cancel - إلغاء + Stored keys + - Number of rounds too low - Key transformation rounds - عدد الجولات منخفض جدًا + Remove + إزالة - 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! + Delete the selected key? - KDF unchanged + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. - Failed to transform key with new KDF parameters; KDF unchanged. - + 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,182 +1285,177 @@ If you keep this number, your database may be too easy to crack! Enable &compression (recommended) - + تفعيل &الضغط (مستحسن) - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group + Sharing - KeePass 2 Database - قاعدة بيانات KeePass 2 - - - All files - كل الملفات + Breadcrumb + - Open database - فتح قاعدة بيانات + Type + - File not found! - الملف غير موجود! + Path + - Unable to open the database. - فتح قاعدة البيانات غير ممكن. + Last Signer + - File opened in read only mode. - الملف تم فتحه بوضع القراءة فقط. + Certificates + - Open CSV file - فتح ملف CSV + > + Breadcrumb separator + + + + DatabaseSettingsWidgetMasterKey - CSV file - ملف CSV + Add additional protection... + - All files (*) - جميع الملفات (*) + No encryption key added + - Merge database - دمج قاعدة بيانات + You must add at least one encryption key to secure your database! + - Open KeePass 1 database - فتح قاعدة بيانات KeePass 1 + No password set + - KeePass 1 database - قاعدة بيانات KeePass 1 + 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? + - Close? - إغلاق؟ + Unknown error + خطأ مجهول - "%1" is in edit mode. -Discard changes and close anyway? - "%1" في وضع التحرير. -تجاهل التغييرات وإلاغلاق على أي حال؟ + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple - Save changes? - حفظ التغييرات؟ + Database Name: + - "%1" was modified. -Save changes? - "%1" مُعدل. -هل تريد حفظ التغييرات؟ + Description: + + + + DatabaseTabWidget - Writing the database failed. - فشل كتابة قاعدة البيانات. + KeePass 2 Database + قاعدة بيانات KeePass 2 - Passwords - كلمه السر + All files + كل الملفات - Save database as - حفظ قاعدة البيانات باسم + Open database + فتح قاعدة بيانات - Export database to CSV file - تصدير قاعدة البيانات إلى ملف CSV + CSV file + ملف CSV - Writing the CSV file failed. - تعذر كتابة ملف CSV. + Merge database + دمج قاعدة بيانات - New database - قاعدة بيانات جديدة + Open KeePass 1 database + فتح قاعدة بيانات KeePass 1 - locked - مقفل + KeePass 1 database + قاعدة بيانات KeePass 1 - Lock database - قفل قاعدة بيانات + Export database to CSV file + تصدير قاعدة البيانات إلى ملف CSV - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - لا يمكن إقفال قاعدة البيانات ريثما تقوم بتغييرها. -اضغط على إلغاء لكي تقوم بإنهاء التغييرات أو إلغائها. + Writing the CSV file failed. + تعذر كتابة ملف CSV. - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - قاعدة البيانات هذه قد تم تعديلها. -هل تريد حفظ قاعدة البيانات قبل قفلها؟ -وإلا فإنك ستخسر التغييرات التي قمت بها. + Database creation error + - Disable safe saves? - هل تريد تعطيل الحفظ الآمن؟ + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - 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 قد فشل في حفظ قاعدة البيانات عدة مرات. هذا غالبا ما يحدث بسبب خدمات مزامنة الملف حيث تقوم بمنع الكتابة على الملف. -أتريد إلغاء خيار الحفظ الامن ثم المحاولة مرة أخرى؟ + The database file does not exist or is not accessible. + - - - DatabaseWidget - Searching... - البحث... + Select CSV file + - Change master key - تغيير كلمة المرور الرئيسية + New Database + - Delete entry? - حذف المدخل؟ + %1 [New Database] + Database tab name modifier + - Do you really want to delete the entry "%1" for good? + %1 [Locked] + Database tab name modifier - Delete entries? - حذف المدخلات؟ + %1 [Read-only] + Database tab name modifier + + + + DatabaseWidget - Do you really want to delete %1 entries for good? - + Searching... + يبْحَث... - Move entry to recycle bin? - نقل المدخل إلى سلة المحذوفات؟ + Do you really want to delete the entry "%1" for good? + هل تريد حقًا حذف الإدخال "%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 - تعذر حساب المفتاح الرئيسي + Do you really want to delete the group "%1" for good? + هل تريد حقًا حذف المجموعة "%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 - - Generate 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? + - 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. + + + + 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) - + %n شهرشهرشهرين%n شهور%n شهور%n شهور - 1 year - سنة 1 + Apply generated password? + تطبيق كلمة المرور المولدة؟ - Apply generated password? + Do you want to apply the generated password to this entry? + هل تريد تطبيق كلمة المرور المولدة لهذا المُدخل؟ + + + Entry updated successfully. + حُدث المُدخل بنجاح. + + + Entry has unsaved changes - Do you want to apply the generated password to this entry? + New attribute %1 - Entry updated successfully. + [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,119 +2388,169 @@ This may cause the affected plugins to malfunction. Modified - + التعديل Accessed - + الوصول Attachments المرفقات - - - EntryView - Customize View - تخصيص العرض + Yes + - Hide Usernames - إخفاء أسماء المستخدم + TOTP + + + + EntryPreviewWidget - Hide Passwords - إخفاء كلمات المرور + Generate TOTP Token + إنشاء رمز TOTP - Fit to window - ﻻئم النافذة + Close + إغلاق - Fit to contents - ﻻئم المحتوى + General + العام - Reset to defaults - إعادة التعيين إلى الإعدادات الافتراضية + Username + اسم المستخدم - Attachments (icon) - المرفقات (رمز) + Password + كلمه السر - - - Group - Recycle Bin - سلة المهملات + Expiration + الإنتهاء - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: لا يمكن حفظ الملف! + URL + رابط - Cannot save the native messaging script file. + Attributes + الخصائص + + + Attachments + المرفقات + + + Notes + ملاحظات + + + Autotype + Auto-Type + + + Window + النافذة + + + Sequence + التسلسل + + + Searching + جاري البحث + + + Search + بحث + + + Clear + مسح + + + Never + أبدًا + + + [PROTECTED] + [محمي] + + + <b>%1</b>: %2 + attributes line - - - HttpPasswordGeneratorWidget - Length: - الطول: + Enabled + مُفعل - Character Types - أنواع الرموز + Disabled + مُعطل - Upper Case Letters - الحروف الكبيرة + Share + + + + EntryView - A-Z - A-Z + Customize View + تخصيص العرض - Lower Case Letters - أحرف صغيرة + Hide Usernames + اخفي أسماء المستخدمين - a-z - a-z + Hide Passwords + اخفي كلمات السر - Numbers - أرقام + Fit to window + ﻻئم النافذة - 0-9 - 0-9 + Fit to contents + ﻻئم المحتوى - Special Characters - رموز مخصصة + Reset to defaults + إعادة التعيين إلى الإعدادات الافتراضية - /*_& ... - /*_& ... + Attachments (icon) + المرفقات (رمز) + + + Group - Exclude look-alike characters - استبعاد الرموز التي تبدو على حد سواء + Recycle Bin + سلة المهملات - Ensure that the password contains characters from every group + [empty] + group has no children + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: لا يمكن حفظ الملف! + - Extended ASCII - تمديد ASCII + Cannot save the native messaging script file. + لا يمكن حفظ ملف برنامج المراسلات الأصلية. @@ -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,86 +3111,161 @@ This is a one-way migration. You won't be able to open the imported databas Invalid 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 – مستحسن) + Import from share %1 + - - - Main - Existing single-instance lock file is invalid. Launching new instance. - ملف القفل الحالي المثيل غير صحيح. سيُطلق مثيل جديد. + Export to share %1 + - The lock file could not be created. Single-instance mode disabled. - تعذر إنشاء ملف القفل. تم تعطيل وضع المثيل الأحادي. + Synchronize with share %1 + + + + KeyComponentWidget - Another instance of KeePassXC is already running. - نسخة أخرى من KeePassXC قيد التشغيل. + Key Component + - Fatal error while testing the cryptographic functions. - خطأ فادح أثناء اختبار وظائف التشفير. + Key Component Description + - KeePassXC - Error - KeePassXC - خطأ + Cancel + ألغ - - - MainWindow - &Database - &قاعدة البيانات + Key Component set, click to change or remove + - &Recent databases - &قواعد البيانات الحديثة + Add %1 + Add a key component + - Import - إستيراد + Change %1 + Change a key component + - &Help - &مساعدة + Remove %1 + Remove a key component + - E&ntries + %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 - Copy att&ribute to clipboard - نسخ الخاصية إلى الحافظة + Select a key file + حدد ملف المفتاح + + + + MainWindow + + &Database + &قاعدة البيانات + + + &Recent databases + &قواعد البيانات الحديثة + + + &Help + &مساعدة - Time-based one-time password - كلمة مرور لمرة واحدة تعتمد على الوقت + E&ntries + المُدخلات &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,269 +3397,417 @@ 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 + Please touch the button on your YubiKey! + يرجى لمس الزر المتواجد على YubiKey! - All files - كل الملفات + 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! +هناك خطر كبير للعطب، حافظ على أخذ نسخة إحتياطية لقاعدة البيانات. +ليس المقصود من هذا الإصدار للإستخدام الأساسي. - Open database - فتح قاعدة بيانات + &Donate + - Save repaired database - حفظ قاعدة البيانات المُصَحَّحة + Report a &bug + - Writing the database failed. - فشل كتابة قاعدة البيانات. + 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. + - Please touch the button on your YubiKey! + &Import - 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. + Copy att&ribute... - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key + TOTP... - PEM boundary mismatch - عدم تطابق حدود PEM + &New database... + - Base64 decoding failed + Create a new database - Key file way too small. - طريق ملف المفتاح صغير جدًا. + &Merge from database... + - Key file magic header id invalid - معرف رأس magic لملف المفتاح غير صحيح + Merge from another KDBX database + - Found zero keys - لم يُعثر على أية مفاتيح + &New entry + - Failed to read public key. - تعذر قراءة المفتاح العام. + Add a new entry + - Corrupted key file, reading private key failed - ملف المفتاح معطوب، فشل قراءة المفتاح الخاص. + &Edit entry + - No private key payload to decrypt - لا يوجد حمولة المفتاح الخاص لفك التشفير + View or edit entry + - Trying to run KDF without cipher - محاولة تشغيل KDF بدون تشفير + &New group + - Passphrase is required to decrypt this key - عبارة المرور مطلوبة لفك تشفير المفتاح + Add a new group + - Key derivation failed, key file corrupted? - فشل إشتقاق المفتاح، ربما ملف المفتاح معطوب؟ + Change master &key... + - Decryption failed, wrong passphrase? - فشل فك التشفير، ربما عبارة المرور خاطئة؟ + &Database settings... + - Unexpected EOF while reading public key - نهاية الملف غير معروفة عند قراءة المفتاح العام + Copy &password + - Unexpected EOF while reading private key - نهاية الملف غير معروفة عند قراءة المفتاح الخاص + Perform &Auto-Type + - Can't write public key as it is empty - لا يمكن كتابة المفتاح العام لأنه فارغ + Open &URL + - Unexpected EOF when writing public key - نهاية الملف غير معروفة عند كتابة المفتاح العام + KeePass 1 database... + - Can't write private key as it is empty - لا يمكن كتابة المفتاح الخاص لأنه فارغ + Import a KeePass 1 database + - Unexpected EOF when writing private key - نهاية الملف غير معروفة عند قراءة المفتاح الخاص + CSV file... + - Unsupported key type: %1 - نوع مفتاح غير مدعوم: %1 + Import a CSV file + - Unknown cipher: %1 - تشفير غير معروف: %1 + Show TOTP... + - Cipher IV is too short for MD5 kdf - التشفير الرابع قصير جدًا ل MD5 kdf + Show TOTP QR Code... + - Unknown KDF: %1 + Check for Updates... - Unknown key type: %1 - نوع مفتاح غير معروف: %1 + Share entry + - - - OptionDialog - Dialog - الحوار + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + - This is required for accessing your databases from ChromeIPass or PassIFox - هذا مطلوب للوصول إلى قواعد البيانات الخاصة بك من ChromeIPass أو PassIFox + Check for updates on startup? + - Enable KeePassHTTP server - تفعيل خادم KeePassHTTP + Would you like KeePassXC to check for updates on startup? + - General - العام + You can always check for updates manually from the application menu. + + + + Merger - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - عرض إشعار عند طلب بيانات الإعتماد + Creating missing %1 [%2] + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - لا تعرض سوى أفضل التطابقات للرابط المحدد بدلًا من جميع الإدخالات للنطاق بأكمله. + Relocating %1 [%2] + - &Return only best matching entries - &عرض أفضل إدخالات مطابقة فقط + Overwriting %1 [%2] + - Re&quest to unlock the database if it is locked - طلب إلغاء القفل في حال تم الإقفال + older entry merged from database "%1" + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - يُسترجع الإدخالات مع نفس المخطط (http://, https://, ftp://, ...) فقط. + Adding backup for older target %1 [%2] + - &Match URL schemes - &مطابقة مخططات الروابط + Adding backup for older source %1 [%2] + - Sort matching entries by &username + Reapplying older target entry on top of newer source %1 [%2] - Sort &matching entries by title + Reapplying older source entry on top of newer target %1 [%2] - R&emove all shared encryption keys from active database - إزالة جميع مفاتيح التشفير المشتركة من قاعدة البيانات النشطة + Synchronizing from newer source %1 [%2] + - Re&move all stored permissions from entries in active database - إزالة كافة الصلاحيات المخزنة من المُدخلات في قاعدة البيانات النشطة + Synchronizing from older source %1 [%2] + - Password Generator - مولد كلمة السر + Deleting child %1 [%2] + - Advanced - متقدم + Deleting orphan %1 [%2] + - Always allow &access to entries - السماح دائمًا &بالوصول للمُدخلات + Changed deleted objects + - Always allow &updating entries - السماح دائمًا &بتحديث المُدخلات + Adding missing icon %1 + + + + NewDatabaseWizard - Only the selected database has to be connected with a client. - قاعدة البيانات المحددة هي التي يجب تتصل مع العميل فقط. + Create a new KeePassXC database... + - Searc&h in all opened databases for matching entries - + Root + Root group + الجذر + + + NewDatabaseWizardPage - Automatically creating or updating string fields is not supported. - إنشاء او تحديث حقول التسلسل تلقائيًا غير مدعوم. + WizardPage + - &Return advanced string fields which start with "KPH: " - &جلب حقول التسلسل المتقدمة التي تبدأ ب "KPH: " + En&cryption Settings + - HTTP Port: - منفذ HTTP: + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + - Default port: 19455 - المنفذ الافتراضي: 19455 + Advanced Settings + - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC سيعمل على هذا المنفذ في 127.0.0.1 + Simple Settings + + + + NewDatabaseWizardPageEncryption - <b>Warning:</b> The following options can be dangerous! - <b>تحذير:</b> قد تكون الخيارات التالية خطيرة! + Encryption Settings + - <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> + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - Cannot bind to privileged ports - لا يمكن ربط المنافذ المميزة + Database Master Key + - Cannot bind to privileged ports below 1024! -Using default port 19455. - لا يمكن ربط المنافذ المميزة أقل من 1024! -استخدم المنفذ الإفتراضي 19455. + A master key known only to you protects your database. + - PasswordGeneratorWidget + NewDatabaseWizardPageMetaData - %p% - %p% + 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 + معرف رأس magic لملف المفتاح غير صحيح + + + 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 + التشفير الرابع قصير جدًا ل MD5 kdf + + + Unknown KDF: %1 + KDF غير معروف: %1 + + + Unknown key type: %1 + نوع مفتاح غير معروف: %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> + + + + Passwords do not match. + + + + Generate master password + + + + + PasswordGeneratorWidget + + %p% + %p% Password: @@ -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,161 +3914,310 @@ Using default port 19455. Password quality ممتازة - - - QObject - Database not opened - لم يتم فتح قاعدة البيانات + ExtendedASCII + - Database hash not available - لا يتوفر هاش قاعدة البيانات + Switch to advanced mode + - Client public key not received - لم يتم تلقي المفتاح العام للعميل + Advanced + متقدم - Cannot decrypt message - لا يمكن فك تشفير الرسالة + Upper Case Letters A to F + - Timeout or cannot connect to KeePassXC - نفذ الوقت أو لا يمكن الإتصال على KeePassXC + A-Z + A-Z - Action cancelled or denied - أُلغي الإجراء أو رُفض + Lower Case Letters A to F + - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - لا يمكن تشفير الرسالة أو لم يتم العثور على المفتاح العام. هل تم تمكين المراسلة الأساسية في KeePassXC؟ + a-z + a-z - KeePassXC association failed, try again - تعذر إرتباط KeePassXC، حاول مرة أخرى + 0-9 + 0-9 - Key change was not successful - لم يكن تغيير المفتاح ناجحًا + Braces + - Encryption key is not recognized - لم يتم التعرف على مفتاح التشفير + {[( + - No saved databases found - لم يتم العثور على قواعد بيانات محفوظة + Punctuation + - Incorrect action - إجراء غير صحيح + .,:; + - Empty message received - أُستلمت رسالة فارغة + Quotes + - No URL provided - لم يتم تقديم رابط + " ' + - No logins found - لم يتم العثور على عمليات تسجيل دخول + Math + - Unknown error - خطأ مجهول + <*+!?= + - Add a new entry to a database. - إضافة مُدخل إلى قاعدة البيانات. + Dashes + - Path of the database. - مسار قاعدة البيانات. + \_|-/ + - Key file of the database. - ملف المفتاح لقاعدة البيانات + Logograms + - path - المسار + #$%&&@^`~ + - Username for the entry. - إسم المستخدم للمُدخل. + Switch to simple mode + - username - إسم المستخدم + Simple + - URL for the entry. - الرابط للمُدخل + Character set to exclude from generated password + - URL - رابط + Do not include: + - Prompt for the entry's password. - المطالبة بكلمة مرور المُدخل. + Add non-hex letters to "do not include" list + - Generate a password for the entry. - إنشاء كلمة المرور للمُدخل. + Hex + - Length for the generated password. - طول كلمة المرور المُنشئة. + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - length - الطول + Word Co&unt: + - Path of the entry to add. - مسار المُدخل للإضافة. + Regenerate + + + + QApplication - Copy an entry's password to the clipboard. - نسخ كلمة المرور الإدخال إلى الحافظة. + KeeShare + + + + QFileDialog - Path of the entry to clip. - clip = copy to clipboard - مسار المُدخل للقص. + Select + + + + QMessageBox - Timeout in seconds before clearing the clipboard. - مهلة بالثوان قبل مسح الحافظة. + Overwrite + - Edit an entry. - تعديل مُدخل. + Delete + حذف - Title for the entry. - عنوان المُدخل + Move + - title - العنوان + Empty + - Path of the entry to edit. - مسار المُدخل للتعديل. + Remove + إزالة - Estimate the entropy of a password. - تقدير الإنتروبيا لكلمة مرور. + Skip + - Password for which to estimate the entropy. - كلمة السر التي لتقدير الانتروبيا. + 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 + تعذر إرتباط KeePassXC، حاول مرة أخرى + + + 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. @@ -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,408 +4377,924 @@ 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. + - - - QtIOCompressor - Internal zlib error when compressing: - خطأ zlib داخلي عند الضغط: + Invalid timeout value %1. + - Error writing to underlying device: + Entry %1 not found. - Error opening underlying device: - حدث خطأ أثناء فتح الجهاز الأساسي: + Entry with path %1 has no TOTP set up. + - Error reading data from underlying device: - حدث خطأ أثناء قراءة البيانات من الجهاز الأساسي: + Entry's current TOTP copied to the clipboard! + - Internal zlib error when decompressing: + Entry's password copied to the clipboard! - - - QtIOCompressor::open + + Clearing the clipboard in %1 second(s)... + + - The gzip format not supported in this version of zlib. - تنسيق gzip غير مدعوم في ه + Clipboard cleared! + - Internal zlib error: + Silence password prompt and other secondary outputs. - - - SearchWidget - Search... - البحث... + count + CLI parameter + العدد - Search - بحث + Invalid value for password length: %1 + - Clear - مسح + Could not find entry with path %1. + - Case Sensitive - حالة الحساسية + Not changing any field for entry %1. + - Limit search to selected group + Enter new password for entry: - - - Service - KeePassXC: New key association request + Writing the database failed: %1 - 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. + Successfully edited entry %1. - KeePassXC: Overwrite existing key? - KeePassXC: الكتابة على المفتاح الحالي؟ + Length %1 + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - مفتاح التشفير المشترك مع إسم "%1" موجود بالفعل. -هل تريد الكتابة عليه؟ + Entropy %1 + - KeePassXC: Update Entry - KeePassXC: تحديث المُدخل + 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 + + + + + QtIOCompressor + + Internal zlib error when compressing: + خطأ zlib داخلي عند الضغط: + + + Error writing to underlying device: + حدث خطأ أثناء الكتابة إلى الجهاز الأساسي: + + + Error opening underlying device: + حدث خطأ أثناء فتح الجهاز الأساسي: + + + Error reading data from underlying device: + حدث خطأ أثناء قراءة البيانات من الجهاز الأساسي: + + + Internal zlib error when decompressing: + خطأ zlib داخلي عند فك الضغط: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + تنسيق 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 + بحث + + + 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 + توليد - Do you want to update the information in %1 - %2? - هل تريد تحديث المعلومات في %1 - %2؟ + Import + إستيراد - KeePassXC: Database locked! - KeePassXC: قاعدة البيانات أقفلت! + Export + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - قاعدة البيانات هذه قد أقفلت! -يرجى إلغاء قفل قاعدة البيانات المحددة أو اختيار واحدة أخرى تكون مفتوحة. + Imported certificates + - KeePassXC: Removed keys from database - KeePassXC: حُذِفت المفاتيح من قاعدة البيانات - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + Trust + - KeePassXC: No keys found - KeePassXC: لم يتم العثور على أية مفاتيح + Ask + - No shared encryption-keys found in KeePassHttp Settings. - لم يُعثر على مفاتيح التشفير المشتركة في إعدادات KeePassHttp. + Untrust + - KeePassXC: Settings not available! - KeePassXC: الإعدادات غير متاحة! + Remove + إزالة - The active database does not contain an entry of KeePassHttp Settings. - لا تحتوي قاعدة البيانات النشطة على إدخال لإعدادات KeePassHttp. + Path + - Removing stored permissions... - إزالة الصلاحيات المخزنة... + Status + - Abort - إجهاض + Fingerprint + البصمة - KeePassXC: Removed permissions - KeePassXC: حُذفت الصلاحيات + Certificate + - - Successfully removed permissions from %n entries. - + + Trusted + - KeePassXC: No entry with permissions found! + Untrusted - The active database does not contain an entry with permissions. - لا تحتوي قاعدة البيانات النشطة على إدخال مع صلاحيات. + Unknown + - - - SettingsWidget - Application Settings - إعدادات التطبيق + key.share + Filetype for KeeShare key + - General - العام + KeeShare key file + - Security - الأمن + All files + كل الملفات - Access error for config file %1 + Select path - - - SettingsWidgetGeneral - Basic Settings - الإعدادات الأساسية + Exporting changed certificate + - Start only a single instance of KeePassXC - شغل تطبيق واحد فقط من KeePassXC + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Remember last databases - تذكر قواعد البيانات الأخيرة + Signer: + + + + ShareObserver - Remember last key files and security dongles - تذكر الملفات الرئيسية الأخيرة و قواعد الأمن + Import from container without signature + - Load previous databases on startup - إستعادة قواعد البيانات السابقة عند بدء التشغيل + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Automatically save on exit - الحفظ تلقائيًا عند الإغلاق + Import from container with certificate + - Automatically save after every change + Not this time - Automatically reload the database when modified externally - إعادة تحميل قاعدة البيانات تلقائيا عند تعديلها خارجيًا + Never + أبدًا - Minimize when copying to clipboard - تصغير عند النسخ إلى الحافظة + Always + - Minimize window at application startup - تصغير النافذة عند بدء تشغيل التطبيق + Just this time + - Use group icon on entry creation - استخدم رمز المجموعة عند إنشاء الإدخال + Import from %1 failed (%2) + - Don't mark database as modified for non-data changes (e.g., expanding groups) - عدم وضع علامة على قاعدة البيانات المعدلة للتغييرات غير المتعلقة بالبيانات (مثال، توسيع المجموعات) + Import from %1 successful (%2) + - Hide the Details view + Imported from %1 - Show a system tray icon - إظهار علامة تبويب + Signed share container are not supported - import prevented + - Hide window to system tray when minimized - إخفاء النافذة إلى شريط المهام عند تصغيرها + File is not readable + - Hide window to system tray instead of app exit - إخفاء النافذة إلى شريط المهام بدلًا من إغلاق التطبيق + Invalid sharing container + - Dark system tray icon + Untrusted import prevented - Language - اللغة + Successful signed import + - Auto-Type - المكمل التلقائي + Unexpected error + - Use entry title to match windows for global Auto-Type - استخدم عنوان الإدخال لمطابقة النوافذ للطباعة التلقائية بشكل عام + Unsigned share container are not supported - import prevented + - Use entry URL to match windows for global Auto-Type - استخدم رابط الإدخال لمطابقة النوافذ للطباعة التلقائية بشكل عام + Successful unsigned import + - Always ask before performing Auto-Type - اسأل دائما قبل تنفيذ الطباعة التلقائية + File does not exist + - Global Auto-Type shortcut - المفتاح العام للطباعة التلقائية + Unknown share container type + - Auto-Type delay - زمن التأخير للطباعة التلقائية + Overwriting signed share container is not supported - export prevented + - ms - Milliseconds - م.ثانية + Could not write export container (%1) + - Startup - بدأ التشغيل + Overwriting unsigned share container is not supported - export prevented + - File Management - إدارة الملفات + Could not write export container + - Safely save database files (may be incompatible with Dropbox, etc) - حفظ ملفات قواعد البيانات بأمان (قد يكون غير متوافق مع Dropbox، إلخ) + Unexpected export error occurred + - Backup database file before saving - إحتفظ بنسخة من ملف قاعدة البيانات قبل الحفظ + Export to %1 failed (%2) + - Entry Management + Export to %1 successful (%2) - General - العام + Export to %1 + - - - SettingsWidgetSecurity - Timeouts - مهلة نفاد الوقت + Do you want to trust %1 with the fingerprint of %2 from %3? + - Clear clipboard after - امسح الذاكرة بعد + Multiple import source path to %1 in %2 + - sec - Seconds - ثانية + Conflicting export target path %1 in %2 + - Lock databases after inactivity of - أغلق قواعد البيانات بعد حالات عدم النشاط ل + Could not embed signature: Could not open file to write (%1) + - Convenience + Could not embed signature: Could not write file (%1) - Lock databases when session is locked or lid is closed - اقفل قواعد البيانات عندما تنقفل الجلسة أو يتم إغلاق اللابتوب + Could not embed database: Could not open file to write (%1) + - Lock databases after minimizing the window - قفل قواعد البيانات عند تصغير النافذة + Could not embed database: Could not write file (%1) + + + + TotpDialog - Don't require password repeat when it is visible - + Timed Password + كلمة مرور موقوته - Show passwords in cleartext by default - إظهار كلمة المرور كنص إفتراضيًا + 000000 + 000000 - Hide passwords in the preview panel - إخفاء كلمات المرور في نافذة المعاينة + Copy + نسخ + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog - Hide entry notes by default - إخفاء مُدخل الملاحظات إفتراضيًا + Copy + نسخ - Privacy - الخصوصية + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Use Google as fallback for downloading website icons + There was an error creating the QR code. - Re-lock previously locked database after performing Auto-Type - أعد قفل قاعدة البيانات التي تم تأمينها سابقًا بعد تنفيذ الطباعة التلقائية + Closing in %1 seconds. + - 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 أرقام + sec + Seconds + ثانية + + + Code size: + حجم الكود: 6 digits 6 أرقام - Code size: - حجم الكود: + 7 digits + - sec - Seconds - ثانية + 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. + + + + 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 + - - - UnlockDatabaseWidget - Unlock database - إلغاء قفل قاعدة البيانات + 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 - - Remove an entry from the database. - حذف مُدخل من قاعدة البيانات. - - - Path of the database. - مسار قاعدة البيانات. - - - Path of the entry to remove. - مسار المُدخل للحذف. - - - KeePassXC - cross-platform password manager - KeePassXC - مدير كلمات المرور لعدة أنظمة - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - أسماء ملفات قواعد بيانات كلمات المرور للفتح (*.kdbx) + Refresh + تحديث - path to a custom config file - مسار ملف التكوين المخصص + YubiKey Challenge-Response + - key file 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> + - read password of the database from stdin - قراءة كلمة مرور قاعدة البيانات من stdin + No YubiKey detected, please ensure it's plugged in. + - 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 1996cb58d9..2aa9200a4e 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,3571 +70,4904 @@ 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 এজেন্ট - - - AgentSettingsWidget - Enable SSH Agent (requires restart) - SSH এজেন্ট সক্ষম করুন (পুনর্সূচনা প্রয়োজন) + YubiKey + - - - AutoType - Couldn't find an entry that matches the window title: - উইন্ডো শিরোনামের সাথে সম্পর্কিক একটিও এন্ট্রি খুঁজে পাওয়া যায়নি: + TouchID + - Auto-Type - KeePassXC - অটো-টাইপ- KeePassXC + None + - Auto-Type - অটো-টাইপ + KeeShare (signed and unsigned sharing) + - The Syntax of your Auto-Type statement is incorrect! - আপনার অটো টাইপ বিবৃতি সিনট্যাক্স সঠিক নয়! + KeeShare (only signed sharing) + - This Auto-Type command contains a very long delay. Do you really want to proceed? - এই অটো-টাইপ কমান্ডের মধ্যে একটি খুব দীর্ঘ বিলম্ব রয়েছে। আপনি কি সত্যিই এগিয়ে যেতে চান? + KeeShare (only unsigned sharing) + + + + AgentSettingsWidget - This Auto-Type command contains very slow key presses. Do you really want to proceed? - এই অটো-টাইপ কমান্ডটি খুব ধীর গতির কী প্রেস রয়েছে। আপনি কি সত্যিই এগিয়ে যেতে চান? + Enable SSH Agent (requires restart) + SSH এজেন্ট সক্ষম করুন (পুনর্সূচনা প্রয়োজন) - This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - এই অটো-টাইপ কমান্ডটি আর্গুমেন্টগুলির মধ্যে রয়েছে যা প্রায়শই পুনরাবৃত্তি হয়। আপনি কি সত্যিই এগিয়ে যেতে চান? + Use OpenSSH for Windows instead of Pageant + - AutoTypeAssociationsModel + ApplicationSettingsWidget - Window - উইন্ডো + Application Settings + - Sequence - অনুক্রম + General + সাধারন - Default sequence - সচারচর অনুক্রম + Security + - - - AutoTypeMatchModel - Group - দল + Access error for config file %1 + - Title - শিরোনাম + Icon only + - Username - ব্যবহারকরীর নাম + Text only + - Sequence - অনুক্রম + Text beside icon + - - - AutoTypeSelectDialog - Auto-Type - KeePassXC - অটো-টাইপ- KeePassXC + Text under icon + - Select entry to Auto-Type: - অটো-টাইপের জন্য এন্ট্রি নির্বাচন করুন + Follow style + - BrowserAccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC-Browser Confirm Access - KeePassXC- ব্রাউজার অ্যাক্সেস নিশ্চিত করুন + Basic Settings + - Remember this decision - এই সিদ্ধান্ত মনে রাখুন + Startup + সূচনা - Allow - অনুমতি দিন + Start only a single instance of KeePassXC + - Deny - নাকচ করুন + Remember last databases + - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 নিম্নলিখিত আইটেম (গুলি) এর জন্য পাসওয়ার্ড অ্যাক্সেসের অনুরোধ জানিয়েছে -আপনি প্রবেশাধিকার অনুমতি দিতে চান তা নির্বাচন করুন। + Remember last key files and security dongles + - - - BrowserOptionDialog - Dialog - সংলাপ + Load previous databases on startup + - This is required for accessing your databases with KeePassXC-Browser - KeePassXC- ব্রাউজারের সাথে আপনার ডেটাবেস অ্যাক্সেস করার জন্য এটি প্রয়োজনীয় + Minimize window at application startup + - Enable KeepassXC browser integration - ব্রাউজারের সাথে KeepassXC ইন্টিগ্রেশন সচল করুন + File Management + ফাইল ব্যবস্থাপনা - General - সাধারন + Safely save database files (may be incompatible with Dropbox, etc) + নিরাপদে ডাটাবেস সংরক্ষণ করুন (ড্রডবক্স, এবং অন্যান্যর সাথে অসংগত হতে পারে) - Enable integration for these browsers: - এইসব ব্রাউজারের সাথে ইন্টিগ্রেশন সচল করুন: + Backup database file before saving + সংরক্ষণ করার আগে ডাটাবেস ব্যাকআপ করুন - &Google Chrome - &গুগল ক্রোম + Automatically save after every change + - &Firefox - &ফায়ারফক্স + Automatically save on exit + - &Chromium - &ক্রোমিয়াম + Don't mark database as modified for non-data changes (e.g., expanding groups) + - &Vivaldi - &ভিভালডি + Automatically reload the database when modified externally + - Show a &notification when credentials are requested - Credentials mean login data requested via browser extension - প্রমাণপ্রত্রাদি অনুরোধ করা হলে একটি &বিজ্ঞপ্তি দেখান + Entry Management + এন্ট্রি ব্যবস্থাপনা - Re&quest to unlock the database if it is locked - ডাটাবেস লক থাকলে আনলক করার অনুরোধ জানান + Use group icon on entry creation + - Only entries with the same scheme (http://, https://, ...) are returned. - শুধুমাত্র (http://, https://, ...) সম্বলিত এন্ট্রিগুলো এসেছে। + Minimize when copying to clipboard + - &Match URL scheme (e.g., https://...) - ইউআরএল সূচি মিলান (e.g., https://...) + Hide the entry preview panel + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - একটি নির্দিষ্ট URL জন্য সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে পুরো ডোমেইনের জন্য সকল এন্ট্রি না দেখিয়ে। + General + সাধারন - &Return only best-matching credentials - সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে + Hide toolbar (icons) + - Sort &matching credentials by title - Credentials mean login data requested via browser extension - সম্ভাব্য সর্ব্বোত্তম ফলাফলটি শিরোনাম অনুসারে সাজান + Minimize instead of app exit + - Sort matching credentials by &username - Credentials mean login data requested via browser extension - সম্ভাব্য সর্ব্বোত্তম ফলাফলটি ব্যবহারকারী অনুসারে সাজান + Show a system tray icon + - &Disconnect all browsers - সকল ব্রাউজারে সংযোগ বিচ্ছিন্ন করুন + Dark system tray icon + - Forget all remembered &permissions - মনে রাখা সকল অনুমতি ভুলে যান + Hide window to system tray when minimized + - Advanced - উন্নততর + Language + - Never &ask before accessing credentials - Credentials mean login data requested via browser extension - তথে প্রবেশ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না + Auto-Type + অটো-টাইপ - Never ask before &updating credentials - Credentials mean login data requested via browser extension - তথ্য হালনাগাদ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না + Use entry title to match windows for global Auto-Type + - Only the selected database has to be connected with a client. - শুধুমাত্র নির্বাচিত ডাটাবেসকে ক্লায়েন্টের সাথে সংযুক্ত করা উচিত। + Use entry URL to match windows for global Auto-Type + - Searc&h in all opened databases for matching credentials - Credentials mean login data requested via browser extension - এই ধরনের তথ্য সকল চালু থাকা ডাটেবেসে খূঁজে দেখুন + Always ask before performing Auto-Type + - Automatically creating or updating string fields is not supported. - স্বয়ংক্রিয়ভাবে তৈরি করা বা স্ট্রিং ফিল্ড আপডেট করা সমর্থন করে না। + Global Auto-Type shortcut + - &Return advanced string fields which start with "KPH: " - "KPH: " দিয়ে শুরু হয়েছে এমন উন্নত স্ট্রিং ফিল্ডগুলি দেখান + Auto-Type typing delay + - Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - KeePassXC অথবা keepassxc-proxy বাইনারী পাথ হালনাগাদ রাখুন লোকাল মেসেজিং স্ক্রিপ্ট হিসেবে চালুর সময় + ms + Milliseconds + এমএস - Update &native messaging manifest files at startup - স্টার্ট-আপের সময় ন্যাটিভ ম্যাসেজিং ফাইল আপডেট করুন + Auto-Type start delay + - Support a proxy application between KeePassXC and browser extension. - KeePassXC এবং ব্রাউজার এক্সটেনশন এর মধ্যে প্রক্সি এ্যাপ সমর্থন করে। + Check for updates at application startup + - Use a &proxy application between KeePassXC and browser extension - KeePassXC এবং ব্রাউজার এক্সটেনশন এর মধ্যে প্রক্সি ব্যবহার করুন + Include pre-releases when checking for updates + - Use a custom proxy location if you installed a proxy manually. - আপনি যদি ম্যানুয়ালী প্রক্সি যোগ করে থাকেন তবে তার স্থান ব্যাবহার করুন + Movable toolbar + - Use a &custom proxy location - Meant is the proxy for KeePassXC-Browser - পরিবর্তিত প্রক্সি স্থান ব্যবহার করুন + Button style + + + + ApplicationSettingsWidgetSecurity - Browse... - Button for opening file dialog - ব্রাউজ... + Timeouts + সময় শেষ - <b>Warning:</b> The following options can be dangerous! - <b>সতর্কতা:</b> নিম্নোক্ত বিকল্পগুলি বিপজ্জনক হতে পারে। + Clear clipboard after + ক্লিপবোর্ড পরিস্কার হবে - Executable Files (*.exe);;All Files (*.*) - এক্সিকিউটেবল ফাইল (*.exe)।। সব ফাইল (*. *) + sec + Seconds + সে. - Executable Files (*) - + Lock databases after inactivity of + অব্যবহৃত থাকলে ডাটাবেস লক হবে - Select custom proxy location - স্বনির্বাচিত প্রক্সি অবস্থান নির্বাচন করুন + min + - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - আমরা দুঃখিত, কিন্তু এই মুহূর্তে স্নাপ রিলিজ KeePassXC ব্রাউজার সমর্থন করে না। + Forget TouchID after inactivity of + - - - BrowserService - KeePassXC: New key association request - KeePassXC: নতুন কী (key) যুক্ত করার আবেদন + Convenience + সাচ্ছন্দ্য - 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 ডাটাবেস প্রবেশের সম্মতি দিতে চান, তা শনাক্ত করা যায় এমন একটি অনন্য নাম দিন। + Lock databases when session is locked or lid is closed + ডাটাবেস লক হবে লিড বন্ধ করলে বা সেশন লক করলে - Save and allow access - সংরক্ষণ করুন এবং প্রবেশে সম্মতি দিন + Forget TouchID when session is locked or lid is closed + - KeePassXC: Overwrite existing key? - KeePassXC: বর্তমান কী উপরিলিখন করবেন? + Lock databases after minimizing the window + উইন্ডো মিনিমাইজ করলে ডাটাবেস লক হবে - A shared encryption key with the name "%1" already exists. -Do you want to overwrite it? - শেয়ারকৃত এনক্রিপশন কী "%1" নামটি ইতিমধ্যেই বিদ্যমান। -এটির ওপর দিয়েই লিখতে চান? + Re-lock previously locked database after performing Auto-Type + অটো-টাইপের পরে পূনরায় লক করুন আগের লক করা ডাটাবেস - KeePassXC: Update Entry - KeePassXC: হালনাগাদ এন্ট্রি + Don't require password repeat when it is visible + আবার যখন দৃশ্যমান হবে তখন পাসওয়ার্ড লাগবেনা - Do you want to update the information in %1 - %2? - %1 - %2 এর মধ্যে তথ্য হালনাগাদ করতে চান? + Don't hide passwords when editing them + - KeePassXC: Database locked! - KeePassXC: ডাটাবেস তালাবদ্ধ ! + Don't use placeholder for empty password fields + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - সক্রিয় ডাটাবেজ বন্ধ রয়েছে। -নির্বাচিত ডাটাবেস আনলক করুন বা খোলা আছে এমন অন্য একটি পছন্দ করুন। + Hide passwords in the entry preview panel + - KeePassXC: Settings not available! - KeePassXC: সেটিংস সমূহ সুপ্রাপ্য নয়। + Hide entry notes by default + ডিফল্টভাবে এন্ট্রি নোট লুকান - The active database does not contain a settings entry. - + Privacy + গোপণীয়তা - KeePassXC: No keys found - KeePassXC: কোন কী পাওয়া যায়নি + Use DuckDuckGo as fallback for downloading website icons + + + + AutoType - No shared encryption keys found in KeePassXC Settings. - কোন শেয়ারকৃত এনক্রিপশন কী KeePassXC সেটিংসে পাওয়া যায়নি। + Couldn't find an entry that matches the window title: + উইন্ডো শিরোনামের সাথে সম্পর্কিক একটিও এন্ট্রি খুঁজে পাওয়া যায়নি: - KeePassXC: Removed keys from database - KeePassXC: কী ডাটাবেস থেকে অপসারণ করা হয়েছে - - - Successfully removed %n encryption key(s) from KeePassXC settings. - + Auto-Type - KeePassXC + অটো-টাইপ- KeePassXC - Removing stored permissions… - সঞ্চিত অনুমতিসমূহ অপসারণ করা হচ্ছে... + Auto-Type + অটো-টাইপ - Abort - বাতিল + The Syntax of your Auto-Type statement is incorrect! + আপনার অটো টাইপ বিবৃতি সিনট্যাক্স সঠিক নয়! - KeePassXC: Removed permissions - KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে - - - Successfully removed permissions from %n entry(s). - + This Auto-Type command contains a very long delay. Do you really want to proceed? + এই অটো-টাইপ কমান্ডের মধ্যে একটি খুব দীর্ঘ বিলম্ব রয়েছে। আপনি কি সত্যিই এগিয়ে যেতে চান? - KeePassXC: No entry with permissions found! - KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি। + This Auto-Type command contains very slow key presses. Do you really want to proceed? + এই অটো-টাইপ কমান্ডটি খুব ধীর গতির কী প্রেস রয়েছে। আপনি কি সত্যিই এগিয়ে যেতে চান? - The active database does not contain an entry with permissions. - সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই। + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + এই অটো-টাইপ কমান্ডটি আর্গুমেন্টগুলির মধ্যে রয়েছে যা প্রায়শই পুনরাবৃত্তি হয়। আপনি কি সত্যিই এগিয়ে যেতে চান? - ChangeMasterKeyWidget - - Password - পাসওয়ার্ড - - - Enter password: - পাসওয়ার্ড প্রবেশ করান: - + AutoTypeAssociationsModel - Repeat password: - পুনরায় পাসওয়ার্ড দিন: + Window + উইন্ডো - &Key file - কী ফাইল + Sequence + অনুক্রম - Browse - ব্রাউজ করুন + Default sequence + সচারচর অনুক্রম + + + AutoTypeMatchModel - Create - তৈরি করুন + Group + দল - Cha&llenge Response - চ্যালেঞ্জ প্রতিক্রিয়া + Title + শিরোনাম - Refresh - রিফ্রেশ + Username + ব্যবহারকরীর নাম - Key files - কী ফাইলগুলো + Sequence + অনুক্রম + + + AutoTypeSelectDialog - All files - সকল ফাইল + Auto-Type - KeePassXC + অটো-টাইপ- KeePassXC - Create Key File... - কী ফাইল তৈরি করুন... + Select entry to Auto-Type: + অটো-টাইপের জন্য এন্ট্রি নির্বাচন করুন + + + BrowserAccessControlDialog - Unable to create Key File : - কী ফাইল তৈরি করা যায়নি: + KeePassXC-Browser Confirm Access + KeePassXC- ব্রাউজার অ্যাক্সেস নিশ্চিত করুন - Select a key file - কী ফাইল নির্বাচন করুন + Remember this decision + এই সিদ্ধান্ত মনে রাখুন - Empty password - পাসাওয়ার্ড খালি আছে + Allow + অনুমতি দিন - Do you really want to use an empty string as password? - আপনি কি খালি স্ট্রিং পাসওয়ার্ড হিসেবে ব্যবহার করতে চান? + Deny + নাকচ করুন - Different passwords supplied. - ভিন্ন ভিন্ন পাসওয়ার্ড সরবরাহ করা হয়েছে। + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + %1 নিম্নলিখিত আইটেম (গুলি) এর জন্য পাসওয়ার্ড অ্যাক্সেসের অনুরোধ জানিয়েছে +আপনি প্রবেশাধিকার অনুমতি দিতে চান তা নির্বাচন করুন। + + + BrowserEntrySaveDialog - Failed to set %1 as the Key file: -%2 - কী ফাইল হিসেবে %1 সেট করতে ব্যর্থ হয়েছে: - %2 + KeePassXC-Browser Save Entry + - Legacy key file format - পূর্ববর্তী কী ফাইল ফরম্যাট + Ok + - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - আপনি পূর্ববর্তী কী ফাইল ফরম্যাট ব্যবহার করেছেন - যা ভবিষ্যতে অসমর্থিত হতে পারে । -নতুন কী (key) ফাইল তৈরি করুন। + Cancel + বাতিল - Changing master key failed: no YubiKey inserted. - মাস্টার কী পরিবর্তন হয়নি: কোন YubiKey বসানো হয়নি। + You have multiple databases open. +Please select the correct database for saving credentials. + - CloneDialog - - Clone Options - ক্লোন বিকল্পসমূহ - + BrowserOptionDialog - Append ' - Clone' to title - ' - Clone' শিরোনামে যোগ করুন + Dialog + সংলাপ - Replace username and password with references - ব্যবহারকারীর নাম এবং পাসওয়ার্ড তথ্যসূত্র দ্বারা প্রতিস্থাপন করুন + This is required for accessing your databases with KeePassXC-Browser + KeePassXC- ব্রাউজারের সাথে আপনার ডেটাবেস অ্যাক্সেস করার জন্য এটি প্রয়োজনীয় - Copy history - ইতিহাস অনুলিপি করুন + Enable KeepassXC browser integration + ব্রাউজারের সাথে KeepassXC ইন্টিগ্রেশন সচল করুন - - - CsvImportWidget - Import CSV fields - CSV আমদানি করুন + General + সাধারন - filename - ফাইলের নাম + Enable integration for these browsers: + এইসব ব্রাউজারের সাথে ইন্টিগ্রেশন সচল করুন: - size, rows, columns - আকার, সারি, কলাম + &Google Chrome + &গুগল ক্রোম - Encoding - এনকোডিং + &Firefox + &ফায়ারফক্স - Codec - কোডেক + &Chromium + &ক্রোমিয়াম - Text is qualified by - লেখা যোগ্য হয়েছে + &Vivaldi + &ভিভালডি - Fields are separated by - ক্ষেত্র আলাদা করা হয় + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + প্রমাণপ্রত্রাদি অনুরোধ করা হলে একটি বিজ্ঞপ্তি দেখান - Comments start with - মন্তব্য দিয়ে শুরু + Re&quest to unlock the database if it is locked + ডাটাবেস লক থাকলে আনলক করার অনুরোধ জানান - First record has field names - প্রথম রেকর্ড রয়েছে ফিল্ডের নাম + Only entries with the same scheme (http://, https://, ...) are returned. + শুধুমাত্র (http://, https://, ...) সম্বলিত এন্ট্রিগুলো এসেছে। - Number of headers line to discard - হেডার লাইন সংখ্যা বাতিল করতে হবে + &Match URL scheme (e.g., https://...) + ইউআরএল সূচি মিলান (e.g., https://...) - Consider '\' an escape character - ' \' কে পালানোর চরিত্র বিবেচনা করুন + Only returns the best matches for a specific URL instead of all entries for the whole domain. + একটি নির্দিষ্ট URL জন্য সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে পুরো ডোমেইনের জন্য সকল এন্ট্রি না দেখিয়ে। - Preview - প্রাক্-দর্শন + &Return only best-matching credentials + সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে - Column layout - কলাম বিন্যাস + Sort &matching credentials by title + Credentials mean login data requested via browser extension + সম্ভাব্য সর্ব্বোত্তম ফলাফলটি শিরোনাম অনুসারে সাজান - Not present in CSV file - CSV ফাইলে উপস্থিত নয় + Sort matching credentials by &username + Credentials mean login data requested via browser extension + সম্ভাব্য সর্ব্বোত্তম ফলাফলটি ব্যবহারকারী অনুসারে সাজান - Empty fieldname - খালি ফিল্ডনেম + Advanced + উন্নততর - column - + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + তথ্যে প্রবেশ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না - Imported from CSV file - CSV ফাইল থেকে আমদানি করা। - - - Original data: - অরিজিনাল তথ্য: + Never ask before &updating credentials + Credentials mean login data requested via browser extension + তথ্য হালনাগাদ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না - Error(s) detected in CSV file ! - ত্রুটি (গুলি) CSV ফাইলে শনাক্ত করা হয়েছে। + Only the selected database has to be connected with a client. + শুধুমাত্র নির্বাচিত ডাটাবেসকে ক্লায়েন্টের সাথে সংযুক্ত করা উচিত। - more messages skipped] - একাধিক বার্তা এড়িয়ে গেছে। + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + এই ধরনের তথ্য সকল চালু থাকা ডাটেবেসে খূঁজে দেখুন - Error - ত্রুটি + Automatically creating or updating string fields is not supported. + স্বয়ংক্রিয়ভাবে তৈরি করা বা স্ট্রিং ফিল্ড আপডেট করা সমর্থন করে না। - CSV import: writer has errors: - - CSV আমদানি: লেখক ভুল করেছেন। - + &Return advanced string fields which start with "KPH: " + "KPH: " দিয়ে শুরু হয়েছে এমন উন্নত স্ট্রিং ফিল্ডগুলি দেখান - - - CsvImportWizard - Error - ত্রুটি + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + KeePassXC অথবা keepassxc-proxy বাইনারী পাথ হালনাগাদ রাখুন লোকাল মেসেজিং স্ক্রিপ্ট হিসেবে চালুর সময় - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম - - - - CsvParserModel - - %n byte(s), - - - - %n row(s), - - - - %n column(s) - + Update &native messaging manifest files at startup + স্টার্ট-আপের সময় ন্যাটিভ ম্যাসেজিং ফাইল আপডেট করুন - - - DatabaseOpenWidget - Enter master key - মাস্টার কী প্রবেশ করান + Support a proxy application between KeePassXC and browser extension. + KeePassXC এবং ব্রাউজার এক্সটেনশন এর মধ্যে প্রক্সি এ্যাপ সমর্থন করে। - Key File: - কী ফাইল: + Use a &proxy application between KeePassXC and browser extension + KeePassXC এবং ব্রাউজার এক্সটেনশন এর মধ্যে প্রক্সি ব্যবহার করুন - Password: - পাসওয়ার্ড: + Use a custom proxy location if you installed a proxy manually. + আপনি যদি ম্যানুয়ালী প্রক্সি যোগ করে থাকেন তবে তার স্থান ব্যাবহার করুন - Browse - ব্রাউজ করুন + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + পরিবর্তিত প্রক্সি স্থান ব্যবহার করুন - Refresh - রিফ্রেশ + Browse... + Button for opening file dialog + ব্রাউজ... - Challenge Response: - চ্যালেঞ্জের জবাব: + <b>Warning:</b> The following options can be dangerous! + <b>সতর্কতা:</b> নিম্নোক্ত বিকল্পগুলি বিপজ্জনক হতে পারে। - Unable to open the database. - ডাটাবেজ খুলে দিতে অক্ষম। + Select custom proxy location + স্বনির্বাচিত প্রক্সি অবস্থান নির্বাচন করুন - Can't open key file - কী ফাইলটি খোলা যাচ্ছে না + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + আমরা দুঃখিত, কিন্তু এই মুহূর্তে স্নাপ রিলিজ KeePassXC ব্রাউজার সমর্থন করে না। - Legacy key file format - পূর্ববর্তী কী ফাইল ফরম্যাট + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - আপনি পূর্ববর্তী কী ফাইল ফরম্যাট ব্যবহার করেছেন - যা ভবিষ্যতে অসমর্থিত হতে পারে । -নতুন কী (key) ফাইল তৈরি করুন। + &Tor Browser + - Don't show this warning again - আবার এই সতর্কীকরণ দেখাবেন না + <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: + - All files - সকল ফাইল + Executable Files + - Key files - কী ফাইলগুলো + All Files + - Select key file - কী ফাইল নির্বাচন করুন + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + - DatabaseRepairWidget + BrowserService - Repair database - ডাটাবেস মেরামত + KeePassXC: New key association request + KeePassXC: নতুন কী যুক্ত করার আবেদন - Error - ত্রুটি + 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 ডাটাবেস প্রবেশের সম্মতি দিতে চান, তা শনাক্ত করা যায় এমন একটি অনন্য নাম দিন। - Can't open key file - কী ফাইলটি খোলা যাচ্ছে না + Save and allow access + সংরক্ষণ করুন এবং প্রবেশে সম্মতি দিন - Unable to open the database. - ডাটাবেজ খুলে দিতে অক্ষম। + KeePassXC: Overwrite existing key? + KeePassXC: বর্তমান কী উপরিলিখন করবেন? - Database opened fine. Nothing to do. - ডাটাবেজ ভালোভাবে খুলেছে। কিছুই করার নেই। + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + শেয়ারকৃত এনক্রিপশন কী "%1" নামটি ইতিমধ্যেই বিদ্যমান। +এটির ওপর দিয়েই লিখতে চান? - Success - সফল + KeePassXC: Update Entry + KeePassXC: হালনাগাদ এন্ট্রি - The database has been successfully repaired -You can now save it. - ডাটাবেজ সফলভাবে মেরামত করা হয়েছে -এখন আপনি তা সংরক্ষণ করতে পারবেন। + Do you want to update the information in %1 - %2? + %1 - %2 এর মধ্যে তথ্য হালনাগাদ করতে চান? - Unable to repair the database. - ডাটাবেস মেরামত করতে পারছে না। + Abort + বাতিল - - - DatabaseSettingsWidget - General - সাধারন + Converting attributes to custom data… + - Encryption - এনক্রিপশন + KeePassXC: Converted KeePassHTTP attributes + - Number of rounds too high - Key transformation rounds - খুব বেশি রাউন্ড গণনা + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - 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 সাথে খুব বেশি সংখ্যক রূপান্তর কী রাউন্ডের ব্যবহার করছেন। - -আপনি এই সংখ্যা রাখতে চাইলে, ডাটাবেস খোলার জন্য সময় নেবে কয়েক ঘন্টা বা দিন (বা তারও বেশি) । + + Successfully moved %n keys to custom data. + - Understood, keep number - বোঝা যায়, নাম্বার রাখুন + KeePassXC: No entry with KeePassHTTP attributes found! + - Cancel - বাতিল + The active database does not contain an entry with KeePassHTTP attributes. + - Number of rounds too low - Key transformation rounds - রাউন্ড খুব কম সংখ্যক + KeePassXC: Legacy browser integration settings detected + - 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 এর সাথে ব্যবহার করছে। - -যদি আপনি এই নাম্বার রাখেন, আপনার ডাটাবেজ খুব সহজেই ক্রাক হতে পারে! + 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 - KDF unchanged - KDF অপরিবর্তিত + Clone Options + ক্লোন বিকল্পসমূহ - Failed to transform key with new KDF parameters; KDF unchanged. - নতুন KDF প্যারামিটার দিয়ে কী পরিবর্তন করতে ব্যর্থ হয়েছে। KDF অপরিবর্তিত। + Append ' - Clone' to title + ' - Clone' শিরোনামে যোগ করুন - - MiB - Abbreviation for Mebibytes (KDF settings) - + + Replace username and password with references + ব্যবহারকারীর নাম এবং পাসওয়ার্ড তথ্যসূত্র দ্বারা প্রতিস্থাপন করুন - - thread(s) - Threads for parallel execution (KDF settings) - + + Copy history + ইতিহাস অনুলিপি করুন - DatabaseSettingsWidgetEncryption + CsvImportWidget - Encryption Algorithm: - এনক্রিপশন এ্যালগরিদম: + Import CSV fields + CSV আমদানি করুন - AES: 256 Bit (default) - AES: 256 Bit (default) + filename + ফাইলের নাম - Twofish: 256 Bit - Twofish: 256 Bit + size, rows, columns + আকার, সারি, কলাম - Key Derivation Function: - কী ডেরিভেশন ফাংশন: + Encoding + এনকোডিং - Transform rounds: - রাউন্ড রূপান্তর করো: + Codec + কোডেক - Benchmark 1-second delay - বেঞ্চমার্ক 1 সেকেন্ড দেরি + Text is qualified by + লেখা যোগ্য হয়েছে - Memory Usage: - মেমোরি ব্যবহার: + Fields are separated by + ক্ষেত্র আলাদা করা হয় - Parallelism: - সমান্তরালভাবে: + Comments start with + মন্তব্য শুরু হয়েছে - - - DatabaseSettingsWidgetGeneral - Database Meta Data - ডাটাবেস মেটা ডাটা + First record has field names + প্রথম রেকর্ড রয়েছে ফিল্ডের নাম - Database name: - ডাটাবেজ নাম: + Number of headers line to discard + হেডার লাইন সংখ্যা বাতিল করতে হবে - Database description: - ডাটাবেস বিবরণ: + Consider '\' an escape character + ' \' কে পালানোর চরিত্র বিবেচনা করুন - Default username: - পূর্ব-নির্ধারিত ব্যবহারকারীর নাম: + Preview + প্রাক্-দর্শন - History Settings - ইতিহাস সেটিংস + Column layout + কলাম বিন্যাস - Max. history items: - সর্বাধিত ঐতিহাসিক বিষয়: + Not present in CSV file + CSV ফাইলে উপস্থিত নয় - Max. history size: - সর্বাধিত ঐতিহাসিক আকার: + Imported from CSV file + CSV ফাইল থেকে আমদানি করা। - MiB - MiB + Original data: + অরিজিনাল তথ্য: - Use recycle bin - রিসাইকেল বিন ব্যবহার করুন + Error + ত্রুটি - Additional Database Settings - অতিরিক্ত ডাটাবেস সেটিংস + Empty fieldname %1 + - Enable &compression (recommended) - সংকোচন সক্রিয় করুন (প্রস্তাবিত) + column %1 + + + + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + + + + CSV import: writer has errors: +%1 + - DatabaseTabWidget + CsvParserModel + + %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 + Root group name রুট - KeePass 2 Database - KeePass 2 ডাটাবেস + File %1 does not exist. + - All files - সকল ফাইল + Unable to open file %1. + - Open database - উন্মুক্ত ডাটাবেস + Error while reading the database: %1 + - File not found! + Could not save, database has no file name. - Unable to open the database. - ডাটাবেজ খুলে দিতে অক্ষম। + File cannot be written as it is opened in read-only mode. + + + + DatabaseOpenDialog - File opened in read only mode. - ফাইলটি শুধুমাত্র পঠন পরিমণ্ডলে খোলা। + Unlock Database - KeePassXC + + + + DatabaseOpenWidget - Open CSV file - CSV ফাইল খুলুন + Enter master key + মাস্টার কী প্রবেশ করান - CSV file - CSV ফাইল + Key File: + কী ফাইল: - All files (*) - + Password: + পাসওয়ার্ড: - Merge database - ডাটাবেস একত্রীকরণ + Browse + ব্রাউজ করুন - Open KeePass 1 database - খোলা KeePass 1 তথ্যভাণ্ডার + Refresh + রিফ্রেশ - KeePass 1 database - KeePass 1 তথ্যভাণ্ডার + Challenge Response: + চ্যালেঞ্জের জবাব: - Close? - বন্ধ করুন? + Legacy key file format + পূর্ববর্তী কী ফাইল ফরম্যাট - "%1" is in edit mode. -Discard changes and close anyway? - "%1" সম্পাদনা মোডে আছে। -পরিবর্তনগুলি পরিত্যাগ করা হবে, আর যাই হোক বন্ধ? + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + আপনি পূর্ববর্তী কী ফাইল ফরম্যাট ব্যবহার করেছেন + যা ভবিষ্যতে অসমর্থিত হতে পারে । +নতুন কী (key) ফাইল তৈরি করুন। - Save changes? - পরিবর্তন সংরক্ষণ করব? + Don't show this warning again + আবার এই সতর্কীকরণ দেখাবেন না - "%1" was modified. -Save changes? - '%1' পরিবর্তিত হয়েছে। -পরিবর্তন সংরক্ষণ করব? + All files + সকল ফাইল - Writing the database failed. - এই ডাটাবেসে লেখা ব্যর্থ হয়েছে। + Key files + কী ফাইলগুলো - Passwords - পাসওয়ার্ডসমূহ + Select key file + কী ফাইল নির্বাচন করুন - Save database as - ডাটাবেজ হিসেবে সংরক্ষণ করুন + TouchID for quick unlock + - Export database to CSV file - ডাটাবেস CSV ফাইল হিসেবে রপ্তানি করুন + Unable to open the database: +%1 + - Writing the CSV file failed. - CSV ফাইলে লেখা ব্যর্থ হয়েছে। + Can't open key file: +%1 + + + + DatabaseSettingWidgetMetaData - New database - নতুন ডাটাবেস + Passwords + পাসওয়ার্ডসমূহ + + + DatabaseSettingsDialog - locked - আটকানো + Advanced Settings + - Lock database - তালাবদ্ধ ডাকাবেস + General + সাধারন - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + Security - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - এই ডাটাবেজ সংশোধন করা হয়েছে। -লক করার আগে ডাটাবেস সংরক্ষণ করতে চান? -তা না হলে আপনার করা কোন পরিবর্তন সংরক্ষিত হবেনা। + Master Key + - Disable safe saves? - নিরাপদ সংরক্ষণ অক্ষম? + Encryption Settings + - 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 একাধিক বার ডাটাবেস সংরক্ষণ করতে ব্যর্থ হয়েছে। ফাইল সিংক্রোনাইজ সেবা ফাইলটি লক ধরে রাখলে এমনটি হতে পারে। -নিরাপদ সংরক্ষণ অক্ষম করুন এবং আবার চেষ্টা করুন। + Browser Integration + - DatabaseWidget + DatabaseSettingsWidgetBrowser - Searching... - সন্ধান করা হচ্ছে... + KeePassXC-Browser settings + - Change master key - মাস্টার কী পরিবর্তন করুন + &Disconnect all browsers + সকল ব্রাউজারে সংযোগ বিচ্ছিন্ন করুন - Delete entry? - এন্ট্রি মুছে ফেলতে চান? + Forg&et all site-specific settings on entries + - Do you really want to delete the entry "%1" for good? - আপনি কি সত্যিই এন্ট্রি "%1" মুছে ফেলতে চান? + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Delete entries? - এন্ট্রিসমূহ মুছে ফেলতে চান? + Stored keys + - Do you really want to delete %1 entries for good? - আপনি সত্যিই %1 এন্ট্রিসমূহ মুছে ফেলতে চান? + Remove + অপসারণ করুন - Move entry to recycle bin? - এন্ট্রি রিসাইকেল বিনে সরাবে? + Delete the selected key? + - Do you really want to move entry "%1" to the recycle bin? - আপনি কি "%1" এন্ট্রিটি রিসাইকেল বিনে সরাতে চান? + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + - Move entries to recycle bin? - রিসাইকেল বিনে এন্ট্রিসমূহ সরাবেন? - - - Do you really want to move %n entry(s) to the recycle bin? - + Key + কী - Execute command? - কমান্ড চালাও? + Value + মান - Do you really want to execute the following command?<br><br>%1<br> - আপনি কি নিচের কমান্ড সঞ্চালন করতে চান? <br><br>%1<br> + Enable Browser Integration to access these settings. + - Remember my choice - আমার পছন্দ মনে রাখুন + Disconnect all browsers + - Delete group? - দল মুছে ফেলতে চান? + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + - Do you really want to delete the group "%1" for good? - আপনি কি গ্রুপ '%1' মুছে ফেলতে চান? + KeePassXC: No keys found + KeePassXC: কোন কী পাওয়া যায়নি - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম + No shared encryption keys found in KeePassXC settings. + - No current database. - কোন বর্তমান ডাকাবেস নেই। + KeePassXC: Removed keys from database + KeePassXC: কী ডাটাবেস থেকে অপসারণ করা হয়েছে - - No source database, nothing to do. - কোন উৎস ডাটাবেস নেই, কিছুই করা যাবেনা। + + Successfully removed %n encryption key(s) from KeePassXC settings. + - Search Results (%1) - অনুসন্ধানের ফলাফল (%1) + Forget all site-specific settings on entries + - No Results - কোনো ফলাফল নেই + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + - File has changed - ফাইলটি পরিবর্তিত হয়েছে + Removing stored permissions… + সঞ্চিত অনুমতিসমূহ অপসারণ করা হচ্ছে... - The database file has changed. Do you want to load the changes? - এই ডাটাবেস ফাইল পরিবর্তন করা হয়েছে। আপনি যে পরিবর্তনগুলো লোড করতে চান? + Abort + বাতিল - Merge Request - একত্রিত করার অনুরোধ করুন + KeePassXC: Removed permissions + KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে + + + Successfully removed permissions from %n entry(s). + - The database file has changed and you have unsaved changes. -Do you want to merge your changes? - এই ডাটাবেস ফাইল পরিবর্তন হয়েছে এবং আপনার পরিবর্তন অসংরক্ষিত রয়েছে। -আপনি কি আপনার পরিবর্তন একত্রিত করতে চান? + KeePassXC: No entry with permissions found! + KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি। - Could not open the new database file while attempting to autoreload this database. - এই ডাটাবেস টি সয়ংক্রিয়ভাবে পূনরায় খোলার সময় নতুন ডাটাবেস খুলতে ব্যর্থ হয়েছে + The active database does not contain an entry with permissions. + সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই। - Empty recycle bin? - রিসাইকেল বিন খালি করুন? + Move KeePassHTTP attributes to custom data + - Are you sure you want to permanently delete everything from your recycle bin? - আপনি কি নিশ্চিত যে ,আপনি রিসাইকেল বিন থেকে সবকিছু স্থায়ীভাবে মুছে ফেলতে চান? + 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. + - DetailsWidget + DatabaseSettingsWidgetEncryption - Generate TOTP Token - TOTP টোকেন তৈরি করুন + Encryption Algorithm: + এনক্রিপশন এ্যালগরিদম: - Close - বন্ধ করুন + AES: 256 Bit (default) + AES: 256 Bit (default) - General - সাধারন + Twofish: 256 Bit + Twofish: 256 Bit - Password - পাসওয়ার্ড + Key Derivation Function: + কী ডেরিভেশন ফাংশন: - URL - URL + Transform rounds: + রাউন্ড রূপান্তর করো: - Expiration - মেয়াদ শেষে + Benchmark 1-second delay + বেঞ্চমার্ক 1 সেকেন্ড দেরি - Username - ব্যবহারকরীর নাম + Memory Usage: + মেমোরি ব্যবহার: - Autotype - অটোটাইপ + Parallelism: + সমান্তরালভাবে: - Searching - সন্ধান করা হচ্ছে + Decryption Time: + - Attributes - বৈশিষ্ট্যাবলী + ?? s + - Attachments - সংযুক্তিসমূহ + Change + - Notes - নোটসমূহ + 100 ms + - Window - উইন্ডো + 5 s + - Sequence - অনুক্রম + Higher values offer more protection, but opening the database will take longer. + - Search - সন্ধান + Database format: + - Clear - পরিস্কার + This is only important if you need to use your database with other programs. + - Never - কখনো না + KDBX 4.0 (recommended) + - [PROTECTED] - [সংরক্ষিত] + KDBX 3.1 + - Disabled - নিষ্ক্রিয় + unchanged + Database decryption time is unchanged + - Enabled - সক্রিয় + Number of rounds too high + Key transformation rounds + খুব বেশি রাউন্ড গণনা - - - EditEntryWidget - Entry - এন্ট্রি + 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 সাথে খুব বেশি সংখ্যক রূপান্তর কী রাউন্ডের ব্যবহার করছেন। + +আপনি এই সংখ্যা রাখতে চাইলে, ডাটাবেস খোলার জন্য সময় নেবে কয়েক ঘন্টা বা দিন (বা তারও বেশি) । - Advanced - উন্নততর + Understood, keep number + বোঝা যায়, নাম্বার রাখুন - Icon - আইকন + Cancel + বাতিল - Auto-Type - অটো-টাইপ + Number of rounds too low + Key transformation rounds + রাউন্ড খুব কম সংখ্যক - Properties - বৈশিষ্ট্য + 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 এর সাথে ব্যবহার করছে। + +যদি আপনি এই নাম্বার রাখেন, আপনার ডাটাবেজ খুব সহজেই ক্রাক হতে পারে! - History - ইতিহাস + KDF unchanged + KDF অপরিবর্তিত - SSH Agent - SSH এজেন্ট + Failed to transform key with new KDF parameters; KDF unchanged. + নতুন KDF প্যারামিটার দিয়ে কী পরিবর্তন করতে ব্যর্থ হয়েছে। KDF অপরিবর্তিত। - - n/a - n/a + + MiB + Abbreviation for Mebibytes (KDF settings) + - - (encrypted) - (এনক্রিপ্টেড) + + thread(s) + Threads for parallel execution (KDF settings) + - - Select private key - ব্যক্তিগত কী নির্বাচন করো + + %1 ms + milliseconds + + + + %1 s + seconds + + + + DatabaseSettingsWidgetGeneral - File too large to be a private key - একটি প্রাইভেট কী'র জন্য ফাইলটি খুবই বড় + Database Meta Data + ডাটাবেস মেটা ডাটা - Failed to open private key - গোপনীয় কী খুলতে ব্যর্থ + Database name: + ডাটাবেজ নাম: - Entry history - + Database description: + ডাটাবেস বিবরণ: - Add entry - এন্ট্রি যোগ করো + Default username: + পূর্ব-নির্ধারিত ব্যবহারকারীর নাম: - Edit entry - এন্ট্রি সম্পাদন করো + History Settings + ইতিহাস সেটিংস - Different passwords supplied. - ভিন্ন ভিন্ন পাসওয়ার্ড সরবরাহ করা হয়েছে। + Max. history items: + সর্বাধিত ঐতিহাসিক বিষয়: - New attribute - নতুন বৈশিষ্ট্য + Max. history size: + সর্বাধিত ঐতিহাসিক আকার: - Confirm Remove - মূছে ফেলা নিশ্চিত করুন + MiB + MiB - Are you sure you want to remove this attribute? - আপনি কি নিশ্চিত আপনি এই বৈশিষ্ট্য অপসারণ করতে চান? + Use recycle bin + রিসাইকেল বিন ব্যবহার করুন - [PROTECTED] - [সংরক্ষিত] + Additional Database Settings + অতিরিক্ত ডাটাবেস সেটিংস - Press reveal to view or edit - দেখতে বা সম্পাদনা করতে রিভেল টিপুন + Enable &compression (recommended) + সংকোচন সক্রিয় করুন (প্রস্তাবিত) + + + DatabaseSettingsWidgetKeeShare - Tomorrow - আগামীকাল + Sharing + - - %n week(s) - + + Breadcrumb + - - %n month(s) - + + Type + - 1 year - ১ বছর + Path + - Apply generated password? - জেনারেট করা পাসওয়ার্ড প্রয়োগ করবেন? + Last Signer + - Do you want to apply the generated password to this entry? - জেনারেট করা পাসওয়ার্ড এন্ট্রির সাথে প্রয়োগ করতে চান? + Certificates + - Entry updated successfully. - এন্ট্রি সফলভাবে আপডেট করা হয়েছে। + > + Breadcrumb separator + - EditEntryWidgetAdvanced + DatabaseSettingsWidgetMasterKey - Additional attributes - অতিরিক্ত বৈশিষ্ট্য + Add additional protection... + - Add - যোগ করুন + No encryption key added + - Remove - অপসারণ করুন + You must add at least one encryption key to secure your database! + - Edit Name - নাম পরিবর্তন করুন + No password set + - Protect - রক্ষা করুন + 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? + - Reveal - রিভেল + Unknown error + - Attachments - সংযুক্তিসমূহ + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple - Foreground Color: - পুরোভূমির রং: + Database Name: + - Background Color: - পটভূমির রং: + Description: + - EditEntryWidgetAutoType + DatabaseTabWidget - Enable Auto-Type for this entry - এই এন্ট্রির জন্য অটো-টাইপ সক্রিয় করুন + KeePass 2 Database + KeePass 2 ডাটাবেস - Inherit default Auto-Type sequence from the &group - দল থেকে পূর্ব-নির্ধারিত অটো-টাইপ ধারাবাহিকতা বজায় + All files + সকল ফাইল - &Use custom Auto-Type sequence: - পছন্দসই অটো-টাইপ ক্রম ব্যবহার করুন: + Open database + উন্মুক্ত ডাটাবেস - Window Associations - উইণ্ডো সমিতিসমূহ + CSV file + CSV ফাইল - + - + + Merge database + ডাটাবেস একত্রীকরণ - - - - + Open KeePass 1 database + খোলা KeePass 1 তথ্যভাণ্ডার - Window title: - উইন্ডো শিরোনাম: + KeePass 1 database + KeePass 1 তথ্যভাণ্ডার - Use a specific sequence for this association: - এই এসোসিয়েশনের জন্য নির্দিষ্ট ক্রম ব্যবহার করুন: + Export database to CSV file + ডাটাবেস CSV ফাইল হিসেবে রপ্তানি করুন - - - EditEntryWidgetHistory - Show - প্রদর্শন + Writing the CSV file failed. + CSV ফাইলে লেখা ব্যর্থ হয়েছে। - Restore - পুনর্বহাল করুন + Database creation error + - Delete - মুছে ফেলুন + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - Delete all - সব মুছে ফেলুন + The database file does not exist or is not accessible. + - - - EditEntryWidgetMain - URL: + 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? + আপনি কি সত্যিই এন্ট্রি "%1" মুছে ফেলতে চান? + + + 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 entry(s) রিসাইকেল বিনে সরাতে চান?আপনি কি সত্যিই %n এন্ট্রি(সমূহ) রিসাইকেল বিনে সরাতে চান? + + + Execute command? + কমান্ড চালাও? + + + Do you really want to execute the following command?<br><br>%1<br> + আপনি কি নিচের কমান্ড সঞ্চালন করতে চান? <br><br>%1<br> + + + Remember my choice + আমার পছন্দ মনে রাখুন + + + Do you really want to delete the group "%1" for good? + আপনি কি গ্রুপ '%1' মুছে ফেলতে চান? + + + No current database. + কোন বর্তমান ডাকাবেস নেই। + + + No source database, nothing to do. + কোন উৎস ডাটাবেস নেই, কিছুই করা যাবেনা। + + + Search Results (%1) + অনুসন্ধানের ফলাফল (%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? + '%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 + পাসওয়ার্ডসমূহ + + + 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 + + Entry + এন্ট্রি + + + Advanced + উন্নততর + + + Icon + আইকন + + + Auto-Type + অটো-টাইপ + + + Properties + বৈশিষ্ট্য + + + History + ইতিহাস + + + SSH Agent + SSH এজেন্ট + + + n/a + 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%n সপ্তাহ(s) + + + %n month(s) + %n month(s)%n মাস(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: - পাসওয়ার্ড: + 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 + 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) + মূল দল (%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 + Favicon ডাউনলোড করুন + + + Unable to fetch favicon. + 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: + 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)? + আপনি কি নিশ্চিত যে আপনি %n সংযোজন (গুলো) অপসারণ করতে চান?আপনি কি নিশ্চিত যে আপনি %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: +%1 + সংযুক্তিসমূহ খুলতে ব্যর্থ: +%1 + + + Confirm remove + + + + Unable to open file(s): +%1 + + + + + EntryAttributesModel + + Name + নাম + + + + EntryHistoryModel + + Last modified + শেষ বার পরিমার্জিত + + + Title + শিরোনাম + + + Username + ব্যবহারকরীর নাম + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + প্রসঙ্গ: + + + Group + দল + + + Title + শিরোনাম + + + Username + ব্যবহারকরীর নাম + + + URL + URL + + + Never + কখনো না + + + Password + পাসওয়ার্ড + + + Notes + নোটসমূহ + + + Expires + মেয়াদ উত্তীর্ণ হয়ে যাবে + + + Created + সৃষ্টি করা হয়েছে + + + Modified + পরিবর্তন করা হয়েছে + + + 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 + + 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! + KeePassXC: ফাইল সংরক্ষণ হয়নি! + + + 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 + হেডারের 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 + + + + Legacy header fields found in KDBX4 file. + KDBX4 ফাইলে লেগাসি হেডার ফিল্ড পাওয়া গেছে + + + Invalid inner header id size + ভেতরের শিরোনামের আইডি সাইজ সঠিক নয় + + + Invalid inner header field length + শিরোনামের ভেতরের আইডি পরিমান সঠিক নয় + + + Invalid inner header binary size + শিরোনামের ভেতরের আইডি বাইনারি সাইজ সঠিক নয় - Repeat: - পূনরায়: + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + - Title: - শিরোনাম: + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + - Notes - নোটসমূহ + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + - Presets - পূর্বনির্ধারিত + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + - Toggle the checkbox to reveal the notes section. - নোট বিভাগ দেখার জন্য চেকবক্স টিক দিন। + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + - Username: - ব্যবহারকারীর নাম: + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + - Expires - মেয়াদ উত্তীর্ণ হয়ে যাবে + 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 + - EditEntryWidgetSSHAgent + Kdbx4Writer - Form - ফরম + Invalid symmetric cipher algorithm. + - Remove key from agent after - পরে এজেন্ট থেকে কী অপসারণ করুন + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + - seconds - সেকেন্ড + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম - Fingerprint - আঙ্গুলের ছাপ + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + KdbxReader - Remove key from agent when database is closed/locked - ডাটাবেজ বন্ধ/লক করা হয় তখন এজেন্টের কাছ থেকে কী অপসারণ করুন + Unsupported cipher + - Public key - পাবলিক কী + Invalid compression flags length + - Add key to agent when database is opened/unlocked - এজেন্টের কাছে কী যোগ করুন যখন ডাটাবেস খোলা/মুক্ত থাকে + Unsupported compression algorithm + - Comment - মন্তব্য + Invalid master seed size + - Decrypt - ডিক্রাইপ্ট + Invalid transform seed size + - n/a - n/a + Invalid transform rounds size + - Copy to clipboard - ক্লিপবোর্ডে কপি করুন + Invalid start bytes size + - Private key - ব্যক্তিগত কী + Invalid random stream id size + - External file - বাইরের ফাইল + Invalid inner random stream cipher + - Browse... - Button for opening file dialog - ব্রাউজ... + 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 + - Attachment - সংযুক্তি + Invalid number value + - Add to agent - এজেন্টের সাথে যুক্ত করুন + Invalid uuid value + - Remove from agent - এজেন্টের কাছ থেকে অপসারণ করুন + Unable to decompress binary + Translator meant is a binary data inside an entry + - Require user confirmation when this key is used + XML error: +%1 +Line %2, column %3 - EditGroupWidget + KeePass1OpenWidget - Group - দল + Import KeePass1 database + - Icon - আইকন + Unable to open the database. + ডাটাবেজ খুলে দিতে অক্ষম। + + + KeePass1Reader - Properties - বৈশিষ্ট্য + Unable to read keyfile. + - Add group - দলযোগ করুন + Not a KeePass database. + KeePass ডাটাবেস নয় - Edit group - দল সম্পাদন করুন + Unsupported encryption algorithm. + - Enable - সক্রিয় করুন + Unsupported KeePass database version. + - Disable - নিষ্ক্রিয় + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + - Inherit from parent group (%1) - মূল দল (%1) এর মত + Invalid number of groups + - - - EditGroupWidgetMain - Name - নাম + Invalid number of entries + - Notes - নোটসমূহ + Invalid content hash size + - Expires - মেয়াদ উত্তীর্ণ হয়ে যাবে + Invalid transform seed size + - Search - সন্ধান + Invalid number of transform rounds + - Auto-Type - অটো-টাইপ + Unable to construct group tree + - &Use default Auto-Type sequence of parent group - মূল দলে পূর্বনির্ধারিত অটো-টাইপ ধারা ব্যবহার করুন + Root + রুট - Set default Auto-Type se&quence - ডিফল্ট অটো-টাইপ ধারা + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম - - - EditWidgetIcons - &Use default icon - ডিফল্ট আইকন ব্যবহার করুন + Wrong key or database file is corrupt. + ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। - Use custo&m icon - ইচ্ছামত আইকন ব্যবহার করুন + Key transformation failed + - Add custom icon - নিজস্ব আইকন যোগ করুন + Invalid group field type number + - Delete custom icon - স্বনির্বাচিত আইকন মুছে ফেলুন + Invalid group field size + - Download favicon + Read group field data doesn't match size - Unable to fetch favicon. - Favicon আনতে অক্ষম হয়েছে। + Incorrect group id field size + - Hint: You can enable Google as a fallback under Tools>Settings>Security - ইঙ্গিত: আপনি গুগল কে ফল-ব্যাক হিসেবে সক্রিয় করতে পারেন টুলস > সেটিংস > নিরাপত্তা + Incorrect group creation time field size + - Images - ছবি + Incorrect group modification time field size + - All files - সকল ফাইল + Incorrect group access time field size + - Select Image - ছবি নির্বাচন করুন + Incorrect group expiry time field size + - Can't read icon - আইকন দেখা যায়নি + Incorrect group icon field size + - Custom icon already exists - স্বনির্বাচিত আইকন ইতোমধ্যে বিদ্যমান + Incorrect group level field size + - Confirm Delete - মুছে ফেলা নিশ্চিত করুন + Invalid group field type + - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - এই আইকন %1 এন্ট্রি দ্বারা ব্যবহৃত হচ্ছে, এবং ডিফল্ট আইকন দ্বারা প্রতিস্থাপিত হবে। আপনি কি নিশ্চিত যে আপনি এটা মুছে ফেলতে চান? + Missing group id or level + - - - EditWidgetProperties - Created: - সৃষ্টি করেছে: + Missing entry field type number + - Modified: - সংশোধিত: + Invalid entry field size + - Accessed: - দেখা হয়েছে: + Read entry field data doesn't match size + - Uuid: - Uuid: + Invalid entry uuid field size + - Plugin Data - প্লাগ-ইন তথ্য + Invalid entry group id field size + - Remove - অপসারণ করুন + Invalid entry icon field size + - Delete plugin data? - প্লাগ-ইন তথ্য মুছে ফেলতে চান? + Invalid entry creation time field size + - Do you really want to delete the selected plugin data? -This may cause the affected plugins to malfunction. - আপনি কি নির্বাচিত প্লাগ-ইন তথ্য মুছে ফেলতে চান? -এর কারনে আক্রান্ত প্লাগ ইন খারাপ হতে পারে। + Invalid entry modification time field size + - Key - কী + Invalid entry expiry time field size + - Value - মান + Invalid entry field type + - - - Entry - - Clone - Suffix added to cloned entries - -ক্লোন + unable to seek to content position + - EntryAttachmentsModel + KeeShare - Name - নাম + Disabled share + - Size - মাপ + Import from + + + + Export to + + + + Synchronize with + - EntryAttachmentsWidget + KeyComponentWidget - Form - ফরম + Key Component + - Add - যোগ করুন + Key Component Description + - Remove - অপসারণ করুন + Cancel + বাতিল - Open - খুলুন + Key Component set, click to change or remove + - Save - সংরক্ষণ করুন + Add %1 + Add a key component + - Select files - ফাইল নির্বাচন করুন - - - Are you sure you want to remove %n attachment(s)? - + Change %1 + Change a key component + - Confirm Remove - মূছে ফেলা নিশ্চিত করুন + Remove %1 + Remove a key component + - Save attachments - সংযুক্তিসমূহ সংরক্ষণ করুন + %1 set, click to change or remove + Change or remove a key component + + + + KeyFileEditWidget - Unable to create directory: -%1 - ডিরেক্টরি তৈরি করা যায়নি: - %1 + Browse + ব্রাউজ করুন - Are you sure you want to overwrite the existing file "%1" with the attachment? - আপনি কি বিদ্যমান ফাইল "%1" সঙ্গে সংযুক্তি উপরিলিখন করতে চান? + Generate + - Confirm overwrite - উপরিলিখন নিশ্চিত করুন + Key File + - Unable to save attachments: -%1 - সংযুক্তি সংরক্ষণ করা যায়নি: -%1 + <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> + - Unable to open attachment: -%1 - সংযুক্তি খুলতে ব্যর্থ: - %1 + Legacy key file format + পূর্ববর্তী কী ফাইল ফরম্যাট - Unable to open attachments: -%1 - সংযুক্তিসমূহ খুলতে ব্যর্থ: -%1 + 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 + - Unable to open files: -%1 - ফাইল খোলা যায়নি: -%1 + Key files + কী ফাইলগুলো - - - EntryAttributesModel - Name - নাম + All files + সকল ফাইল - - - EntryHistoryModel - Last modified - শেষ বার পরিমার্জিত + Create Key File... + কী ফাইল তৈরি করুন... - Title - শিরোনাম + Error creating key file + - Username - ব্যবহারকরীর নাম + Unable to create key file: %1 + - URL - URL + Select a key file + কী ফাইল নির্বাচন করুন - EntryModel - - Ref: - Reference abbreviation - প্রসঙ্গ: - + MainWindow - Group - দল + &Database + - Title - শিরোনাম + &Recent databases + - Username - ব্যবহারকরীর নাম + &Help + - URL - URL + E&ntries + - Never - কখনো না + &Groups + - Password - পাসওয়ার্ড + &Tools + - Notes - নোটসমূহ + &Quit + - Expires - মেয়াদ উত্তীর্ণ হয়ে যাবে + &About + - Created - সৃষ্টি করেছেন + &Open database... + - Modified - পরিবর্তন করা হয়েছে + &Save database + - Accessed + &Close database - Attachments - সংযুক্তিসমূহ + &Delete entry + - - - EntryView - Customize View - পছন্দসই প্রদর্শন‌ + &Edit group + - Hide Usernames - ব্যবহারকারীর নাম লুকান + &Delete group + - Hide Passwords - পাসওয়ার্ড লুকান + Sa&ve database as... + - Fit to window - উইন্ডোতে মানানসই + Database settings + - Fit to contents + &Clone entry - Reset to defaults - স্বাভাবিক অবস্থায় ফেরত + Copy &username + - Attachments (icon) - সংযুক্তিসমূহ (আইকন) + Copy username to clipboard + - - - Group - Recycle Bin - রিসাইকেল বিন + Copy password to clipboard + - - - HostInstaller - KeePassXC: Cannot save file! + &Settings - Cannot save the native messaging script file. + Password Generator - - - HttpPasswordGeneratorWidget - Length: - দৈর্ঘ্য: + &Lock databases + - Character Types - অক্ষরের ধরণ + &Title + - Upper Case Letters - বড় হাতের অক্ষর + Copy title to clipboard + - A-Z + &URL - Lower Case Letters - ছোট হাতের অক্ষর + Copy URL to clipboard + - a-z + &Notes - Numbers - নম্বরগুলি + Copy notes to clipboard + - 0-9 - 0-9 + &Export to CSV file... + - Special Characters - বিশেষ অক্ষরসমূহ + Set up TOTP... + - /*_& ... - /*_& ... + Copy &TOTP + - Exclude look-alike characters + E&mpty recycle bin - Ensure that the password contains characters from every group - পাসওয়ার্ড টি প্রত্যেক অক্ষর দলের সমন্বয় নিশ্চিত করুন + Clear history + - Extended ASCII - বর্ধিত ASCII + Access error for config file %1 + - - - KMessageWidget - &Close - বন্ধ করুন + Settings + সেটিংস - Close message - বার্তা বন্ধ করুন + Toggle window + উইন্ডো পরিবর্তন - - - Kdbx3Reader - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম + Quit KeePassXC + KeePassXC বন্ধ করুন - Unable to issue challenge-response. - চ্যালেঞ্জের জবাব ইস্যু করতে ব্যর্থ। + Please touch the button on your YubiKey! + দয়া করে আপনার YubiKey! বাটন স্পর্শ করুন - Wrong key or database file is corrupt. - ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। + 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 ব্যবহার করছেন। +সমস্যা হবার উচ্চ ঝুঁকি আছে, আপনার ডাটাবেস ব্যাকআপ রাখুন। +-এই সংস্করণ নিয়মিত ব্যবহারের জন্য বানানো হয়নি। - - - Kdbx3Writer - Unable to issue challenge-response. - চ্যালেঞ্জের জবাব ইস্যু করতে ব্যর্থ। + &Donate + - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম + Report a &bug + - - - Kdbx4Reader - missing database headers - ডাটাবেসের শিরোনাম নেই + 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. + - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম + &Import + - Invalid header checksum size - শিরোনামের চেকসাম আকার সঠিক নয় + Copy att&ribute... + - Header SHA256 mismatch - হেডারের SHA256 মিলছে না + TOTP... + - Wrong key or database file is corrupt. (HMAC mismatch) - ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। (HMAC অমিল) + &New database... + - Unknown cipher - অপরিচিত সংকেতায়ন + Create a new database + - Invalid header id size - হেডারের আইডি আকার সঠিক নয় + &Merge from database... + - Invalid header field length + Merge from another KDBX database - Invalid header data length - হেডার তথ্য দৈর্ঘ্য সঠিক নয় + &New entry + - Failed to open buffer for KDF parameters in header - শুরুতে KDF প্যারামিটারের জন্য বাফার আরাম্ভ করতে ব্যার্থ হয়েছে + Add a new entry + - Unsupported key derivation function (KDF) or invalid parameters + &Edit entry - Legacy header fields found in KDBX4 file. - KDBX4 ফাইলে লেগাসি হেডার ফিল্ড পাওয়া গেছে + View or edit entry + - Invalid inner header id size - ভেতরের শিরোনামের আইডি সাইজ সঠিক নয় + &New group + - Invalid inner header field length - শিরোনামের ভেতরের আইডি পরিমান সঠিক নয় + Add a new group + - Invalid inner header binary size - শিরোনামের ভেতরের আইডি বাইনারি সাইজ সঠিক নয় + Change master &key... + - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data + &Database settings... - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data + Copy &password - - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data + + Perform &Auto-Type - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data + Open &URL - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data + KeePass 1 database... - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data + Import a KeePass 1 database - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data + CSV file... - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data + Import a CSV file - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data + Show TOTP... - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data + Show TOTP QR Code... - Invalid variant map entry type - Translation: variant map = data structure for storing meta data + Check for Updates... - Invalid variant map field type size - Translation: variant map = data structure for storing meta data + Share entry - - - Kdbx4Writer - Invalid symmetric cipher algorithm. + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher + Check for updates on startup? - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম + Would you like KeePassXC to check for updates on startup? + - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data + You can always check for updates manually from the application menu. - KdbxReader + Merger - Invalid cipher uuid length + Creating missing %1 [%2] - Unsupported cipher + Relocating %1 [%2] - Invalid compression flags length + Overwriting %1 [%2] - Unsupported compression algorithm + older entry merged from database "%1" - Invalid master seed size + Adding backup for older target %1 [%2] - Invalid transform seed size + Adding backup for older source %1 [%2] - Invalid transform rounds size + Reapplying older target entry on top of newer source %1 [%2] - Invalid start bytes size + Reapplying older source entry on top of newer target %1 [%2] - Invalid random stream id size + Synchronizing from newer source %1 [%2] - Invalid inner random stream cipher + Synchronizing from older source %1 [%2] - Not a KeePass database. - KeePass ডাটাবেস নয় + Deleting child %1 [%2] + - 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. + Deleting orphan %1 [%2] - Unsupported KeePass 2 database version. + Changed deleted objects + + + + Adding missing icon %1 - KdbxXmlReader + NewDatabaseWizard - XML parsing failure: %1 + Create a new KeePassXC database... - No root group - + Root + Root group + রুট + + + NewDatabaseWizardPage - Missing icon uuid or data + WizardPage - Missing custom data key or value + En&cryption Settings - Multiple group elements + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Null group uuid + Advanced Settings - Invalid group icon number + Simple Settings + + + NewDatabaseWizardPageEncryption - Invalid EnableAutoType value + Encryption Settings - Invalid EnableSearching value + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - No group uuid found + Database Master Key - Null DeleteObject uuid + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - Missing DeletedObject uuid or time + General Database Information - Null entry uuid + Please fill in the display name and an optional description for your new database: + + + OpenSSHKey - Invalid entry icon number + Invalid key file, expecting an OpenSSH key - History element in history entry + PEM boundary mismatch - No entry uuid found + Base64 decoding failed - History element with different uuid - + Key file way too small. + কী ফাইল খুবই ছোট - Unable to decrypt entry string + Key file magic header id invalid - Duplicate custom attribute found - + Found zero keys + কোন কী খুজে পাওয়া যায়নি - Entry string key or value missing - + Failed to read public key. + পাবলিক কী পড়তে ব্যর্থ হয়েছে। - Duplicate attachment found + Corrupted key file, reading private key failed - Entry binary key or value missing + No private key payload to decrypt - Auto-type association window or sequence missing + Trying to run KDF without cipher - Invalid bool value + Passphrase is required to decrypt this key - Invalid date time value + Key derivation failed, key file corrupted? - Invalid color value + Decryption failed, wrong passphrase? - Invalid color rgb part + Unexpected EOF while reading public key - Invalid number value + Unexpected EOF while reading private key - Invalid uuid value + Can't write public key as it is empty - Unable to decompress binary - Translator meant is a binary data inside an entry + Unexpected EOF when writing public key - - - KeePass1OpenWidget - Import KeePass1 database + Can't write private key as it is empty - Unable to open the database. - ডাটাবেজ খুলে দিতে অক্ষম। + Unexpected EOF when writing private key + - - - KeePass1Reader - Unable to read keyfile. + Unsupported key type: %1 - Not a KeePass database. - KeePass ডাটাবেস নয় + Unknown cipher: %1 + - Unsupported encryption algorithm. + Cipher IV is too short for MD5 kdf - Unsupported KeePass database version. + Unknown KDF: %1 - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher + Unknown key type: %1 + + + PasswordEditWidget - Invalid number of groups - + Enter password: + পাসওয়ার্ড প্রবেশ করান: - Invalid number of entries + Confirm password: - Invalid content hash size - + Password + পাসওয়ার্ড - Invalid transform seed size + <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> - Invalid number of transform rounds + Password cannot be empty. - Unable to construct group tree + Passwords do not match. - Root - রুট + Generate master password + + + + PasswordGeneratorWidget - Unable to calculate master key - মাস্টার কী গণনা করতে অক্ষম + %p% + - Wrong key or database file is corrupt. - ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। + Password: + পাসওয়ার্ড: - Key transformation failed + strength + Password strength - Invalid group field type number + entropy - Invalid group field size - + Password + পাসওয়ার্ড - Read group field data doesn't match size - + Character Types + অক্ষরের ধরণ - Incorrect group id field size - + Upper Case Letters + বড় হাতের অক্ষর - Incorrect group creation time field size - + Lower Case Letters + ছোট হাতের অক্ষর - Incorrect group modification time field size - + Numbers + নম্বরগুলি - Incorrect group access time field size - + Special Characters + বিশেষ অক্ষরসমূহ - Incorrect group expiry time field size - + Extended ASCII + বর্ধিত ASCII - Incorrect group icon field size + Exclude look-alike characters - Incorrect group level field size + Pick characters from every group - Invalid group field type + &Length: - Missing group id or level + Passphrase - Missing entry field type number + Wordlist: - Invalid entry field size + Word Separator: - Read entry field data doesn't match size - + Copy + কপি - Invalid entry uuid field size - + Accept + গ্রহণ - Invalid entry group id field size - + Close + বন্ধ করুন - Invalid entry icon field size + Entropy: %1 bit - Invalid entry creation time field size + Password Quality: %1 - Invalid entry modification time field size - + Poor + Password quality + নিম্নমানের - Invalid entry expiry time field size - + Weak + Password quality + দূর্বল - Invalid entry field type - + Good + Password quality + ভাল - - - KeePass2 - AES: 256-bit - + Excellent + Password quality + খুব ভাল - Twofish: 256-bit + ExtendedASCII - ChaCha20: 256-bit + Switch to advanced mode - AES-KDF (KDBX 4) - + Advanced + উন্নততর - AES-KDF (KDBX 3.1) + Upper Case Letters A to F - Argon2 (KDBX 4 – recommended) - + A-Z + A-Z - - - Main - Existing single-instance lock file is invalid. Launching new instance. + Lower Case Letters A to F - The lock file could not be created. Single-instance mode disabled. - + a-z + a-z - Another instance of KeePassXC is already running. - + 0-9 + 0-9 - Fatal error while testing the cryptographic functions. + Braces - KeePassXC - Error + {[( - - - MainWindow - &Database + Punctuation - &Recent databases + .,:; - Import + Quotes - &Help + " ' - E&ntries + Math - Copy att&ribute to clipboard + <*+!?= - Time-based one-time password + Dashes - &Groups + \_|-/ - &Tools + Logograms - &Quit + #$%&&@^`~ - &About + Switch to simple mode - &Open database... + Simple - &Save database + Character set to exclude from generated password - &Close database + Do not include: - &New database + Add non-hex letters to "do not include" list - Merge from KeePassX database + Hex - &Add new entry + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - &View/Edit entry + Word Co&unt: - &Delete entry + Regenerate + + + QApplication - &Add new group + KeeShare + + + QFileDialog - &Edit group + Select + + + QMessageBox - &Delete group + Overwrite - Sa&ve database as... - + Delete + মুছে ফেলুন - Change &master key... + Move - &Database settings + Empty - Database settings - + Remove + অপসারণ করুন - &Clone entry + Skip - &Find - + Disable + নিষ্ক্রিয় - Copy &username + Merge + + + QObject - Copy username to clipboard + Database not opened - Cop&y password + Database hash not available - Copy password to clipboard + Client public key not received - &Settings + Cannot decrypt message - Password Generator + Action cancelled or denied - &Perform Auto-Type + KeePassXC association failed, try again - &Open URL + Encryption key is not recognized - &Lock databases + Incorrect action - &Title + Empty message received - Copy title to clipboard + No URL provided - &URL + No logins found - Copy URL to clipboard + Unknown error - &Notes + Add a new entry to a database. - Copy notes to clipboard - + Path of the database. + ডাটাবেসের পাথ - &Export to CSV file... + Key file of the database. - Import KeePass 1 database... + path - Import CSV file... + Username for the entry. - Re&pair database... + username - Show TOTP + URL for the entry. - Set up TOTP... - + URL + URL - Copy &TOTP + Prompt for the entry's password. - E&mpty recycle bin + Generate a password for the entry. - Clear history + Length for the generated password. - Access error for config file %1 + length - <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> + Path of the entry to add. - read-only - শুধুমাত্র পাঠযোগ্য - - - Settings - সেটিংস - - - Toggle window - উইন্ডো পরিবর্তন - - - Quit KeePassXC - KeePassXC বন্ধ করুন - - - KeePass 2 Database - KeePass 2 ডাটাবেস - - - All files - সকল ফাইল - - - Open database - উন্মুক্ত ডাটাবেস + Copy an entry's password to the clipboard. + - Save repaired database - মেরামতকৃত ডাটাবেস সংরক্ষন করুন + Path of the entry to clip. + clip = copy to clipboard + - Writing the database failed. - এই ডাটাবেসে লেখা ব্যর্থ হয়েছে। + Timeout in seconds before clearing the clipboard. + - Please touch the button on your YubiKey! - দয়া করে আপনার YubiKey! বাটন স্পর্শ করুন + Edit an entry. + - 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 ব্যবহার করছেন। -সমস্যা হবার উচ্চ ঝুঁকি আছে, আপনার ডাটাবেস ব্যাকআপ রাখুন। --এই সংস্করণ নিয়মিত ব্যবহারের জন্য বানানো হয়নি। + Title for the entry. + - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key + title - PEM boundary mismatch + Path of the entry to edit. - Base64 decoding failed + Estimate the entropy of a password. - Key file way too small. - কী ফাইল খুবই ছোট + Password for which to estimate the entropy. + - Key file magic header id invalid + Perform advanced analysis on the password. - Found zero keys - কোন কী খুজে পাওয়া যায়নি + Extract and print the content of a database. + - Failed to read public key. - পাবলিক কী পড়তে ব্যর্থ হয়েছে। + Path of the database to extract. + - Corrupted key file, reading private key failed + Insert password to unlock %1: - No private key payload to decrypt + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - Trying to run KDF without cipher + + +Available commands: + - Passphrase is required to decrypt this key + Name of the command to execute. - Key derivation failed, key file corrupted? + List database entries. - Decryption failed, wrong passphrase? + Path of the group to list. Default is / - Unexpected EOF while reading public key + Find entries quickly. - Unexpected EOF while reading private key + Search term. - Can't write public key as it is empty + Merge two databases. - Unexpected EOF when writing public key + Path of the database to merge into. - Can't write private key as it is empty + Path of the database to merge from. - Unexpected EOF when writing private key + Use the same credentials for both database files. - Unsupported key type: %1 + Key file of the database to merge from. - Unknown cipher: %1 + Show an entry's information. - Cipher IV is too short for MD5 kdf + 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. - Unknown KDF: %1 + attribute - Unknown key type: %1 + Name of the entry to show. - - - OptionDialog - Dialog - সংলাপ + NULL device + - This is required for accessing your databases from ChromeIPass or PassIFox + error reading from device - Enable KeePassHTTP server + malformed string - General - সাধারন + missing closing quote + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - + Group + দল - Only returns the best matches for a specific URL instead of all entries for the whole domain. - একটি নির্দিষ্ট URL জন্য সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে পুরো ডোমেইনের জন্য সকল এন্ট্রি না দেখিয়ে। + Title + শিরোনাম - &Return only best matching entries - + Username + ব্যবহারকরীর নাম - Re&quest to unlock the database if it is locked - ডাটাবেস লক থাকলে আনলক করার অনুরোধ জানান + Password + পাসওয়ার্ড - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - + Notes + নোটসমূহ - &Match URL schemes + Last Modified - Sort matching entries by &username - + Created + সৃষ্টি করেছেন - Sort &matching entries by title + Browser Integration - R&emove all shared encryption keys from active database + YubiKey[%1] Challenge Response - Slot %2 - %3 - Re&move all stored permissions from entries in active database + Press - Password Generator + Passive - Advanced - উন্নততর + SSH Agent + SSH এজেন্ট - Always allow &access to entries + Generate a new random diceware passphrase. - Always allow &updating entries + Word count for the diceware passphrase. - Only the selected database has to be connected with a client. - শুধুমাত্র নির্বাচিত ডাটাবেসকে ক্লায়েন্টের সাথে সংযুক্ত করা উচিত। + Wordlist for the diceware generator. +[Default: EFF English] + - Searc&h in all opened databases for matching entries + Generate a new random password. - Automatically creating or updating string fields is not supported. - স্বয়ংক্রিয়ভাবে তৈরি করা বা স্ট্রিং ফিল্ড আপডেট করা সমর্থন করে না। + Invalid value for password length %1. + - &Return advanced string fields which start with "KPH: " - "KPH: " দিয়ে শুরু হয়েছে এমন উন্নত স্ট্রিং ফিল্ডগুলি দেখান + Could not create entry with path %1. + - HTTP Port: + Enter password for new entry: - Default port: 19455 + Writing the database failed %1. - KeePassXC will listen to this port on 127.0.0.1 + Successfully added entry %1. - <b>Warning:</b> The following options can be dangerous! - <b>সতর্কতা:</b> নিম্নোক্ত বিকল্পগুলি বিপজ্জনক হতে পারে। + Copy the current TOTP to the clipboard. + - <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> + Invalid timeout value %1. - Cannot bind to privileged ports + Entry %1 not found. - Cannot bind to privileged ports below 1024! -Using default port 19455. + Entry with path %1 has no TOTP set up. - - - PasswordGeneratorWidget - %p% + Entry's current TOTP copied to the clipboard! - Password: - পাসওয়ার্ড: + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - strength - Password strength + Clipboard cleared! - entropy + Silence password prompt and other secondary outputs. - Password - পাসওয়ার্ড + count + CLI parameter + - Character Types - অক্ষরের ধরণ + Invalid value for password length: %1 + - Upper Case Letters - বড় হাতের অক্ষর + Could not find entry with path %1. + - Lower Case Letters - ছোট হাতের অক্ষর + Not changing any field for entry %1. + - Numbers - নম্বরগুলি + Enter new password for entry: + - Special Characters - বিশেষ অক্ষরসমূহ + Writing the database failed: %1 + - Extended ASCII - বর্ধিত ASCII + Successfully edited entry %1. + - Exclude look-alike characters + Length %1 - Pick characters from every group + Entropy %1 - &Length: + Log10 %1 - Passphrase + Multi-word extra bits %1 - Wordlist: + Type: Bruteforce - Word Count: + Type: Dictionary - Word Separator: + Type: Dict+Leet - Generate + Type: User Words - Copy - কপি + Type: User+Leet + - Accept - গ্রহণ + Type: Repeated + - Close - বন্ধ করুন + Type: Sequence + - Apply - প্রয়োগ করুন + Type: Spatial + - Entropy: %1 bit + Type: Date - Password Quality: %1 + Type: Bruteforce(Rep) - Poor - Password quality - নিম্নমানের + Type: Dictionary(Rep) + - Weak - Password quality - দূর্বল + Type: Dict+Leet(Rep) + - Good - Password quality - ভাল + Type: User Words(Rep) + - Excellent - Password quality - খুব ভাল + Type: User+Leet(Rep) + - - - QObject - Database not opened + Type: Repeated(Rep) - Database hash not available + Type: Sequence(Rep) - Client public key not received + Type: Spatial(Rep) - Cannot decrypt message + Type: Date(Rep) - Timeout or cannot connect to KeePassXC + Type: Unknown%1 - Action cancelled or denied + Entropy %1 (%2) - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + *** Password length (%1) != sum of length of parts (%2) *** - KeePassXC association failed, try again + Failed to load key file %1: %2 - Key change was not successful + File %1 does not exist. - Encryption key is not recognized + Unable to open file %1. - No saved databases found + Error while reading the database: +%1 - Incorrect action + Error while parsing the database: +%1 - Empty message received + Length of the generated password - No URL provided + Use lowercase characters - No logins found + Use uppercase characters - Unknown error + Use numbers. - Add a new entry to a database. + Use special characters - Path of the database. - ডাটাবেসের পাথ + Use extended ASCII + - Key file of the database. + Exclude character set - path + chars - Username for the entry. + Exclude similar looking characters - username + Include characters from every selected group - URL for the entry. + Recursively list the elements of the group. - URL - URL + Cannot find group %1. + - Prompt for the entry's password. + Error reading merge file: +%1 - Generate a password for the entry. + Unable to save database to file : %1 - Length for the generated password. + Unable to save database to file: %1 - length + Successfully recycled entry %1. - Path of the entry to add. + Successfully deleted entry %1. - Copy an entry's password to the clipboard. + Show the entry's current TOTP. - Path of the entry to clip. - clip = copy to clipboard + ERROR: unknown attribute %1. - Timeout in seconds before clearing the clipboard. + No program defined for clipboard manipulation - Edit an entry. + Unable to start program %1 - Title for the entry. + file empty - title + %1: (row, col) %2,%3 - Path of the entry to edit. + AES: 256-bit - Estimate the entropy of a password. + Twofish: 256-bit - Password for which to estimate the entropy. + ChaCha20: 256-bit - Perform advanced analysis on the password. + Argon2 (KDBX 4 – recommended) - Extract and print the content of a database. + AES-KDF (KDBX 4) - Path of the database to extract. + AES-KDF (KDBX 3.1) - Insert password to unlock %1: + Invalid Settings + TOTP - Failed to load key file %1 : %2 + Invalid Key + TOTP - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + Message encryption failed. - - -Available commands: - + No groups found - Name of the command to execute. + Create a new database. - List database entries. + File %1 already exists. - Path of the group to list. Default is / + Loading the key file failed - Find entries quickly. + No key is set. Aborting database creation. - Search term. + Failed to save the database: %1. - Merge two databases. + Successfully created new database. - Path of the database to merge into. + Insert password to encrypt database (Press enter to leave blank): - Path of the database to merge from. + Creating KeyFile %1 failed: %2 - Use the same credentials for both database files. + Loading KeyFile %1 failed: %2 - Key file of the database to merge from. - + Remove an entry from the database. + ডাটাবেস থেকে একটি এন্ট্রি মুছে ফেলুন - Show an entry's information. - + Path of the entry to remove. + যে এন্ট্রি মুছে ফেলতে চান তার পাথ - 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. + Existing single-instance lock file is invalid. Launching new instance. - attribute + The lock file could not be created. Single-instance mode disabled. - Name of the entry to show. - + KeePassXC - cross-platform password manager + KeePassXC - ক্রস প্ল্যাটফর্ম পাসওয়ার্ড ম্যানেজার - NULL device - + filenames of the password databases to open (*.kdbx) + পাসওয়ার্ড দিয়ে যে ডাটাবেস (*.kdbx) খুলতে চান তার ফাইলনেম - error reading from device - + path to a custom config file + একটি কাস্টম কনফিগ ফাইল পাথ - file empty ! - - + key file of the database + ডাটাবেসের কী ফাইল - malformed string - + read password of the database from stdin + stdin থেকে ডাটাবেসের পাসওয়ার্ড পড় - missing closing quote + Parent window handle + মূল উইন্ডো হ্যান্ডেল + + + Another instance of KeePassXC is already running. - Group - দল + Fatal error while testing the cryptographic functions. + - Title - শিরোনাম + KeePassXC - Error + - Username - ব্যবহারকরীর নাম + Database password: + + + + QtIOCompressor - Password - পাসওয়ার্ড + Internal zlib error when compressing: + - Notes - নোটসমূহ + Error writing to underlying device: + - Last Modified + Error opening underlying device: - Created - সৃষ্টি করেছেন + Error reading data from underlying device: + - Legacy Browser Integration + Internal zlib error when decompressing: + + + QtIOCompressor::open - Browser Integration + The gzip format not supported in this version of zlib. - YubiKey[%1] Challenge Response - Slot %2 - %3 + Internal zlib error: + + + SSHAgent - Press + Agent connection failed. - Passive + Agent protocol error. - SSH Agent - SSH এজেন্ট + No agent running, cannot add identity. + - Generate a new random diceware passphrase. + No agent running, cannot remove identity. - Word count for the diceware passphrase. + Agent refused this identity. Possible reasons include: - count + The key has already been added. - Wordlist for the diceware generator. -[Default: EFF English] + Restricted lifetime is not supported by the agent (check options). - Generate a new random password. + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - Length of the generated password. + Search Help - Use lowercase characters in the generated password. + Search terms are as follows: [modifiers][field:]["]term["] - Use uppercase characters in the generated password. + Every search term must match (ie, logical AND) - Use numbers in the generated password. + Modifiers - Use special characters in the generated password. + exclude term from results - Use extended ASCII in the generated password. + match term exactly - - - QtIOCompressor - Internal zlib error when compressing: + use regex in term - Error writing to underlying device: + Fields - Error opening underlying device: + Term Wildcards - Error reading data from underlying device: + match anything - Internal zlib error when decompressing: + match one - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. + logical OR - Internal zlib error: + Examples SearchWidget - - Search... - - Search সন্ধান @@ -3650,311 +4977,316 @@ Available commands: পরিস্কার - Case Sensitive + Limit search to selected group - Limit search to selected group + Search Help - - - Service - KeePassXC: New key association request - KeePassXC: নতুন কী (key) যুক্ত করার আবেদন + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + - 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. + Case sensitive + + + SettingsWidgetKeeShare - KeePassXC: Overwrite existing key? - KeePassXC: বর্তমান কী উপরিলিখন করবেন? + Active + - 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: কী ডাটাবেস থেকে অপসারণ করা হয়েছে - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + Signer + - KeePassXC: No keys found - KeePassXC: কোন কী পাওয়া যায়নি + Key: + কী: - No shared encryption-keys found in KeePassHttp Settings. + Generate - KeePassXC: Settings not available! - KeePassXC: সেটিংস সমূহ সুপ্রাপ্য নয়। + Import + - The active database does not contain an entry of KeePassHttp Settings. + Export - Removing stored permissions... + Imported certificates - Abort - বাতিল + Trust + - KeePassXC: Removed permissions - KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে + Ask + - - Successfully removed permissions from %n entries. - + + Untrust + - KeePassXC: No entry with permissions found! - KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি। + Remove + অপসারণ করুন - The active database does not contain an entry with permissions. - সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই। + Path + - - - SettingsWidget - Application Settings + Status - General - সাধারন + Fingerprint + আঙ্গুলের ছাপ - Security + Certificate - Access error for config file %1 + Trusted - - - SettingsWidgetGeneral - Basic Settings + Untrusted - Start only a single instance of KeePassXC + Unknown - Remember last databases + key.share + Filetype for KeeShare key - Remember last key files and security dongles + KeeShare key file - Load previous databases on startup + All files + সকল ফাইল + + + Select path - Automatically save on exit + Exporting changed certificate - Automatically save after every change + The exported certificate is not the same as the one in use. Do you want to export the current certificate? - Automatically reload the database when modified externally + %1.%2 + Template for KeeShare key file + + + ShareObserver - Minimize when copying to clipboard + Import from container without signature - Minimize window at application startup + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? - Use group icon on entry creation + Import from container with certificate - Don't mark database as modified for non-data changes (e.g., expanding groups) + Do you want to trust %1 with the fingerprint of %2 from %3 - Hide the Details view + Not this time - Show a system tray icon + Never + কখনো না + + + Always - Hide window to system tray when minimized + Just this time - Hide window to system tray instead of app exit + Import from %1 failed (%2) - Dark system tray icon + Import from %1 successful (%2) - Language + Imported from %1 - Auto-Type - অটো-টাইপ + Signed share container are not supported - import prevented + - Use entry title to match windows for global Auto-Type + File is not readable - Use entry URL to match windows for global Auto-Type + Invalid sharing container - Always ask before performing Auto-Type + Untrusted import prevented - Global Auto-Type shortcut + Successful signed import - Auto-Type delay + Unexpected error - ms - Milliseconds - এমএস + Unsigned share container are not supported - import prevented + - Startup - সূচনা + Successful unsigned import + - File Management - ফাইল ব্যবস্থাপনা + File does not exist + - Safely save database files (may be incompatible with Dropbox, etc) - নিরাপদে ডাটাবেস সংরক্ষণ করুন (ড্রডবক্স, এবং অন্যান্যর সাথে অসংগত হতে পারে) + Unknown share container type + - Backup database file before saving - সংরক্ষণ করার আগে ডাটাবেস ব্যাকআপ করুন + Overwriting signed share container is not supported - export prevented + - Entry Management - এন্ট্রি ব্যবস্থাপনা + Could not write export container (%1) + - General - সাধারন + Could not embed signature (%1) + - - - SettingsWidgetSecurity - Timeouts - সময় শেষ + Could not embed database (%1) + - Clear clipboard after - ক্লিপবোর্ড পরিস্কার হবে + Overwriting unsigned share container is not supported - export prevented + - sec - Seconds - সে. + Could not write export container + - Lock databases after inactivity of - অব্যবহৃত থাকলে ডাটাবেস লক হবে + Unexpected export error occurred + - Convenience - সাচ্ছন্দ্য + Export to %1 failed (%2) + - Lock databases when session is locked or lid is closed - ডাটাবেস লক হবে লিড বন্ধ করলে বা সেশন লক করলে + Export to %1 successful (%2) + - Lock databases after minimizing the window - উইন্ডো মিনিমাইজ করলে ডাটাবেস লক হবে + Export to %1 + + + + TotpDialog - Don't require password repeat when it is visible - আবার যখন দৃশ্যমান হবে তখন পাসওয়ার্ড লাগবেনা + Timed Password + সময়ানুসারে পাসওয়ার্ড - Show passwords in cleartext by default - ডিফল্টভাবে পাসওয়ার্ড সাধারন লেখায় দেখান + 000000 + 000000 - Hide passwords in the preview panel - + Copy + কপি + + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Hide entry notes by default - ডিফল্টভাবে এন্ট্রি নোট লুকান + Copy + কপি - Privacy + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - Use Google as fallback for downloading website icons - গুগল ব্যবহার করুন ওয়েবসাইটের আইকন ডাউনলোড করার জন্য + There was an error creating the QR code. + - Re-lock previously locked database after performing Auto-Type - অটো-টাইপের পরে পূনরায় লক করুন আগের লক করা ডাটাবেস + Closing in %1 seconds. + - 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 (আট) ডিজিট + sec + Seconds + সে. + + + Code size: + কোড সাইজ: 6 digits ৬ ডিজিট - Code size: - কোড সাইজ: + 7 digits + - sec - Seconds - সে. + 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. + + + + 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! + - - - UnlockDatabaseWidget - Unlock database - ডাটাবেস আনলক করুন + 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 - - Remove an entry from the database. - ডাটাবেস থেকে একটি এন্ট্রি মুছে ফেলুন - - - Path of the database. - ডাটাবেসের পাথ - - - Path of the entry to remove. - যে এন্ট্রি মুছে ফেলতে চান তার পাথ - - - KeePassXC - cross-platform password manager - KeePassXC - ক্রস প্ল্যাটফর্ম পাসওয়ার্ড ম্যানেজার - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - পাসওয়ার্ড দিয়ে যে ডাটাবেস (*.kdbx) খুলতে চান তার ফাইলনেম + Refresh + রিফ্রেশ - path to a custom config file - একটি কাস্টম কনফিগ ফাইল পাথ + YubiKey Challenge-Response + - key file 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> + - read password of the database from stdin + No YubiKey detected, please ensure it's plugged in. - Parent window handle - মূল উইন্ডো হ্যান্ডেল + No YubiKey inserted. + \ No newline at end of file diff --git a/share/translations/keepassx_ca.ts b/share/translations/keepassx_ca.ts index 20316f161d..b6041417e3 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 @@ -38,80 +38,290 @@ Copia al porta-retalls - Version %1 - - Versió %1 - + Project Maintainers: + Mantenidors del projecte: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Habilita l'agent SSH (requereix reiniciar-se) + + + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Revision: %1 - Revisió: %1 + Application Settings + Configuració de l'aplicació - Distribution: %1 - Distribució: %1 + General + General - Libraries: - Llibreries + Security + Seguretat - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operatiu: %1 -Arquitectura de la CPU: %2 -Nucli: %3 %4 + Access error for config file %1 + Error d'accés al fitxer de configuració %1 - Enabled extensions: - Extensions habilitades: + Icon only + Només la icona - Project Maintainers: - Mantenidors del projecte: + Text only + Només text - 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. + Text beside icon + Text enlloc d'icona - Build Type: %1 - - Tipus de construcció: %1 - + Text under icon + Text sota la icona + + + Follow style + - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP Confirmeu l'accés + Basic Settings + Configuració bàsica - Remember this decision - Recorda aquesta decisió + Startup + - Allow - Permet + Start only a single instance of KeePassXC + Obriu només una sola instància del KeePassXC - Deny - Denega + Remember last databases + Recordeu les últimes bases de dades - %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. + 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 + - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Habilita l'agent SSH (requereix reiniciar-se) + 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 + @@ -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? @@ -216,22 +426,42 @@ Seleccioneu si voleu permetre l'accés. - BrowserOptionDialog + BrowserEntrySaveDialog - Dialog - Diàleg + KeePassXC-Browser Save Entry + - This is required for accessing your databases with KeePassXC-Browser - Requerit per l'accés a les teues bases de dades amb el navegador KeePassXC + Ok + - Enable KeepassXC browser integration - Habilita la integració de KeePassXC amb el navegador + Cancel + Cancel·lar - General - General + You have multiple databases open. +Please select the correct database for saving credentials. + + + + + BrowserOptionDialog + + Dialog + Diàleg + + + This is required for accessing your databases with KeePassXC-Browser + Requerit per l'accés a les teues bases de dades amb el navegador KeePassXC + + + Enable KeepassXC browser integration + Habilita la integració de KeePassXC amb el navegador + + + General + General Enable integration for these browsers: @@ -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 @@ -362,19 +584,40 @@ Seleccioneu si voleu permetre l'accés. <b>Atenció:</b> Canviar les següents opcions és perillós! - Executable Files (*.exe);;All Files (*.*) - Arxius executables (*.exe);;Tots els arxius (*.*) + Select custom proxy location + - Executable Files (*) - Arxius executables (*) + &Tor Browser + - Select custom proxy location + <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 - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + 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 - - - 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. - - - - 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... + Converting attributes to custom data… + - Unable to create Key File : - No s'ha pogut de crear el fitxer clau: + KeePassXC: Converted KeePassHTTP attributes + - Select a key file - Seleccioneu un arxiu clau + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - Empty password - Contrasenya buida + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - Realment voleu utilitzar una cadena buida com a contrasenya? + KeePassXC: No entry with KeePassHTTP attributes found! + - Different passwords supplied. - Les contrasenyes no coincideixen. + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 - No ha pogut definir %1 com a arxiu clau: %2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format + KeePassXC: Create a new group - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + A request for creating a new group "%1" has been received. +Do you want to create this group? + - Changing master key failed: no YubiKey inserted. - Ha fallat el canvi de clau mestra: cap YubiKey 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? + @@ -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 @@ -653,48 +792,88 @@ Please consider generating a new key file. Dades originals: - Error(s) detected in CSV file ! - S'ha(n) detectat error(s) al fitxer CSV ! + Error + Error - more messages skipped] - més missatges omesos] + Empty fieldname %1 + - Error - Error + column %1 + - CSV import: writer has errors: - - Importació CSV: el fitxer té errors: - + Error(s) detected in CSV file! + - - - CsvImportWizard - - Error - Error + + [%n more message(s) skipped] + - Unable to calculate master key - No es pot calcular la clau mestra + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - + %n column(s) + %n columna(es)%n columna(es) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - + %n byte(s) + %n byte(s)%n byte(s) - %n column(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 + @@ -704,484 +883,1515 @@ Please consider generating a new key file. Introduïu la clau mestra - Key File: - Fitxer clau: + Key File: + Fitxer clau: + + + Password: + Contrasenya: + + + Browse + Navega + + + Refresh + Actualitza + + + Challenge Response: + Pregunta/resposta + + + 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 + Tots els fitxers + + + Key files + Fitxers de clau + + + Select key file + Seleccioneu el fitxer de clau + + + TouchID for quick unlock + + + + Unable to open the database: +%1 + + + + Can't open key file: +%1 + + + + + DatabaseSettingWidgetMetaData + + Passwords + Contrasenyes + + + + DatabaseSettingsDialog + + Advanced Settings + Configuració avançada + + + General + General + + + 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 + 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 + Cancel·lar + + + 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) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + Nom de base de dades: + + + Database description: + Descripció de la base de dades: + + + Default username: + Usuari per defecte: + + + History Settings + + + + Max. history items: + N. max. d'elements al historial: + + + Max. history size: + Mida màx. del historial: + + + MiB + MiB + + + Use recycle bin + Utilitza la paperera + + + Additional Database Settings + + + + Enable &compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + 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 + + + All files + Tots els fitxers + + + Open database + Obre la base de dades + + + CSV file + Fitxer CSV + + + Merge database + Fusiona la base de dades + + + Open KeePass 1 database + Obre base de dades de KeePass 1 + + + KeePass 1 database + Base de dades de KeePass 1 + + + Export database to CSV file + Exporta la base de dades a un fitxer CSV + + + Writing the CSV file failed. + Ha fallat l'escriptura al fitxer CSV. + + + 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 + Base de dades nova + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + + + + + DatabaseWidget + + Searching... + Cercant... + + + Do you really want to delete the entry "%1" for good? + Realment voleu suprimir l'entrada "%1" per sempre? + + + Do you really want to move entry "%1" to the recycle bin? + Realment voleu moure l'entrada "%1" a la paperera? + + + Do you really want to move %n entry(s) to the recycle bin? + + + + Execute command? + Execute l'ordre? + + + Do you really want to execute the following command?<br><br>%1<br> + Voleu executar la següent ordre? <br><br>%1<br> + + + Remember my choice + Recordar la meva elecció + + + Do you really want to delete the group "%1" for good? + Realment voleu suprimir el grup "%1" per sempre? + + + No current database. + Cap base de dades actual. + + + No source database, nothing to do. + Cap base de dades, res a veure. + + + Search Results (%1) + Resultats de la cerca (%1) + + + No Results + No hi ha resultats + + + File has changed + + + + The database file has changed. Do you want to load the changes? + El fitxer de base de dades ha canviat. Voleu carregar els canvis? + + + Merge Request + Petició de combinació + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + + + + Empty recycle bin? + Buida la paperera? + + + 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? + + + 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. + Arxiu obert en mode de només lectura. + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" ha canviat. +Voleu desar els canvis? + + + Database was modified. +Save changes? + + + + Save changes? + Voleu desar els canvis? + + + 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... + + + + + EditEntryWidget + + Entry + Entrada + + + Advanced + Avançat + + + Icon + Icona + + + Auto-Type + Compleció automàtica + + + Properties + Propietats + + + History + Historial + + + SSH Agent + Agent SSH + + + n/a + + + + (encrypted) + (encriptat) + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + + + Entry history + Historial de l'entrada + + + Add entry + Afegiu una entrada + + + Edit entry + Edita l'entrada + + + Different passwords supplied. + Les contrasenyes no coincideixen. + + + New attribute + Nou atribut + + + Are you sure you want to remove this attribute? + Esteu segur que voleu suprimir aquest atribut? + + + Tomorrow + Demà + + + %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 + [PROTEGIT] Premeu revelar per veure o editar + + + %n year(s) + + + + Confirm Removal + + + + + EditEntryWidgetAdvanced + + Additional attributes + Atributs addicionals + + + Add + Afegiu + + + Remove + Suprimiu + + + Edit Name + Edita el nom + + + Protect + Protegeix + + + Reveal + Revela + + + Attachments + Fitxers adjunts + + + Foreground Color: + + + + Background Color: + + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + Permetre la compleció automàtica per a aquesta entrada + + + Inherit default Auto-Type sequence from the &group + Hereta la seqüència de compleció automàtica per defecte de &grup + + + &Use custom Auto-Type sequence: + &Utilitza la seqüència personalitzada per a la compleció automàtica: + + + Window Associations + Associacions de finestra + + + + + + + + + - + - + + + Window title: + Títol de la finestra: + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + Mostra + + + Restore + Restaura + + + Delete + Suprimeix + + + Delete all + Suprimeix tots + + + + EditEntryWidgetMain + + URL: + URL: + + + Password: + Contrasenya: + + + Repeat: + Repeteix: + + + Title: + Títol: + + + Notes + Notes + + + Presets + Configuracions + + + Toggle the checkbox to reveal the notes section. + + + + Username: + Nom d'usuari: + + + Expires + Expira + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + Fingerprint + + + + Remove key from agent when database is closed/locked + - Password: - Contrasenya: + Public key + - Browse - Navega + Add key to agent when database is opened/unlocked + - Refresh - Actualitza + Comment + - Challenge Response: - Pregunta/resposta + Decrypt + Desxifrar - Unable to open the database. - No es pot obrir la base de dades. + n/a + - Can't open key file - No es pot obrir el fitxer de clau + Copy to clipboard + Copia al porta-retalls - Legacy key file format + Private key - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + External file - Don't show this warning again + Browse... + Button for opening file dialog + Navega... + + + Attachment - All files - Tots els fitxers + Add to agent + - Key files - Arxius de clau + Remove from agent + - Select key file - Seleccioneu el fitxer de clau + Require user confirmation when this key is used + - DatabaseRepairWidget + EditGroupWidget - Repair database - Repara la base de dades + Group + Grup - Error - Error + Icon + Icona - Can't open key file - No es pot obrir el fitxer de clau + Properties + Propietats - Unable to open the database. - No es pot obrir la base de dades. + Add group + Afegeix un grup - Database opened fine. Nothing to do. - Base de dades oberta correctament. + Edit group + Edita el grup - Success - Completat amb èxit + Enable + Habilita - The database has been successfully repaired -You can now save it. - La base de dades ha estat reparada. - Ara es pot desar. + Disable + Inhabilita - Unable to repair the database. - No es pot reparar la base de dades. + Inherit from parent group (%1) + Hereta de grup pare (%1) - DatabaseSettingsWidget + EditGroupWidgetKeeShare - General - General + Form + - Encryption - Xifratge + Type: + - Number of rounds too high - Key transformation rounds + Path: - 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 + Password: + Contrasenya: + + + Inactive - Cancel - Cancel·lar + Import from path + - Number of rounds too low - Key transformation rounds + Export to path - 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! + Synchronize with path - KDF unchanged + Your KeePassXC version does not support sharing your container type. Please use %1. - Failed to transform key with new KDF parameters; KDF unchanged. + Database sharing is disabled - - MiB - Abbreviation for Mebibytes (KDF settings) - + + Database export is disabled + - - thread(s) - Threads for parallel execution (KDF settings) - + + Database import is disabled + - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Algorisme de xifratge: + KeeShare unsigned container + - AES: 256 Bit (default) - AES: 256 bits (per defecte) + KeeShare signed container + - Twofish: 256 Bit - Twofish: 256 bits + Select import source + - Key Derivation Function: + Select export target - Transform rounds: - Transformar rondes: + Select import/export file + - Benchmark 1-second delay + Clear + Neteja + + + The export container %1 is already referenced. - Memory Usage: + The import container %1 is already imported. - Parallelism: + The container %1 imported and export by different groups. - DatabaseSettingsWidgetGeneral + EditGroupWidgetMain - Database Meta Data - + Name + Nom - Database name: - Nom de base de dades: + Notes + Notes - Database description: - Descripció de la base de dades: + Expires + Expira - Default username: - Usuari per defecte: + Search + Cerca - History Settings - + Auto-Type + Compleció automàtica - Max. history items: - N. max. d'elements al historial: + &Use default Auto-Type sequence of parent group + &Utilitza seqüència per defecte del grup pare per a lacompleció automàtica - Max. history size: - Mida màx. del historial: + Set default Auto-Type se&quence + Estableix la se&qüència per defecte per a la compleció automàtica + + + EditWidgetIcons - MiB - MiB + &Use default icon + &Utilitzar icona per defecte - Use recycle bin - Utilitza la paperera + Use custo&m icon + Utilitza una icona personalitzada - Additional Database Settings - + Add custom icon + Afegeix una icona personalitzada - Enable &compression (recommended) - + Delete custom icon + Suprimeix la icona personalitzada - - - DatabaseTabWidget - Root - Root group - Arrel + Download favicon + Descarregua el favicon - KeePass 2 Database - Base de dades de KeePass 2 + Unable to fetch favicon. + No es pot descarregar el favicon. + + + Images + Imatges All files Tots els fitxers - Open database - Obre la base de dades + Custom icon already exists + Ja existeix una icona personalitzada - File not found! - No s'ha trobat el fitxer! + Confirm Delete + Confirma la supressió - Unable to open the database. - No es pot obrir la base de dades. + Custom icon successfully downloaded + - File opened in read only mode. - Arxiu obert en mode de només lectura. + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + - Open CSV file - Obre arxiu CSV + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + - CSV file - Fitxer CSV + 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 - All files (*) - Tots els arxius (*) + Created: + Creat: - Merge database - Fusiona la base de dades + Modified: + Modificat: - Open KeePass 1 database - Obre base de dades de KeePass 1 + Accessed: + Accedit: - KeePass 1 database - Base de dades de KeePass 1 + Uuid: + UUID: + + + Plugin Data + + + + Remove + Suprimiu + + + Delete plugin data? + - Close? - Voleu tancar? + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + - "%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? + Key + Clau - Save changes? - Voleu desar els canvis? + Value + Valor + + + Entry - "%1" was modified. -Save changes? - "%1" ha canviat. -Voleu desar els canvis? + %1 - Clone + + + + EntryAttachmentsModel - Writing the database failed. - Ha fallat l'escriptura en la base de dades. + Name + Nom - Passwords - Contrasenyes + Size + + + + EntryAttachmentsWidget - Save database as - Desa la base de dades com a + Form + - Export database to CSV file - Exporta la base de dades a un fitxer CSV + Add + Afegiu - Writing the CSV file failed. - Ha fallat l'escriptura al fitxer CSV. + Remove + Suprimiu - New database - Nova base de dades + Open + Obre - locked - bloquejat + Save + Desa - Lock database - Bloqueja la base de dades + Select files + - - 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. + + Are you sure you want to remove %n attachment(s)? + - 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. + Save attachments + - Disable safe saves? + Unable to create directory: +%1 - 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? + Are you sure you want to overwrite the existing file "%1" with the attachment? - - - DatabaseWidget - Searching... - Cercant... + Confirm overwrite + - Change master key - Canvia la clau mestra + Unable to save attachments: +%1 + - Delete entry? - Suprimir l'entrada? + Unable to open attachment: +%1 + - Do you really want to delete the entry "%1" for good? - Realment voleu suprimir l'entrada "%1" per sempre? + Unable to open attachments: +%1 + - Delete entries? - Suprimir les entrades? + Confirm remove + - - Do you really want to delete %1 entries for good? - Realment voleu suprimir %1 entrades per sempre? + + Unable to open file(s): +%1 + + + + EntryAttributesModel - Move entry to recycle bin? - Moure l'entrada a la Paperera? + Name + Nom + + + EntryHistoryModel - Do you really want to move entry "%1" to the recycle bin? - Realment voleu moure l'entrada "%1" a la paperera? + Last modified + Darrera modificació - 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? + Title + Títol - Execute command? - Execute l'ordre? + Username + Nom d'usuari - Do you really want to execute the following command?<br><br>%1<br> - Voleu executar la següent ordre? <br><br>%1<br> + URL + URL + + + EntryModel - Remember my choice - Recordar la meva elecció + Ref: + Reference abbreviation + Ref: - Delete group? - Voleu suprimir el grup? + Group + Grup - Do you really want to delete the group "%1" for good? - Realment voleu suprimir el grup "%1" per sempre? + Title + Títol - Unable to calculate master key - No es pot calcular la clau mestra + Username + Nom d'usuari - No current database. - Cap base de dades actual. + URL + URL - No source database, nothing to do. - Cap base de dades, res a veure. + Never + Mai - Search Results (%1) - Resultats de la cerca (%1) + Password + Contrasenya - No Results - No hi ha resultats + Notes + Notes - File has changed - + Expires + Expira - The database file has changed. Do you want to load the changes? - El fitxer de base de dades ha canviat. Voleu carregar els canvis? + Created + Creat - Merge Request - Petició de combinació + Modified + Modificat - The database file has changed and you have unsaved changes. -Do you want to merge your changes? - + Accessed + Accedit - 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. + Attachments + Fitxers adjunts - Empty recycle bin? - Buida la paperera? + Yes + - 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? + TOTP + - DetailsWidget + EntryPreviewWidget Generate TOTP Token @@ -1195,28 +2405,20 @@ Do you want to merge your changes? General - Password - Contrasenya + Username + Nom d'usuari - URL - URL + Password + Contrasenya Expiration Venciment - Username - Nom d'usuari - - - Autotype - - - - Searching - S'està cercant + URL + URL Attributes @@ -1230,6 +2432,10 @@ Do you want to merge your changes? Notes Notes + + Autotype + + Window Finestra @@ -1238,6 +2444,10 @@ Do you want to merge your changes? Sequence Seqüència + + Searching + S'està cercant + Search Cerca @@ -1255,2694 +2465,2807 @@ Do you want to merge your changes? - Disabled - Inhabilitat + <b>%1</b>: %2 + attributes line + Enabled Habilitat + + Disabled + Inhabilitat + + + Share + + - EditEntryWidget + EntryView - Entry - Entrada + Customize View + - Advanced - Avançat + Hide Usernames + - Icon - Icona + Hide Passwords + - Auto-Type - Compleció automàtica + Fit to window + - Properties - Propietats + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + + + + + Group + + Recycle Bin + Paperera + + + [empty] + group has no children + + + + + HostInstaller + + KeePassXC: Cannot save file! + + + + Cannot save the native messaging script file. + + + + + KMessageWidget + + &Close + &Tancar - History - Historial + Close message + Tancar missatge + + + Kdbx3Reader - SSH Agent - Agent SSH + Unable to calculate master key + No es pot calcular la clau mestra - n/a - + Unable to issue challenge-response. + Incapaç d'emetre pregunta-resposta. - (encrypted) - (xifrat) + Wrong key or database file is corrupt. + Clau incorrecta o fitxer de base de dades corrupte. - Select private key + missing database headers - File too large to be a private key + Header doesn't match hash - Failed to open private key + Invalid header id size - Entry history - Historial de l'entrada + Invalid header field length + - Add entry - Afegiu una entrada + Invalid header data length + + + + Kdbx3Writer - Edit entry - Edita l'entrada + Unable to issue challenge-response. + Incapaç d'emetre pregunta-resposta. - Different passwords supplied. - Les contrasenyes no coincideixen. + Unable to calculate master key + No es pot calcular la clau mestra + + + Kdbx4Reader - New attribute - Nou atribut + missing database headers + - Confirm Remove - Confirma la supressió + Unable to calculate master key + No es pot calcular la clau mestra - Are you sure you want to remove this attribute? - Esteu segur que voleu suprimir aquest atribut? + Invalid header checksum size + - [PROTECTED] + Header SHA256 mismatch - Press reveal to view or edit + Wrong key or database file is corrupt. (HMAC mismatch) - Tomorrow - Demà - - - %n week(s) - %n setmanes%n setmana(es) - - - %n month(s) - %n mes (OS)%n mes(os) + Unknown cipher + - 1 year - 1 any + Invalid header id size + - Apply generated password? + Invalid header field length - Do you want to apply the generated password to this entry? + Invalid header data length - Entry updated successfully. + Failed to open buffer for KDF parameters in header - - - EditEntryWidgetAdvanced - Additional attributes - Atributs addicionals + Unsupported key derivation function (KDF) or invalid parameters + - Add - Afegiu + Legacy header fields found in KDBX4 file. + - Remove - Suprimiu + Invalid inner header id size + - Edit Name - Edita el nom + Invalid inner header field length + - Protect - Protegeix + Invalid inner header binary size + - Reveal - Revela + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + - Attachments - Fitxers adjunts + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + - Foreground Color: + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data - Background Color: + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data - - - EditEntryWidgetAutoType - Enable Auto-Type for this entry - Permetre la compleció automàtica per a aquesta entrada + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + - Inherit default Auto-Type sequence from the &group - Hereta la seqüència de compleció automàtica per defecte de &grup + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + - &Use custom Auto-Type sequence: - &Utilitza la seqüència personalitzada per a la compleció automàtica: + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + - Window Associations - Associacions de finestra + 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 + - Window title: - Títol de la finestra: + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + - Use a specific sequence for this association: + Invalid variant map field type size + Translation: variant map = data structure for storing meta data - EditEntryWidgetHistory + Kdbx4Writer - Show - Mostra + Invalid symmetric cipher algorithm. + - Restore - Restaura + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + - Delete - Suprimeix + Unable to calculate master key + No es pot calcular la clau mestra - Delete all - Suprimeix tots + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + - EditEntryWidgetMain + KdbxReader - URL: - URL: + Unsupported cipher + - Password: - Contrasenya: + Invalid compression flags length + - Repeat: - Repeteix: + Unsupported compression algorithm + - Title: - Títol: + Invalid master seed size + - Notes - Notes + Invalid transform seed size + - Presets - Configuracions + Invalid transform rounds size + - Toggle the checkbox to reveal the notes section. + Invalid start bytes size - Username: - Nom d'usuari: + Invalid random stream id size + - Expires - Expira + Invalid inner random stream cipher + - - - EditEntryWidgetSSHAgent - Form + Not a KeePass database. + No és una base de dades 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. + El fitxer seleccionat és una base de dades KeePass 1 antiga (.kdb). + +Podeu importar-la fent clic a la base de dades > "importar base de dades KeePass 1...". +Es tracta d'una migració unidireccional. No obrir la base de dades importada amb la antiga versió KeePassX 0.4. + + + Unsupported KeePass 2 database version. - Remove key from agent after + Invalid cipher uuid length: %1 (length=%2) - seconds + Unable to parse UUID: %1 - Fingerprint + Failed to read database file. + + + KdbxXmlReader - Remove key from agent when database is closed/locked + XML parsing failure: %1 - Public key + No root group - Add key to agent when database is opened/unlocked + Missing icon uuid or data - Comment + Missing custom data key or value - Decrypt - Desxifrar + Multiple group elements + - n/a + Null group uuid + + + + Invalid group icon number - Copy to clipboard - Copia al porta-retalls + Invalid EnableAutoType value + - Private key + Invalid EnableSearching value - External file + No group uuid found - Browse... - Button for opening file dialog - Navega... + Null DeleteObject uuid + - Attachment + Missing DeletedObject uuid or time - Add to agent + Null entry uuid - Remove from agent + Invalid entry icon number - Require user confirmation when this key is used + History element in history entry - - - EditGroupWidget - Group - Grup + No entry uuid found + - Icon - Icona + History element with different uuid + - Properties - Propietats + Duplicate custom attribute found + - Add group - Afegeix un grup + Entry string key or value missing + - Edit group - Edita el grup + Duplicate attachment found + - Enable - Habilita + Entry binary key or value missing + - Disable - Inhabilita + Auto-type association window or sequence missing + - Inherit from parent group (%1) - Hereta de grup pare (%1) + Invalid bool value + - - - EditGroupWidgetMain - Name - Nom + Invalid date time value + - Notes - Notes + Invalid color value + - Expires - Expira + Invalid color rgb part + - Search - Cerca + Invalid number value + - Auto-Type - Compleció automàtica + Invalid uuid value + - &Use default Auto-Type sequence of parent group - &Utilitza seqüència per defecte del grup pare per a lacompleció automàtica + Unable to decompress binary + Translator meant is a binary data inside an entry + - Set default Auto-Type se&quence - Estableix la se&qüència per defecte per a la compleció automàtica + XML error: +%1 +Line %2, column %3 + - EditWidgetIcons - - &Use default icon - &Utilitzar icona per defecte - - - Use custo&m icon - Utilitza una icona personalitzada - + KeePass1OpenWidget - Add custom icon - Afegeix una icona personalitzada + Import KeePass1 database + Importar base de dades KeePass1 - Delete custom icon - Suprimeix la icona personalitzada + Unable to open the database. + No es pot obrir la base de dades. + + + KeePass1Reader - Download favicon - Descarregua el favicon + Unable to read keyfile. + No es pot llegir el fitxer de claus. - Unable to fetch favicon. - No es pot descarregar el favicon. + Not a KeePass database. + No és una base de dades KeePass. - Hint: You can enable Google as a fallback under Tools>Settings>Security - Consell: Podeu activar Google com a recurs alternatiu a Eines > Configuració > Seguretat + Unsupported encryption algorithm. + Algoritme d'encriptació no admès. - Images - Imatges + Unsupported KeePass database version. + Versió de base de dades KeePass no admesa. - All files - Tots els fitxers + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + - Select Image - Seleccioneu la imatge + Invalid number of groups + - Can't read icon - No es pot llegir la icona + Invalid number of entries + - Custom icon already exists - Ja existeix una icona personalitzada + Invalid content hash size + - Confirm Delete - Confirma la supressió + Invalid transform seed size + - 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? + Invalid number of transform rounds + - - - EditWidgetProperties - Created: - Creat: + Unable to construct group tree + - Modified: - Modificat: + Root + Arrel - Accessed: - Accedit: + Unable to calculate master key + No es pot calcular la clau mestra - Uuid: - UUID: + Wrong key or database file is corrupt. + Clau incorrecta o fitxer de base de dades corrupte. - Plugin Data + Key transformation failed - Remove - Suprimiu - - - Delete plugin data? + Invalid group field type number - Do you really want to delete the selected plugin data? -This may cause the affected plugins to malfunction. + Invalid group field size - Key + Read group field data doesn't match size - Value + Incorrect group id field size - - - Entry - - Clone - Suffix added to cloned entries - -Clon + Incorrect group creation time field size + - - - EntryAttachmentsModel - Name - Nom + Incorrect group modification time field size + - Size + Incorrect group access time field size - - - EntryAttachmentsWidget - Form + Incorrect group expiry time field size - Add - Afegiu + Incorrect group icon field size + - Remove - Suprimiu + Incorrect group level field size + - Open - Obre + Invalid group field type + - Save - Desa + Missing group id or level + - Select files + Missing entry field type number - - Are you sure you want to remove %n attachment(s)? - - - Confirm Remove - Confirma la supressió + Invalid entry field size + - Save attachments + Read entry field data doesn't match size - Unable to create directory: -%1 + Invalid entry uuid field size - Are you sure you want to overwrite the existing file "%1" with the attachment? + Invalid entry group id field size - Confirm overwrite + Invalid entry icon field size - Unable to save attachments: -%1 + Invalid entry creation time field size - Unable to open attachment: -%1 + Invalid entry modification time field size - Unable to open attachments: -%1 + Invalid entry expiry time field size - Unable to open files: -%1 + Invalid entry field type - - - EntryAttributesModel - Name - Nom + unable to seek to content position + - EntryHistoryModel - - Last modified - Darrera modificació - + KeeShare - Title - Títol + Disabled share + - - Username - Nom d'usuari + + Import from + - URL - URL + Export to + - - - EntryModel - Ref: - Reference abbreviation - Ref: + Synchronize with + - Group - Grup + Disabled share %1 + - Title - Títol + Import from share %1 + - Username - Nom d'usuari + Export to share %1 + - URL - URL + Synchronize with share %1 + + + + KeyComponentWidget - Never - Mai + Key Component + - Password - Contrasenya + Key Component Description + - Notes - Notes + Cancel + Cancel·lar - Expires - Expira + Key Component set, click to change or remove + - Created - Creat + Add %1 + Add a key component + - Modified - Modificat + Change %1 + Change a key component + - Accessed - Accedit + Remove %1 + Remove a key component + - Attachments - Fitxers adjunts + %1 set, click to change or remove + Change or remove a key component + - EntryView + KeyFileEditWidget - Customize View - + Browse + Navega - Hide Usernames - + Generate + Genera - Hide Passwords + Key File - Fit to window + <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> - Fit to contents + Legacy key file format - Reset to defaults + 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. - Attachments (icon) + Error loading the key file '%1' +Message: %2 - - - Group - Recycle Bin - Paperera + Key files + Fitxers de clau - - - HostInstaller - KeePassXC: Cannot save file! + All files + Tots els fitxers + + + Create Key File... + Crea un arxiu clau... + + + Error creating key file - Cannot save the native messaging script file. + Unable to create key file: %1 - - - HttpPasswordGeneratorWidget - Length: - Longitud: + Select a key file + Seleccioneu un arxiu clau + + + MainWindow - Character Types - Tipus de caràcter + &Database + &Base de dades - Upper Case Letters - Lletra majúscula + &Recent databases + Bases de dades &recents - A-Z - A-Z + &Help + &Ajuda - Lower Case Letters - Lletra minúscula + E&ntries + E&ntrades - a-z - a-z + &Groups + &Grups - Numbers - Números + &Tools + &Eines - 0-9 - 0-9 + &Quit + Tanca - Special Characters - Caràcters especials + &About + &Sobre - /*_& ... - /*_& ... + &Open database... + &Obre una base de dades... - Exclude look-alike characters - Excloure caràcters d'aspecte semblant + &Save database + &Desa la base de dades - Ensure that the password contains characters from every group - Assegurar-se que la contrasenya conté caràcters de cada grup + &Close database + Tanca base de dades - Extended ASCII - ASCII estès + &Delete entry + &Esborra l'entrada - - - KMessageWidget - &Close - &Tancar + &Edit group + &Edita el grup - Close message - Tancar missatge + &Delete group + &Suprimeix el grup - - - Kdbx3Reader - Unable to calculate master key - No es pot calcular la clau mestra + Sa&ve database as... + &Desa la base de dades com a... - Unable to issue challenge-response. - Incapaç d'emetre pregunta-resposta. + Database settings + Configuració de la base de dades - Wrong key or database file is corrupt. - Clau incorrecta o fitxer de base de dades corrupte. + &Clone entry + &Clona l'entrada - - - Kdbx3Writer - Unable to issue challenge-response. - Incapaç d'emetre pregunta-resposta. + Copy &username + Còpia el nom d'&usuari - Unable to calculate master key - No es pot calcular la clau mestra + Copy username to clipboard + Còpia el nom d'usuari al porta-retalls - - - Kdbx4Reader - missing database headers - + Copy password to clipboard + Còpia la contrasenya al porta-retalls - Unable to calculate master key - No es pot calcular la clau mestra + &Settings + &Conficuració - Invalid header checksum size - + Password Generator + Generador de contrasenyes - Header SHA256 mismatch - + &Lock databases + &bloqueja la bases de dades - Wrong key or database file is corrupt. (HMAC mismatch) - + &Title + &Títol - Unknown cipher + Copy title to clipboard - Invalid header id size - + &URL + &URL - Invalid header field length + Copy URL to clipboard - Invalid header data length - + &Notes + &Notes - Failed to open buffer for KDF parameters in header + Copy notes to clipboard - Unsupported key derivation function (KDF) or invalid parameters - + &Export to CSV file... + &Exporta a fitxer CSV. - Legacy header fields found in KDBX4 file. - + Set up TOTP... + Configura TOTP... - Invalid inner header id size - + Copy &TOTP + Còpia &TOTP - Invalid inner header field length + E&mpty recycle bin - Invalid inner header binary size - + Clear history + Esborra l'historial - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data - + Access error for config file %1 + Error d'accés al fitxer de configuració %1 - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data - + Settings + Configuració - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data - + Toggle window + Activar finestra - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data - + Quit KeePassXC + Tanca KeePassXC - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data - + Please touch the button on your YubiKey! + Per favor, toqueu el botó en el seu YubiKey! - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data + 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. - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data + &Donate - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data + Report a &bug - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data + 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. - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data + &Import - Invalid variant map entry type - Translation: variant map = data structure for storing meta data + Copy att&ribute... - Invalid variant map field type size - Translation: variant map = data structure for storing meta data + TOTP... - - - Kdbx4Writer - Invalid symmetric cipher algorithm. + &New database... - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher + Create a new database - Unable to calculate master key - No es pot calcular la clau mestra + &Merge from database... + - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data + Merge from another KDBX database - - - KdbxReader - Invalid cipher uuid length + &New entry - Unsupported cipher + Add a new entry - Invalid compression flags length + &Edit entry - Unsupported compression algorithm + View or edit entry - Invalid master seed size + &New group - Invalid transform seed size + Add a new group - Invalid transform rounds size + Change master &key... - Invalid start bytes size + &Database settings... - Invalid random stream id size + Copy &password - Invalid inner random stream cipher + Perform &Auto-Type - Not a KeePass database. - No és una base de dades KeePass. + Open &URL + - 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. - El fitxer seleccionat és una base de dades KeePass 1 antiga (.kdb). - -Podeu importar-la fent clic a la base de dades > "importar base de dades KeePass 1...". -Es tracta d'una migració unidireccional. No obrir la base de dades importada amb la antiga versió KeePassX 0.4. + KeePass 1 database... + - Unsupported KeePass 2 database version. + Import a KeePass 1 database - - - KdbxXmlReader - XML parsing failure: %1 + CSV file... - No root group + Import a CSV file - Missing icon uuid or data + Show TOTP... - Missing custom data key or value + Show TOTP QR Code... - Multiple group elements + Check for Updates... - Null group uuid + Share entry - Invalid group icon number + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. - Invalid EnableAutoType value + Check for updates on startup? - Invalid EnableSearching value + Would you like KeePassXC to check for updates on startup? - No group uuid found + You can always check for updates manually from the application menu. + + + Merger - Null DeleteObject uuid + Creating missing %1 [%2] - Missing DeletedObject uuid or time + Relocating %1 [%2] - Null entry uuid + Overwriting %1 [%2] - Invalid entry icon number + older entry merged from database "%1" - History element in history entry + Adding backup for older target %1 [%2] - No entry uuid found + Adding backup for older source %1 [%2] - History element with different uuid + Reapplying older target entry on top of newer source %1 [%2] - Unable to decrypt entry string + Reapplying older source entry on top of newer target %1 [%2] - Duplicate custom attribute found + Synchronizing from newer source %1 [%2] - Entry string key or value missing + Synchronizing from older source %1 [%2] - Duplicate attachment found + Deleting child %1 [%2] - Entry binary key or value missing + Deleting orphan %1 [%2] - Auto-type association window or sequence missing + Changed deleted objects - Invalid bool value + Adding missing icon %1 + + + NewDatabaseWizard - Invalid date time value + Create a new KeePassXC database... - Invalid color value - + Root + Root group + Arrel + + + NewDatabaseWizardPage - Invalid color rgb part + WizardPage - Invalid number value + En&cryption Settings - Invalid uuid value + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Unable to decompress binary - Translator meant is a binary data inside an entry + Advanced Settings + Configuració avançada + + + Simple Settings - KeePass1OpenWidget + NewDatabaseWizardPageEncryption - Import KeePass1 database - Importar base de dades KeePass1 + Encryption Settings + Opcions de xifrat - Unable to open the database. - No es pot obrir la base de dades. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + - KeePass1Reader + NewDatabaseWizardPageMasterKey - Unable to read keyfile. - No es pot llegir el fitxer de claus. + Database Master Key + - Not a KeePass database. - No és una base de dades KeePass. + A master key known only to you protects your database. + + + + NewDatabaseWizardPageMetaData - Unsupported encryption algorithm. - Algoritme de xifratge no admès. + General Database Information + - Unsupported KeePass database version. - Versió de base de dades KeePass no admesa. + Please fill in the display name and an optional description for your new database: + + + + OpenSSHKey - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher + Invalid key file, expecting an OpenSSH key - Invalid number of groups + PEM boundary mismatch - Invalid number of entries + Base64 decoding failed - Invalid content hash size + Key file way too small. - Invalid transform seed size + Key file magic header id invalid - Invalid number of transform rounds + Found zero keys - Unable to construct group tree + Failed to read public key. - Root - Arrel + Corrupted key file, reading private key failed + - Unable to calculate master key - No es pot calcular la clau mestra + No private key payload to decrypt + - Wrong key or database file is corrupt. - Clau incorrecta o fitxer de base de dades corrupte. + Trying to run KDF without cipher + - Key transformation failed + Passphrase is required to decrypt this key - Invalid group field type number + Key derivation failed, key file corrupted? - Invalid group field size + Decryption failed, wrong passphrase? - Read group field data doesn't match size + Unexpected EOF while reading public key - Incorrect group id field size + Unexpected EOF while reading private key - Incorrect group creation time field size + Can't write public key as it is empty - Incorrect group modification time field size + Unexpected EOF when writing public key - Incorrect group access time field size + Can't write private key as it is empty - Incorrect group expiry time field size + Unexpected EOF when writing private key - Incorrect group icon field size + Unsupported key type: %1 - Incorrect group level field size + Unknown cipher: %1 - Invalid group field type + Cipher IV is too short for MD5 kdf - Missing group id or level + Unknown KDF: %1 - Missing entry field type number + Unknown key type: %1 + + + PasswordEditWidget - Invalid entry field size + Enter password: + Introduïu la contrasenya: + + + Confirm password: - Read entry field data doesn't match size + Password + Contrasenya + + + <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> - Invalid entry uuid field size + Passwords do not match. - Invalid entry group id field size + Generate master password + + + PasswordGeneratorWidget + + %p% + %p % + + + Password: + Contrasenya: + + + strength + Password strength + força + + + entropy + entropia + + + Password + Contrasenya + + + Character Types + Tipus de caràcter + + + Upper Case Letters + Lletra majúscula + + + Lower Case Letters + Lletra minúscula + + + Numbers + Números + + + Special Characters + Caràcters especials + + + Extended ASCII + ASCII estès + + + Exclude look-alike characters + Excloure caràcters d'aspecte semblant + + + Pick characters from every group + Tria caràcters de tots els grups + + + &Length: + &Longitud: + + + Passphrase + Contrasenya + + + Wordlist: + Llista de paraules: + + + Word Separator: + Separador de paraula: + - Invalid entry icon field size - + Copy + Còpia - Invalid entry creation time field size - + Accept + Accepta - Invalid entry modification time field size - + Close + Tanca - Invalid entry expiry time field size - + Entropy: %1 bit + Entropia: %1 bit(s) - Invalid entry field type - + Password Quality: %1 + Qualitat de la contrasenya: %1 - - - KeePass2 - AES: 256-bit - + Poor + Password quality + Pobre - Twofish: 256-bit - + Weak + Password quality + Feble - ChaCha20: 256-bit - + Good + Password quality + Bona - AES-KDF (KDBX 4) - + Excellent + Password quality + Excel·lent - AES-KDF (KDBX 3.1) + ExtendedASCII - Argon2 (KDBX 4 – recommended) + Switch to advanced mode - - - Main - - 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. + Advanced + Avançat - Another instance of KeePassXC is already running. - Ja s'està executant una altra instància de KeePassXC. + Upper Case Letters A to F + - Fatal error while testing the cryptographic functions. - Error mentre es provava les funcions criptogràfiques. + A-Z + A-Z - KeePassXC - Error - KeePassXC - Error + Lower Case Letters A to F + - - - MainWindow - &Database - &Base de dades + a-z + a-z - &Recent databases - Bases de dades &recents + 0-9 + 0-9 - Import - Importa + Braces + - &Help - &Ajuda + {[( + - E&ntries - E&ntrades + Punctuation + - Copy att&ribute to clipboard - Copia l'at&ribut a porta-retalls + .,:; + - Time-based one-time password + Quotes - &Groups - &Grups + " ' + - &Tools - &Eines + Math + - &Quit - Tanca + <*+!?= + - &About - &Sobre + Dashes + - &Open database... - &Obre una base de dades... + \_|-/ + - &Save database - &Desa la base de dades + Logograms + - &Close database - Tanca la base de dades + #$%&&@^`~ + - &New database - &Nova base de dades + Switch to simple mode + - Merge from KeePassX database - Combina base de dades KeePassX + Simple + - &Add new entry - &Afegir entrada nova + Character set to exclude from generated password + - &View/Edit entry - &Mostra/Edita l'entrada + Do not include: + - &Delete entry - &Esborra l'entrada + Add non-hex letters to "do not include" list + - &Add new group - &Afegeix un nou grup + Hex + - &Edit group - &Edita el grup + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - &Delete group - &Suprimeix el grup + Word Co&unt: + - Sa&ve database as... - &Desa la base de dades com a... + Regenerate + + + + QApplication - Change &master key... - Canvia la clau &mestra... + KeeShare + + + + QFileDialog - &Database settings - &Configuració de la base de dades + Select + + + + QMessageBox - Database settings - Configuració de la base de dades + Overwrite + - &Clone entry - &Clona l'entrada + Delete + Suprimeix - &Find - &Cercar + Move + - Copy &username - Copia el nom d'&usuari + Empty + - Copy username to clipboard - Copia el nom d'usuari al porta-retalls + Remove + Suprimiu - Cop&y password - Còpia la contrasen&ya + Skip + - Copy password to clipboard - Copia la contrasenya al porta-retalls + Disable + Inhabilita - &Settings - &Configuració + Merge + + + + QObject - Password Generator - Generador de contrasenyes + Database not opened + - &Perform Auto-Type - Realitza compleció automàtica + Database hash not available + - &Open URL - &Obre URL + Client public key not received + - &Lock databases - &Bloqueja la bases de dades + Cannot decrypt message + - &Title - &Títol + Action cancelled or denied + - Copy title to clipboard + KeePassXC association failed, try again - &URL - &URL + Encryption key is not recognized + - Copy URL to clipboard + Incorrect action - &Notes - &Notes + Empty message received + - Copy notes to clipboard + No URL provided - &Export to CSV file... - &Exporta a fitxer CSV. + No logins found + - Import KeePass 1 database... - Importa base de dades KeePass 1... + Unknown error + Error desconegut - Import CSV file... - Importa fitxer CSV... + Add a new entry to a database. + - Re&pair database... - Re&para la base de dades... + Path of the database. + Camí de la base de dades. - Show TOTP - Mostra TOTP + Key file of the database. + - Set up TOTP... - Configura TOTP... + path + - Copy &TOTP - Còpia &TOTP + Username for the entry. + - E&mpty recycle bin + username - Clear history - Esborra l'historial + URL for the entry. + - Access error for config file %1 - Error d'accés al fitxer de configuració %1 + URL + URL - <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> + Prompt for the entry's password. - read-only - Només de lectura - - - Settings - Configuració + Generate a password for the entry. + - Toggle window - Activar finestra + Length for the generated password. + - Quit KeePassXC - Tanca KeePassXC + length + - KeePass 2 Database - Base de dades de KeePass 2 + Path of the entry to add. + - All files - Tots els fitxers + Copy an entry's password to the clipboard. + - Open database - Obre la base de dades + Path of the entry to clip. + clip = copy to clipboard + - Save repaired database - Desa base de dades reparada + Timeout in seconds before clearing the clipboard. + - Writing the database failed. - Ha fallat l'escriptura en la base de dades. + Edit an entry. + - Please touch the button on your YubiKey! - Per favor, toqueu el botó en el seu YubiKey! + Title for the entry. + - 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. + title - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key + Path of the entry to edit. - PEM boundary mismatch + Estimate the entropy of a password. - Base64 decoding failed + Password for which to estimate the entropy. - Key file way too small. + Perform advanced analysis on the password. - Key file magic header id invalid - + Extract and print the content of a database. + Extrau imprimeix el contingut d'una base de dades. - Found zero keys - + Path of the database to extract. + Camí de la base de dades a extreure. - Failed to read public key. + Insert password to unlock %1: - Corrupted key file, reading private key failed + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - No private key payload to decrypt + + +Available commands: + - Trying to run KDF without cipher - + Name of the command to execute. + Nom de l'ordre a executar. - Passphrase is required to decrypt this key - + List database entries. + Llista les entrades de la base de dades. - Key derivation failed, key file corrupted? - + Path of the group to list. Default is / + Camí del grup a llistar. Per defecte és / - Decryption failed, wrong passphrase? + Find entries quickly. - Unexpected EOF while reading public key + Search term. - Unexpected EOF while reading private key - + Merge two databases. + Fusiona dues bases de dades - Can't write public key as it is empty - + Path of the database to merge into. + Camí de la base de dades origen a fusionar. - Unexpected EOF when writing public key - + Path of the database to merge from. + Camí de la base de dades de destí a fusionar. - Can't write private key as it is empty + Use the same credentials for both database files. - Unexpected EOF when writing private key + Key file of the database to merge from. - Unsupported key type: %1 + Show an entry's information. - Unknown cipher: %1 + 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. - Cipher IV is too short for MD5 kdf + attribute - Unknown KDF: %1 - + Name of the entry to show. + Nom de l'entrada a mostrar. - Unknown key type: %1 - + NULL device + Dispositiu nul - - - OptionDialog - Dialog - Diàleg + error reading from device + error de lectura del dispositiu - 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 + malformed string + cadena mal formada - Enable KeePassHTTP server - Habilita el servidor KeePassHTTP + missing closing quote + falta la cometa de tancament - General - General + Group + Grup - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - M&ostra una notificació quan es demanen credencials + Title + Títol - 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. + Username + Nom d'usuari - &Return only best matching entries - Retorna només les millors coincidències de les entrades + Password + Contrasenya - Re&quest to unlock the database if it is locked - Sol·licitar el desbloqueig de la base de dades si està blocada + Notes + Notes - 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: / /,...). + Last Modified + Darrera modificació - &Match URL schemes - Torna les coincidències amb patrons URL + Created + Creat - Sort matching entries by &username - Ordena les entrades coincidents per nom d'&usuari + Browser Integration + Integració amb el navegador - Sort &matching entries by title - Ordena les entrades coincidents per títol + YubiKey[%1] Challenge Response - Slot %2 - %3 + Resposta de YubiKey [%1] - Slot %2 - %3 - R&emove all shared encryption keys from active database - Suprimeix totes les claus de xifratge compartides de la base de dades activa + Press + Prem - 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 + Passive + Passiu - Password Generator - Generador de contrasenyes + SSH Agent + Agent SSH - Advanced - Avançat + Generate a new random diceware passphrase. + - Always allow &access to entries - Permet l'&accés a les entrades sempre + Word count for the diceware passphrase. + - Always allow &updating entries - Permet l'act&ualització de les entrades, sempre + Wordlist for the diceware generator. +[Default: EFF English] + - 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. + Generate a new random password. + - Searc&h in all opened databases for matching entries - &Cerca en totes les bases de dades obertes, entrades coincidents + Invalid value for password length %1. + - Automatically creating or updating string fields is not supported. - L'actualització o creació de camps de test no està suportada. + Could not create entry with path %1. + - &Return advanced string fields which start with "KPH: " - Retorna camps avançats de text que comencen amb "KPH: " + Enter password for new entry: + - HTTP Port: - HTTP Port: + Writing the database failed %1. + - Default port: 19455 - Port per defecte: 19455 + Successfully added entry %1. + - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC escolta a aquest port en 127.0.0.1 + Copy the current TOTP to the clipboard. + - <b>Warning:</b> The following options can be dangerous! - <b>Atenció:</b> Canviar les següents opcions és perillós! + Invalid timeout value %1. + - <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> + Entry %1 not found. - Cannot bind to privileged ports - No podeu utilitzar ports privilegiats + Entry with path %1 has no TOTP set up. + - 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. + Entry's current TOTP copied to the clipboard! + - - - PasswordGeneratorWidget - %p% - %p % + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - Password: - Contrasenya: + Clipboard cleared! + - strength - Password strength - força + Silence password prompt and other secondary outputs. + - entropy - entropia + count + CLI parameter + - Password - Contrasenya + Invalid value for password length: %1 + - Character Types - Tipus de caràcter + Could not find entry with path %1. + - Upper Case Letters - Lletra majúscula + Not changing any field for entry %1. + - Lower Case Letters - Lletra minúscula + Enter new password for entry: + - Numbers - Números + Writing the database failed: %1 + - Special Characters - Caràcters especials + Successfully edited entry %1. + - Extended ASCII - ASCII estès + Length %1 + - Exclude look-alike characters - Excloure caràcters d'aspecte semblant + Entropy %1 + - Pick characters from every group - Tria caràcters de tots els grups + Log10 %1 + - &Length: - &Longitud: + Multi-word extra bits %1 + - Passphrase - Contrasenya + Type: Bruteforce + - Wordlist: - Llista de paraules: + Type: Dictionary + - Word Count: - Nombre de paraules: + Type: Dict+Leet + - Word Separator: - Separador de paraula: + Type: User Words + - Generate - Genera + Type: User+Leet + - Copy - Còpia + Type: Repeated + - Accept - Accepta + Type: Sequence + - Close - Tanca + Type: Spatial + - Apply - Aplica + Type: Date + - Entropy: %1 bit - Entropia: %1 bit(s) + Type: Bruteforce(Rep) + - Password Quality: %1 - Qualitat de la contrasenya: %1 + Type: Dictionary(Rep) + - Poor - Password quality - Pobre + Type: Dict+Leet(Rep) + - Weak - Password quality - Feble + Type: User Words(Rep) + - Good - Password quality - Bona + Type: User+Leet(Rep) + - Excellent - Password quality - Excel·lent + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + - - - QObject - Database not opened + *** Password length (%1) != sum of length of parts (%2) *** - Database hash not available + Failed to load key file %1: %2 - Client public key not received + File %1 does not exist. - Cannot decrypt message + Unable to open file %1. - Timeout or cannot connect to KeePassXC + Error while reading the database: +%1 - Action cancelled or denied + Error while parsing the database: +%1 - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + Length of the generated password - KeePassXC association failed, try again + Use lowercase characters - Key change was not successful + Use uppercase characters - Encryption key is not recognized + Use numbers. - No saved databases found + Use special characters - Incorrect action + Use extended ASCII - Empty message received + Exclude character set - No URL provided + chars - No logins found + Exclude similar looking characters - Unknown error + Include characters from every selected group - Add a new entry to a database. + Recursively list the elements of the group. - Path of the database. - Camí de la base de dades. + Cannot find group %1. + - Key file of the database. + Error reading merge file: +%1 - path + Unable to save database to file : %1 - Username for the entry. + Unable to save database to file: %1 - username + Successfully recycled entry %1. - URL for the entry. + Successfully deleted entry %1. - URL - URL + Show the entry's current TOTP. + - Prompt for the entry's password. + ERROR: unknown attribute %1. - Generate a password for the entry. + No program defined for clipboard manipulation - Length for the generated password. + Unable to start program %1 - length + file empty - Path of the entry to add. + %1: (row, col) %2,%3 - Copy an entry's password to the clipboard. + AES: 256-bit - Path of the entry to clip. - clip = copy to clipboard + Twofish: 256-bit - Timeout in seconds before clearing the clipboard. + ChaCha20: 256-bit - Edit an entry. + Argon2 (KDBX 4 – recommended) - Title for the entry. + AES-KDF (KDBX 4) - title + AES-KDF (KDBX 3.1) - Path of the entry to edit. + Invalid Settings + TOTP - Estimate the entropy of a password. + Invalid Key + TOTP - Password for which to estimate the entropy. + Message encryption failed. - Perform advanced analysis on the password. + No groups found - Extract and print the content of a database. - Extrau imprimeix el contingut d'una base de dades. + Create a new database. + - Path of the database to extract. - Camí de la base de dades a extreure. + File %1 already exists. + - Insert password to unlock %1: + Loading the key file failed - Failed to load key file %1 : %2 + No key is set. Aborting database creation. - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + Failed to save the database: %1. - - -Available commands: - + Successfully created new database. - Name of the command to execute. - Nom de l'ordre a executar. + Insert password to encrypt database (Press enter to leave blank): + - List database entries. - Llista les entrades de la base de dades. + Creating KeyFile %1 failed: %2 + - Path of the group to list. Default is / - Camí del grup a llistar. Per defecte és / + Loading KeyFile %1 failed: %2 + - Find entries quickly. + Remove an entry from the database. - Search term. + Path of the entry to remove. - Merge two databases. - Fusiona dues bases de dades + 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. - Path of the database to merge into. - Camí de la base de dades origen a fusionar. + 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. - Path of the database to merge from. - Camí de la base de dades de destí a fusionar. + KeePassXC - cross-platform password manager + KeePassXC - gestor de contrasenyes multi-plataforma - Use the same credentials for both database files. - + filenames of the password databases to open (*.kdbx) + Noms de les bases de dades de contrasenya per a obrir (*.kdbx) - Key file of the database to merge from. - + path to a custom config file + camí cap a un fitxer personalitzat de configuració - Show an entry's information. - + key file of the database + Arxiu clau de la base de dades - 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. - + read password of the database from stdin + llegiu la contrasenya de la base de dades des de l'entrada estàndard (stdin) - attribute + Parent window handle - Name of the entry to show. - Nom de l'entrada a mostrar. + Another instance of KeePassXC is already running. + Ja s'està executant una altra instància de KeePassXC. - NULL device - Dispositiu nul + Fatal error while testing the cryptographic functions. + Error mentre es provava les funcions criptogràfiques. - error reading from device - error de lectura del dispositiu + KeePassXC - Error + KeePassXC - Error - file empty ! - - fitxer buit! - + Database password: + - malformed string - cadena mal formada + Cannot create new group + + + + QtIOCompressor - missing closing quote - falta la cometa de tancament + Internal zlib error when compressing: + Error intern de zlib mentre s'estava comprimint. - Group - Grup + Error writing to underlying device: + Error d'escriptura al dispositiu subjacent: - Title - Títol + Error opening underlying device: + Error a l'obrir el dispositiu subjacent: - Username - Nom d'usuari + Error reading data from underlying device: + Error de lectura al dispositiu subjacent: - Password - Contrasenya + Internal zlib error when decompressing: + Error intern de zlib al descomprimir: + + + QtIOCompressor::open - Notes - Notes + The gzip format not supported in this version of zlib. + gzip no és un format compatible amb aquesta versió de zlib. - Last Modified - Darrera modificació + Internal zlib error: + Error intern de zlib: + + + SSHAgent - Created - Creat + Agent connection failed. + - Legacy Browser Integration + Agent protocol error. - Browser Integration - Integració amb el navegador + No agent running, cannot add identity. + - YubiKey[%1] Challenge Response - Slot %2 - %3 - Resposta de YubiKey [%1] - Slot %2 - %3 + No agent running, cannot remove identity. + - Press - Prem + Agent refused this identity. Possible reasons include: + - Passive - Passiu + The key has already been added. + - SSH Agent - Agent SSH + Restricted lifetime is not supported by the agent (check options). + - Generate a new random diceware passphrase. + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - Word count for the diceware passphrase. + Search Help - count + Search terms are as follows: [modifiers][field:]["]term["] - Wordlist for the diceware generator. -[Default: EFF English] + Every search term must match (ie, logical AND) - Generate a new random password. + Modifiers - Length of the generated password. + exclude term from results - Use lowercase characters in the generated password. + match term exactly - Use uppercase characters in the generated password. + use regex in term - Use numbers in the generated password. + Fields - Use special characters in the generated password. + Term Wildcards - Use extended ASCII in the generated password. + match anything - - - QtIOCompressor - Internal zlib error when compressing: - Error intern de zlib mentre s'estava comprimint. + match one + - Error writing to underlying device: - Error d'escriptura al dispositiu subjacent: + logical OR + - Error opening underlying device: - Error a l'obrir el dispositiu subjacent: + Examples + + + + SearchWidget - Error reading data from underlying device: - Error de lectura al dispositiu subjacent: + Search + Cerca - Internal zlib error when decompressing: - Error intern de zlib al descomprimir: + Clear + Neteja - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - gzip no és un format compatible amb aquesta versió de zlib. + Limit search to selected group + Limitar la cerca al grup seleccionat - Internal zlib error: - Error intern de zlib: + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + - SearchWidget + SettingsWidgetKeeShare - Search... - Cerca... + Active + - Search - Cerca + Allow export + - Clear - Neteja + Allow import + - Case Sensitive - Distingeix entre majúscules i minúscules + Own certificate + - Limit search to selected group - Limitar la cerca al grup seleccionat + Fingerprint: + - - - Service - KeePassXC: New key association request - KeePassXC: Nova petició de associació de clau + Certificate: + - 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. + Signer + - KeePassXC: Overwrite existing key? - KeePassXC: Voleu sobreescriure la clau existent? + Key: + Clau: - 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? + Generate + Genera + + + Import + Importa - KeePassXC: Update Entry - KeePassXC: Actualitza l'entrada + Export + - Do you want to update the information in %1 - %2? - Voleu actualitzar la informació en %1 - %2? + Imported certificates + - KeePassXC: Database locked! - KeePassXC: Base de dades bloquejada! + Trust + - 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. + Ask + - KeePassXC: Removed keys from database - KeePassXC: Claus de la base de dades eliminades + Untrust + - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Remove + Suprimiu - KeePassXC: No keys found - KeePassXC: No s'han trobat claus + Path + Camí - No shared encryption-keys found in KeePassHttp Settings. - No s'han trobat claus de xifratge compartides en la configuració de KeePassHttp. + Status + - KeePassXC: Settings not available! - KeePassXC: La configuració no està disponible! + Fingerprint + - The active database does not contain an entry of KeePassHttp Settings. - La base de dades activa no conté cap entrada de configuració de KeePassHttp. + Certificate + - Removing stored permissions... - Eliminant permisos emmagatzemats... + Trusted + - Abort - Avorta + Untrusted + - KeePassXC: Removed permissions - KeePassXC: Permisos eliminats + Unknown + - - Successfully removed permissions from %n entries. - + + key.share + Filetype for KeeShare key + - KeePassXC: No entry with permissions found! - KeePassXC: No s'ha trobat cap entrada amb permisos! + KeeShare key file + - The active database does not contain an entry with permissions. - La base de dades activa no conté cap entrada amb permisos. + All files + Tots els fitxers - - - SettingsWidget - Application Settings - Configuració de l'aplicació + Select path + - General - General + Exporting changed certificate + - Security - Seguretat + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Access error for config file %1 - Error d'accés al fitxer de configuració %1 + Signer: + - SettingsWidgetGeneral + ShareObserver - Basic Settings - Configuració bàsica + Import from container without signature + - Start only a single instance of KeePassXC - Obriu només una sola instància del KeePassXC + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Remember last databases - Recordeu les últimes bases de dades + Import from container with certificate + - Remember last key files and security dongles - Recordeu els últims arxius clau i motxilles de seguretat + Not this time + - Load previous databases on startup - Carregueu les bases de dades anteriors a l'obrir el KeepassXC + Never + Mai - Automatically save on exit - Deseu en tancar de forma automàtica + Always + - Automatically save after every change - Deseu després de cada canvi de forma automàtica + Just this time + - Automatically reload the database when modified externally - Torneu a carregar automàticament la base de dades quan siga modificada de forma externa + Import from %1 failed (%2) + - Minimize when copying to clipboard - Minimitzeu en copiar al porta-retalls + Import from %1 successful (%2) + - Minimize window at application startup - Minimitzeu la finestra a l'obrir l'aplicació + Imported from %1 + - Use group icon on entry creation - Utilitzeu la icona del grup al crear una entrada + Signed share container are not supported - import prevented + - 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) + File is not readable + - Hide the Details view + Invalid sharing container - Show a system tray icon - Mostreu una icona a la safata del sistema + Untrusted import prevented + - Hide window to system tray when minimized - Amagueu la finestra a la safata del sistema quan es minimitze + Successful signed import + - Hide window to system tray instead of app exit - Amagueu la finestra a la safata del sistema en lloc de tancar KeepassXC + Unexpected error + - Dark system tray icon + Unsigned share container are not supported - import prevented - Language - Idioma + Successful unsigned import + - Auto-Type - Compleció automàtica + File does not exist + - Use entry title to match windows for global Auto-Type + Unknown share container type - Use entry URL to match windows for global Auto-Type + Overwriting signed share container is not supported - export prevented - Always ask before performing Auto-Type - Pregunteu sempre abans d'efectuar la compleció automàtica + Could not write export container (%1) + - Global Auto-Type shortcut - Drecera global de compleció automàtica + Overwriting unsigned share container is not supported - export prevented + - Auto-Type delay - Retard de la compleció automàtica + Could not write export container + - ms - Milliseconds - ms + Unexpected export error occurred + - Startup + Export to %1 failed (%2) - File Management + Export to %1 successful (%2) - Safely save database files (may be incompatible with Dropbox, etc) + Export to %1 - Backup database file before saving + Do you want to trust %1 with the fingerprint of %2 from %3? - Entry Management + Multiple import source path to %1 in %2 - General - General + Conflicting export target path %1 in %2 + - - - SettingsWidgetSecurity - Timeouts - Temps excedits + Could not embed signature: Could not open file to write (%1) + - Clear clipboard after - Neteja el porta-retalls després + Could not embed signature: Could not write file (%1) + - sec - Seconds - sec + Could not embed database: Could not open file to write (%1) + - Lock databases after inactivity of - Bloquegeu les bases de dades després d'estar inactives per + Could not embed database: Could not write file (%1) + + + + TotpDialog - Convenience - Conveniència + Timed Password + Contrasenya per temps - Lock databases when session is locked or lid is closed - Bloquegeu les bases de dades quan sessió siga bloquejada o es tanque la tapa + 000000 + 000000 - Lock databases after minimizing the window - Bloquegeu les bases de dades després minimitzar la finestra + Copy + Còpia - - Don't require password repeat when it is visible - No requerir la repetició de la contrasenya quan aquesta és visible + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Show passwords in cleartext by default - Mostreu per defecte les contrasenyes en text sense xifrar + Copy + Còpia - Hide passwords in the preview panel + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - Hide entry notes by default + There was an error creating the QR code. - 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 + sec + Seconds + sec + + + Code size: + Mida del codi: 6 digits 6 dígits - Code size: - Mida del codi: + 7 digits + - sec - Seconds - sec + 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. + + + + 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 + - - - UnlockDatabaseWidget - Unlock database - Desbloqueja la base de dades + 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 - - Remove an entry from the database. - - + YubiKeyEditWidget - Path of the database. - Camí de la base de dades. + Refresh + Actualitza - Path of the entry to remove. + YubiKey Challenge-Response - 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 + <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> + - read password of the database from stdin - llegiu la contrasenya de la base de dades des de l'entrada estàndard (stdin) + No YubiKey detected, please ensure it's plugged in. + - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_cs.ts b/share/translations/keepassx_cs.ts index 5520774abc..60ea7985a0 100644 --- a/share/translations/keepassx_cs.ts +++ b/share/translations/keepassx_cs.ts @@ -38,80 +38,290 @@ Zkopírovat do schránky - Version %1 - - Verze %1 - + Project Maintainers: + Správci projektu: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Zapnout SSH agenta (vyžaduje restart) - Revision: %1 - Revize: %1 + Use OpenSSH for Windows instead of Pageant + Použít namísto Pagent raději OpenSSH pro Windows + + + ApplicationSettingsWidget - Distribution: %1 - Distribuce: %1 + Application Settings + Nastavení aplikace - Libraries: - Knihovny: + General + Obecné - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operační systém: %1 -Architektura procesoru: %2 -Jádro systému: %3 %4 + Security + Zabezpečení - Enabled extensions: - Zapnutá rozšíření: + Access error for config file %1 + Chyba přístupu k souboru s nastaveními %1 - Project Maintainers: - Správci projektu: + Icon only + Pouze ikona - 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. + Text only + Pouze text - Build Type: %1 - - Typ sestavení: %1 - + Text beside icon + Text vedle ikony + + + Text under icon + Text pod ikonou + + + Follow style + Styl následování - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - Potvrzení přístupu KeePassXC HTTP + Basic Settings + Základní nastavení - Remember this decision - Zapamatovat si toto rozhodnutí + Startup + Spouštění - Allow - Umožnit + Start only a single instance of KeePassXC + Spouštět pouze jedinou instanci KeePassXC - Deny - Odepřít + Remember last databases + Pamatovat si nedávno otevřené databáze - %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? + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Zapnout SSH agenta (vyžaduje restart) + 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ů @@ -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é @@ -362,20 +585,41 @@ Umožnit přístup? <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 (*.*) + Select custom proxy location + Vybrat uživatelem určené umístění zprostředkovávající aplikace - Executable Files (*) - Spustitelné soubory (*) + &Tor Browser + &Tor Browser - Select custom proxy location - Vybrat uživatelem určené umístění zprostředkovávající aplikace + <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 + - 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. + 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í - - - 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í. - - - 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. - - - - ChangeMasterKeyWidget - - Password - Heslo - - - Enter password: - Zadejte heslo: - - - Repeat password: - Zopakujte heslo: - - - &Key file - Soubor s &klíčem - - - 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… + Converting attributes to custom data… + Převádění atributů na uživatelsky určená data… - Unable to create Key File : - Nedaří se vytvořit soubor s klíčem: + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Převedené KeePassHTTP atributy - Select a key file - Vyberte soubor s klíčem + 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. - - Empty password - Prázdné heslo + + 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. - Do you really want to use an empty string as password? - Opravdu ponechat bez hesla, tedy nechráněné? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nenalezena žádná položka, která má KeePassHTTP atributy! - Different passwords supplied. - Nepodařilo se vám zadat heslo do obou kolonek stejně. + The active database does not contain an entry with KeePassHTTP attributes. + Právě otevřená databáze neobsahuje žádnou položku s atributy KeePassHTTP. - Failed to set %1 as the Key file: -%2 - Nepodařilo se nastavit %1 jako soubor s klíčem: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: zjištěna nastavení starého napojení na webový prohlížeč - Legacy key file format - Starý formát souboru s klíčem + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -659,48 +797,89 @@ Zvažte vytvoření nového souboru s klíčem. Původní data: - Error(s) detected in CSV file ! - V CSV soubory byly zjištěny chyby! + Error + Chyba - more messages skipped] - další zprávy přeskočeny] + Empty fieldname %1 + Prázdný název kolonky %1 - Error - Chyba + column %1 + sloupec %1 - CSV import: writer has errors: - - CSV import: chyby zápisu: - + Error(s) detected in CSV file! + V CSV soubory byly zjištěny chyby! - - - CsvImportWizard - - Error - Chyba + + [%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] - Unable to calculate master key - Nedaří se spočítat hlavní klíč + CSV import: writer has errors: +%1 + CSV import: chyby zápisu: +%1 CsvParserModel - %n byte(s), - %n bajt%n bajty%n bajtů%n bajtů + %n column(s) + %n sloupec%n sloupce%n sloupců%n sloupců + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n řádek%n řádky%n řádků%n řádků + %n byte(s) + %n bajt%n bajty%n bajtů%n bajty - %n column(s) - %n sloupec%n sloupce%n sloupců%n sloupců + %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 @@ -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,155 +937,331 @@ 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 + Can't open key file: +%1 + Soubor s klíčem se nedaří otevřít: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Nedaří se otevřít databázi. + Passwords + Hesla + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Databázi se podařilo v pořádku otevřít. Není třeba žádného zásahu. + Advanced Settings + Pokročilá nastavení - Success - Úspěch + General + Obecné - The database has been successfully repaired -You can now save it. - Databáze je úspěšně opravená. -Nyní je možné ji uložit. + Security + Zabezpečení - Unable to repair the database. - Databázi se nedaří opravit. + Master Key + Hlavní klíč - - - DatabaseSettingsWidget - General - Obecné + Encryption Settings + Nastavení šifrování - Encryption - Šifrování + Browser Integration + Napojení webového prohlížeče + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Počet průchodů je příliš vysoký + KeePassXC-Browser settings + Nastavení pro KeePassXC-Browser - 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! - Používáte velmi vysoký počet průchodů transformace klíče s Argnon2. - -Pokud tento počet ponecháte, otevírání databáze může trvat hodiny až dny (nebo dokonce déle)! + &Disconnect all browsers + O&dpojit veškeré prohlížeče - Understood, keep number - Rozumím, počet ponechat + Forg&et all site-specific settings on entries + Zapom&enout v položkách veškerá nastavení specifická pro daný web - Cancel - Zrušit + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Přesunout KeePassHTTP atributy do uživatelsky určených dat v KeePassX&C-Browser - Number of rounds too low - Key transformation rounds - Počet průchodů je příliš nízký + Stored keys + Uložené klíče - 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! - Používáte velmi nízký počet průchodů transformace funkcí pro odvození klíče (KDF) a šifrou AES. - -Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování vaší databáze! + Remove + Odebrat - KDF unchanged - Funkce pro odvození klíče (KDF) nezměněna + Delete the selected key? + Smazat označený klíč? - Failed to transform key with new KDF parameters; KDF unchanged. - Nepodařilo se transformovat klíč s novými parametry funkce pro odvození klíče (KDF), ta proto nezměněna. + 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. - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB MiB MiB - - - thread(s) - Threads for parallel execution (KDF settings) - vláknovláknavlákenvláken - - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Šifrovací algoritmus: + Key + Klíč - AES: 256 Bit (default) - AES: 256 bit (výchozí) + Value + Hodnota - Twofish: 256 Bit - Twofish: 256 bit + Enable Browser Integration to access these settings. + Pro zpřístupnění těchto nastavení zapněte Napojení na webový prohlížeč. - Key Derivation Function: - Funkce pro odvození klíče: + Disconnect all browsers + Odpojit veškeré prohlížeče - Transform rounds: - Počet průchodů šifrovacího algoritmu: + 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. - Benchmark 1-second delay - Jednosekundová prodleva testu výkonnosti + KeePassXC: No keys found + KeePassXC: Nebyly nalezeny žádné klíče - Memory Usage: - Využití paměti: + No shared encryption keys found in KeePassXC settings. + V nastavení KeePassXC nenalezeny žádné sdílené šifrovací klíče. - Parallelism: - Souběžné zpracovávání: + KeePassXC: Removed keys from database + KeePassXC: Klíče odebrány z databáze - - - DatabaseSettingsWidgetGeneral - - Database Meta Data - Metadata 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. - Database name: - Název databáze: + Forget all site-specific settings on entries + Zapomenout v položkách veškerá nastavení specifická pro daný web - Database description: - Popis databáze: + 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 + Key transformation rounds + Počet průchodů je příliš vysoký + + + 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! + Používáte velmi vysoký počet průchodů transformace klíče s Argnon2. + +Pokud tento počet ponecháte, otevírání databáze může trvat hodiny až dny (nebo dokonce déle)! + + + Understood, keep number + Rozumím, počet ponechat + + + Cancel + Zrušit + + + Number of rounds too low + Key transformation rounds + Počet průchodů je příliš nízký + + + 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! + Používáte velmi nízký počet průchodů transformace funkcí pro odvození klíče (KDF) a šifrou AES. + +Pokud tento počet ponecháte, může být velmi snadné prolomit šifrování vaší databáze! + + + KDF unchanged + Funkce pro odvození klíče (KDF) nezměněna + + + Failed to transform key with new KDF parameters; KDF unchanged. + Nepodařilo se transformovat klíč s novými parametry funkce pro odvození klíče (KDF), ta proto nezměněna. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + vláknovláknavlákenvlákna + + + %1 ms + milliseconds + %1 ms%1 ms%1 ms%1 ms + + + %1 s + seconds + %1 s%1 s%1 s%1 s + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + Metadata databáze + + + Database name: + Název databáze: + + + Database description: + Popis databáze: Default username: @@ -950,91 +1297,112 @@ 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í - KeePass 2 Database - Databáze ve formátu KeePass verze 2 + Breadcrumb + Zobrazení cesty rozhraním - All files - Veškeré soubory + Type + Typ - Open database - Otevřít databázi + Path + Popis umístění - File not found! - Soubor nebyl nalezen! + Last Signer + Nedávno podepsal - Unable to open the database. - Databázi se nedaří otevřít. + Certificates + Certifikáty - File opened in read only mode. - Soubor otevřen v režimu pouze pro čtení. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Otevřít CSV soubor + Add additional protection... + Přidat další ochranu… - CSV file - CSV soubor + No encryption key added + Nepřidán žádný šifrovací klíč - All files (*) - Veškeré soubory (*) + 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íč! - Merge database - Sloučit databáze + No password set + Není nastavené žádné heslo - Open KeePass 1 database - Otevřít databázi ve formátu KeePass verze 1 + 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? - KeePass 1 database - Databáze ve formátu KeePass verze 1 + Unknown error + Neznámá chyba - Close? - Zavřít? + Failed to change master key + Hlavní klíč se nepodařilo změnit + + + DatabaseSettingsWidgetMetaDataSimple - "%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? + Database Name: + Název databáze: - Save changes? - Uložit změny? + Description: + Popis: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - „%1“ bylo změněno. -Uložit změny? + KeePass 2 Database + Databáze ve formátu KeePass verze 2 - Writing the database failed. - Zápis do databáze se nezdařil. + All files + Veškeré soubory - Passwords - Hesla + Open database + Otevřít databázi - Save database as - Uložit databázi jako + CSV file + CSV soubor + + + Merge database + Sloučit databáze + + + Open KeePass 1 database + Otevřít databázi ve formátu KeePass verze 1 + + + KeePass 1 database + Databáze ve formátu KeePass verze 1 Export database to CSV file @@ -1045,40 +1413,41 @@ Uložit změny? Zápis do CSV souboru se nezdařil. - New database - Nová databáze + Database creation error + Chyba vytváření databáze - locked - zamčeno + 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. - Lock database - Uzamknout databázi + The database file does not exist or is not accessible. + Soubor s databází neexistuje nebo není přístupný. - 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. + Select CSV file + Vyberte CSV soubor - 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. + New Database + Nová databáze - Disable safe saves? - Vypnout bezpečná ukládání? + %1 [New Database] + Database tab name modifier + %1 [nová databáze] - 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 [Locked] + Database tab name modifier + %1 [uzamčeno] + + + %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? - - Close - Zavřít + + 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? - General - Obecné + File opened in read only mode. + Soubor otevřen v režimu pouze pro čtení. - Password - Heslo + Lock Database? + Uzamknout databázi? - URL - URL adresa + You are editing an entry. Discard changes and lock anyway? + Upravujete položku. Přesto zavřít a zahodit tak změny? - Expiration - Skončení platnosti + "%1" was modified. +Save changes? + „%1“ bylo změněno. +Uložit změny? - Username - Uživatelské jméno + Database was modified. +Save changes? + Databáze byla změněna. +Uložit změny? - Autotype - Automatické vyplnění + Save changes? + Uložit změny? - Searching - Hledá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 - Attributes - Atributy + Disable safe saves? + Vypnout bezpečná ukládání? - Attachments - Přílohy + 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? - Notes - Poznámky + Writing the database failed. +%1 + Zápis do databáze se nezdařil. +%1 - Window - Okno + Passwords + Hesla - Sequence - Posloupnost + Save database as + Uložit databázi jako - Search - Hledat + KeePass 2 Database + Databáze ve formátu KeePass 2 - Clear - Vyčistit + 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? - Never - Nikdy + Delete group + Smazat skupinu - [PROTECTED] - [CHRÁNĚNO] + Move group to recycle bin? + Přesunout skupinu do Koše? - Disabled - Vypnuto + Do you really want to move the group "%1" to the recycle bin? + Opravdu chcete skupinu „%1“ přesunout do koše? - Enabled - Zapnuto + Successfully merged the database files. + Databázové soubory úspěšně sloučeny. + + + 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,109 +2416,159 @@ Dotčený zásuvný modul to může rozbít. Attachments Přílohy - - - EntryView - Customize View - Přizpůsobit pohled + Yes + Ano - Hide Usernames - Skrýt uživatelská jména + TOTP + TOTP + + + EntryPreviewWidget - Hide Passwords - Skrýt hesl + Generate TOTP Token + Vytvořit token na času založeného jednorázového hesla (TOTP) - Fit to window - Přizpůsobit oknu + Close + Zavřít - Fit to contents - Přizpůsobit obsahu + General + Obecné - Reset to defaults - Vrátit na výchozí + Username + Uživatelské jméno - Attachments (icon) - Přípony (ikona) + Password + Heslo - - - Group - Recycle Bin - Koš + Expiration + Skončení platnosti - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: Soubor se nedaří uložit! + URL + URL adresa - Cannot save the native messaging script file. - Nedaří se uložit soubor se skriptem pro posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging). + Attributes + Atributy - - - HttpPasswordGeneratorWidget - Length: - Délka: + Attachments + Přílohy - Character Types - Typy znaků + Notes + Poznámky - Upper Case Letters - Velká písmena + Autotype + Automatické vyplnění - A-Z - A-Z + Window + Okno - Lower Case Letters - Malá písmena + Sequence + Posloupnost - a-z - a-z + Searching + Hledání - Numbers - Číslice + Search + Hledat - 0-9 - 0-9 + Clear + Vyčistit - Special Characters - Zvláštní znaky + Never + Nikdy - /*_& ... - /*_& … - + [PROTECTED] + [CHRÁNĚNO] + - Exclude look-alike characters - Vynechat podobně vypadající znaky (předejití záměně) + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 - Ensure that the password contains characters from every group - Zajistit aby heslo obsahovalo znaky ze všech zvolených skupin znaků + Enabled + Zapnuto - Extended ASCII - Rozšířené ASCII + Disabled + Vypnuto + + + Share + Sdílet + + + + EntryView + + Customize View + Přizpůsobit pohled + + + Hide Usernames + Skrýt uživatelská jména + + + Hide Passwords + Skrýt hesl + + + Fit to window + Přizpůsobit oknu + + + Fit to contents + Přizpůsobit obsahu + + + Reset to defaults + Vrátit na výchozí + + + Attachments (icon) + Přípony (ikona) + + + + Group + + Recycle Bin + Koš + + + [empty] + group has no children + [prázdné] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: Soubor se nedaří uložit! + + + Cannot save the native messaging script file. + Nedaří se uložit soubor se skriptem pro posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging). @@ -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 + + unable to seek to content position + nedaří se posunout na pozici obsahu + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + Vypnuté sdílení - Twofish: 256-bit - Twofish: 256-bit + Import from + Importovat z - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + Exportovat do - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Synchronizovat s - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – doporučeno) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - 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. + Key Component + Součást klíče - 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. + Key Component Description + Popis součásti klíče - Another instance of KeePassXC is already running. - Již je spuštěná jiná instance KeePassXC. + Cancel + Zrušit - Fatal error while testing the cryptographic functions. - Při zkoušení šifrovacích funkcí byl zjištěn fatální nedostatek. + Key Component set, click to change or remove + Součást klíče nastavena, kliknutím změníte nebo odeberete - KeePassXC - Error - KeePassXC – chyba + 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,226 +3438,394 @@ 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í. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Neplatný soubor s klíčem, očekáván OpenSSH klíč + &Donate + &Darovat - PEM boundary mismatch - Neshoda v PEM hranici + Report a &bug + Nahlásit chy&bu - Base64 decoding failed - Dekódování Base64 se nezdařilo + 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. - Key file way too small. - Soubor s klíčem je příliš malý. + &Import + &Importovat - Key file magic header id invalid - Neplatný identifikátor magic hlavičky souboru s klíčem + Copy att&ribute... + Zkopírovat at&ribut… - Found zero keys - Nenalezeny žádné klíče + TOTP... + TOTP… - Failed to read public key. - Nepodařilo se načíst veřejnou část klíče. + &New database... + &Nová databáze… - Corrupted key file, reading private key failed - Poškozený soubor s klíčem, čtení soukromé části klíče se nezdařilo + Create a new database + Vytvořit novou databázi - No private key payload to decrypt - Žádná obsažená soukromá část klíče k rozšifrování + &Merge from database... + &Sloučit z databáze… - Trying to run KDF without cipher - Snažíte se spustit funkci odvození klíče bez šifry + Merge from another KDBX database + Sloučit z jiné KDBX databáze - Passphrase is required to decrypt this key - Pro rozšifrování tohoto klíče je třeba zadat heslovou frázi + &New entry + &Nový záznam - Key derivation failed, key file corrupted? - Odvození klíče se nezdařilo, soubor s klíčem je poškozený? + Add a new entry + Přidat nový záznam - Decryption failed, wrong passphrase? - Rozšifrování se nezdařilo, chybná heslová fráze? + &Edit entry + &Upravit záznam - Unexpected EOF while reading public key - Neočekávaný konec souboru při čtení veřejné části klíče + View or edit entry + Zobrazit nebo upravit položku - Unexpected EOF while reading private key - Neočekávaný konec souboru při čtení soukromé části klíče + &New group + &Nová skupina - Can't write public key as it is empty - Není možné zapsat veřejnou část klíče, protože je prázdná + Add a new group + Přidat novou skupinu - Unexpected EOF when writing public key - Neočekávaný konec souboru při zápisu veřejné části klíče + Change master &key... + Změnit hlavní &klíč… - Can't write private key as it is empty - Není možné zapsat soukromou část klíče, protože je prázdná + &Database settings... + Nastavení &databáze… - Unexpected EOF when writing private key - Neočekávaný konec souboru při zápisu soukromé části klíče + Copy &password + Zko&pírovat heslo - Unsupported key type: %1 - Nepodporovaný typ klíče: %1 + Perform &Auto-Type + Provést &automatické vyplnění - Unknown cipher: %1 - Neznámá šifra: %1 + Open &URL + Otevřít &URL adresu - Cipher IV is too short for MD5 kdf - Cifra IV je příliš krátká pro MD5 funkci pro odvození klíče + KeePass 1 database... + Databáze ve formátu KeePass verze 1… - Unknown KDF: %1 - Neznámá funkce pro odvození klíče: %1 + Import a KeePass 1 database + Importovat databázi aplikace KeePass verze 1 - Unknown key type: %1 - Neznámý typ klíče: %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. - OptionDialog + Merger - Dialog - Dialog + Creating missing %1 [%2] + Vytváření chybějícího %1 [%2] - 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 + Relocating %1 [%2] + Přemisťování %1 [%2] - Enable KeePassHTTP server - Zapnout KeePassHTTP server + Overwriting %1 [%2] + Přepisování %1 [%2] - General - Obecné + older entry merged from database "%1" + starší položka sloučena z databáze „%1“ - 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 + Adding backup for older target %1 [%2] + Přidávání zálohy pro starší cíl %1 [%2] - 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. + Adding backup for older source %1 [%2] + Přidávání zálohy pro starší zdroj %1 [%2] - &Return only best matching entries - V&racet pouze nejlépe odpovídající položky + 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] - Re&quest to unlock the database if it is locked - Vyžádat odemknutí zamčené databáze + 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] - 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://, …). + Synchronizing from newer source %1 [%2] + Synchronizace z novějšího zdroje %1 [%2] - &Match URL schemes - &Hledat shodu s URL schématy + Synchronizing from older source %1 [%2] + Synchronizace ze staršího zdroje %1 [%2] - Sort matching entries by &username - Seřadit odpovídající záznamy dle &uživatelského jména + Deleting child %1 [%2] + Mazání podřízeného %1 [%2] - Sort &matching entries by title - Seřadit odpovídající zázna&my dle názvu + Deleting orphan %1 [%2] + Mazání osiřelého %1 [%2] - 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 + Changed deleted objects + Změněny smazané objekty - 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í + Adding missing icon %1 + Přidávání chybějící ikony %1 + + + NewDatabaseWizard - Password Generator - Generátor hesel + Create a new KeePassXC database... + Vytvořit novou KeePassXC databázi… - Advanced - Pokročilé + Root + Root group + Kořen + + + NewDatabaseWizardPage - Always allow &access to entries - Vždy umožnit přístup k zázn&amům + WizardPage + Stránka průvodce - Always allow &updating entries - Vždy umožnit akt&ualizovat záznamy + En&cryption Settings + &Nastavení šifrování - Only the selected database has to be connected with a client. - Pouze označené databáze budou spojeny s klientem. + 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. - 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 + Advanced Settings + Pokročilá nastavení - Automatically creating or updating string fields is not supported. - Automatická vytváření nebo aktualizace nejsou u textových kolonek podporované! + Simple Settings + Základní nastavení + + + NewDatabaseWizardPageEncryption - &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:“ + Encryption Settings + Nastavení šifrování - HTTP Port: - HTTP port: + 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 - Default port: 19455 - Výchozí port: 19455 + Database Master Key + Hlavní klíč do databáze - 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 + A master key known only to you protects your database. + Hlavní klíč, známý pouze vám, pro ochranu vaší databáze. + + + NewDatabaseWizardPageMetaData - <b>Warning:</b> The following options can be dangerous! - <b>Varování:</b> Následující předvolby mohou být nebezpečné! + 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 + + Invalid key file, expecting an OpenSSH key + Neplatný soubor s klíčem, očekáván OpenSSH klíč + + + PEM boundary mismatch + Neshoda v PEM hranici + + + Base64 decoding failed + Dekódování Base64 se nezdařilo + + + Key file way too small. + Soubor s klíčem je příliš malý. + + + Key file magic header id invalid + Neplatný identifikátor magic hlavičky souboru s klíčem + + + Found zero keys + Nenalezeny žádné klíče + + + Failed to read public key. + Nepodařilo se načíst veřejnou část klíče. + + + Corrupted key file, reading private key failed + Poškozený soubor s klíčem, čtení soukromé části klíče se nezdařilo + + + No private key payload to decrypt + Žádná obsažená soukromá část klíče k rozšifrování + + + Trying to run KDF without cipher + Snažíte se spustit funkci odvození klíče bez šifry + + + Passphrase is required to decrypt this key + Pro rozšifrování tohoto klíče je třeba zadat heslovou frázi - <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> + Key derivation failed, key file corrupted? + Odvození klíče se nezdařilo, soubor s klíčem je poškozený? + + + Decryption failed, wrong passphrase? + Rozšifrování se nezdařilo, chybná heslová fráze? + + + Unexpected EOF while reading public key + Neočekávaný konec souboru při čtení veřejné části klíče + + + Unexpected EOF while reading private key + Neočekávaný konec souboru při čtení soukromé části klíče + + + Can't write public key as it is empty + Není možné zapsat veřejnou část klíče, protože je prázdná + + + Unexpected EOF when writing public key + Neočekávaný konec souboru při zápisu veřejné části klíče + + + Can't write private key as it is empty + Není možné zapsat soukromou část klíče, protože je prázdná + + + Unexpected EOF when writing private key + Neočekávaný konec souboru při zápisu soukromé části klíče + + + Unsupported key type: %1 + Nepodporovaný typ klíče: %1 + + + Unknown cipher: %1 + Neznámá šifra: %1 + + + Cipher IV is too short for MD5 kdf + Cifra IV je příliš krátká pro MD5 funkci pro odvození klíče + + + Unknown KDF: %1 + Neznámá funkce pro odvození klíče: %1 + + + Unknown key type: %1 + Neznámý typ klíče: %1 + + + + PasswordEditWidget + + Enter password: + Zadejte heslo: + + + Confirm password: + Potvrdit heslo: + + + Password + Heslo + + + <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> - Cannot bind to privileged ports - Není možné navázat se na privilegované porty + Passwords do not match. + Zadání hesla se neshodují. - 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 @@ -3207,453 +3908,1083 @@ Náhradně bude použit port 19455. Přijmout - Close - Zavřít + Close + Zavřít + + + Entropy: %1 bit + Nahodilost: %1 bitů + + + Password Quality: %1 + Kvalita hesla: %1 + + + Poor + Password quality + Velmi slabá + + + Weak + Password quality + Slabá + + + Good + Password quality + Dobrá + + + Excellent + 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 + + Database not opened + Databáze nebyla otevřena + + + Database hash not available + Otisk (hash) databáze není k dispozici + + + Client public key not received + Neobdržena veřejná část klíče klienta + + + Cannot decrypt message + Zprávu se nedaří rozšifrovat + + + Action cancelled or denied + Akce zrušena nebo odepřena + + + KeePassXC association failed, try again + Přiřazení KeePassXC se nezdařilo, zkuste to znovu + + + Encryption key is not recognized + Šifrovací klíč nebyl rozpoznán + + + Incorrect action + Nesprávná akce + + + Empty message received + Obdržena prázdná zpráva + + + No URL provided + Nebyla zadána žádná URL adresa + + + No logins found + Nenalezeny žádné přihlašovací údaje + + + Unknown error + Neznámá chyba + + + Add a new entry to a database. + Přidat do databáze novou položku. + + + Path of the database. + Umístění databáze. + + + Key file of the database. + Soubor s klíčem k databázi. + + + path + popis umístění + + + Username for the entry. + Uživatelské jméno pro záznam. + + + username + uživatelské jméno + + + URL for the entry. + URL adresa pro položku. + + + URL + URL adresa + + + Prompt for the entry's password. + Dotázat se na heslo položky. + + + Generate a password for the entry. + Vytvořit heslo pro položku. + + + Length for the generated password. + Délka vytvářeného hesla. + + + length + délka + + + Path of the entry to add. + Popis umístění záznamu, který přidat. + + + Copy an entry's password to the clipboard. + Zkopírovat heslo záznamu do schránky. + + + Path of the entry to clip. + clip = copy to clipboard + Popis umístění záznamu ke zkopírování do schránky. + + + Timeout in seconds before clearing the clipboard. + Časová prodleva (v sekundách) před vymazáním obsahu schránky. + + + Edit an entry. + Upravit položku. + + + Title for the entry. + Titulek pro položku. + + + title + titulek + + + Path of the entry to edit. + Popis umístění položky kterou upravit. + + + Estimate the entropy of a password. + Odhadnout nahodilost hesla. + + + Password for which to estimate the entropy. + Heslo pro které odhadnout nahodilost. + + + Perform advanced analysis on the password. + Provést pokročilou analýzu hesla. + + + Extract and print the content of a database. + Vytáhnout a vypsat obsah databáze. + + + Path of the database to extract. + Umístění databáze ze které vytáhnout. + + + Insert password to unlock %1: + Zadejte heslo pro odemknutí %1: + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + VAROVÁNÍ: 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. + + + + +Available commands: + + + +Příkazy k dispozici: + + + + Name of the command to execute. + Název příkazu, který spustit. + + + List database entries. + Vypsat položky databáze. + + + Path of the group to list. Default is / + Umístění skupiny, kterou vypsat. Výchozí je / + + + Find entries quickly. + Najděte položky rychle. + + + Search term. + Hledat pojem. + + + Merge two databases. + Sloučit dvě databáze. + + + Path of the database to merge into. + Umístění databáze do které sloučit. + + + Path of the database to merge from. + Umístění databáze ze které sloučit. + + + Use the same credentials for both database files. + Použít stejné přihlašovací údaje pro oba databázové soubory. + + + Key file of the database to merge from. + Soubor s klíčem k databázi, ze které sloučit. + + + Show an entry's information. + Zobrazit informace o položce. + + + 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. + Názvy atributů které zobrazit. Tato předvolba může být zadaná vícekrát, pro každý z atributů zvlášť na řádku v daném pořadí. Pokud nejsou zadány žádné atributy, je zobrazen souhrn výchozích atributů. + + + attribute + atribut + + + Name of the entry to show. + Název položky k zobrazení. + + + NULL device + NULL zařízení + + + error reading from device + Chyba při čtení ze zařízení + + + malformed string + špatně formovaný řetězec + + + missing closing quote + chybějící uzavírací uvozovka + + + Group + Skupina + + + Title + Titulek + + + Username + Uživatelské jméno + + + Password + Heslo + + + Notes + Poznámky + + + Last Modified + Okamžik poslední úpravy + + + Created + Vytvořeno + + + Browser Integration + Napojení na webový prohlížeč + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + Výzva–odpověď YubiKey[%1] – slot %2 - %3 + + + Press + Stisknout + + + Passive + Pasivní + + + SSH Agent + SSH agent + + + Generate a new random diceware passphrase. + Vytvořit náhodnou diceware heslovou frázi. + + + Word count for the diceware passphrase. + Počet slov pro diceware heslovou frázi. + + + Wordlist for the diceware generator. +[Default: EFF English] + Slovník pro diceware generátor. +[Výchozí: EFF angličtina] + + + Generate a new random password. + Vytvořit nové náhodné heslo. + + + Invalid value for password length %1. + Neplatná hodnota pro délku hesla %1. + + + Could not create entry with path %1. + Nedaří se vytvořit položku v umístění %1. + + + Enter password for new entry: + Zadejte heslo pro novou položku: + + + Writing the database failed %1. + Zápis do databáze se nezdařil %1. + + + Successfully added entry %1. + Položka %1 úspěšně přidána. + + + 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é - Apply - Použít + Type: Date + Typ: datum - Entropy: %1 bit - Nahodilost: %1 bitů + Type: Bruteforce(Rep) + Type: hrubá síla (opak.) - Password Quality: %1 - Kvalita hesla: %1 + Type: Dictionary(Rep) + Type: slovníkový (opak.) - Poor - Password quality - Velmi slabá + Type: Dict+Leet(Rep) + Typ: slovník+nahrazování (opak.) - Weak - Password quality - Slabá + Type: User Words(Rep) + Typ: uživatelsky zadaná slova (opak) - Good - Password quality - Dobrá + Type: User+Leet(Rep) + Typ: uživatelský+nahrazování (opak) - Excellent - Password quality - Výborná + Type: Repeated(Rep) + Typ: opakování (opak.) - - - QObject - Database not opened - Databáze nebyla otevřena + Type: Sequence(Rep) + Typ: posloupnost (opak) - Database hash not available - Otisk (hash) databáze není k dispozici + Type: Spatial(Rep) + Typ: prostorové (opak.) - Client public key not received - Neobdržena veřejná část klíče klienta + Type: Date(Rep) + Type: datum (opak) - Cannot decrypt message - Zprávu se nedaří rozšifrovat + Type: Unknown%1 + Typ: neznámé%1 - Timeout or cannot connect to KeePassXC - Překročení časového limitu nebo se nedaří spojit s KeePassXC + Entropy %1 (%2) + Nahodilost %1 (%2) - Action cancelled or denied - Akce zrušena nebo odepřena + *** Password length (%1) != sum of length of parts (%2) *** + *** Délka hesla (%1) != součtu délky částí (%2) *** - 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)? + Failed to load key file %1: %2 + Nepodařilo se načíst soubor s klíčem %1: %2 - KeePassXC association failed, try again - Přiřazení KeePassXC se nezdařilo, zkuste to znovu + File %1 does not exist. + Soubor %1 neexistuje. - Key change was not successful - Výměna klíče nebyla úspěšná + Unable to open file %1. + Soubor %1 se nedaří otevřít. - Encryption key is not recognized - Šifrovací klíč nebyl rozpoznán + Error while reading the database: +%1 + Chyba při čtení databáze: +%1 - No saved databases found - Nebyly nalezeny žádné uložené databáze + Error while parsing the database: +%1 + Chyba při zpracování databáze: +%1 - Incorrect action - Nesprávná akce + Length of the generated password + Délka vytvářeného hesla - Empty message received - Obdržena prázdná zpráva + Use lowercase characters + Použít malá písmena - No URL provided - Nebyla zadána žádná URL adresa + Use uppercase characters + Použít velká písmena - No logins found - Nenalezeny žádné přihlašovací údaje + Use numbers. + Použít čísla. - Unknown error - Neznámá chyba + Use special characters + Použít zvláštní znaky - Add a new entry to a database. - Přidat do databáze novou položku. + Use extended ASCII + Použít rozšířené ASCII - Path of the database. - Umístění databáze. + Exclude character set + Vynechat sadu znaků - Key file of the database. - Soubor s klíčem k databázi. + chars + znaky - path - popis umístění + Exclude similar looking characters + Vynechat podobně vypadající znaky (předejití záměně) - Username for the entry. - Uživatelské jméno pro záznam. + Include characters from every selected group + Zahrnout znaky ze všech zvolených skupin - username - uživatelské jméno + Recursively list the elements of the group. + Rekurzivně vypsat prvky skupiny. - URL for the entry. - URL adresa pro položku. + Cannot find group %1. + Skupinu %1 se nedaří nalézt. - URL - URL adresa + Error reading merge file: +%1 + Chyba při čtení slučovaného souboru: +%1 - Prompt for the entry's password. - Dotázat se na heslo položky. + Unable to save database to file : %1 + Nedaří se uložit databázi do souboru: %1 - Generate a password for the entry. - Vytvořit heslo pro položku. + Unable to save database to file: %1 + Nedaří se uložit databázi do souboru: %1 - Length for the generated password. - Délka vytvářeného hesla. + Successfully recycled entry %1. + Položka %1 úspěšně přesunuta do Koše. - length - délka + Successfully deleted entry %1. + Položka %1 úspěšně smazána. - Path of the entry to add. - Popis umístění záznamu, který přidat. + Show the entry's current TOTP. + Zobrazit stávající TOTP heslo položky. - Copy an entry's password to the clipboard. - Zkopírovat heslo záznamu do schránky. + ERROR: unknown attribute %1. + CHYBA: neznámý atribut %1. - Path of the entry to clip. - clip = copy to clipboard - Popis umístění záznamu ke zkopírování do schránky. + No program defined for clipboard manipulation + Nebyl určen program pro manipulaci se schránkou - Timeout in seconds before clearing the clipboard. - Časová prodleva (v sekundách) před vymazáním obsahu schránky. + Unable to start program %1 + Nedaří se spustit program %1 - Edit an entry. - Upravit položku. + file empty + soubor je prázdný - Title for the entry. - Titulek pro položku. + %1: (row, col) %2,%3 + %1: (řádek, sloupec) %2,%3 - title - titulek + AES: 256-bit + AES: 256-bit - Path of the entry to edit. - Popis umístění položky kterou upravit. + Twofish: 256-bit + Twofish: 256-bit - Estimate the entropy of a password. - Odhadnout nahodilost hesla. + ChaCha20: 256-bit + ChaCha20: 256-bit - Password for which to estimate the entropy. - Heslo pro které odhadnout nahodilost. + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – doporučeno) - Perform advanced analysis on the password. - Provést pokročilou analýzu hesla. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Extract and print the content of a database. - Vytáhnout a vypsat obsah databáze. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Path of the database to extract. - Umístění databáze ze které vytáhnout. + Invalid Settings + TOTP + Neplatná nastavení - Insert password to unlock %1: - Zadejte heslo pro odemknutí %1: + Invalid Key + TOTP + Neplatný klíč - Failed to load key file %1 : %2 - Nepodařilo se načíst soubor s klíčem %1: %2 + Message encryption failed. + Zprávu se nepodařilo zašifrovat. - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - VAROVÁNÍ: 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. + No groups found + Nenalezeny žádné skupiny - - -Available commands: - - - -Příkazy k dispozici: - + Create a new database. + Vytvořit novou databázi. - Name of the command to execute. - Název příkazu, který spustit. + File %1 already exists. + Soubor %1 už existuje. - List database entries. - Vypsat položky databáze. + Loading the key file failed + Načítání souboru s klíčem se nezdařilo - Path of the group to list. Default is / - Umístění skupiny, kterou vypsat. Výchozí je / + No key is set. Aborting database creation. + Není nastavený žádný klíč. Vytváření databáze se ruší. - Find entries quickly. - Najděte položky rychle. + Failed to save the database: %1. + Databázi se nepodařilo uložit: %1. - Search term. - Hledat pojem. + Successfully created new database. + Nová databáze úspěšně vytvořena. - Merge two databases. - Sloučit dvě databáze. + 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): - Path of the database to merge into. - Umístění databáze do které sloučit. + Creating KeyFile %1 failed: %2 + Vytváření souboru s klíčem %1 se nezdařilo: %2 - Path of the database to merge from. - Umístění databáze ze které sloučit. + Loading KeyFile %1 failed: %2 + Načítání souboru s klíčem %1 se nezdařilo: %2 - Use the same credentials for both database files. - Použít stejné přihlašovací údaje pro oba databázové soubory. + Remove an entry from the database. + Odebrat položku z databáze. - Key file of the database to merge from. - Soubor s klíčem k databázi, ze které sloučit. + Path of the entry to remove. + Popis umístění položky k odebrání. - Show an entry's information. - Zobrazit informace o položce. + 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. - 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. - Názvy atributů které zobrazit. Tato předvolba může být zadaná vícekrát, pro každý z atributů zvlášť na řádku v daném pořadí. Pokud nejsou zadány žádné atributy, je zobrazen souhrn výchozích atributů. + 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. - attribute - atribut + KeePassXC - cross-platform password manager + KeePassXC – aplikace pro správu hesel, fungující na vícero operačních systémech - Name of the entry to show. - Název položky k zobrazení. + filenames of the password databases to open (*.kdbx) + soubory s databázemi hesel k otevření (*.kdbx) - NULL device - NULL zařízení + path to a custom config file + umístění vlastního souboru s nastaveními - error reading from device - Chyba při čtení ze zařízení + key file of the database + soubor s klíčem k databázi - file empty ! - - soubor je prázdný! - + read password of the database from stdin + načíst heslo k databázi ze standardního vstupu - malformed string - špatně formovaný řetězec + Parent window handle + Obecný identifikátor (handle) nadřazeného okna - missing closing quote - chybějící uzavírací uvozovka + Another instance of KeePassXC is already running. + Již je spuštěná jiná instance KeePassXC. - Group - Skupina + Fatal error while testing the cryptographic functions. + Při zkoušení šifrovacích funkcí byl zjištěn fatální nedostatek. - Title - Titulek + KeePassXC - Error + KeePassXC – chyba - Username - Uživatelské jméno + Database password: + Heslo databáze: - Password - Heslo + Cannot create new group + + + + QtIOCompressor - Notes - Poznámky + Internal zlib error when compressing: + Během komprimace se vyskytla vnitřní chyba v knihovně zlib: - Last Modified - Okamžik poslední úpravy + Error writing to underlying device: + Došlo k chybě při zápisu na zařízení, na kterém se nachází: - Created - Vytvořeno + Error opening underlying device: + Došlo k chybě při otevírání zařízení, na kterém se nachází: - Legacy Browser Integration - Starý způsob napojení webového prohlížeče + Error reading data from underlying device: + Došlo k chybě při čtení dat ze zařízení, na kterém se nachází: - Browser Integration - Napojení na webový prohlížeč + Internal zlib error when decompressing: + Během rozbalování se vyskytla vnitřní chyba v knihovně zlib: + + + QtIOCompressor::open - YubiKey[%1] Challenge Response - Slot %2 - %3 - Výzva–odpověď YubiKey[%1] – slot %2 - %3 + The gzip format not supported in this version of zlib. + Použitý formát gzip komprese není podporován verzí knihovny zlib, která je právě používána na tomto systému. - Press - Stisknout + Internal zlib error: + Vnitřní chyba v knihovně zlib: + + + SSHAgent - Passive - Pasivní + Agent connection failed. + Připojení k agentovi se nezdařilo. - SSH Agent - SSH agent + Agent protocol error. + Chyba protokolu agenta. - Generate a new random diceware passphrase. - Vytvořit náhodnou diceware heslovou frázi. + No agent running, cannot add identity. + Není spuštěný žádný agent, identitu nelze přidat. - Word count for the diceware passphrase. - Počet slov pro diceware heslovou frázi. + No agent running, cannot remove identity. + Není spuštěný žádný agent, identitu není možné odebrat. - count - počet + Agent refused this identity. Possible reasons include: + Agent tuto identitu odmítl. Mezi možné důvody patří: - Wordlist for the diceware generator. -[Default: EFF English] - Slovník pro diceware generátor. -[Výchozí: EFF angličtina] + 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). - Generate a new random password. - Vytvořit nové náhodné heslo. + A confirmation request is not supported by the agent (check options). + Požadavek na potvrzení není podporován agentem (zkontrolujte volby). + + + SearchHelpWidget - Length of the generated password. - Délka vytvářeného hesla. + Search Help + Nápověda ke hledání - Use lowercase characters in the generated password. - Použít ve vytvářeném heslu malá písmena. + Search terms are as follows: [modifiers][field:]["]term["] + Pojmy hledejte následovně: [modifikátory][kolonka:]["]pojem["] - Use uppercase characters in the generated password. - Použít ve vytvářeném heslu velká písmena. + Every search term must match (ie, logical AND) + Je třeba shody v každém hledaném termínu (tj, logické A) - Use numbers in the generated password. - Použít ve vytvářeném heslu číslice. + Modifiers + Modifikátory - Use special characters in the generated password. - Použít ve vytvářeném heslu speciální znaky. + exclude term from results + vynechat pojem z výsledků - Use extended ASCII in the generated password. - Použít ve vytvářeném heslu rozšířené ASCII. + match term exactly + hledat přesnou shodu s pojmem - - - QtIOCompressor - Internal zlib error when compressing: - Během komprimace se vyskytla vnitřní chyba v knihovně zlib: + use regex in term + použít v pojmu regulární výraz - Error writing to underlying device: - Došlo k chybě při zápisu na zařízení, na kterém se nachází: + Fields + Kolonky - Error opening underlying device: - Došlo k chybě při otevírání zařízení, na kterém se nachází: + Term Wildcards + Zástupné znaky pojmu - Error reading data from underlying device: - Došlo k chybě při čtení dat ze zařízení, na kterém se nachází: + match anything + shoda s čímkoli - Internal zlib error when decompressing: - Během rozbalování se vyskytla vnitřní chyba v knihovně zlib: + match one + shoda s jedním - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Použitý formát gzip komprese není podporován verzí knihovny zlib, která je právě používána na tomto systému. + logical OR + logické NEBO - Internal zlib error: - Vnitřní chyba v knihovně zlib: + Examples + Příklady SearchWidget - - Search... - Hledat… - 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ř - - 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. + + Import + Importovat - KeePassXC: No keys found - KeePassXC: Klíče nebyly nalezeny + Export + Export - No shared encryption-keys found in KeePassHttp Settings. - V nastavení KeePassHttp nebyly nalezeny žádné sdílené šifrovací klíče. + Imported certificates + Importované certifikáty - KeePassXC: Settings not available! - KeePassXC: Nastavení nejsou k dispozici! + Trust + Důvěra - The active database does not contain an entry of KeePassHttp Settings. - Právě otevřená databáze neobsahuje žádný záznam nastavení KeePassHttp. + Ask + Ptát se - Removing stored permissions... - Odstraňování uložených oprávnění… + Untrust + Nevěřit - Abort - Přerušit + Remove + Odebrat - KeePassXC: Removed permissions - KeePassXC: Odebraná oprávnění + Path + Popis umístě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. + + Status + Stav - KeePassXC: No entry with permissions found! - KeePassXC: Nebyl nalezen záznam s oprávněními! + Fingerprint + Otisk - The active database does not contain an entry with permissions. - Právě otevřená databáze neobsahuje záznam s oprávněními. + Certificate + Certifikát - - - SettingsWidget - Application Settings - Nastavení aplikace + Trusted + Důvěryhodný - General - Obecné + Untrusted + Nedůvěryhodný - Security - Zabezpečení + Unknown + Neznámý - Access error for config file %1 - Chyba přístupu pro soubor s nastaveními %1 + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - Základní nastavení + KeeShare key file + Soubor s klíček pro KeeShare - Start only a single instance of KeePassXC - Spouštět pouze jedinou instanci KeePassXC + All files + Veškeré soubory - Remember last databases - Pamatovat si nedávno otevřené databáze + Select path + Vybrat umístění - Remember last key files and security dongles - Pamatovat si minule použité soubory s klíči a zabezpečovací klíčenky + Exporting changed certificate + Exportování změněného certifikátu - Load previous databases on startup - Při spouštění aplikace načíst minule otevřené databáze + 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? - Automatically save on exit - Před ukončením aplikace automaticky uložit případné změny + Signer: + + + + ShareObserver - Automatically save after every change - Po každé změně hned automaticky uložit + Import from container without signature + Importovat z kontejneru bez podpisu - Automatically reload the database when modified externally - V případě úpravy zvenčí, automaticky opětovně načíst databázi + 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? - Minimize when copying to clipboard - Po zkopírování údaje do schránky odklidit okno aplikace jeho automatickou minimalizací + Import from container with certificate + Importovat z kontejneru s certifikátem - Minimize window at application startup - Spouštět aplikaci s minimalizovaným oknem + Not this time + Tentokrát ne - Use group icon on entry creation - Pro vytvářený záznam použít ikonu skupiny, do které spadá + Never + Nikdy - 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) + Always + Vždy - Hide the Details view - Skrýt podrobný pohled + Just this time + Jen pro teď - Show a system tray icon - Zobrazovat ikonu v oznamovací oblasti systémového panelu + Import from %1 failed (%2) + Import z %1 se nezdařil (%2) - Hide window to system tray when minimized - Minimalizovat okno aplikace do oznamovací oblasti systémového panelu + Import from %1 successful (%2) + Import z %1 úspěšný (%2) - 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 + Imported from %1 + Importováno z %1 - Dark system tray icon - Tmavá ikona v oznamovací oblasti systémového panelu + Signed share container are not supported - import prevented + Kontejner podepsaného sdílení není podporován – importu zabráněno - Language - Jazyk + File is not readable + Soubor není čitelný - Auto-Type - Automatické vyplňování + Invalid sharing container + Neplatný kontejner pro sdílení - 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í + Untrusted import prevented + Zabráněno nedůvěryhodnému importu - 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í + Successful signed import + Úspěšný podepsaný import - Always ask before performing Auto-Type - Vždy se zeptat před provedením automatického vyplnění + Unexpected error + Neočekávaná chyba - Global Auto-Type shortcut - Klávesová zkratka pro všeobecné automatické vyplňování + Unsigned share container are not supported - import prevented + Kontejner nepodepsaného sdílení není podporován – importu zabráněno - Auto-Type delay - Prodleva automatického vyplnění + Successful unsigned import + Úspěšný nepodepsaný import - ms - Milliseconds - ms + File does not exist + Soubor neexistuje - Startup - Spouštění + Unknown share container type + Neznámý typ kontejneru pro sdílení - File Management - Správa souboru + Overwriting signed share container is not supported - export prevented + Přepsání podepsaného kontejneru sdílení není podporováno – exportu zabráněno - 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.) + Could not write export container (%1) + Nedaří se zapsat exportní kontejner (%1) - Backup database file before saving - Před uložením zazálohovat databázový soubor + Overwriting unsigned share container is not supported - export prevented + Přepsání nepodepsaného kontejneru sdílení není podporováno – exportu zabráněno - Entry Management - Správa záznamu + Could not write export container + Nedaří se zapsat do exportního kontejneru - General - Obecné + Unexpected export error occurred + Došlo k neočekávané chybě exportu - - - SettingsWidgetSecurity - Timeouts - Časové limity + Export to %1 failed (%2) + Export do %1 se nezdařil (%2) - Clear clipboard after - Vymazat obsah schránky po uplynutí + Export to %1 successful (%2) + Export do %1 úspěšný (%2) - sec - Seconds - sek. + Export to %1 + Exportovat do %1 - Lock databases after inactivity of - Uzamknout databázi při nečinnosti delší než + Do you want to trust %1 with the fingerprint of %2 from %3? + Věříte %1 s otiskem %2 od %3? {1 ?} {2 ?} - Convenience - Pohodlí + Multiple import source path to %1 in %2 + - 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 + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Při minimalizaci okna uzamknout databáze + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Pokud je viditelné, nevyžadovat zopakování zadání hesla + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Hesla vždy viditelná (nezakrývat hvězdičkami) + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Skrýt hesla v náhledovém panelu + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Skrývat ve výchozím stavu poznámky k položkám + Timed Password + Časované heslo - Privacy - Soukromí + 000000 + 000000 + + + Copy + Kopírovat + + 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 + + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Použít Google jako náhradní zdroj pro stahování ikon webů + Copy + Kopírovat - Re-lock previously locked database after performing Auto-Type - Po provedení automatického vyplnění opět zamknout dříve uzamčenou databázi. + 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. + + + There was an error creating the QR code. + Došlo k chybě při vytváření QR kódu. + + + Closing in %1 seconds. + Zavření za %1 sekund. - 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 + sec + Seconds + sek. + + + Code size: + Velikost kódu: 6 digits 6 číslic - Code size: - Velikost kódu: + 7 digits + 7 číslic - sec - Seconds - sek. + 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. + + + 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. - - - UnlockDatabaseWidget - Unlock database - Odemknout databázi + 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 - - Remove an entry from the database. - Odebrat položku z databáze. - - - Path of the database. - Umístění databáze. - - - Path of the entry to remove. - Popis umístění položky k odebrání. - + YubiKeyEditWidget - 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) + Refresh + Načíst znovu - path to a custom config file - umístění vlastního souboru s nastaveními + YubiKey Challenge-Response + YubiKey výzva-odpověď - key file of the database - soubor s klíčem k databázi + <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> - read password of the database from stdin - načíst heslo k databázi ze standardního vstupu + No YubiKey detected, please ensure it's plugged in. + Nezjištěno žádné YubiKey zařízení – ověřte, že je připojené. - 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 88ea408dd2..558cfbd6fc 100644 --- a/share/translations/keepassx_da.ts +++ b/share/translations/keepassx_da.ts @@ -38,80 +38,290 @@ Kopier til udklipsholder - Version %1 - - Version %1 - + Project Maintainers: + Projektet vedligeholdes af: + + + 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. + + + AgentSettingsWidget - Revision: %1 - Revision: %1 + Enable SSH Agent (requires restart) + Slå SSH Agenten til (kræver genstart) - Distribution: %1 - Distribution: %1 + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Libraries: - Biblioteker: + Application Settings + Programindstillinger - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operativsystem: %1 -CPU-arkitektur: %2 -Kerne: %3 %4 + General + Generelt - Enabled extensions: - Aktiverede udvidelser: + Security + Sikkerhed - Project Maintainers: - Projektet vedligeholdes af: + Access error for config file %1 + Adgangsfejl for konfigurationsfil %1 - 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. + Icon only + - Build Type: %1 - - Opret type:%1 - + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style + - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP Bekræft Adgang + Basic Settings + Grundlæggende indstillinnger - Remember this decision - Husk dette valg + Startup + Opstart - Allow - Tillad + Start only a single instance of KeePassXC + Start kun en enkelt instans af KeePassXC - Deny - Afvis + Remember last databases + Husk seneste databaser - %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. + 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 + - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Slå SSH Agenten til (kræver genstart) + 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 + @@ -216,18 +426,38 @@ Vælg venligst hvorvidt du vil tillade denne adgang. - BrowserOptionDialog + BrowserEntrySaveDialog - Dialog - Dialog + KeePassXC-Browser Save Entry + - This is required for accessing your databases with KeePassXC-Browser - Dette er nødvendigt for at tilgå din database med KeePassXC-Browser + Ok + - Enable KeepassXC browser integration - Slå KeepassXC browser integration til + Cancel + Afbryd + + + 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 + Dette er nødvendigt for at tilgå din database med KeePassXC-Browser + + + Enable KeepassXC browser integration + Slå KeepassXC browser integration til General @@ -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 @@ -362,20 +584,41 @@ Vælg venligst hvorvidt du vil tillade denne adgang. <b>Advarsel:</b>De følgende instillinger kan være farlige! - Executable Files (*.exe);;All Files (*.*) - Eksekverbare Filer (*.exe);;Alle Filer (*.*) + Select custom proxy location + Vælg en brugerdefineret proxy lokation - Executable Files (*) - Eksekverbare Filer (*) + &Tor Browser + - Select custom proxy location - Vælg en brugerdefineret proxy lokation + <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 + - 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. + 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 - - - 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 - - - - ChangeMasterKeyWidget - - Password - Kodeord - - - Enter password: - Indtast kodeord - - - Repeat password: - Gentag kodeord - - - &Key file - &Key fil - - - 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... + Converting attributes to custom data… + - Unable to create Key File : - Kan ikke oprette Nøglefil : + KeePassXC: Converted KeePassHTTP attributes + - Select a key file - Vælg en nøglefil + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - Empty password - Tomt kodeord + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - Vil du virkelig bruge en tom streng som kodeord? + KeePassXC: No entry with KeePassHTTP attributes found! + - Different passwords supplied. - Andre kodeord leveret. + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 - Kunne ikke sætte %1 som Nøglefil: -%2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format - Forældet nøglefilformat + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -659,48 +795,88 @@ Overvej at generere en ny nøglefil. Original data: - Error(s) detected in CSV file ! - Fejl detekteret i CSV-fil ! + Error + Fejl - more messages skipped] - flere beskeder blev sprunget over] + Empty fieldname %1 + - Error - Fejl + column %1 + - CSV import: writer has errors: - - CSV import: udskriver har fejl: - + Error(s) detected in CSV file! + - - - CsvImportWizard - - Error - Fejl + + [%n more message(s) skipped] + - Unable to calculate master key - Kan ikke beregne hovednøgle + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - %n byte(s),%n byte(s), + %n column(s) + + + + %1, %2, %3 + file info: bytes, rows, columns + - %n row(s), - %n række(r),%n række(r), + %n byte(s) + - %n column(s) - %n kolonne(r)%n kolonne(r) + %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,106 +934,169 @@ Overvej at generere en ny nøglefil. Select key file Vælg nøglefil - - - DatabaseRepairWidget - Repair database - Reparer database + TouchID for quick unlock + + + + Unable to open the database: +%1 + - Error - Fejl + Can't open key file: +%1 + + + + DatabaseSettingWidgetMetaData - Can't open key file - Kan ikke åbne nøglefil + Passwords + Kodeord + + + DatabaseSettingsDialog - Unable to open the database. - Kan ikke åbne databasen. + Advanced Settings + + + + General + Generelt - Database opened fine. Nothing to do. - Databasen åbnede fint. Intet at gøre. + Security + Sikkerhed - Success - Succes + Master Key + - The database has been successfully repaired -You can now save it. - Databasen er blevet succesfuldt repareret -Du kan gemme den nu. + Encryption Settings + - Unable to repair the database. - Kan ikke reparere databasen. + Browser Integration + Browser-integration - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Generelt + KeePassXC-Browser settings + - Encryption - Kryptering + &Disconnect all browsers + &Fjern tilslutning til alle browsere - Number of rounds too high - Key transformation rounds - Antallet af runder er for højt + Forg&et all site-specific settings on entries + - 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! - Du benytter et meget højt antal runder af nøgletransformationer med Argon2. - -Hvis du vil beholde antallet, så kan din database tage timer eller dage (eller endnu længere) at åbne! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Understood, keep number - Forstået, beholder nummer + Stored keys + - Cancel - Afbryd + Remove + Fjern - Number of rounds too low - Key transformation rounds - Antallet af runder er for lavt + Delete the selected key? + - 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! - Du bruger en meget lavt antal nøgletransformeringsrunder med AES-KDF. - -Hvis du beholder dette antal, så kan din database være nem af knække! + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + - KDF unchanged - KDF uændret + Key + Nøgle - Failed to transform key with new KDF parameters; KDF unchanged. - Kunne ikke transformere nøglen med nye KDF-parametre; KDF er uændret. + 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 - 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… + Fjerner gemte tilladelser... + + + Abort + Afbryd + + + KeePassXC: Removed permissions + KeePassXC: Fjernede tilladelser + - thread(s) - Threads for parallel execution (KDF settings) + 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 @@ -899,7 +1130,114 @@ Hvis du beholder dette antal, så kan din database være nem af knække! Parallelism: - Parallelitet + 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 + Key transformation rounds + Antallet af runder er for højt + + + 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! + Du benytter et meget højt antal runder af nøgletransformationer med Argon2. + +Hvis du vil beholde antallet, så kan din database tage timer eller dage (eller endnu længere) at åbne! + + + Understood, keep number + Forstået, beholder nummer + + + Cancel + Afbryd + + + Number of rounds too low + Key transformation rounds + Antallet af runder er for lavt + + + 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! + Du bruger en meget lavt antal nøgletransformeringsrunder med AES-KDF. + +Hvis du beholder dette antal, så kan din database være nem af knække! + + + KDF unchanged + KDF uændret + + + Failed to transform key with new KDF parameters; KDF unchanged. + Kunne ikke transformere nøglen med nye KDF-parametre; KDF er uændret. + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + @@ -950,178 +1288,173 @@ Hvis du beholder dette antal, så kan din database være nem af knække! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Rod + Sharing + - KeePass 2 Database - KeePass 2 Database + Breadcrumb + - All files - Alle filer + Type + - Open database - Åben database + Path + - File not found! - Filen blev ikke fundet! + Last Signer + - Unable to open the database. - Kan ikke åbne databasen. + Certificates + - File opened in read only mode. - Fil åbnet i skrivebeskyttet tilstand + > + Breadcrumb separator + + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Åbn CSV-fil + Add additional protection... + - CSV file - CSV-fil + No encryption key added + - All files (*) - Alle filer (*) + You must add at least one encryption key to secure your database! + - Merge database - Flet database + No password set + - Open KeePass 1 database - Åben KeePass 1 database + 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? + - KeePass 1 database - KeePass 1 database + Unknown error + Ukendt fejl - Close? - Luk? + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" er i redigeringstilstand. -Kassér ændringer og luk alligevel? + Database Name: + - Save changes? - Gem ændringer? + Description: + + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" blev ændret. -Gem disse ændringer? + KeePass 2 Database + KeePass 2 Database - Writing the database failed. - Kan ikke skrive til databasen. + All files + Alle filer - Passwords - Kodeord + Open database + Åben database - Save database as - Gem database som + CSV file + CSV-fil - Export database to CSV file - Eksportér databasen til CSV-fil + Merge database + Flet database - Writing the CSV file failed. - Kan ikke skrive til CSV-fil. - - - New database - Ny database + Open KeePass 1 database + Åben KeePass 1 database - locked - låst + KeePass 1 database + KeePass 1 database - Lock database - Lås database + Export database to CSV file + Eksportér databasen til CSV-fil - 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. + Writing the CSV file failed. + Kan ikke skrive til CSV-fil. - 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. + Database creation error + - Disable safe saves? - Slå sikre gem til? + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - 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? + The database file does not exist or is not accessible. + - - - DatabaseWidget - Searching... - Søger... + Select CSV file + - Change master key - Skift hovednøgle + New Database + - Delete entry? - Slet post? + %1 [New Database] + Database tab name modifier + - Do you really want to delete the entry "%1" for good? - Vil du virkelig slette posten "%1" permanent? + %1 [Locked] + Database tab name modifier + - Delete entries? - Slet poster? + %1 [Read-only] + Database tab name modifier + + + + DatabaseWidget - Do you really want to delete %1 entries for good? - Vil du virkelig slette %1 poster permanent? + Searching... + Søger... - Move entry to recycle bin? - Flyt post til papirkurven? + Do you really want to delete the entry "%1" for good? + Vil du virkelig slette posten "%1" permanent? 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 + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + - Generate TOTP Token - Generér TOTP Token + File opened in read only mode. + Fil åbnet i skrivebeskyttet tilstand - Close - Luk + Lock Database? + - General - Generelt + You are editing an entry. Discard changes and lock anyway? + - Password - Kodeord + "%1" was modified. +Save changes? + "%1" blev ændret. +Gem disse ændringer? - URL - URL + Database was modified. +Save changes? + - Expiration - Udløbsdato + Save changes? + Gem ændringer? - Username - Brugernavn + Could not open the new database file while attempting to autoreload. +Error: %1 + - Autotype - Auto-Indsæt + Disable safe saves? + Slå sikre gem til? - Searching - Søger + 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? - Attributes - Attributter + Writing the database failed. +%1 + - Attachments - Vedhæftninger + Passwords + Kodeord - Notes - Noter + Save database as + Gem database som - Window - Vindue + KeePass 2 Database + KeePass 2 Database - Sequence - Sekvens + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Search - Søg + Delete group + Slet gruppe - Clear - Ryd + Move group to recycle bin? + - Never - Aldrig + Do you really want to move the group "%1" to the recycle bin? + - [PROTECTED] - [BESKYTTET] + Successfully merged the database files. + - Disabled - Deaktiveret + Database was not modified by merge operation. + - 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,21 +2144,49 @@ 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 + - - - EditWidgetProperties - Created: - Oprettet: + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + - Modified: - Ændret: + 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: + Oprettet: + + + Modified: + Ændret: + + Accessed: Tilgået: @@ -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,109 +2396,159 @@ Dette kan få det påvirkede plugin til at svigte. Attachments Vedhæftninger + + Yes + + + + TOTP + + - EntryView + EntryPreviewWidget - Customize View - Tilpas visning + Generate TOTP Token + Generér TOTP Token - Hide Usernames - Skjul brugernavne + Close + Luk - Hide Passwords - Skjul kodeord + General + Generelt - Fit to window - Tilpas til vindue + Username + Brugernavn - Fit to contents - Tilpas til indhold + Password + Kodeord - Reset to defaults - Nulstil til standard-indstillinger + Expiration + Udløbsdato - Attachments (icon) - Vedhæftninger (ikon) + URL + URL - - - Group - Recycle Bin - Skraldespand + Attributes + Attributter - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: Kan ikke gemme fil! + Attachments + Vedhæftninger - Cannot save the native messaging script file. + 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 - - - HttpPasswordGeneratorWidget - Length: - Længde: + Enabled + Aktiveret - Character Types - Tegntyper + Disabled + Deaktiveret - Upper Case Letters - Store Bogstaver + Share + + + + EntryView - A-Z - A-Z + Customize View + Tilpas visning - Lower Case Letters - Små Bogstaver + Hide Usernames + Skjul brugernavne - a-z - a-z + Hide Passwords + Skjul kodeord - Numbers - Numre + Fit to window + Tilpas til vindue - 0-9 - 0-9 + Fit to contents + Tilpas til indhold - Special Characters - Specialtegn + Reset to defaults + Nulstil til standard-indstillinger - /*_& ... - /*_& ... + Attachments (icon) + Vedhæftninger (ikon) + + + Group - Exclude look-alike characters - Udeluk lool-alike tegn + Recycle Bin + Skraldespand - Ensure that the password contains characters from every group - Vær sikker på at dit kodeord indeholder tegn fra alle grupper + [empty] + group has no children + + + + HostInstaller - Extended ASCII - Udvidet ASCII + KeePassXC: Cannot save file! + KeePassXC: Kan ikke gemme fil! + + + Cannot save the native messaging script file. + 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 + + 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 – anbefalet) + Import from share %1 + - - - Main - Existing single-instance lock file is invalid. Launching new instance. - Eksisterende enkelt-instans låsefil er invalid. Starter ny instans. + Export to share %1 + - The lock file could not be created. Single-instance mode disabled. - Låsefil kunne ikke oprettes. Enkelt-instans-tilstand slået fra. + Synchronize with share %1 + + + + KeyComponentWidget - Another instance of KeePassXC is already running. - En anden instans af KeePassXC kører allerede. + Key Component + - Fatal error while testing the cryptographic functions. - Fatal fejl ved test af kryptografiske funktioner. + Key Component Description + - KeePassXC - Error - KeePassXC - Fejl + 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,720 +3413,1420 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Invalid nøglefil, forventede en OpenSSH nøgle + &Donate + - PEM boundary mismatch - PEM grænse-mismatch + Report a &bug + - Base64 decoding failed - Base64 afkodning fejlede + 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. + - Key file way too small. - Nøglefil er alt for lille. + &Import + - Key file magic header id invalid - Nøglefil magic i header er invalid + Copy att&ribute... + - Found zero keys - Fandt ingen nøgler + TOTP... + - Failed to read public key. - Kunne ikke læse offentlig nøgle. + &New database... + - Corrupted key file, reading private key failed - Korrupt nøglefil, kan ikke læse privat nøgle + Create a new database + - No private key payload to decrypt - Der er ingen privat nøgle at dekryptere + &Merge from database... + - Trying to run KDF without cipher - Prøver at køre KDF uden ciffer + Merge from another KDBX database + - Passphrase is required to decrypt this key - Kodefrase er nødvendig for at dekryptere denne nøgle + &New entry + - Key derivation failed, key file corrupted? - Nøgleafledning fejlede, er nøglefilen korrupt? + Add a new entry + - Decryption failed, wrong passphrase? - Dekryptering fejlede, forkert kodefrase? + &Edit entry + - Unexpected EOF while reading public key - Offentlig nøgle sluttede uventet under læsningen + View or edit entry + - Unexpected EOF while reading private key - Privat nøgle sluttede uventet under læsningen + &New group + - Can't write public key as it is empty - Kan ikke skrive offentlig nøgle, da den er tom + Add a new group + - Unexpected EOF when writing public key - Offentlig nøgle sluttede uventet under skrivning + Change master &key... + - Can't write private key as it is empty - Kan ikke skrive nøglen da den er tom + &Database settings... + - Unexpected EOF when writing private key - Privat nøgle sluttede uventet under skrivnig + Copy &password + - Unsupported key type: %1 - Ikke-understøttet nøgletype: %1 + Perform &Auto-Type + - Unknown cipher: %1 - Ukendt ciffer: %1 + Open &URL + - Cipher IV is too short for MD5 kdf - Ciffer IV er for kort til MD5 KDF + KeePass 1 database... + - Unknown KDF: %1 - Ukendt KDF: %1 + Import a KeePass 1 database + - Unknown key type: %1 - Ukendt nøgletype: %1 + CSV file... + - - - OptionDialog - Dialog - Dialog + Import a CSV file + - This is required for accessing your databases from ChromeIPass or PassIFox - Dette er nødvendigt for at tilgå din database med ChromeIPass eller PassIFox + Show TOTP... + - Enable KeePassHTTP server - Slå KeePassHTP server til + Show TOTP QR Code... + - General - Generelt + Check for Updates... + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Vis en notifikation når legitimationsoplysninger forespørges + Share entry + - 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. + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + - &Return only best matching entries - &Returnér kun de bedst matchende poster + Check for updates on startup? + - Re&quest to unlock the database if it is locked - Anmod om at låse databasen op hvis den er låst + Would you like KeePassXC to check for updates on startup? + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Kun poster med samme skema (http://, https://, ftp://, ...) bliver returneret. + You can always check for updates manually from the application menu. + + + + Merger - &Match URL schemes - &Match URL skemaer + Creating missing %1 [%2] + - Sort matching entries by &username - Sorter matchende poster efter &brugernavn + Relocating %1 [%2] + - Sort &matching entries by title - Sorter &passende poster efter navn + Overwriting %1 [%2] + - R&emove all shared encryption keys from active database - Fjern alle delte krypteringsnøgler i den aktive database + older entry merged from database "%1" + - Re&move all stored permissions from entries in active database - Fjern alle gemte tilladelser fra poster i den aktive database + Adding backup for older target %1 [%2] + - Password Generator - Kodeordsgenerator + Adding backup for older source %1 [%2] + - Advanced - Avanceret + Reapplying older target entry on top of newer source %1 [%2] + - Always allow &access to entries - Tillad altid &adgang til poster + Reapplying older source entry on top of newer target %1 [%2] + - Always allow &updating entries - Tillad alltid &optaterede poster + Synchronizing from newer source %1 [%2] + - 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. + Synchronizing from older source %1 [%2] + - Searc&h in all opened databases for matching entries - &Returnér kun de bedst matchende poster + Deleting child %1 [%2] + - Automatically creating or updating string fields is not supported. - At automatisk skabe eller opdatere tekst-felter er ikke understøttet. + Deleting orphan %1 [%2] + - &Return advanced string fields which start with "KPH: " - &Vis avancerede tekst felter som begynder med "KPH:" + Changed deleted objects + - HTTP Port: - HTTP Port: + Adding missing icon %1 + + + + NewDatabaseWizard - Default port: 19455 - Standard port: 19455 + 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 + + Invalid key file, expecting an OpenSSH key + Invalid nøglefil, forventede en OpenSSH nøgle + + + PEM boundary mismatch + PEM grænse-mismatch + + + Base64 decoding failed + Base64 afkodning fejlede + + + Key file way too small. + Nøglefil er alt for lille. + + + Key file magic header id invalid + Nøglefil magic i header er invalid + + + Found zero keys + Fandt ingen nøgler + + + Failed to read public key. + Kunne ikke læse offentlig nøgle. + + + Corrupted key file, reading private key failed + Korrupt nøglefil, kan ikke læse privat nøgle + + + No private key payload to decrypt + Der er ingen privat nøgle at dekryptere + + + Trying to run KDF without cipher + Prøver at køre KDF uden ciffer + + + Passphrase is required to decrypt this key + Kodefrase er nødvendig for at dekryptere denne nøgle + + + Key derivation failed, key file corrupted? + Nøgleafledning fejlede, er nøglefilen korrupt? + + + Decryption failed, wrong passphrase? + Dekryptering fejlede, forkert kodefrase? + + + Unexpected EOF while reading public key + Offentlig nøgle sluttede uventet under læsningen + + + Unexpected EOF while reading private key + Privat nøgle sluttede uventet under læsningen + + + Can't write public key as it is empty + Kan ikke skrive offentlig nøgle, da den er tom + + + Unexpected EOF when writing public key + Offentlig nøgle sluttede uventet under skrivning + + + Can't write private key as it is empty + Kan ikke skrive nøglen da den er tom + + + Unexpected EOF when writing private key + Privat nøgle sluttede uventet under skrivnig + + + Unsupported key type: %1 + Ikke-understøttet nøgletype: %1 + + + Unknown cipher: %1 + Ukendt ciffer: %1 + + + Cipher IV is too short for MD5 kdf + Ciffer IV er for kort til MD5 KDF + + + Unknown KDF: %1 + Ukendt KDF: %1 + + + Unknown key type: %1 + Ukendt nøgletype: %1 + + + + PasswordEditWidget + + Enter password: + Indtast kodeord + + + Confirm password: + + + + Password + Kodeord + + + <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 + + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + Kodeord: + + + strength + Password strength + styrke + + + entropy + entropi: + + + Password + Kodeord + + + Character Types + Tegntyper + + + Upper Case Letters + Store Bogstaver + + + Lower Case Letters + Små Bogstaver + + + Numbers + Numre + + + Special Characters + Specialtegn + + + Extended ASCII + Udvidet ASCII + + + Exclude look-alike characters + Udeluk lool-alike tegn + + + Pick characters from every group + Vælg tegn fra alle grupper: + + + &Length: + &Længde: + + + Passphrase + Nøgleord sætning/frase: + + + Wordlist: + Ordliste: + + + Word Separator: + Ord separator: + + + Copy + Kopier + + + Accept + Acceptér + + + Close + Luk + + + Entropy: %1 bit + Entropy: %1 bit + + + Password Quality: %1 + Kodeord kvalitet: %1 + + + Poor + Password quality + Dårligt + + + Weak + Password quality + Svagt + + + Good + Password quality + Godt + + + Excellent + 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 - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC vil lytte til dette port på 127.0.0.1 + Merge + + + + + QObject + + Database not opened + Databasen er ikke åbnet + + + Database hash not available + Databasehash er ikke tilgængeligt + + + Client public key not received + Offentlig nøgle for klient ikke modtaget + + + Cannot decrypt message + Kan ikke dekryptere besked + + + Action cancelled or denied + Handling afbrudt eller nægtet + + + KeePassXC association failed, try again + KeePassXC associering fejlede, prøv igen + + + Encryption key is not recognized + Krypteringsnøgle ikke genkendt + + + Incorrect action + Forkert handling + + + Empty message received + Tom besked modtaget + + + No URL provided + Ingen URL angivet + + + No logins found + Ingen logins fundet + + + Unknown error + Ukendt fejl + + + Add a new entry to a database. + Tilføj en ny post til en database. + + + Path of the database. + Sti til databasen. + + + Key file of the database. + Databasens nøglefil + + + path + sti + + + Username for the entry. + Brugernavn for posten. + + + username + brugernavn + + + URL for the entry. + URL for posten. + + + URL + URL + + + Prompt for the entry's password. + Spørg om postens kodeord. + + + Generate a password for the entry. + Generér et kodeord for posten. + + + Length for the generated password. + Længde af genereret kodeord. + + + length + længde + + + Path of the entry to add. + Sti for posten, som skal tilføjes. + + + Copy an entry's password to the clipboard. + Kopiér en posts kodeord til udklipsholder. + + + Path of the entry to clip. + clip = copy to clipboard + Sti til posten, som skal klippes. + + + Timeout in seconds before clearing the clipboard. + Timeout i sekunder før udklipsholderen ryddes. + + + Edit an entry. + Rediger en post. + + + Title for the entry. + Titel for post. + + + title + titel + + + Path of the entry to edit. + Sti til posten, som skal redigeres. + + + Estimate the entropy of a password. + Estimat for entropi af et kodeord. + + + Password for which to estimate the entropy. + Koderd, som entropi skal estimeres for. + + + Perform advanced analysis on the password. + Udfør advanceret analyse af kodeordet. + + + Extract and print the content of a database. + Dekomprimer og print indeholdet af en database. + + + Path of the database to extract. + Sti til databasen, som skal dekomprimeres + + + Insert password to unlock %1: + Indsæt kodeord for at låse %1 op: + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + ADVARSEL: Du benytter et forældet nøglefilsformat, som muligvis ikke vil blive understøttet i fremtiden. + +Overvej at generere en ny nøglefil. + + + + +Available commands: + + + +Tilgængelige kommandoer: + + + + Name of the command to execute. + Navn på kommando, som skal udføres. + + + List database entries. + List poster i databasen. + + + Path of the group to list. Default is / + Sti til gruppen, som skal listes. Standard er / + + + Find entries quickly. + Find poster hurtigt. + + + Search term. + Søgeudtryk. + + + Merge two databases. + Kombiner to databaser. + + + Path of the database to merge into. + Sti til databasen, som der skal kombineres ind i. + + + Path of the database to merge from. + Sti til databasen, som der skal kombineres fra. + + + Use the same credentials for both database files. + Brug samme legitimationsoplysninger til begge databasefiler. + + + Key file of the database to merge from. + Nøglefil for databasen, som der skal kombineres fra. + + + Show an entry's information. + Vis en posts 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. + Navne på attributter, som skal vises. Denne indstilling kan blive angivet mere end en gang, med hver attribut vist per linje i den angivne orden. Hvis ingen attributter bliver angivet vil en oversigt af standardattributter blive vist. + + + attribute + attribut + + + Name of the entry to show. + Navn på posten, som skal vises. + + + NULL device + NULL enhed + + + error reading from device + fejl ved læsning fra enhed + + + malformed string + Misdannet streng + + + missing closing quote + Mangler afsluttende kvoteringstegn + + + Group + Gruppe + + + Title + Titel + + + Username + Brugernavn - <b>Warning:</b> The following options can be dangerous! - <b>Advarsel:</b>De følgende instillinger kan være farlige! + Password + Kodeord - <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> + Notes + Noter - Cannot bind to privileged ports - Kan ikke forbinde via priviligerede porte + Last Modified + Sidst ændret - Cannot bind to privileged ports below 1024! -Using default port 19455. - Kan ikke forbinde til prioriterede port under 1024! -Bruger standard port 19455. + Created + Oprettet - - - PasswordGeneratorWidget - %p% - %p% + Browser Integration + Browser-integration - Password: - Kodeord: + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey[%1] Udfordring-Svar - Slot %2 - %3 - strength - Password strength - styrke + Press + Tryk - entropy - entropi: + Passive + Passiv - Password - Kodeord + SSH Agent + SSH Agent - Character Types - Tegntyper + Generate a new random diceware passphrase. + Generer en tilfældig diceware nøglefrase. - Upper Case Letters - Store Bogstaver + Word count for the diceware passphrase. + Antal af ord for diceware nøglefrase. - Lower Case Letters - Små Bogstaver + Wordlist for the diceware generator. +[Default: EFF English] + Ordliste for diceware generator. +[Standard: EFF Engelsk] - Numbers - Numre + Generate a new random password. + Generér et nyt tilfædligt kodeord. - Special Characters - Specialtegn + Invalid value for password length %1. + - Extended ASCII - Udvidet ASCII + Could not create entry with path %1. + - Exclude look-alike characters - Udeluk lool-alike tegn + Enter password for new entry: + - Pick characters from every group - Vælg tegn fra alle grupper: + Writing the database failed %1. + - &Length: - &Længde: + Successfully added entry %1. + - Passphrase - Nøgleord sætning/frase: + Copy the current TOTP to the clipboard. + - Wordlist: - Ordliste: + Invalid timeout value %1. + - Word Count: - Antal ord: + Entry %1 not found. + - Word Separator: - Ord separator + Entry with path %1 has no TOTP set up. + - Generate - Opret + Entry's current TOTP copied to the clipboard! + - Copy - Kopier + Entry's password copied to the clipboard! + - - Accept - Acceptér + + Clearing the clipboard in %1 second(s)... + - Close - Luk + Clipboard cleared! + - Apply - Entropy: %1 bit + Silence password prompt and other secondary outputs. + - Entropy: %1 bit - Entropy: %1 bit + count + CLI parameter + antal - Password Quality: %1 - Kodeord kvalitet: %1 + Invalid value for password length: %1 + - Poor - Password quality - Dårligt + Could not find entry with path %1. + - Weak - Password quality - Svagt + Not changing any field for entry %1. + - Good - Password quality - Godt + Enter new password for entry: + - Excellent - Password quality - Udmærket + Writing the database failed: %1 + - - - QObject - Database not opened - Databasen er ikke åbnet + Successfully edited entry %1. + - Database hash not available - Databasehash er ikke tilgængeligt + Length %1 + - Client public key not received - Offentlig nøgle for klient ikke modtaget + Entropy %1 + - Cannot decrypt message - Kan ikke dekryptere besked + Log10 %1 + - Timeout or cannot connect to KeePassXC - Tiden er udløbet eller var ikke i stand til at forbinde til KeePassXC + Multi-word extra bits %1 + - Action cancelled or denied - Handling afbrudt eller nægtet + Type: Bruteforce + - 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? + Type: Dictionary + - KeePassXC association failed, try again - KeePassXC associering fejlede, prøv igen + Type: Dict+Leet + - Key change was not successful - Nøgleændring fejlede + Type: User Words + - Encryption key is not recognized - Krypteringsnøgle ikke genkendt + Type: User+Leet + - No saved databases found - Ingen gemt database fundet + Type: Repeated + - Incorrect action - Forkert handling + Type: Sequence + - Empty message received - Tom besked modtaget + Type: Spatial + - No URL provided - Ingen URL angivet + Type: Date + - No logins found - Ingen logins fundet + Type: Bruteforce(Rep) + - Unknown error - Ukendt fejl + Type: Dictionary(Rep) + - Add a new entry to a database. - Tilføj en ny post til en database + Type: Dict+Leet(Rep) + - Path of the database. - Sti til databasen. + Type: User Words(Rep) + - Key file of the database. - Databasens nøglefil + Type: User+Leet(Rep) + - path - sti + Type: Repeated(Rep) + - Username for the entry. - Brugernavn for posten. + Type: Sequence(Rep) + - username - brugernavn + Type: Spatial(Rep) + - URL for the entry. - URL for posten. + Type: Date(Rep) + - URL - URL + Type: Unknown%1 + - Prompt for the entry's password. - Spørg om postens kodeord. + Entropy %1 (%2) + - Generate a password for the entry. - Generér et kodeord for posten. + *** Password length (%1) != sum of length of parts (%2) *** + - Length for the generated password. - Længde af genereret kodeord. + Failed to load key file %1: %2 + - length - længde + File %1 does not exist. + - Path of the entry to add. - Sti for posten, som skal tilføjes. + Unable to open file %1. + - Copy an entry's password to the clipboard. - Kopiér en posts kodeord til udklipsholder. + Error while reading the database: +%1 + - Path of the entry to clip. - clip = copy to clipboard - Sti til posten, som skal klippes. + Error while parsing the database: +%1 + - Timeout in seconds before clearing the clipboard. - Timeout i sekunder før udklipsholderen ryddes. + Length of the generated password + - Edit an entry. - Rediger en post. + Use lowercase characters + - Title for the entry. - Titel for post. + Use uppercase characters + - title - titel + Use numbers. + - Path of the entry to edit. - Sti til posten, som skal redigeres. + Use special characters + - Estimate the entropy of a password. - Estimat for entropi af et kodeord. + Use extended ASCII + - Password for which to estimate the entropy. - Koderd, som entropi skal estimeres for. + Exclude character set + - Perform advanced analysis on the password. - Udfør advanceret analyse af kodeordet. + chars + - Extract and print the content of a database. - Udtræk og print indeholdet af en database. + Exclude similar looking characters + - Path of the database to extract. - Sti til databasen, som skal dekomprimeres + Include characters from every selected group + - Insert password to unlock %1: - Indsæt kodeord for at låse %1 op: + Recursively list the elements of the group. + - Failed to load key file %1 : %2 - Kunne ikke indlæse nøglefil %1 : %2 + Cannot find group %1. + - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - ADVARSEL: Du benytter et forældet nøglefilsformat, som muligvis ikke vil blive understøttet i fremtiden. - -Overvej at generere en ny nøglefil. + Error reading merge file: +%1 + - - -Available commands: - - - -Tilgængelige kommandoer: - + Unable to save database to file : %1 + - Name of the command to execute. - Navn på kommando, som skal udføres. + Unable to save database to file: %1 + - List database entries. - List poster i databasen. + Successfully recycled entry %1. + - Path of the group to list. Default is / - Sti til gruppen, som skal listes. Standard er / + Successfully deleted entry %1. + - Find entries quickly. - Find poster hurtigt. + Show the entry's current TOTP. + - Search term. - Søgeudtryk. + ERROR: unknown attribute %1. + - Merge two databases. - Kombiner to databaser. + No program defined for clipboard manipulation + - Path of the database to merge into. - Sti til databasen, som der skal kombineres ind i. + Unable to start program %1 + - Path of the database to merge from. - Sti til databasen, som der skal kombineres fra. + file empty + - Use the same credentials for both database files. - Brug samme legitimationsoplysninger til begge databasefiler. + %1: (row, col) %2,%3 + - Key file of the database to merge from. - Nøglefil for databasen, som der skal kombineres fra. + AES: 256-bit + AES: 256-bit - Show an entry's information. - Vis en posts information. + Twofish: 256-bit + Twofish: 256-bit - 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. - Navne på attributter, som skal vises. Denne indstilling kan blive angivet mere end en gang, med hver attribut vist per linje i den angivne orden. Hvis ingen attributter bliver angivet vil en oversigt af standardattributter blive vist. + ChaCha20: 256-bit + ChaCha20: 256-bit - attribute - attribut + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – anbefalet) - Name of the entry to show. - Navn på posten, som skal vises. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - NULL device - NULL enhed + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - error reading from device + Invalid Settings + TOTP - file empty ! - + Invalid Key + TOTP - malformed string + Message encryption failed. - missing closing quote - Mangler afsluttende kvoteringstegn + No groups found + - Group - Gruppe + Create a new database. + - Title - Titel + File %1 already exists. + - Username - Brugernavn + Loading the key file failed + - Password - Kodeord + No key is set. Aborting database creation. + - Notes - Noter + Failed to save the database: %1. + - Last Modified - Sidst ændret + Successfully created new database. + - Created - Oprettet + Insert password to encrypt database (Press enter to leave blank): + - Legacy Browser Integration - Forældet Browser-integration + Creating KeyFile %1 failed: %2 + - Browser Integration - Browser-integration + Loading KeyFile %1 failed: %2 + - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] Udfordring-Svar - Slot %2 - %3 + Remove an entry from the database. + Fjern en post fra databasen. - Press - Tryk + Path of the entry to remove. + Sti til posten, som skal fjernes. - Passive - Passiv + Existing single-instance lock file is invalid. Launching new instance. + Eksisterende enkelt-instans låsefil er invalid. Starter ny instans. - SSH Agent - SSH Agent + The lock file could not be created. Single-instance mode disabled. + Låsefil kunne ikke oprettes. Enkelt-instans-tilstand slået fra. - Generate a new random diceware passphrase. - Generer en tilfældig diceware nøglefrase. + KeePassXC - cross-platform password manager + KeePassXC - password manager til flere platforme - Word count for the diceware passphrase. - Antal af ord for diceware nøglefrase. + filenames of the password databases to open (*.kdbx) + Filnavne på de kodeordsdatabaser som skal åbnes (*.kdbx) - count - antal + path to a custom config file + sti til brugerdefineret indstillingsfil - Wordlist for the diceware generator. -[Default: EFF English] - Ordliste for diceware generator. -[Standard: EFF Engelsk] + key file of the database + databasens nøglefil - Generate a new random password. - Generér et nyt tilfædligt kodeord. + read password of the database from stdin + Læs kodeord til databasen fra stdin - Length of the generated password. - Længde af det genererede kodeord. + Parent window handle + Forældrevindue handle - Use lowercase characters in the generated password. - Brug små bogstaver i det genererede kodeord. + Another instance of KeePassXC is already running. + En anden instans af KeePassXC kører allerede. - Use uppercase characters in the generated password. - Brug store bogstaver i det genererede kodeord. + Fatal error while testing the cryptographic functions. + Fatal fejl ved test af kryptografiske funktioner. - Use numbers in the generated password. - Brug tal i det genererede kodeord. + KeePassXC - Error + KeePassXC - Fejl - Use special characters in the generated password. - Brug specielle karakterer i det genererede kodeord. + Database password: + - Use extended ASCII in the generated password. - Brug udvidet ASCII i det genererede kodeord. + Cannot create new group + @@ -3647,11 +4864,97 @@ Tilgængelige kommandoer: - SearchWidget + 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 + + - Search... - Søg... + 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 - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Import + Importér - KeePassXC: No keys found - KeePassXC: Ingen nøgler fundet + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + - No shared encryption-keys found in KeePassHttp Settings. - Ingen delte krypteringsnøgler fundet i KeePassHttp indstillinger. + Remove + Fjern - KeePassXC: Settings not available! - KeePassXC: Indstilling er ikke tilgængelig! + Path + - The active database does not contain an entry of KeePassHttp Settings. - Den aktive database indeholder ikke en post med KeePassHttp indstillinger. + Status + - Removing stored permissions... - Fjerner gemte tilladelser... + Fingerprint + Fingeraftryk - Abort - Afbryd + Certificate + - KeePassXC: Removed permissions - KeePassXC: Fjernede tilladelser - - - Successfully removed permissions from %n entries. - + Trusted + - KeePassXC: No entry with permissions found! - KeePassXC: Ingen nøgler fundet + Untrusted + - The active database does not contain an entry with permissions. - Den aktive database indholder ikke en post med tilladelser + Unknown + - - - SettingsWidget - Application Settings - Programindstillinger + key.share + Filetype for KeeShare key + - General - Generelt + KeeShare key file + - Security - Sikkerhed + All files + Alle filer - Access error for config file %1 - Adgangsfejl for konfigurationsfil %1 + Select path + - - - SettingsWidgetGeneral - Basic Settings - Grundlæggende indstillinnger + Exporting changed certificate + - Start only a single instance of KeePassXC - Start kun en enkelt instans af KeePassXC + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Remember last databases - Husk seneste databaser + Signer: + + + + ShareObserver - Remember last key files and security dongles - Husk de sidste nøglefiler og sikkerhedsdongler + Import from container without signature + - Load previous databases on startup - Load den forrige database ved opstart + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Automatically save on exit - Gem automatisk ved afslutning + Import from container with certificate + - Automatically save after every change - Gem automatisk ved ændringer + Not this time + - Automatically reload the database when modified externally - Load automatisk databasenn når den bliver ændret udefra + Never + Aldrig - Minimize when copying to clipboard - Minimér ved kopiering til udklipsholder + Always + - Minimize window at application startup - Minimér vindue ved opstart + Just this time + - Use group icon on entry creation - Brug gruppeikon ved oprettelse af post + Import from %1 failed (%2) + - Don't mark database as modified for non-data changes (e.g., expanding groups) + Import from %1 successful (%2) - Hide the Details view - Skjul detaljevisning + Imported from %1 + - Show a system tray icon - Vis et ikon i systembakken + Signed share container are not supported - import prevented + - Hide window to system tray when minimized - Skjul vindue i systembakken når det er minimeret + File is not readable + - Hide window to system tray instead of app exit - Skjul vindue i systembakken når applikationen lukkes + Invalid sharing container + - Dark system tray icon - Mørk ikon i systembakken + Untrusted import prevented + - Language - Sprog + Successful signed import + - Auto-Type - Auto-Indsæt + Unexpected error + - Use entry title to match windows for global Auto-Type - Brug post-titel til at matche vinduer for global Auto-Indsæt + Unsigned share container are not supported - import prevented + - Use entry URL to match windows for global Auto-Type - Brug post-URL til at matche vinduer for global Auto-Indsæt + Successful unsigned import + - Always ask before performing Auto-Type - Spørg altid for Auto-Indsæt udføres + File does not exist + - Global Auto-Type shortcut - Global Auto-Indsæt genvej + Unknown share container type + - Auto-Type delay - Auto-Indsæt forsinkelse + Overwriting signed share container is not supported - export prevented + - ms - Milliseconds - ms + Could not write export container (%1) + - Startup - Opstart + Overwriting unsigned share container is not supported - export prevented + - File Management - Filhåndtering + Could not write export container + - Safely save database files (may be incompatible with Dropbox, etc) - Gem databasefiler sikkert (kan være inkompatibelt med Dropbox, etc.) + Unexpected export error occurred + - Backup database file before saving - Lav backup af databasefil før der gemmes + Export to %1 failed (%2) + - Entry Management - Posthåndtering + Export to %1 successful (%2) + - General - Generelt + Export to %1 + - - - SettingsWidgetSecurity - Timeouts - Timeouts + Do you want to trust %1 with the fingerprint of %2 from %3? + - Clear clipboard after - Ryd udklipsholder efter + Multiple import source path to %1 in %2 + - sec - Seconds - sek + Conflicting export target path %1 in %2 + - Lock databases after inactivity of - Lås databaserne efter inaktivitet i + Could not embed signature: Could not open file to write (%1) + - Convenience + Could not embed signature: Could not write file (%1) - Lock databases when session is locked or lid is closed + Could not embed database: Could not open file to write (%1) - Lock databases after minimizing the window - Lås databaser efter at minimere vinduet + Could not embed database: Could not write file (%1) + + + + TotpDialog - Don't require password repeat when it is visible - Kræv ikke kodeord gentaget når det er synligt + Timed Password + Tidsbaseret kodeord - Show passwords in cleartext by default - Vis kodeord i klartekst som standard + 000000 + 000000 - Hide passwords in the preview panel - + Copy + Kopier + + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Hide entry notes by default - Skjul post-noter som standard + Copy + Kopier - Privacy - Privatliv + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Use Google as fallback for downloading website icons - Brug Google som nødløsning til at downloade website ikoner + There was an error creating the QR code. + - Re-lock previously locked database after performing Auto-Type - Lås tidligere låste databaser efter udførsel af Auto-Indsæt + Closing in %1 seconds. + - 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 + sec + Seconds + sek + + + Code size: + Kodestørrelse: 6 digits 6 cifre - Code size: - Kodestørrelse: + 7 digits + - sec - Seconds - sek + 8 digits + 8 cifre - TotpDialog + UpdateCheckDialog - Timed Password + Checking for updates - 000000 - 000000 + Checking for updates... + - Copy - Kopier + Close + Luk - Expires in - Udløber om + Update Error! + - seconds - sekunder + 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! + - - - UnlockDatabaseWidget - Unlock database - Lås database op + 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 - - Remove an entry from the database. - Fjern en post fra databasen. - + YubiKeyEditWidget - Path of the database. - Sti til databasen. + Refresh + Genopfrisk - Path of the entry to remove. + YubiKey Challenge-Response - 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 + <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> + - read password of the database from stdin - Læs kodeord til databasen fra stdin + No YubiKey detected, please ensure it's plugged in. + - 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 927f2878e5..89b9f0b6eb 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,87 +31,297 @@ 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 + In die Zwischenablage kopieren - Version %1 - - Version %1 - + Project Maintainers: + Projekt-Maintainer: + + + 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. + + + AgentSettingsWidget - Revision: %1 - Revision: %1 + Enable SSH Agent (requires restart) + SSH Agent aktivieren (Neustart erforderlich) - Distribution: %1 - Distribution: %1 + Use OpenSSH for Windows instead of Pageant + OpenSSH für Windows statt Pageant benutzen + + + ApplicationSettingsWidget - Libraries: - Bibliotheken: + Application Settings + Anwendungseinstellungen - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Betriebssystem: %1 -CPU-Architektur: %2 -Kernel: %3 %4 + General + Allgemein - Enabled extensions: - Aktivierte Erweiterungen: + Security + Sicherheit - Project Maintainers: - Projekt-Maintainer: + Access error for config file %1 + Zugriffsfehler für Konfigurations-Datei %1 - 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. + Icon only + Nur Symbol - Build Type: %1 - - Build-Typ: %1 - + Text only + Nur Text + + + Text beside icon + Text neben Symbol + + + Text under icon + Text unter Symbol + + + Follow style + Stil beibehalten - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP Zugriff bestätigen + Basic Settings + Grundeinstellungen - Remember this decision - Diese Entscheidung merken + Startup + Programmstart - Allow - Erlauben + Start only a single instance of KeePassXC + Nur eine einzige KeePassXC-Instanz starten - Deny - Ablehnen + Remember last databases + Letzte Datenbanken merken - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - SSH Agent aktivieren (Neustart erforderlich) + 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 @@ -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. @@ -362,30 +585,51 @@ Bitte wählen Sie, ob Sie den Zugriff erlauben möchten. <b>Warnung:</b> Die folgenden Optionen können gefährlich sein! - Executable Files (*.exe);;All Files (*.*) - Ausführbare Dateien (*.exe);;Alle Dateien (*.*) + Select custom proxy location + Benutzerdefinierten Proxy-Pfad auswählen - Executable Files (*) - Ausführbare Dateien (*) + &Tor Browser + &Tor Browser - Select custom proxy location - Benutzerdefinierten Proxy-Pfad auswählen + <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: - 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. + Executable Files + Ausführbare Dateien - - - BrowserService - KeePassXC: New key association request - KeePassXC: Neue Schlüsselverbindungsanfrage + All Files + Alle Dateien - You have received an association request for the above key. + 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 + + + + + BrowserService + + KeePassXC: New key association request + KeePassXC: Neue Schlüsselverbindungsanfrage + + + 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. @@ -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 - - - Successfully removed permissions from %n entry(s). - 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. - - - - ChangeMasterKeyWidget - - Password - Passwort - - - Enter password: - Passwort eingeben: - - - Repeat password: - Passwort wiederholen: - - - &Key file - &Schlüsseldatei - - - 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… + Converting attributes to custom data… + Attribute werden in zusätzliche Eigenschaften umgewandelt... - Unable to create Key File : - Erzeugen der Schlüsseldatei nicht möglich: + KeePassXC: Converted KeePassHTTP attributes + KeepassXC: KeePassHTTP-Attribute wurden umgewandelt - Select a key file - Schlüsseldatei auswählen + 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. - - Empty password - Leeres Passwort + + Successfully moved %n keys to custom data. + %1 Einträge wurden erfolgreich umgewandelt%1 Einträge wurden erfolgreich umgewandelt - Do you really want to use an empty string as password? - Wollen Sie wirklich eine leere Zeichenkette als Passwort verwenden? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Keine KeePassHTTP-Einträge gefunden - Different passwords supplied. - Unterschiedliche Passwörter eingegeben. + The active database does not contain an entry with KeePassHTTP attributes. + Die aktive Datenbank enthält keinen Eintrag mit KeePassHTTP Einstellungen. - Failed to set %1 as the Key file: -%2 - Festlegen von %1 als Schlüsseldatei nicht möglich: %2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: native Browser-Integrations-Einstellungen gefunden - Legacy key file format - Veraltetes Schlüsseldatei-Format + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -658,54 +797,95 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.Original-Daten: - Error(s) detected in CSV file ! - Fehler in CSV-Datei gefunden! + Error + Fehler - more messages skipped] - weitere Fehler ausgeblendet] + Empty fieldname %1 + Leerer Feldname %1 - Error - Fehler + column %1 + Spalte %1 - CSV import: writer has errors: - - CSV-Import: Fehler beim Schreiben: + Error(s) detected in CSV file! + Fehler in CSV-Datei gefunden! - - - CsvImportWizard - - Error - Fehler + + [%n more message(s) skipped] + [zusätzlich %n Nachricht(en) übersprungen][zusätzlich %n Nachricht(en) übersprungen] - Unable to calculate master key - Berechnung des Hauptschlüssels gescheitert + CSV import: writer has errors: +%1 + CSV-Import: Fehler beim Schreiben: %1 CsvParserModel - %n byte(s), - %n Byte,%n Byte, + %n column(s) + %n Spalte%n Spalten + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n Zeile,%n Zeilen, + %n byte(s) + %n Byte(s)%n Byte(s) - %n column(s) - %n Spalte%n Spalten + %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,140 +936,316 @@ 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 + Can't open key file: +%1 + Schlüsseldatei kann nicht geöffnet werden: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Öffnen der Datenbank nicht möglich. + Passwords + Passwörter + + + + DatabaseSettingsDialog + + Advanced Settings + Fortgeschrittene Einstellungen + + + General + Allgemein - Database opened fine. Nothing to do. - Datenbank wurde ordnungsgemäß geöffnet. Es gibt nichts zu tun. + Security + Sicherheit - Success - Erfolg + Master Key + Master-Passwort - The database has been successfully repaired -You can now save it. - Datenbank erfolgreich repariert -sie kann nun gespeichert werden. + Encryption Settings + Verschlüsselungseinstellung - Unable to repair the database. - Reparieren der Datenbank nicht möglich. + Browser Integration + Browser-Integration - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Allgemein + KeePassXC-Browser settings + KeePassXC-Browser-Einstellungen - Encryption - Verschlüsselung + &Disconnect all browsers + Alle Browser &abmelden - Number of rounds too high - Key transformation rounds - Anzahl Runden zu hoch + Forg&et all site-specific settings on entries + Alle auf die Internetseite bezogenen Einstellungen löschen - 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! - Sie verwenden eine sehr hohe Rundenanzahl mit Argon2. - -Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank Stunden oder Tage (oder noch länger) zum Öffnen benötigen. + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + KeePassHTTP-Einstellungen zu KeePassXC-Browser übertragen. - Understood, keep number - Verstanden, Anzahl beibehalten + Stored keys + Gespeicherte Schlüssel - Cancel - Abbrechen + Remove + Entfernen - Number of rounds too low - Key transformation rounds - Anzahl Runden zu niedrig + Delete the selected key? + Die ausgewählten Schlüssel entfernen? - 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! - Sie verwenden eine sehr niedrige Rundenanzahl mit AES-KDF. - -Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken sein! + 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. - KDF unchanged - KDF unverändert + Key + Schlüssel - Failed to transform key with new KDF parameters; KDF unchanged. - Konnte Schlüssel nicht mit den neuen KDF-Parametern transformieren; KDF unverändert. - - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB + Value + Wert - - thread(s) - Threads for parallel execution (KDF settings) - ThreadThreads + + Enable Browser Integration to access these settings. + Um diese Einstellungen zu verändern, benötigst du einen verbundenen Browser. - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Verschlüsselungs-Algorithmus. + Disconnect all browsers + Alle Browser trennen - AES: 256 Bit (default) - AES: 256 Bit (Standard) + 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. - Twofish: 256 Bit - Twofish: 256 Bit + KeePassXC: No keys found + KeePassXC: Kein Schlüssel gefunden - Key Derivation Function: - Schlüssel-Ableitungsfunktion + No shared encryption keys found in KeePassXC settings. + Keine geteilten Schlüssel in den KeePassXC-Einstellungen gefunden. - Transform rounds: - Verschlüsselungsdurchläufe: + 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. - Benchmark 1-second delay - 1-Sekunden-Verzögerung messen + Forget all site-specific settings on entries + Alle auf die Internetseite bezogenen Einstellungen löschen - Memory Usage: - Speicher-Verbrauch + 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. - Parallelism: - Parallelität: + 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 + Key transformation rounds + Anzahl Runden zu hoch + + + 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! + Sie verwenden eine sehr hohe Rundenanzahl mit Argon2. + +Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank Stunden oder Tage (oder noch länger) zum Öffnen benötigen. + + + Understood, keep number + Verstanden, Anzahl beibehalten + + + Cancel + Abbrechen + + + Number of rounds too low + Key transformation rounds + Anzahl Runden zu niedrig + + + 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! + Sie verwenden eine sehr niedrige Rundenanzahl mit AES-KDF. + +Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken sein! + + + KDF unchanged + KDF unverändert + + + Failed to transform key with new KDF parameters; KDF unchanged. + Konnte Schlüssel nicht mit den neuen KDF-Parametern transformieren; KDF unverändert. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiBMiB + + + 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 @@ -948,91 +1296,112 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + Teilen - KeePass 2 Database - KeePass 2 Datenbank + Breadcrumb + Breadcrumb - All files - Alle Dateien + Type + Typ - Open database - Datenbank öffnen + Path + Pfad - File not found! - Datei nicht gefunden! + Last Signer + Letzte Unteschrift - Unable to open the database. - Öffnen der Datenbank ist nicht möglich. + Certificates + Zertifikate - File opened in read only mode. - Datei ist schreibgeschützt + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - CSV-Datei öffnen + Add additional protection... + Zusätzlichen Schutz hinzufügen - CSV file - CSV-Datei + No encryption key added + Kein Schlüssel zum Verschlüsseln hinzugefügt - All files (*) - Alle Dateien (*) + You must add at least one encryption key to secure your database! + Du musst mindestens einen Schlüssel hinzufügen um die Datenbank abzusichern. - Merge database - Datenbank zusammenführen + No password set + Kein Passwort eingestellt - Open KeePass 1 database - KeePass 1 Datenbank öffnen + 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? - KeePass 1 database - KeePass 1 Datenbank + Unknown error + Unbekannter Fehler + + + Failed to change master key + Ändern des Hauptschlüssels gescheitert + + + DatabaseSettingsWidgetMetaDataSimple - Close? - Schließen? + Database Name: + Datenbankname: - "%1" is in edit mode. -Discard changes and close anyway? - "%1" wird bearbeitet. -Änderungen verwerfen und trotzdem schließen? + Description: + Beschreibung: + + + DatabaseTabWidget - Save changes? - Änderungen speichern? + KeePass 2 Database + KeePass 2 Datenbank - "%1" was modified. -Save changes? - "%1" wurde geändert. -Änderungen speichern? + All files + Alle Dateien - Writing the database failed. - Schreiben der Datenbank fehlgeschlagen. + Open database + Datenbank öffnen - Passwords - Passwörter + CSV file + CSV-Datei - Save database as - Datenbank speichern unter + Merge database + Datenbank zusammenführen + + + Open KeePass 1 database + KeePass 1-Datenbank öffnen + + + KeePass 1 database + KeePass 1-Datenbank Export database to CSV file @@ -1043,40 +1412,41 @@ Save changes? Die CSV Datei konnte nicht gespeichert werden. - New database - Neue Datenbank + Database creation error + Datenbank konnte nicht erstellt werden. - locked - gesperrt + 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. - Lock database - Datenbank sperren + The database file does not exist or is not accessible. + Die Datenbankdatei existiert nicht oder ist nicht zugreifbar. - 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. + Select CSV file + CSV-Datei auswählen - 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. + New Database + Neue Datenbank - Disable safe saves? - Sicheres Speichern deaktivieren? + %1 [New Database] + Database tab name modifier + %1 [Neue Datenbank] - 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 [Locked] + Database tab name modifier + %1 [Gesperrt] + + + %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? - - Close - Schließen + + 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? - General - Allgemein + File opened in read only mode. + Datei ist schreibgeschützt - Password - Passwort + Lock Database? + Datenbank sperren? - URL - URL + You are editing an entry. Discard changes and lock anyway? + Ein Eintrag wird bearbeitet. +Änderungen verwerfen und trotzdem sperren? - Expiration - Ablaufdatum + "%1" was modified. +Save changes? + "%1" wurde geändert. +Änderungen speichern? - Username - Benutzername + Database was modified. +Save changes? + Datenbank wurde geändert. +Änderungen speichern? - Autotype - Auto-Type + Save changes? + Änderungen speichern? - Searching - Suche + 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 - Attributes - Attribute + Disable safe saves? + Sicheres Speichern deaktivieren? - Attachments - Anhänge + 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? - Notes - Notizen + Writing the database failed. +%1 + Schreiben der Datenbank fehlgeschlagen. +%1 - Window - Fenster + Passwords + Passwörter - Sequence - Sequenz + Save database as + Datenbank speichern als - Search - Suche + KeePass 2 Database + KeePass 2 Datenbank - Clear - Löschen + 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? - Never - Niemals + Delete group + Gruppe löschen - [PROTECTED] - [GESCHÜTZT] + Move group to recycle bin? + Gruppe in den Papierkorb verschieben? - Disabled - Deaktiviert + Do you really want to move the group "%1" to the recycle bin? + Soll die Gruppe "%1" wirklich in den Papierkorb verschoben werden? - Enabled - Aktiviert + Successfully merged the database files. + Datenbanken erfolgreich zusammengeführt + + + 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 @@ -1995,84 +2570,49 @@ Dies kann dazu führen, dass die jeweiligen Plugins nicht mehr richtig funktioni - HttpPasswordGeneratorWidget + KMessageWidget - Length: - Länge: + &Close + S&chließen - Character Types - Zeichenarten + Close message + Meldung schließen + + + Kdbx3Reader - Upper Case Letters - Großbuchstaben + Unable to calculate master key + Berechnung des Master-Passworts gescheitert - A-Z - A-Z + Unable to issue challenge-response. + Fehler beim Ausführen des Challenge-Response-Verfahrens - 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 + Wrong key or database file is corrupt. + Falscher Schlüssel oder die Datenbank ist beschädigt. - - - KMessageWidget - &Close - S&chließen + missing database headers + fehlende Datenbank-Header - Close message - Meldung schließen + Header doesn't match hash + Header stimmt nicht mit Hash überein - - - Kdbx3Reader - Unable to calculate master key - Berechnung des Master-Passworts gescheitert + Invalid header id size + Ungültige Größe der Header-ID - Unable to issue challenge-response. - Fehler beim Ausführen des Challenge-Response-Verfahrens + Invalid header field length + Ungültiger Header-Feldlänge - Wrong key or database file is corrupt. - Falscher Schlüssel oder die Datenbank ist beschädigt. + Invalid header data length + Ungültige Header-Datenlänge @@ -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 + + unable to seek to content position + Kann nicht zur Inhaltsposition spulen + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + Deaktiviertes Teilen - Twofish: 256-bit - Twofish: 256-bit + Import from + Import von - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + Export nach - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Synchronisieren mit - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – empfohlen) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Vorhandene einmal-Sperrdatei ist ungültig. Starte neuen Vorgang. + Key Component + Schlüsselkomponente - The lock file could not be created. Single-instance mode disabled. - Lock-Datei konnte nicht erstellt werden. Einzelinstanzmodus ist deaktiviert. + Key Component Description + Schlüsselkomponentenbeschreibung - Another instance of KeePassXC is already running. - Eine andere KeePassXC-Instanz läuft bereits + Cancel + Abbrechen - Fatal error while testing the cryptographic functions. - Fataler Fehler beim Testen der kryptografischen Funktionen. + Key Component set, click to change or remove + Schlüsselkomponente wurde gewählt. Klicken um sie zu ändern oder zu löschen - KeePassXC - Error - KeePassXC - Fehler + 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,226 +3436,394 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Ungültige Schlüsseldatei, OpenSSH-Schlüssel erwartet + &Donate + &Spenden - PEM boundary mismatch - Falsche PEM-Boundarys + Report a &bug + Einen &Fehler melden - Base64 decoding failed - Base64-Dekodierung fehlgeschlagen + 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. - Key file way too small. - Schlüsseldatei ist viel zu klein + &Import + Importieren - Key file magic header id invalid - Magic-Header-ID der Schlüsseldate ungültig + Copy att&ribute... + Attribut kopieren - Found zero keys - Null Schlüssel gefunden + TOTP... + TOTP... - Failed to read public key. - Öffentlicher Schlüssel konnte nicht gelesen werden + &New database... + &Neue Datenbank… - Corrupted key file, reading private key failed - Korrupte Schlüsseldatei, lesen des Privatschlüssels fehlgeschlagen + Create a new database + Eine neue Datenbank erstellen - No private key payload to decrypt - Keine Privatschlüssel-Nutzdaten zum Entschlüsseln + &Merge from database... + &Datenbank zusammenführen… - Trying to run KDF without cipher - Versuche, KDF ohne Verschlüsselungsalgorithmus anzuwenden + Merge from another KDBX database + Aus einer anderen KDBX-Datenbank zusammenführen - Passphrase is required to decrypt this key - Passphrase zum Entschlüsseln des Schlüssels benötigt + &New entry + &Neuer Eintrag - Key derivation failed, key file corrupted? - Schlüssel-Ableitung fehlgeschlagen, Schlüsseldatei korrupt? + Add a new entry + Einen neuen Eintrag hinzufügen - Decryption failed, wrong passphrase? - Entschlüsselung fehlgeschlagen, falsche Passphrase? + &Edit entry + &Eintrag bearbeiten - Unexpected EOF while reading public key - Unerwartetes EOF beim Lesen des öffentlichen Schlüssels + View or edit entry + Eintrag anzeigen oder bearbeiten - Unexpected EOF while reading private key - Unerwartetes EOF beim Lesen des Privatschlüssels + &New group + &Neue Gruppe - Can't write public key as it is empty - Öffentlicher Schlüssel konnte nicht geschrieben werden, da er leer ist + Add a new group + Eine neue Gruppe hinzufügen - Unexpected EOF when writing public key - Unerwartetes EOF beim Schreiben des öffentlichen Schlüssels + Change master &key... + Hauptschlüssel ändern ... - Can't write private key as it is empty - Privatschlüssel konnte nicht geschrieben werden, da er leer ist + &Database settings... + &Datenbankeinstellungen... - Unexpected EOF when writing private key - Unerwartetes EOF beim Schreiben des Privatschlüssels + Copy &password + Passwort kopieren - Unsupported key type: %1 - Nicht unterstützter Schlüssel-Typ: %1 + Perform &Auto-Type + Auto-Ausfüllen - Unknown cipher: %1 - Unbekannter Verschlüsselungsalgorithmus: %1 + Open &URL + &URL öffnen - Cipher IV is too short for MD5 kdf - Verschlüsselungs-IV ist zur kurz für MD5-KDF + KeePass 1 database... + KeePass 1-Datenbank… - Unknown KDF: %1 - Unbekannte Schlüssel-Ableitungs-Funktion: %1 + Import a KeePass 1 database + KeePass 1-Datenbank importieren - Unknown key type: %1 - Unbekannter Schlüssel-Typ: %1 + 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. - OptionDialog + Merger - Dialog - Dialog + Creating missing %1 [%2] + Erstelle fehlendes %1 [%2] - This is required for accessing your databases from ChromeIPass or PassIFox - Dies wird benötigt, um auf Ihre Datenbanken in ChromeIPass oder PassIFox zuzugreifen. + Relocating %1 [%2] + Verschiebe %1 [%2] - Enable KeePassHTTP server - KeePassHTTP-Server aktivieren + Overwriting %1 [%2] + Überschreibe %1 [%2] - General - Allgemein + older entry merged from database "%1" + Alter Eintrag "%1" aus Datenbank zusammengeführt - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Zeig&e eine Benachrichtigung, wenn Anmeldedaten angefordert werden. + Adding backup for older target %1 [%2] + Backup für älteres Ziel %1 hinzugefügt [%2] - 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. + Adding backup for older source %1 [%2] + Backup für ältere Quelle %1 hinzugefügt [%2] - &Return only best matching entries - Nur beste Treffer anzeigen + Reapplying older target entry on top of newer source %1 [%2] + Älterer Ziel-Eintrag wird auf neuere Quellen-Eintrag angewendet %1 [%2] - Re&quest to unlock the database if it is locked - Verlange Entsperrung, wenn die Datenbank gesperrt ist. + 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] - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Nur Einträge mit dem gleichen Schema (http://, https://, ftp://, …) anzeigen + Synchronizing from older source %1 [%2] + Synchronisiere von älterer Quelle %1 [%2] - &Match URL schemes - URL-Schema verwenden + Deleting child %1 [%2] + Lösche Untereintrag %1 [%2] - Sort matching entries by &username - Sortiere gefundene Einträge nach &Benutzername + Deleting orphan %1 [%2] + Lösche verwaisten Eintrag %1 [%2] - Sort &matching entries by title - Sortiere gefundene Einträge nach Titel + Changed deleted objects + Gelöschte Einträge geändert - R&emove all shared encryption keys from active database - &Entferne alle freigegebenen Chiffrierschlüssel aus der aktiven Datenbank + Adding missing icon %1 + Fehlendes Symbol hinzufügen %1 + + + NewDatabaseWizard - Re&move all stored permissions from entries in active database - Entferne alle gespeicherten Berechtigungen für Einträge in der aktiven Datenbank + Create a new KeePassXC database... + Neue KeePassXC-Datenbank erstellen… - Password Generator - Passwortgenerator + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage + Assistent - Advanced - Fortgeschritten + En&cryption Settings + Verschlüsselungseinstellungen - Always allow &access to entries - &Zugriff auf Einträge immer erlauben + 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. - Always allow &updating entries - &Aktualisierung von Einträgen immer erlauben + Advanced Settings + Fortgeschrittene Einstellungen - Only the selected database has to be connected with a client. - Nur die ausgewählte Datenbank muss mit dem Client verbunden sein. + Simple Settings + Grundeinstellungen + + + NewDatabaseWizardPageEncryption - Searc&h in all opened databases for matching entries - Suche in allen offenen Datenbanken nach übereinstimmenden Einträgen + Encryption Settings + Verschlüsselungseinstellung - Automatically creating or updating string fields is not supported. - Automatisches Erstellen und Aktualisieren von erweiterten Attributen wird nicht unterstützt! + 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 - &Return advanced string fields which start with "KPH: " - Zeige auch erweiterte Attribute, welche mit "KPH: " beginnen + Database Master Key + Datenbank-Master-Passwort - HTTP Port: - HTTP-Port: + A master key known only to you protects your database. + Ein nur dir bekannter Schlüssel schützt die Datenbank. + + + NewDatabaseWizardPageMetaData - Default port: 19455 - Standard-Port: 19455 + General Database Information + Allgemeine Datenbankinformationen - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC überwacht diesen Port auf 127.0.0.1 + 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 - <b>Warning:</b> The following options can be dangerous! - <b>Warnung:</b> Die folgenden Optionen können gefährlich sein! + Invalid key file, expecting an OpenSSH key + Ungültige Schlüsseldatei, OpenSSH-Schlüssel erwartet + + + PEM boundary mismatch + Falsche PEM-Boundarys + + + Base64 decoding failed + Base64-Dekodierung fehlgeschlagen + + + Key file way too small. + Schlüsseldatei ist viel zu klein + + + Key file magic header id invalid + Magic-Header-ID der Schlüsseldatei ungültig + + + Found zero keys + Null Schlüssel gefunden + + + Failed to read public key. + Öffentlicher Schlüssel konnte nicht gelesen werden + + + Corrupted key file, reading private key failed + Korrupte Schlüsseldatei, Lesen des Privatschlüssels fehlgeschlagen + + + No private key payload to decrypt + Keine Privatschlüssel-Nutzdaten zum Entschlüsseln + + + Trying to run KDF without cipher + Versuche, KDF ohne Verschlüsselungsalgorithmus anzuwenden + + + Passphrase is required to decrypt this key + Passphrase zum Entschlüsseln des Schlüssels benötigt + + + Key derivation failed, key file corrupted? + Schlüssel-Ableitung fehlgeschlagen, Schlüsseldatei korrupt? + + + Decryption failed, wrong passphrase? + Entschlüsselung fehlgeschlagen, falsche Passphrase? + + + Unexpected EOF while reading public key + Unerwartetes EOF beim Lesen des öffentlichen Schlüssels + + + Unexpected EOF while reading private key + Unerwartetes EOF beim Lesen des Privatschlüssels + + + Can't write public key as it is empty + Öffentlicher Schlüssel konnte nicht geschrieben werden, da er leer ist + + + Unexpected EOF when writing public key + Unerwartetes EOF beim Schreiben des öffentlichen Schlüssels + + + Can't write private key as it is empty + Privatschlüssel konnte nicht geschrieben werden, da er leer ist + + + Unexpected EOF when writing private key + Unerwartetes EOF beim Schreiben des Privatschlüssels + + + Unsupported key type: %1 + Nicht unterstützter Schlüssel-Typ: %1 + + + Unknown cipher: %1 + Unbekannter Verschlüsselungsalgorithmus: %1 + + + Cipher IV is too short for MD5 kdf + Verschlüsselungs-IV ist zur kurz für MD5-KDF + + + Unknown KDF: %1 + Unbekannte Schlüssel-Ableitungs-Funktion: %1 + + + Unknown key type: %1 + Unbekannter Schlüssel-Typ: %1 + + + + PasswordEditWidget + + Enter password: + Passwort eingeben: + + + Confirm password: + Passwort bestätigen: + + + Password + Passwort - <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> + <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> - Cannot bind to privileged ports - Privilegierte Ports können nicht überwacht werden + Passwords do not match. + Die Passwörter stimmen nicht überein. - 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,157 +3937,306 @@ Es wird der Standard-Port 19455 verwendet. Password quality Ausgezeichnet - - - QObject - Database not opened - Datenbank nicht geöffnet + ExtendedASCII + Erweitertes ASCII - Database hash not available - Datenbank-Hash nicht verfügbar + Switch to advanced mode + Zum fortgeschrittenen Modus wechseln - Client public key not received - Öffentlicher Client-Schlüssel nicht empfangen + Advanced + Fortgeschritten - Cannot decrypt message - Nachricht konnte nicht entschlüsselt werden + Upper Case Letters A to F + Großbuchstaben A bis F - Timeout or cannot connect to KeePassXC - Timeout oder Verbindung zu KeePassXC fehlgeschlagen + A-Z + A-Z - Action cancelled or denied - Aktion abgebrochen oder verweigert + Lower Case Letters A to F + Kleinbuchstaben a bis f - 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 ? + a-z + a-z - KeePassXC association failed, try again - KeePassXC-Verbindung fehlgeschlagen, bitte erneut versuchen + 0-9 + 0-9 - Key change was not successful - Schlüsselaustausch nicht erfolgreich + Braces + Klammern - Encryption key is not recognized - Schlüssel nicht erkannt + {[( + {[( - No saved databases found - Keine gespeicherten Datenbanken gefunden + Punctuation + Interpunktion - Incorrect action - Falsche Aktion + .,:; + .,:; - Empty message received - Leere Nachricht erhalten + Quotes + Anführungszeichen - No URL provided - Keine URL angegeben + " ' + "' - No logins found - Keine Anmeldedaten gefunden + Math + Mathematik - Unknown error - Unbekannter Fehler + <*+!?= + <*+!?= - Add a new entry to a database. - Neuen Eintrag zur Datenbank hinzufügen + Dashes + Striche - Path of the database. - Pfad zur Datenbank. + \_|-/ + \_|-/ - Key file of the database. - Schlüsseldatei der Datenbank + Logograms + Kürzel - path - Pfad + #$%&&@^`~ + #$%&&@^`~ - Username for the entry. - Nutzername für den Eintrag + Switch to simple mode + Zum einfachen Modus wechseln - username - Nutzername + Simple + Einfach - URL for the entry. - URL für den Eintrag + Character set to exclude from generated password + Zeichen die nicht im Passwort enthalten sein sollen - URL - URL + Do not include: + Nicht einbeziehen: - Prompt for the entry's password. - Nach dem Passwort des Eintrags fragen + Add non-hex letters to "do not include" list + Nicht-Hex-Buchstaben zu der "Nicht-Hinzufügen"-Liste hinzufügen - Generate a password for the entry. - Passwort für den Eintrag generieren. + Hex + Hex - Length for the generated password. - Länge des generierten Passworts. + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Ausgeschlossene Zeichen: "0", "1", "l", "I", "O", "|", "﹒" - length - Länge + Word Co&unt: + Wortanzahl: - Path of the entry to add. - Pfad des hinzuzufügenden Eintrags. + Regenerate + Neu erzeugen + + + QApplication - Copy an entry's password to the clipboard. - Passwort eines Eintrags in die Zwischenablage kopieren. + KeeShare + KeeShare + + + QFileDialog - Path of the entry to clip. - clip = copy to clipboard - Pfad des in die Zwischenablage zu kopierenden Eintrags + Select + Auswählen + + + QMessageBox - Timeout in seconds before clearing the clipboard. - Zeit in Sekunden, bevor die Zwischenablage geleert wird. + Overwrite + Überschreiben - Edit an entry. - Einen Eintrag bearbeiten. + Delete + Löschen - Title for the entry. - Titel für diesen Eintrag. + Move + Verschieben - title - Titel + Empty + Leer - Path of the entry to edit. - Pfad des zu bearbeitenden Eintrags + Remove + Entfernen + + + Skip + Überspringen + + + Disable + Deaktivieren + + + Merge + Zusammenführen + + + + QObject + + Database not opened + Datenbank nicht geöffnet + + + Database hash not available + Datenbank-Hash nicht verfügbar + + + Client public key not received + Öffentlicher Client-Schlüssel nicht empfangen + + + Cannot decrypt message + Nachricht konnte nicht entschlüsselt werden + + + Action cancelled or denied + Aktion abgebrochen oder verweigert + + + KeePassXC association failed, try again + KeePassXC-Verbindung fehlgeschlagen, bitte erneut versuchen + + + Encryption key is not recognized + Schlüssel nicht erkannt + + + Incorrect action + Falsche Aktion + + + Empty message received + Leere Nachricht erhalten + + + No URL provided + Keine URL angegeben + + + No logins found + Keine Anmeldedaten gefunden + + + Unknown error + Unbekannter Fehler + + + Add a new entry to a database. + Neuen Eintrag zur Datenbank hinzufügen + + + Path of the database. + Pfad zur Datenbank. + + + Key file of the database. + Schlüsseldatei der Datenbank + + + path + Pfad + + + Username for the entry. + Benutzername für den Eintrag + + + username + Benutzername + + + URL for the entry. + URL für den Eintrag + + + URL + URL + + + Prompt for the entry's password. + Nach dem Passwort des Eintrags fragen. + + + Generate a password for the entry. + Passwort für den Eintrag generieren. + + + Length for the generated password. + Länge des generierten Passworts. + + + length + Länge + + + Path of the entry to add. + Pfad des hinzuzufügenden Eintrags. + + + Copy an entry's password to the clipboard. + Passwort eines Eintrags in die Zwischenablage kopieren. + + + Path of the entry to clip. + clip = copy to clipboard + Pfad des in die Zwischenablage zu kopierenden Eintrags + + + Timeout in seconds before clearing the clipboard. + Zeit in Sekunden, bevor die Zwischenablage geleert wird. + + + Edit an entry. + Einen Eintrag bearbeiten. + + + Title for the entry. + Titel für diesen Eintrag. + + + title + Titel + + + Path of the entry to edit. + 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,70 +4416,573 @@ 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. + + + Could not create entry with path %1. + Eintrag mit dem Pfad %1 kann nicht erstellt werden. + + + Enter password for new entry: + Passwort für neuen Eintrag eingeben: + + + Writing the database failed %1. + Schreiben der Datenbank fehlgeschlagen: %1 + + + Successfully added entry %1. + Eintrag %1 erfolgreich hinzugefügt + + + 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 - Use lowercase characters in the generated password. - Kleinbuchstaben zur Passwort-Erzeugung verwenden. + Successfully recycled entry %1. + Eintrag %1 erfolgreich in Papierkorb verschoben - Use uppercase characters in the generated password. - Großbuchstaben zur Passwort-Erzeugung verwenden. + Successfully deleted entry %1. + Eintrag %1 erfolgreich gelöscht. - Use numbers in the generated password. - Zahlen zur Passwort-Erzeugung verwenden. + Show the entry's current TOTP. + Aktuelles TOTP des Eintrags zeigen. - Use special characters in the generated password. - Sonderzeichen zur Passwort-Erzeugung verwenden. + ERROR: unknown attribute %1. + FEHLER: Unbekanntes Attribute %1 - Use extended ASCII in the generated password. - Erweiterte ASCII-Zeichen zur Passwort-Erzeugung verwenden. + 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 + QtIOCompressor - Internal zlib error when compressing: - Interner Fehler in zlib beim Komprimieren: + Internal zlib error when compressing: + Interner Fehler in zlib beim Komprimieren: + + + Error writing to underlying device: + Fehler beim Schreiben aufs Gerät: + + + Error opening underlying device: + Fehler beim Öffnen des Gerätes: + + + Error reading data from underlying device: + Fehler beim Lesen der Daten vom Gerät: + + + Internal zlib error when decompressing: + Interner Fehler in zlib beim Dekomprimieren: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Das gzip-Format wird von dieser zlib-Version nicht unterstützt. + + + Internal zlib error: + Interner Fehler in zlib: + + + + SSHAgent + + 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 - Error writing to underlying device: - Fehler beim Schreiben aufs Gerät: + use regex in term + Reguläre Ausdrücke benutzen - Error opening underlying device: - Fehler beim Öffnen des Gerätes: + Fields + Felder - Error reading data from underlying device: - Fehler beim Lesen der Daten vom Gerät: + Term Wildcards + Platzhalter - Internal zlib error when decompressing: - Interner Fehler in zlib beim Dekomprimieren: + match anything + Entspreche irgendwas - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Das gzip-Format wird von dieser zlib-Version nicht unterstützt. + match one + Entspreche einem - Internal zlib error: - Interner Fehler in zlib: + logical OR + logisches ODER + + + Examples + Beispiele SearchWidget - - Search... - Suche… - 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 - - 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. + + Import + Importieren - KeePassXC: No keys found - KeePassXC: Kein Schlüssel gefunden + Export + Export - No shared encryption-keys found in KeePassHttp Settings. - Kein freigegebener Chiffrierschlüssel in den KeePassHTTP-Einstellungen gefunden. + Imported certificates + Importierte Zertifikate - KeePassXC: Settings not available! - KeePassXC: Einstellung nicht verfügbar! + Trust + Vertrauen - The active database does not contain an entry of KeePassHttp Settings. - Die aktive Datenbank enthält keinen Eintrag für KeePassHTTP Einstellungen. + Ask + Fragen - Removing stored permissions... - Gespeicherte Berechtigungen werden gelöscht... + Untrust + Nicht vertrauen - Abort - Abbrechen + Remove + Entfernen - KeePassXC: Removed permissions - KeePassXC: Zugangsdaten entfernt + Path + Pfad - - Successfully removed permissions from %n entries. - Gespeicherte Berechtigungen wurden erfolgreich aus %n Eintrag entfernt.Gespeicherte Berechtigungen wurden erfolgreich aus %n Einträgen entfernt. + + Status + Status - KeePassXC: No entry with permissions found! - KeePassXC: Kein Eintrag mit Zugangsdaten gefunden! + Fingerprint + Fingerabdruck - The active database does not contain an entry with permissions. - The aktive Datenbank enthält keinen Eintrag mit Zugangsdaten. + Certificate + Zertifikat - - - SettingsWidget - Application Settings - Anwendungseinstellungen + Trusted + Vertraut - General - Allgemein + Untrusted + Nicht vertraut - Security - Sicherheit + Unknown + Unbekannt - Access error for config file %1 - Zugriffsfehler für Konfigurations-Datei %1 + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - Grundeinstellungen + KeeShare key file + KeeShare-Schlüsseldatei - Start only a single instance of KeePassXC - Nur eine einzige KeePassXC-Instanz starten + All files + Alle Dateien - Remember last databases - Letzte Datenbank merken + Select path + Pfad auswählen - Remember last key files and security dongles - Letzte Schlüsseldateien und Sicherheits-Dongles merken + Exporting changed certificate + Exportiere geändertes Zertifikat - Load previous databases on startup - Letzte Datenbank beim Start laden + 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? - Automatically save on exit - Automatisch speichern beim Schließen + Signer: + + + + ShareObserver - Automatically save after every change - Automatisch nach jeder Änderung speichern + Import from container without signature + Von Container ohne Signatur importieren - Automatically reload the database when modified externally - Datenbank nach externer Änderung automatisch neu laden. + 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? - Minimize when copying to clipboard - Minimieren beim Kopieren in die Zwischenablage + Import from container with certificate + Von Container mit Zertifikat importieren - Minimize window at application startup - Fenster beim Programmstart minimieren + Not this time + Nicht diesmal - Use group icon on entry creation - Gruppensymbol für das Erstellen neuer Einträge verwenden + Never + Niemals - 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) + Always + Immer - Hide the Details view - Detailansicht verstecken + Just this time + Nur diesmal - Show a system tray icon - Taskleistensymbol anzeigen + Import from %1 failed (%2) + Import von %1 fehlgeschlagen (%2) - Hide window to system tray when minimized - Fenster verstecken wenn minimiert + Import from %1 successful (%2) + Import von %1 erfolgreich (%2) - Hide window to system tray instead of app exit - Fenster zur Taskleiste minimieren statt das Programm zu beenden + Imported from %1 + Importiert aus %1 - Dark system tray icon - Dunkles Taskleistensymbol + Signed share container are not supported - import prevented + Unterzeichnete geteilte Container werden nicht unterstützt. Import verhindert. - Language - Sprache + File is not readable + Datei ist nicht lesbar. - Auto-Type - Auto-Type + Invalid sharing container + Ungültiger geteilter Container - Use entry title to match windows for global Auto-Type - Verwende Eintragstitel, um entsprechende Fenster für globales Auto-Type zu finden + Untrusted import prevented + Unvertrauter Import verhindet - Use entry URL to match windows for global Auto-Type - Verwende URL, um Fenster für globales Auto-Type zu finden. + Successful signed import + Erfolgreicher unterzeichneter Import - Always ask before performing Auto-Type - Immer vor einem Auto-Type fragen + Unexpected error + Unerwarteter Fehler - Global Auto-Type shortcut - Globale Tastenkombination für Auto-Type + Unsigned share container are not supported - import prevented + Nicht unterzeichnete geteilte Container werden nicht unterstützt. Import verhindert. - Auto-Type delay - Auto-Type-Verzögerung + Successful unsigned import + Erfolgreich unterzeichneter Import - ms - Milliseconds - ms + File does not exist + Datei existiert nicht - Startup - Programmstart + Unknown share container type + Unbekannter geteilter Container-Typ - File Management - Datei-Management + Overwriting signed share container is not supported - export prevented + Überschreiben von unterzeichneten geteilten Containern nicht unterstützt. Export verhindert. - Safely save database files (may be incompatible with Dropbox, etc) - Datenbankdatei sicher speichern (ggf. inkompatibel mit Dropbox etc.) + Could not write export container (%1) + Export-Container (%1) kann nicht gespeichert werden - Backup database file before saving - Vor Speichern Backup der Datenbank erstellen + Overwriting unsigned share container is not supported - export prevented + Überschreiben von nicht unterzeichneten geteilten Containern nicht unterstützt. Export verhindert. - Entry Management - Eintrags-Management + Could not write export container + Export-Container kann nicht gespeichert werden - General - Allgemein + Unexpected export error occurred + Unerwarteter Fehler ist aufgetreten - - - SettingsWidgetSecurity - Timeouts - Timeouts + Export to %1 failed (%2) + Export zu %1 fehlgeschlagen (%2) - Clear clipboard after - Zwischenablage leeren nach + Export to %1 successful (%2) + Export zu %1 erfolgreich (%2) - sec - Seconds - sek + Export to %1 + Export nach %1 - Lock databases after inactivity of - Datenbank sperren nach einer Inaktivität von + 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 ?} - Convenience - Komfort + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Datenbank schließen, wenn Sitzung geschlossen oder Deckel zugeklappt wird + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Datenbank sperren nach Minimieren des Fensters + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Keine erneute Passworteingabe verlangen, wenn das Passwort sichtbar ist. + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Passwörter standardmäßig im Klartext anzeigen + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Passwörter in Vorschau-Panel verstecken + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Eintrags-Notizen standardmäßig verstecken + Timed Password + Zeitbasiertes Passwort - Privacy - Datenschutz + 000000 + 000000 + + + Copy + Kopieren + + Expires in <b>%n</b> second(s) + Läuft in <b>%n</b> Sekunde(n) abLäuft in <b>%n</b> Sekunde(n) ab + + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Verwende Google als Fallback fürs Herunterladen von Website-Icons + Copy + Kopieren - Re-lock previously locked database after performing Auto-Type - Datenbank nach Auto-Type automatisch wieder sperren. + 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. + + + There was an error creating the QR code. + QR-Code konnte nicht erstellt werden. + + + Closing in %1 seconds. + Wird in %1 Sekunde(n) geschlossen… - 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 + sec + Seconds + sek + + + Code size: + Code-Länge: 6 digits 6 Ziffern - Code size: - Code-Länge: + 7 digits + 7 Nummern - sec - Seconds - sek + 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 + + + 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. - - - UnlockDatabaseWidget - Unlock database - Datenbank entsperren + 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 - - Remove an entry from the database. - Eintrag aus der Datenbank entfernen - - - Path of the database. - Pfad zur Datenbank. - - - Path of the entry to remove. - Pfad des zu entfernenden Eintrags. - + YubiKeyEditWidget - KeePassXC - cross-platform password manager - KeePassXC - Plattformübergreifender Passwortmanager - - - filenames of the password databases to open (*.kdbx) - Dateinamen der zu öffnenden Datenbanken (*.kdbx) + Refresh + Neu laden - path to a custom config file - Pfad zu einer benutzerdefinierten Konfigurationsdatei + YubiKey Challenge-Response + YubiKey Challenge-Response - key file of the database - Schlüsseldatei der Datenbank + <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> - read password of the database from stdin - Passwort der Datenbank von stdin lesen + No YubiKey detected, please ensure it's plugged in. + Kein YubiKey erkannt. Ist er eingesteckt? - 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 a27baa6a8d..5c1e9d8ffd 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. - Build Type: %1 - - + Version %1 + Έκδοση %1 - - - AccessControlDialog - KeePassXC HTTP Confirm Access - KeePassXC HTTP Επιβεβαίωση Πρόσβασης + Build Type: %1 + Τύπος build: %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 + YubiKey + + + TouchID + TouchID + + + None + None + + + KeeShare (signed and unsigned sharing) + + + + KeeShare (only signed sharing) + + + + KeeShare (only unsigned sharing) + @@ -112,586 +120,811 @@ Please select whether you want to allow access. Enable SSH Agent (requires restart) Ενεργοποίηση πράκτορα SSH (απαιτεί επανεκκίνηση) + + Use OpenSSH for Windows instead of Pageant + + - AutoType + ApplicationSettingsWidget - Couldn't find an entry that matches the window title: - Αποτυχία να βρεθεί μια καταχώρηση που να ταιριάζει με τον τίτλο του παραθύρου: + Application Settings + Ρυθμίσεις Εφαρμογής - Auto-Type - KeePassXC - Auto-Type - KeePassXC + General + Γενικά - Auto-Type - Αυτόματη-Γραφή + Security + Ασφάλεια - The Syntax of your Auto-Type statement is incorrect! + Access error for config file %1 + Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 + + + Icon only - This Auto-Type command contains a very long delay. Do you really want to proceed? + Text only - This Auto-Type command contains very slow key presses. Do you really want to proceed? + Text beside icon - This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + Text under icon + + + + Follow style - AutoTypeAssociationsModel + ApplicationSettingsWidgetGeneral - Window - Παράθυρο + Basic Settings + Βασικές Ρυθμίσεις - Sequence - Ακολουθία + Startup + Startup - Default sequence - Προεπιλεγμένη ακολουθία + Start only a single instance of KeePassXC + Εκκίνηση μόνον μιας περίπτωσης KeePassXC - - - AutoTypeMatchModel - Group - Όμαδα + Remember last databases + Θυμηθείτε την τελευταία βάσεις δεδομένων - Title - Τίτλος + Remember last key files and security dongles + Να θυμάσαι το τελευταίο αρχείο κλειδιού και φορητές συσκευές ασφαλείας - Username - Όνομα χρήστη + Load previous databases on startup + Φόρτωμα προηγούμενων βάσεων δεδομένων κατά την εκκίνηση - Sequence - Ακολουθία + Minimize window at application startup + Ελαχιστοποίηση παραθύρου κατά την εκκίνηση - - - AutoTypeSelectDialog - Auto-Type - KeePassXC - Auto-Type - KeePassXC + File Management + Διαχείριση αρχείων - Select entry to Auto-Type: - Επιλέξτε καταχώρηση για αυτόματη γραφή: + Safely save database files (may be incompatible with Dropbox, etc) + Ασφαλής αποθήκευση αρχείων βάσης δεδομένων (λειτουργία ίσως ασύμβατη με Dropbox, κλπ) - - - BrowserAccessControlDialog - KeePassXC-Browser Confirm Access - + Backup database file before saving + Δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων πριν αποθηκεύσετε - Remember this decision - Να θυμάσαι αυτή την απόφαση + Automatically save after every change + Αυτόματη Αποθήκευση μετά απο κάθε αλλαγή - Allow - Αποδοχή + Automatically save on exit + Αυτόματη αποθήκευση κατα την έξοδο - Deny - Άρνηση + Don't mark database as modified for non-data changes (e.g., expanding groups) + Η βάση δεδομένων να μην σημαίνεται ως τροποποιημένη για αλλαγές που δεν αφορούν δεδομένα (π.χ. επέκταση ομάδων) - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 έχει ζητήσει πρόσβαση σε κωδικούς για το/τα ακόλουθο/α αντικείμενο/α. -Παρακαλώ επιλέξετε εάν θέλετε να επιτρέψετε τη πρόσβαση. + Automatically reload the database when modified externally + Αυτόματη επαναφόρτωση βάσης σε περίπτωση εξωτερικής τροποποίησης - - - BrowserOptionDialog - Dialog - Διάλογος + Entry Management + Διαχείριση καταχώρισης - This is required for accessing your databases with KeePassXC-Browser - + Use group icon on entry creation + Χρησιμοποίηση εικονιδίου ομάδας κατα την δημιουργία καταχώρησης - Enable KeepassXC browser integration - + Minimize when copying to clipboard + Ελαχιστοποίηση οταν αντιγράφετε στο πρόχειρο + + + Hide the entry preview panel + Απόκρυψη του πλαισίου προεπισκόπισης καταχωρήσεων General Γενικά - Enable integration for these browsers: - + Hide toolbar (icons) + Απόκρυψη εργαλειοθήκης (εικονιδίων) - &Google Chrome - + Minimize instead of app exit + Ελλαχιστοποίηση αντί για έξοδος από την εφαρμογή - &Firefox - + Show a system tray icon + Δείχνουν ένα εικονίδιο του δίσκου συστήματος - &Chromium - + Dark system tray icon + Σκοτεινό εικονίδιο περιοχής συστήματος - &Vivaldi - + Hide window to system tray when minimized + Απόκρυψη του παραθύρου στην περιοχή συστήματος όταν γίνεται ελλαχιστοποίηση - Show a &notification when credentials are requested - Credentials mean login data requested via browser extension - + Language + Γλώσσα - Re&quest to unlock the database if it is locked - + Auto-Type + Αυτόματη-Γραφή - Only entries with the same scheme (http://, https://, ...) are returned. - + Use entry title to match windows for global Auto-Type + Να γίνεται χρήση του τίτλου για το ταίριασμα των παραθύρων της λειτουργίας Auto-Type - &Match URL scheme (e.g., https://...) - + Use entry URL to match windows for global Auto-Type + Να γίνεται χρήση του URL του τίτλου για το ταίριασμα των παραθύρων λειτουργίας Auto-Type - Only returns the best matches for a specific URL instead of all entries for the whole domain. - + Always ask before performing Auto-Type + Πάντα ερώτηση για την εκτέλεση του Auto-Type - &Return only best-matching credentials - + Global Auto-Type shortcut + Συντόμευση για την λειτουργία Auto-Type - Sort &matching credentials by title - Credentials mean login data requested via browser extension - + Auto-Type typing delay + Καθυστέρηση πληκτρολόγησης στο Auto-Type - Sort matching credentials by &username - Credentials mean login data requested via browser extension - + ms + Milliseconds + ms - &Disconnect all browsers - + Auto-Type start delay + Καθυστέρηση έναρξης του Auto-Type - Forget all remembered &permissions + Check for updates at application startup - Advanced - Για προχωρημένους + Include pre-releases when checking for updates + - Never &ask before accessing credentials - Credentials mean login data requested via browser extension + Movable toolbar - Never ask before &updating credentials - Credentials mean login data requested via browser extension + Button style + + + ApplicationSettingsWidgetSecurity - Only the selected database has to be connected with a client. - + Timeouts + Χρονικά όρια λήξης - Searc&h in all opened databases for matching credentials - Credentials mean login data requested via browser extension - + Clear clipboard after + Εκκαθάριση πρόχειρου μετά από - Automatically creating or updating string fields is not supported. - + sec + Seconds + δευτερόλεπτα - &Return advanced string fields which start with "KPH: " - + Lock databases after inactivity of + Κλείδωμα βάσης δεδομένων μετα απο ανενεργεία - Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - + min + min - Update &native messaging manifest files at startup - + Forget TouchID after inactivity of + Απενεργοποίηση του TouchID μετά από αδράνεια - Support a proxy application between KeePassXC and browser extension. - + Convenience + Ευκολία - Use a &proxy application between KeePassXC and browser extension - + Lock databases when session is locked or lid is closed + Κλείδωμα βάσεων δεδομένων κατά το κλείδωμα της συνεδρίας ή την αναδίπλωση της οθόνης - Use a custom proxy location if you installed a proxy manually. - + Forget TouchID when session is locked or lid is closed + Απενεργοποίηση του TouchID όταν η συνεδρία κλειδώνει ή το κάλυμα κλείνει - Use a &custom proxy location - Meant is the proxy for KeePassXC-Browser - + Lock databases after minimizing the window + Κλείδωμα της βάσης δεδομένων μετά την ελαχιστοποίηση του παραθύρου - Browse... - Button for opening file dialog - + Re-lock previously locked database after performing Auto-Type + Να κλειδώνει εκ νέου η προηγούμενα κλειδωμένη βάση δεδομένων μετά την χρήση του Auto-Type - <b>Warning:</b> The following options can be dangerous! - + Don't require password repeat when it is visible + Να μην απαιτείται επανάληψη του κωδικού όταν αυτός είναι ορατός - Executable Files (*.exe);;All Files (*.*) - + Don't hide passwords when editing them + Να μην αποκρύβονται οι κωδικοί όταν γίνεται επεξεργασία τους - Executable Files (*) - + Don't use placeholder for empty password fields + Να μην γίνεται χρήση συμβόλου υποκατάστασης για τα κενά πεδία κωδικών - Select custom proxy location - + Hide passwords in the entry preview panel + Απόκρυψη των κωδικών στο πλαίσιο προεπισκόπισης καταχωρήσεων - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - + Hide entry notes by default + Να αποκρύπτονται εξ ορισμού οι σημειώσεις καταχωρήσεων - - - BrowserService - KeePassXC: New key association request - + Privacy + Ιδιωτικότητα - 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. - + Use DuckDuckGo as fallback for downloading website icons + Να γίνεται χρήση του DuckDuckGo ως εναλλακτικής πηγής για λήψη εικονιδίων ιστοσελίδων + + + AutoType - Save and allow access - + Couldn't find an entry that matches the window title: + Αποτυχία να βρεθεί μια καταχώρηση που να ταιριάζει με τον τίτλο του παραθύρου: - KeePassXC: Overwrite existing key? - KeePassXC: Αντικατάσταση τρέχοντος κλειδιού; + Auto-Type - KeePassXC + Auto-Type - KeePassXC - A shared encryption key with the name "%1" already exists. -Do you want to overwrite it? - + Auto-Type + Αυτόματη-Γραφή - KeePassXC: Update Entry - KeePassXC: Ενημέρωση Καταχώρησης + The Syntax of your Auto-Type statement is incorrect! + Η Σύνταξη της εντολής Auto-Type είναι εσφαλμένη! - Do you want to update the information in %1 - %2? - + This Auto-Type command contains a very long delay. Do you really want to proceed? + Αυτή η εντολή Auto-Type περιέχει μια πολύ μεγάλη καθυστέρηση. Θέλετε να προχωρήσετε; - KeePassXC: Database locked! - KeePassXC: Βάση δεδομένων κλειδωμένη! + This Auto-Type command contains very slow key presses. Do you really want to proceed? + Αυτή η εντολή Auto-Type περιέχει πολύ αργή πληκτρολόγηση. Θέλετε να προχωρήσετε; - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + Αυτή η εντολή Auto-Type περιέχει λειτουργίες που επαναλαμβάνονται πολύ συχνά. Θέλετε να προχωρήσετε; + + + AutoTypeAssociationsModel - KeePassXC: Settings not available! - KeePassXC: Ρυθμισμένες μη διαθέσιμες! + Window + Παράθυρο - The active database does not contain a settings entry. - + Sequence + Ακολουθία - KeePassXC: No keys found - KeePassXC: Δε βρεθήκαν κλειδιά + Default sequence + Προεπιλεγμένη ακολουθία + + + AutoTypeMatchModel - No shared encryption keys found in KeePassXC Settings. - + Group + Όμαδα - KeePassXC: Removed keys from database - KeePassXC: Κλειδιά αφαιρέθηκαν από τη βάση + Title + Τίτλος - - Successfully removed %n encryption key(s) from KeePassXC settings. - + + Username + Όνομα χρήστη - Removing stored permissions… - + Sequence + Ακολουθία + + + AutoTypeSelectDialog - Abort - Διακοπή + Auto-Type - KeePassXC + Auto-Type - KeePassXC - KeePassXC: Removed permissions - KeePassXC: Δικαιώματα αφαιρέθηκαν + Select entry to Auto-Type: + Επιλέξτε καταχώρηση για αυτόματη γραφή: - - Successfully removed permissions from %n entry(s). - + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + Kee-PassXC-Browser Επιβεβαίωση πρόσβασης - KeePassXC: No entry with permissions found! - KeePassXC: Δε βρέθηκε καταχώρηση με δικαιώματα! + Remember this decision + Να θυμάσαι αυτή την απόφαση - The active database does not contain an entry with permissions. - + Allow + Αποδοχή - - - ChangeMasterKeyWidget - Password - Κωδικός + Deny + Άρνηση - Enter password: - Εισάγετε κωδικό: + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + %1 έχει ζητήσει πρόσβαση σε κωδικούς για το/τα ακόλουθο/α αντικείμενο/α. +Παρακαλώ επιλέξετε εάν θέλετε να επιτρέψετε τη πρόσβαση. + + + BrowserEntrySaveDialog - Repeat password: - Επαναλάβετε τον κωδικό: + KeePassXC-Browser Save Entry + KeePassXC-Browser Αποθήκευση καταχώρησης - &Key file - &Αρχείο κλειδί + Ok + ΟΚ - Browse - Αναζήτηση + Cancel + Άκυρο - Create - Δημιουργία + You have multiple databases open. +Please select the correct database for saving credentials. + Έχετε ανοικτές πολλές βάσεις δεδομένων +Παρακαλώ επιλέξτε την σωστή βάση για την αποθήκευση των διαπιστευτηρίων. + + + BrowserOptionDialog - Cha&llenge Response - + Dialog + Διάλογος - Refresh - Ανανέωση + This is required for accessing your databases with KeePassXC-Browser + Αυτό απαιτείται για να έχετε πρόσβαση στις βάσεις δεδομένων με το KeePassXC-Browser - Key files - Αρχεία κλειδιά + Enable KeepassXC browser integration + Ενεργοποίηση της συνεργασίας του περιηγητή ιστού και του KeePassXC - All files - Όλα τα αρχεία + General + Γενικά - Create Key File... - Δημιουργεία αρχείου κλειδιού... + Enable integration for these browsers: + Ενεργοποίηση της ενσωμάτωσης με τους ακόλουθους περιηγητές: - Unable to create Key File : - Αποτυχία δημιουργεία αρχείου κλειδιού: + &Google Chrome + &Google Chrome - Select a key file - Επιλέξτε ένα αρχείο κλειδί + &Firefox + &Firefox - Empty password - Κενός κωδικός + &Chromium + &Chromium - Do you really want to use an empty string as password? - Θέλετε στα αλήθεια να χρησιμοποιήσετε μια άδεια σειρά σαν κωδικό; + &Vivaldi + &Vivaldi - Different passwords supplied. - Έχετε εισάγει διαφορετικούς κωδικούς. + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + Εμφάνιση &ειδοποίησης όταν απαιτούνται διαπιστευτήρια - Failed to set %1 as the Key file: -%2 - Αποτυχία ορισμού του %1 ως αρχείου κλειδιού + Re&quest to unlock the database if it is locked + - Legacy key file format + Only entries with the same scheme (http://, https://, ...) are returned. - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + &Match URL scheme (e.g., https://...) - Changing master key failed: no YubiKey inserted. - Η αλλαγή του πρωτεύοντος κλειδιού απέτυχε: δεν εισήχθη YubiKey. + Only returns the best matches for a specific URL instead of all entries for the whole domain. + - - - CloneDialog - Clone Options - Κλωνοποίηση Επιλογών + &Return only best-matching credentials + - Append ' - Clone' to title + Sort &matching credentials by title + Credentials mean login data requested via browser extension - Replace username and password with references - Αντικατάσταση του ονόματος χρήστη και του κωδικού με παραπομπές + Sort matching credentials by &username + Credentials mean login data requested via browser extension + - Copy history - Αντιγραφή ιστορικού + Advanced + Για προχωρημένους - - - CsvImportWidget - Import CSV fields - Εισαγωγή πεδίων CSV + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + - filename - όνομα αρχείου + Never ask before &updating credentials + Credentials mean login data requested via browser extension + - size, rows, columns - μέγεθος, γραμμές, στήλες + Only the selected database has to be connected with a client. + - Encoding - Κωδικοποίηση + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + - Codec + Automatically creating or updating string fields is not supported. - Text is qualified by - Το κείμενο χαρακτηρίζεται από + &Return advanced string fields which start with "KPH: " + - Fields are separated by - Τα πεδία διαχωρίζονται από + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + - Comments start with - Τα σχόλια ξεκινούν με + Update &native messaging manifest files at startup + - First record has field names - Η πρώτη εγγραφή έχει ονόματα πεδίων + Support a proxy application between KeePassXC and browser extension. + - Number of headers line to discard - Αριθμός κεφαλίδων για απόρριψη + Use a &proxy application between KeePassXC and browser extension + - Consider '\' an escape character - Θεώρησε το '\' χαρακτήρα διαφυγής + Use a custom proxy location if you installed a proxy manually. + - Preview - Προεπισκόπηση + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + - Column layout + Browse... + Button for opening file dialog - Not present in CSV file - Δεν υπάρχει στο αρχείο CSV + <b>Warning:</b> The following options can be dangerous! + - Empty fieldname - Κενό όνομα πεδίου + Select custom proxy location + - column - στήλη + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + - Imported from CSV file - Εισήχθη από αρχείο CSV + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + - Original data: - Αρχικά δεδομένα: + &Tor Browser + - Error(s) detected in CSV file ! - Σφάλμα/τα εντοπίστηκε/αν στο αρχείο CSV ! + <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: + - more messages skipped] - Περισσότερα μηνύματα έχουν παραλειφθεί] + Executable Files + - Error - Σφάλμα + All Files + - CSV import: writer has errors: - + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting - CsvImportWizard + BrowserService - Error - Σφάλμα + KeePassXC: New key association request + - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί - - - - CsvParserModel - - %n byte(s), - + 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? + KeePassXC: Αντικατάσταση τρέχοντος κλειδιού; + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + + KeePassXC: Update Entry + KeePassXC: Ενημέρωση Καταχώρησης + + + 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 + Εισαγωγή πεδίων CSV + + + 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 + Δεν υπάρχει στο αρχείο CSV + + + Imported from CSV file + Εισήχθη από αρχείο CSV + + + Original data: + Αρχικά δεδομένα: + + + Error + Σφάλμα + + + Empty fieldname %1 + + + + column %1 + + + + Error(s) detected in CSV file! + - %n row(s), + [%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 @@ -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,443 +965,1463 @@ Please consider generating a new key file. Don't show this warning again - + Να μην εμφανιστεί ξανά αυτή η προειδοποίηση All files - Όλα τα αρχεία + Όλα τα αρχεία Key files Αρχεία κλειδιά - Select key file - Επιλέξτε αρχείο κλειδί + 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 + 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. + +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 + 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 + + + All files + Όλα τα αρχεία + + + Open database + Άνοιγμα Βάσης Δεδομένων + + + CSV file + αρχείο CSV + + + Merge database + Συγχώνευση βάσης δεδομένων + + + Open KeePass 1 database + Άνοιγμα βάσης δεδομένων KeePass 1 + + + KeePass 1 database + Βάση δεδομένων KeePass 1 + + + Export database to CSV file + Εξαγωγή βάσης δεδομένων σε αρχείο CSV + + + Writing the CSV file failed. + Γράψιμο στο αρχείο CSV απέτυχε. + + + 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? + Θέλετε πραγματικά να διαγράψετε την καταχώρηση "%1" μόνιμα; + + + 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? + + + + Execute command? + Εκτέλεση εντολής; + + + Do you really want to execute the following command?<br><br>%1<br> + Θέλετε πραγματικά να εκτελέσετε την ακόλουθη εντολή;<br><br>%1<br> + + + Remember my choice + Να θυμάσαι αυτή την επιλογή + + + Do you really want to delete the group "%1" for good? + Θέλετε στα αλήθεια να διαγράψετε την ομάδα "%1" μόνιμα; + + + No current database. + Καμία τρέχουσα βάση δεδομένων. + + + No source database, nothing to do. + + + + Search Results (%1) + Αποτελέσματα Αναζήτησης (%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? + "%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 + + Entry + Καταχώρηση + + + Advanced + Για προχωρημένους + + + Icon + Εικονίδιο + + + Auto-Type + Αυτόματη-Γραφή + + + Properties + Ιδιότητες + + + History + Ιστορικό + + + SSH Agent + πράκτορας SSH + + + 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 + Κληρονόμηση προεπιλεγμένης ακολουθίας Auto-Type από την &ομάδα + + + &Use custom Auto-Type sequence: + &Χρήση προσαρμοσμένης ακολουθίας Auto-Type: + + + Window Associations + + + + + + + + + + - + - + + + Window title: + Τίτλος Παραθύρου: + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + Εμφάνιση + + + Restore + Επαναφορά + + + Delete + Διαγραφή + + + Delete all + Διαγραφή όλων + + + + EditEntryWidgetMain + + URL: + 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 + - DatabaseRepairWidget + EditGroupWidget - Repair database - Επισκευή βάσης δεδομένων + Group + Όμαδα - Error - Σφάλμα + Icon + Εικονίδιο - Can't open key file - Δεν είναι δυνατό να ανοίξει αρχείο κλειδιού + Properties + Ιδιότητες - Unable to open the database. - Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων. + Add group + Πρόσθεση Ομάδας - Database opened fine. Nothing to do. - Μια χαρά το άνοιγμα βάσης δεδομένων. Τίποτα να κάνει. + Edit group + Επεξεργασία Ομάδας - Success - Επιτυχία + Enable + Ενεργοποίηση - The database has been successfully repaired -You can now save it. - Η βάση δεδομένων έχει επιδιορθωθεί με επιτυχία μπορείτε να το αποθηκεύσετε τώρα. + Disable + Απενεργοποίηση - Unable to repair the database. - Δεν είναι δυνατή η επιδιόρθωση της βάσης δεδομένων. + Inherit from parent group (%1) + Κληρονομούν από γονική ομάδα (%1) - DatabaseSettingsWidget + EditGroupWidgetKeeShare - General - Γενικά + Form + - Encryption + Type: - Number of rounds too high - Key transformation rounds + Path: - 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 - + Password: + Κωδικός: - Cancel + Inactive - Number of rounds too low - Key transformation rounds + Import from path - 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! + Export to path - KDF unchanged + Synchronize with path - Failed to transform key with new KDF parameters; KDF unchanged. + Your KeePassXC version does not support sharing your container type. Please use %1. - - MiB - Abbreviation for Mebibytes (KDF settings) - - - - thread(s) - Threads for parallel execution (KDF settings) - - - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: + Database sharing is disabled - AES: 256 Bit (default) - AES: 256 Bit (προεπιλεγμένο) + Database export is disabled + - Twofish: 256 Bit - Twofish: 256 Bit + Database import is disabled + - Key Derivation Function: + KeeShare unsigned container - Transform rounds: - Μετατρεπόμενοι γύροι: + KeeShare signed container + - Benchmark 1-second delay + Select import source - Memory Usage: + Select export target - Parallelism: + Select import/export file - DatabaseSettingsWidgetGeneral + EditGroupWidgetMain - Database Meta Data - + Name + Όνομα - Database name: - Όνομα βάσης δεδομένων: + Notes + Σημειώσεις - Database description: - Περιγραφή βάσης δεδομένων: + Expires + Λήγει - Default username: - Προεπιλεγμένο όνομα χρήστη: + Search + Αναζήτηση - History Settings + Auto-Type + Αυτόματη-Γραφή + + + &Use default Auto-Type sequence of parent group - Max. history items: - Μέγιστα αντικείμενα ιστορικού: + Set default Auto-Type se&quence + + + + EditWidgetIcons - Max. history size: - Μέγιστο μέγεθος ιστορικού: + &Use default icon + &Χρήση προεπιλεγμένου εικονιδίου - MiB - MiB + Use custo&m icon + Χρήση προσαρμο&σμένου εικονιδίου - Use recycle bin - Χρήση κάδου ανακύκλωσης + Add custom icon + Πρόσθεση προσαρμοσμένου εικονιδίου - Additional Database Settings - + Delete custom icon + Διαγραφή προσαρμοσμένου εικονιδίου - Enable &compression (recommended) - + Download favicon + Κατέβασμα favicon - - - DatabaseTabWidget - Root - Root group - Ρίζα + Unable to fetch favicon. + Αδυναμία λήψης favicon. - KeePass 2 Database - Βάση Δεδομένων KeePass 2 + Images + Εικόνες All files Όλα τα αρχεία - Open database - Άνοιγμα βάσης δεδομένων + Custom icon already exists + - File not found! - Αρχείο δεν βρέθηκε! + Confirm Delete + Επιβεβαίωση Διαγραφής - Unable to open the database. - Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων. + Custom icon successfully downloaded + - File opened in read only mode. - Αρχείο ανοιχτό μόνο για ανάγνωση. + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + - Open CSV file - Άνοιγμα αρχείου CSV + Select Image(s) + + + + Successfully loaded %1 of %n icon(s) + - CSV file - αρχείο CSV + 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 - All files (*) - Όλα τα αρχεία (*) + Created: + Δημιουργήθηκε: - Merge database - Συγχώνευση βάσης δεδομένων + Modified: + Τροποποιήθηκε: - Open KeePass 1 database - Άνοιγμα βάσης δεδομένων KeePass 1 + Accessed: + Προσπελάστηκε: - KeePass 1 database - Βάση δεδομένων KeePass 1 + Uuid: + UUID: - Close? - Κλείσιμο; + Plugin Data + - "%1" is in edit mode. -Discard changes and close anyway? - "%1" είναι σε λειτουργεία επεξεργασίας. -Απόρριψη αλλαγών και κλείσιμο ούτως η άλλως; + Remove + Αφαίρεση - Save changes? - Αποθήκευση αλλαγών; + Delete plugin data? + - "%1" was modified. -Save changes? - "%1" έχει τροποποιηθή. -Αποθήκευση αλλαγών; + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + - Writing the database failed. - Εγγραφή της βάσης δεδομένων απέτυχε. + Key + - Passwords - Κωδικοί + Value + + + + Entry - Save database as - Αποθήκευση βάσης δεδομένων σαν + %1 - Clone + + + + + EntryAttachmentsModel + + Name + Όνομα - Export database to CSV file - Εξαγωγή βάσης δεδομένων σε αρχείο CSV + Size + + + + EntryAttachmentsWidget - Writing the CSV file failed. - Γράψιμο στο αρχείο CSV απέτυχε. + Form + - New database - Νέα βάση δεδομένων + Add + Πρόσθεση - locked - κλειδωμένο + Remove + Αφαίρεση - Lock database - Κλείδωμα βάσης δεδομένων + Open + Άνοιγμα - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Η βάση δεδομένων δεν μπορεί να κλειδωθεί γιατί την επεξεργάζεται αυτην την στιγμή. -Παρακαλώ πατήστε άκυρο για να αποθηκεύσετε τις αλλαγές σας η να τις απορρίψετε. + Save + Αποθήκευση - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Αυτή η βάση δεδομένων έχει αλλάξει. -Θέλετε να αποθηκεύσετε τις αλλαγές σας πρίν την κλειδώσετε: -Αλλιώς οι αλλαγές σας θα χαθούν. + Select files + + + + Are you sure you want to remove %n attachment(s)? + - Disable safe saves? + Save attachments - 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? + Unable to create directory: +%1 - - - DatabaseWidget - Searching... - Αναζήτηση... + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + - Change master key - Αλλαγή πρωτεύοντος κλειδιού + Unable to save attachments: +%1 + - Delete entry? - Διαγραφή καταχώρησης; + Unable to open attachment: +%1 + - Do you really want to delete the entry "%1" for good? - Θέλετε πραγματικά να διαγράψετε την καταχώρηση "%1" μόνιμα; + Unable to open attachments: +%1 + - Delete entries? - Διαγραφή καταχωρήσεων; + Confirm remove + - - Do you really want to delete %1 entries for good? - Θέλετε πραγματικά να διαγράψετε %1 καταχωρήσεις για πάντα; + + Unable to open file(s): +%1 + + + + EntryAttributesModel - Move entry to recycle bin? - Κίνηση εισόδου στον κάδο ανακύκλωσης; + Name + Όνομα + + + EntryHistoryModel - Do you really want to move entry "%1" to the recycle bin? - Θέλετε πραγματικά να κινηθεί εισόδου "%1" στον κάδο ανακύκλωσης; + Last modified + Τελευταία τροποποίηση - Move entries to recycle bin? - Μετακίνηση καταχωρήσεων στο καλάθι των αχρήστων; - - - Do you really want to move %n entry(s) to the recycle bin? - + Title + Τίτλος - Execute command? - Εκτέλεση εντολής; + Username + Όνομα χρήστη - Do you really want to execute the following command?<br><br>%1<br> - Θέλετε πραγματικά να εκτελέσετε την ακόλουθη εντολή;<br><br>%1<br> + URL + URL + + + EntryModel - Remember my choice - Να θυμάσαι αυτή την επιλογή + Ref: + Reference abbreviation + Αναφ: - Delete group? - Διαγραφή ομάδας; + Group + Όμαδα - Do you really want to delete the group "%1" for good? - Θέλετε στα αλήθεια να διαγράψετε την ομάδα "%1" μόνιμα; + Title + Τίτλος - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί + Username + Όνομα χρήστη - No current database. - Καμία τρέχουσα βάση δεδομένων. + URL + URL - No source database, nothing to do. + Never - Search Results (%1) - Αποτελέσματα Αναζήτησης (%1) + Password + Κωδικός - No Results - Δεν Υπάρχουν Αποτελέσματα + Notes + Σημειώσεις - File has changed - + Expires + Λήγει - The database file has changed. Do you want to load the changes? - Η βάση δεδομένων έχει αλλάξει. Θέλετε να φορτώσετε τις αλλαγές; + Created + - Merge Request - Αίτημα Συγχώνευσης + Modified + - The database file has changed and you have unsaved changes. -Do you want to merge your changes? + Accessed - Could not open the new database file while attempting to autoreload this database. - Δεν ήταν δυνατό το άνοιγμα του νέου αρχείου βάσης δεδομένων κατά την προσπάθεια αυτόματης επαναφόρτωσης αυτής της βάσης δεδομένων. + Attachments + Συνημμένα - Empty recycle bin? - Άδειασμα κάδου ανακύκλωσης; + Yes + - Are you sure you want to permanently delete everything from your recycle bin? - Είστε σίγουροι ότι θέλετε να διαγράψετε μόνιμα τα πάντα από το κάδο ανακύκλωσής σας; + TOTP + - DetailsWidget + EntryPreviewWidget Generate TOTP Token @@ -1190,28 +2435,20 @@ Do you want to merge your changes? Γενικά - Password - Κωδικός + Username + Όνομα χρήστη - URL - URL + Password + Κωδικός Expiration - Username - Όνομα χρήστη - - - Autotype - - - - Searching - + URL + URL Attributes @@ -1225,6 +2462,10 @@ Do you want to merge your changes? Notes Σημειώσεις + + Autotype + + Window Παράθυρο @@ -1233,6 +2474,10 @@ Do you want to merge your changes? Sequence Ακολουθία + + Searching + + Search Αναζήτηση @@ -1250,2373 +2495,2462 @@ Do you want to merge your changes? - Disabled + <b>%1</b>: %2 + attributes line Enabled + + Disabled + + + + Share + + - EditEntryWidget + EntryView - Entry - Καταχώρηση + Customize View + - Advanced - Για προχωρημένους + Hide Usernames + - Icon - Εικονίδιο + Hide Passwords + - Auto-Type - Αυτόματη-Γραφή + Fit to window + - Properties - Ιδιότητες + Fit to contents + - History - Ιστορικό + Reset to defaults + - SSH Agent - πράκτορας SSH + Attachments (icon) + + + + Group - n/a - + Recycle Bin + Καλάθι ανακύκλωσης - (encrypted) + [empty] + group has no children + + + GroupModel - Select private key + %1 + Template for name without annotation + + + HostInstaller - File too large to be a private key + KeePassXC: Cannot save file! - Failed to open private key + Cannot save the native messaging script file. + + + KMessageWidget - Entry history - Ιστορικό καταχωρήσεων + &Close + &Κλείσιμο - Add entry - Πρόσθεση καταχώρησης + Close message + Κλείσιμο Μηνύματος + + + + Kdbx3Reader + + Unable to calculate master key + Σε θέση να υπολογίσει το κύριο κλειδί - Edit entry - Επεξεργασία καταχώρησης + Unable to issue challenge-response. + - Different passwords supplied. - Παρέχονται διαφορετικοί κωδικοί. + Wrong key or database file is corrupt. + Λάθος κλειδί ή βάση δεδομένων αρχείο είναι κατεστραμμένο. - New attribute - Νέο χαρακτηριστικό + missing database headers + - Confirm Remove - Επιβεβαίωση Αφαίρεσης + Header doesn't match hash + - Are you sure you want to remove this attribute? - Είστε σίγουροι ότι θέλετε να αφαιρέσετε αυτό το χαρακτηριστικό. + Invalid header id size + - [PROTECTED] + Invalid header field length - Press reveal to view or edit + Invalid header data length + + + Kdbx3Writer - Tomorrow - Αύριο + Unable to issue challenge-response. + - - %n week(s) - + + Unable to calculate master key + Σε θέση να υπολογίσει το κύριο κλειδί - - %n month(s) - + + + 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) + - 1 year - 1 χρόνο + Unknown cipher + - Apply generated password? + Invalid header id size - Do you want to apply the generated password to this entry? + Invalid header field length - Entry updated successfully. + Invalid header data length - - - EditEntryWidgetAdvanced - Additional attributes - Πρόσθετα χαρακτηριστικά + Failed to open buffer for KDF parameters in header + - Add - Πρόσθεση + Unsupported key derivation function (KDF) or invalid parameters + - Remove - Αφαίρεση + Legacy header fields found in KDBX4 file. + - Edit Name - Επεξεργασία Ονόματος + Invalid inner header id size + - Protect - Προστασία + Invalid inner header field length + - Reveal - Αποκάλυψη + Invalid inner header binary size + - Attachments - Συνημμένα + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + - Foreground Color: + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data - Background Color: + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data - - - EditEntryWidgetAutoType - Enable Auto-Type for this entry - Ενεργοποίηση Αυτόματης-Γραφής για αυτήν την καταχώρηση + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + - Inherit default Auto-Type sequence from the &group - Κληρονόμηση προεπιλεγμένης ακολουθίας Auto-Type από την &ομάδα + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + - &Use custom Auto-Type sequence: - &Χρήση προσαρμοσμένης ακολουθίας Auto-Type: + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + - Window Associations + 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 + - Window title: - Τίτλος Παραθύρου: + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + - Use a specific sequence for this association: + 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 - EditEntryWidgetHistory + Kdbx4Writer - Show - Εμφάνιση + Invalid symmetric cipher algorithm. + - Restore - Επαναφορά + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + - Delete - Διαγραφή + Unable to calculate master key + Σε θέση να υπολογίσει το κύριο κλειδί - Delete all - Διαγραφή όλων + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + - EditEntryWidgetMain + KdbxReader - URL: - URL: + Unsupported cipher + - Password: - Κωδικός: + Invalid compression flags length + - Repeat: - Επαναλάβετε: + Unsupported compression algorithm + - Title: - Τίτλος: + Invalid master seed size + - Notes - Σημειώσεις + Invalid transform seed size + - Presets - Προεπιλογές + Invalid transform rounds size + - Toggle the checkbox to reveal the notes section. + Invalid start bytes size - Username: - Όνομα χρήστη: + Invalid random stream id size + - Expires - Λήγει + Invalid inner random stream cipher + - - - EditEntryWidgetSSHAgent - Form + 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. - Remove key from agent after + Unsupported KeePass 2 database version. - seconds + Invalid cipher uuid length: %1 (length=%2) - Fingerprint + Unable to parse UUID: %1 - Remove key from agent when database is closed/locked + Failed to read database file. + + + KdbxXmlReader - Public key + XML parsing failure: %1 - Add key to agent when database is opened/unlocked + No root group - Comment + Missing icon uuid or data - Decrypt + Missing custom data key or value - n/a + Multiple group elements - Copy to clipboard - Αντιγραφή στο πρόχειρο + Null group uuid + - Private key + Invalid group icon number - External file + Invalid EnableAutoType value - Browse... - Button for opening file dialog + Invalid EnableSearching value - Attachment + No group uuid found - Add to agent + Null DeleteObject uuid - Remove from agent + Missing DeletedObject uuid or time - Require user confirmation when this key is used + Null entry uuid - - - EditGroupWidget - Group - Όμαδα + Invalid entry icon number + - Icon - Εικονίδιο + History element in history entry + - Properties - Ιδιότητες + No entry uuid found + - Add group - Πρόσθεση Ομάδας + History element with different uuid + - Edit group - Επεξεργασία ομάδας + Duplicate custom attribute found + - Enable - Ενεργοποίηση + Entry string key or value missing + - Disable - Απενεργοποίηση + Duplicate attachment found + - Inherit from parent group (%1) - Κληρονομούν από γονική ομάδα (%1) + Entry binary key or value missing + - - - EditGroupWidgetMain - Name - Όνομα + Auto-type association window or sequence missing + - Notes - Σημειώσεις + Invalid bool value + - Expires - Λήγει + Invalid date time value + - Search - Αναζήτηση + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + - Auto-Type - Αυτόματη-Γραφή + Invalid uuid value + - &Use default Auto-Type sequence of parent group + Unable to decompress binary + Translator meant is a binary data inside an entry - Set default Auto-Type se&quence + XML error: +%1 +Line %2, column %3 - EditWidgetIcons + KeePass1OpenWidget - &Use default icon - &Χρήση προεπιλεγμένου εικονιδίου + Import KeePass1 database + Εισαγωγή βάσης δεδομένων KeePass1 - Use custo&m icon - Χρήση προσαρμο&σμένου εικονιδίου + Unable to open the database. + Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων. + + + KeePass1Reader - Add custom icon - Πρόσθεση προσαρμοσμένου εικονιδίου + Unable to read keyfile. + Αποτυχία διαβάσματος αρχείου κλειδιού. - Delete custom icon - Διαγραφή προσαρμοσμένου εικονιδίου + Not a KeePass database. + Δεν είναι βάση δεδομένων KeePass. - Download favicon - Κατέβασμα favicon + Unsupported encryption algorithm. + Μη υποστηριζόμενος αλογόριθμος κρυπτογράφησης. - Unable to fetch favicon. - Αδυναμία λήψης favicon. + Unsupported KeePass database version. + Μη υποστηριζόμενη έκδοση βάσης δεδομένων KeePass. - Hint: You can enable Google as a fallback under Tools>Settings>Security + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher - Images - Εικόνες + Invalid number of groups + - All files - Όλα τα αρχεία + Invalid number of entries + - Select Image - Επιλογή εικόνας + Invalid content hash size + - Can't read icon - Αδυναμία ανάγνωσης εικονιδίου + Invalid transform seed size + - Custom icon already exists + Invalid number of transform rounds - Confirm Delete - Επιβεβαίωση Διαγραφής + Unable to construct group tree + - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - + Root + Ρίζα - - - EditWidgetProperties - Created: - Δημιουργήθηκε: + Unable to calculate master key + Σε θέση να υπολογίσει το κύριο κλειδί - Modified: - Τροποποιήθηκε: + Wrong key or database file is corrupt. + Λάθος κλειδί ή βάση δεδομένων αρχείο είναι κατεστραμμένο. - Accessed: - Προσπελάστηκε: + Key transformation failed + - Uuid: - UUID: + Invalid group field type number + - Plugin Data + Invalid group field size - Remove - Αφαίρεση + Read group field data doesn't match size + - Delete plugin data? + Incorrect group id field size - Do you really want to delete the selected plugin data? -This may cause the affected plugins to malfunction. + Incorrect group creation time field size - Key + Incorrect group modification time field size - Value + Incorrect group access time field size - - - Entry - - Clone - Suffix added to cloned entries - - Κλωνοποίηση + Incorrect group expiry time field size + - - - EntryAttachmentsModel - Name - Όνομα + Incorrect group icon field size + - Size + Incorrect group level field size - - - EntryAttachmentsWidget - Form + Invalid group field type - Add - Πρόσθεση + Missing group id or level + - Remove - Αφαίρεση + Missing entry field type number + - Open - Άνοιγμα + Invalid entry field size + - Save - Αποθήκευση + Read entry field data doesn't match size + - Select files + Invalid entry uuid field size - - Are you sure you want to remove %n attachment(s)? - + + Invalid entry group id field size + - Confirm Remove - Επιβεβαίωση Αφαίρεσης + Invalid entry icon field size + - Save attachments + Invalid entry creation time field size - Unable to create directory: -%1 + Invalid entry modification time field size - Are you sure you want to overwrite the existing file "%1" with the attachment? + Invalid entry expiry time field size - Confirm overwrite + Invalid entry field type - Unable to save attachments: -%1 + unable to seek to content position + + + KeeShare - Unable to open attachment: -%1 + Disabled share - Unable to open attachments: -%1 + Import from - Unable to open files: -%1 + Export to - - - EntryAttributesModel - Name - Όνομα + Synchronize with + - EntryHistoryModel + KeyComponentWidget - Last modified - Τελευταία τροποποίηση + Key Component + - Title - Τίτλος + Key Component Description + - Username - Όνομα χρήστη + Cancel + Άκυρο - URL - URL + 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 + - EntryModel + KeyFileEditWidget - Ref: - Reference abbreviation - Αναφ: + Browse + Αναζήτηση - Group - Όμαδα + Generate + - Title - Τίτλος + Key File + - Username - Όνομα χρήστη + <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> + - URL - URL + Legacy key file format + - Never + 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. - Password - Κωδικός + Error loading the key file '%1' +Message: %2 + - Notes - Σημειώσεις + Key files + Αρχεία κλειδιά - Expires - Λήγει + All files + Όλα τα αρχεία - Created - + Create Key File... + Δημιουργεία αρχείου κλειδιού... - Modified + Error creating key file - Accessed + Unable to create key file: %1 - Attachments - Συνημμένα + Select a key file + Επιλέξτε ένα αρχείο κλειδί - EntryView + MainWindow - Customize View - + &Database + &Βάση Δεδομένων - Hide Usernames - + &Recent databases + &Πρόσφατες βάσεις δεδομένων - Hide Passwords + &Help - Fit to window - + E&ntries + Ε&γγραφές + + + &Groups + &Ομάδες + + + &Tools + &Εργαλεία - Fit to contents - + &Quit + &Έξοδος - Reset to defaults - + &About + &Σχετικά με - Attachments (icon) + &Open database... - - - Group - Recycle Bin - Καλάθι ανακύκλωσης + &Save database + &Αποθήκευση βάσης δεδομένων - - - HostInstaller - KeePassXC: Cannot save file! - + &Close database + &Κλείσιμο βάσης δεδομένων - Cannot save the native messaging script file. - + &Delete entry + &Διαγραφή καταχώρησης - - - HttpPasswordGeneratorWidget - Length: - Μήκος: + &Edit group + &Επεξεργασία ομάδας - Character Types - Τύποι χαρακτήρων + &Delete group + &Διαγραφή ομάδας - Upper Case Letters - Κεφαλαία γράμματα + Sa&ve database as... + - A-Z - Α-Ω + Database settings + Ρυθμίσεις βάσης δεδομένων - Lower Case Letters - Πεζά γράμματα + &Clone entry + &Κλωνοποίηση καταχώρησης - a-z - α-ω + Copy &username + Αντιγραφή &ονόματος χρήστη - Numbers - Αριθμοί + Copy username to clipboard + Αντιγραφή όνομα χρήστη στο πρόχειρο - 0-9 - 0-9 + Copy password to clipboard + Αντιγραφή κωδικού στο πρόχειρο - Special Characters - Ειδικοί χαρακτήρες + &Settings + &Ρυθμίσεις - /*_& ... - /*_& ... + Password Generator + Γεννήτρια Κωδικών - Exclude look-alike characters - Εξαίρεση χαρακτήρων που μοίαζουν + &Lock databases + &Κλείδωμα βάσεων δεδομένων - Ensure that the password contains characters from every group - Βεβαιωθείται οτι ο κωδικός περιέχει χαρακτήρες απο κάθε ομάδα + &Title + &Τίτλος - Extended ASCII + Copy title to clipboard - - - KMessageWidget - &Close - &Κλείσιμο + &URL + &URL - Close message - Κλείσιμο Μηνύματος + Copy URL to clipboard + - - - Kdbx3Reader - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί + &Notes + &Σημειώσεις - Unable to issue challenge-response. + Copy notes to clipboard - Wrong key or database file is corrupt. - Λάθος κλειδί ή βάση δεδομένων αρχείο είναι κατεστραμμένο. + &Export to CSV file... + - - - Kdbx3Writer - Unable to issue challenge-response. + Set up TOTP... - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί + Copy &TOTP + - - - Kdbx4Reader - missing database headers + E&mpty recycle bin - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί + Clear history + Καθαρισμός ιστορικού - Invalid header checksum size - + Access error for config file %1 + Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 - Header SHA256 mismatch - + Settings + Ρύθμίσεις - Wrong key or database file is corrupt. (HMAC mismatch) - + Toggle window + Εναλλαγή παραθύρων - Unknown cipher - + Quit KeePassXC + Κλείσιμο KeePassXC - Invalid header id size - + Please touch the button on your YubiKey! + Παρακαλώ αγγίξτε το κουμπί στο YubiKey σας! - Invalid header field length + 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. - Invalid header data length + &Donate - Failed to open buffer for KDF parameters in header + Report a &bug - Unsupported key derivation function (KDF) or invalid parameters + 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. - Legacy header fields found in KDBX4 file. + &Import - Invalid inner header id size + Copy att&ribute... - Invalid inner header field length + TOTP... - Invalid inner header binary size + &New database... - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data + Create a new database - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data + &Merge from database... - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data + Merge from another KDBX database - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data + &New entry - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data + Add a new entry - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data + &Edit entry - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data + View or edit entry - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data + &New group - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data + Add a new group - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data + Change master &key... - Invalid variant map entry type - Translation: variant map = data structure for storing meta data + &Database settings... - Invalid variant map field type size - Translation: variant map = data structure for storing meta data + Copy &password - - - Kdbx4Writer - Invalid symmetric cipher algorithm. + Perform &Auto-Type - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher + Open &URL - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί + KeePass 1 database... + - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data + Import a KeePass 1 database - - - KdbxReader - Invalid cipher uuid length + CSV file... - Unsupported cipher + Import a CSV file - Invalid compression flags length + Show TOTP... - Unsupported compression algorithm + Show TOTP QR Code... - Invalid master seed size + Check for Updates... - Invalid transform seed size + Share entry - Invalid transform rounds size + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. - Invalid start bytes size + Check for updates on startup? - Invalid random stream id size + Would you like KeePassXC to check for updates on startup? - Invalid inner random stream cipher + You can always check for updates manually from the application menu. + + + Merger - Not a KeePass database. - Δεν είναι βάση δεδομένων KeePass. + Creating missing %1 [%2] + - 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. + Relocating %1 [%2] - Unsupported KeePass 2 database version. + Overwriting %1 [%2] - - - KdbxXmlReader - XML parsing failure: %1 + older entry merged from database "%1" - No root group + Adding backup for older target %1 [%2] - Missing icon uuid or data + Adding backup for older source %1 [%2] - Missing custom data key or value + Reapplying older target entry on top of newer source %1 [%2] - Multiple group elements + Reapplying older source entry on top of newer target %1 [%2] - Null group uuid + Synchronizing from newer source %1 [%2] - Invalid group icon number + Synchronizing from older source %1 [%2] - Invalid EnableAutoType value + Deleting child %1 [%2] - Invalid EnableSearching value + Deleting orphan %1 [%2] - No group uuid found + Changed deleted objects - Null DeleteObject uuid + Adding missing icon %1 + + + NewDatabaseWizard - Missing DeletedObject uuid or time + Create a new KeePassXC database... - Null entry uuid + Root + Root group + Ρίζα + + + + NewDatabaseWizardPage + + WizardPage - Invalid entry icon number + En&cryption Settings - History element in history entry + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - No entry uuid found + Advanced Settings - History element with different uuid + Simple Settings + + + NewDatabaseWizardPageEncryption - Unable to decrypt entry string + Encryption Settings - Duplicate custom attribute found + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - Entry string key or value missing + Database Master Key - Duplicate attachment found + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - Entry binary key or value missing + General Database Information - Auto-type association window or sequence missing + Please fill in the display name and an optional description for your new database: + + + OpenSSHKey - Invalid bool value + Invalid key file, expecting an OpenSSH key - Invalid date time value + PEM boundary mismatch - Invalid color value + Base64 decoding failed - Invalid color rgb part + Key file way too small. - Invalid number value + Key file magic header id invalid - Invalid uuid value + Found zero keys - Unable to decompress binary - Translator meant is a binary data inside an entry + Failed to read public key. - - - KeePass1OpenWidget - Import KeePass1 database - Εισαγωγή βάσης δεδομένων KeePass1 + Corrupted key file, reading private key failed + - Unable to open the database. - Αποτυχία ανοίγματος βάσης δεδομένων. + No private key payload to decrypt + - - - KeePass1Reader - Unable to read keyfile. - Αποτυχία διαβάσματος αρχείου κλειδιού. + Trying to run KDF without cipher + - Not a KeePass database. - Δεν ειναι βάση δεδομένων KeePass. + Passphrase is required to decrypt this key + - Unsupported encryption algorithm. - Μη υποστηριζόμενος αλογόριθμος κρυπτογράφησης. + Key derivation failed, key file corrupted? + - Unsupported KeePass database version. - Μη υποστηριζόμενη έκδοση βάσης δεδομένων KeePass. + Decryption failed, wrong passphrase? + - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher + Unexpected EOF while reading public key - Invalid number of groups + Unexpected EOF while reading private key - Invalid number of entries + Can't write public key as it is empty - Invalid content hash size + Unexpected EOF when writing public key - Invalid transform seed size + Can't write private key as it is empty - Invalid number of transform rounds + Unexpected EOF when writing private key - Unable to construct group tree + Unsupported key type: %1 - Root - Ρίζα + Unknown cipher: %1 + - Unable to calculate master key - Σε θέση να υπολογίσει το κύριο κλειδί + Cipher IV is too short for MD5 kdf + - Wrong key or database file is corrupt. - Λάθος κλειδί ή βάση δεδομένων αρχείο είναι κατεστραμμένο. + Unknown KDF: %1 + - Key transformation failed + Unknown key type: %1 + + + PasswordEditWidget - Invalid group field type number - + Enter password: + Εισάγετε κωδικό: - Invalid group field size + Confirm password: - Read group field data doesn't match size - + Password + Κωδικός - Incorrect group id field size + <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> - Incorrect group creation time field size + Password cannot be empty. - Incorrect group modification time field size + Passwords do not match. - Incorrect group access time field size + Generate master password + + + PasswordGeneratorWidget - Incorrect group expiry time field size + %p% - Incorrect group icon field size - + Password: + Κωδικός: - Incorrect group level field size - + strength + Password strength + ισχύς - Invalid group field type - + entropy + εντροπία - Missing group id or level - + Password + Κωδικός - Missing entry field type number - + Character Types + Τύποι χαρακτήρων - Invalid entry field size - + Upper Case Letters + Κεφαλαία γράμματα - Read entry field data doesn't match size - + Lower Case Letters + Πεζά γράμματα - Invalid entry uuid field size - + Numbers + Αριθμοί - Invalid entry group id field size - + Special Characters + Ειδικοί χαρακτήρες - Invalid entry icon field size + Extended ASCII - Invalid entry creation time field size - + Exclude look-alike characters + Εξαίρεση χαρακτήρων που μοίαζουν - Invalid entry modification time field size + Pick characters from every group - Invalid entry expiry time field size - + &Length: + &Μήκος: - Invalid entry field type - + Passphrase + Φράση Κλειδί - - - KeePass2 - AES: 256-bit - + Wordlist: + Λίστα Λέξεων: - Twofish: 256-bit - + Word Separator: + Διαχωριστικό Λέξεων: - ChaCha20: 256-bit - + Copy + Αντιγραφή - AES-KDF (KDBX 4) - + Accept + Αποδοχή - AES-KDF (KDBX 3.1) - + Close + Κλείσιμο - Argon2 (KDBX 4 – recommended) + Entropy: %1 bit - - - Main - Existing single-instance lock file is invalid. Launching new instance. + Password Quality: %1 - The lock file could not be created. Single-instance mode disabled. - + Poor + Password quality + Φτωχή - Another instance of KeePassXC is already running. - Μία άλλη διεργασία του KeePassXC ήδη τρέχει. + Weak + Password quality + Αδύναμη - Fatal error while testing the cryptographic functions. - Ανεπανόρθωτο σφάλμα κατά τον έλεγχο των κρυπτογραφικών λειτουργιών. + Good + Password quality + Καλή - KeePassXC - Error - KeePassXC - Σφάλμα + Excellent + Password quality + Εξαιρετική - - - MainWindow - &Database - &Βάση Δεδομένων + ExtendedASCII + - &Recent databases - &Πρόσφατες βάσεις δεδομένων + Switch to advanced mode + - Import - Εισαγωγή + Advanced + Για προχωρημένους - &Help + Upper Case Letters A to F - E&ntries - Ε&γγραφές + A-Z + Α-Ω - Copy att&ribute to clipboard + Lower Case Letters A to F - Time-based one-time password - + a-z + α-ω - &Groups - &Ομάδες + 0-9 + 0-9 - &Tools - &Εργαλεία + Braces + - &Quit - &Έξοδος + {[( + - &About - &Σχετικά με + Punctuation + - &Open database... + .,:; - &Save database - &Αποθήκευση βάσης δεδομένων + Quotes + - &Close database - &Κλείσιμο βάσης δεδομένων + " ' + - &New database - &Νέα βάση δεδομένων + Math + - Merge from KeePassX database - Συγχώνευση από βάση δεδομένων KeePassX + <*+!?= + - &Add new entry - &Προσθήκη νέας καταχώρησης + Dashes + - &View/Edit entry - &Προβολή/Επεξεργασία καταχώρησης + \_|-/ + - &Delete entry - &Διαγραφή καταχώρησης + Logograms + - &Add new group - &Προσθήκη νέας ομάδας + #$%&&@^`~ + - &Edit group - &Επεξεργασία ομάδας + Switch to simple mode + - &Delete group - &Διαγραφή ομάδας + Simple + - Sa&ve database as... + Character set to exclude from generated password - Change &master key... + Do not include: - &Database settings + Add non-hex letters to "do not include" list - Database settings - Ρυθμίσεις βάσης δεδομένων + Hex + - &Clone entry - &Κλωνοποίηση καταχώρησης + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - &Find + Word Co&unt: - Copy &username - Αντιγραφή &ονόματος χρήστη + Regenerate + + + + QApplication - Copy username to clipboard - Αντιγραφή όνομα χρήστη στο πρόχειρο + KeeShare + + + + QFileDialog - Cop&y password - Αντιγρα&φή κωδικού + Select + + + + QMessageBox - Copy password to clipboard - Αντιγραφή κωδικού στο πρόχειρο + Overwrite + - &Settings - &Ρυθμίσεις + Delete + Διαγραφή - Password Generator - Γεννήτρια Κωδικών + Move + - &Perform Auto-Type + Empty - &Open URL - &Άνοιγμα URL + Remove + Αφαίρεση - &Lock databases - &Κλείδωμα βάσεων δεδομένων + Skip + - &Title - &Τίτλος + Disable + Απενεργοποίηση - Copy title to clipboard + Merge + + + QObject - &URL - &URL + Database not opened + - Copy URL to clipboard + Database hash not available - &Notes - &Σημειώσεις + Client public key not received + - Copy notes to clipboard + Cannot decrypt message - &Export to CSV file... + Action cancelled or denied - Import KeePass 1 database... + KeePassXC association failed, try again - Import CSV file... + Encryption key is not recognized - Re&pair database... + Incorrect action - Show TOTP + Empty message received - Set up TOTP... + No URL provided - Copy &TOTP + No logins found - E&mpty recycle bin + Unknown error - Clear history - Καθαρισμός ιστορικού + Add a new entry to a database. + - Access error for config file %1 - Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 + Path of the database. + Διαδρομή της βάσης δεδομένων. - <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> + Key file of the database. - read-only - Μόνο για ανάγνωση + path + - Settings - Ρύθμίσεις + Username for the entry. + - Toggle window - Εναλλαγή παραθύρων + username + - Quit KeePassXC - Κλείσιμο KeePassXC + URL for the entry. + - KeePass 2 Database - Βάση Δεδομένων KeePass 2 + URL + URL - All files - Όλα τα αρχεία + Prompt for the entry's password. + - Open database - Άνοιγμα Βάσης Δεδομένων + Generate a password for the entry. + - Save repaired database - Αποθήκευση επιδιορθωμένη βάση δεδομένων + Length for the generated password. + - Writing the database failed. - Εγγραφή της βάσης δεδομένων απέτυχε. + length + - Please touch the button on your YubiKey! - Παρακαλώ αγγίξτε το κουμπί στο YubiKey σας! + Path of the entry to add. + - 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. + Copy an entry's password to the clipboard. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key + Path of the entry to clip. + clip = copy to clipboard - PEM boundary mismatch + Timeout in seconds before clearing the clipboard. - Base64 decoding failed + Edit an entry. - Key file way too small. + Title for the entry. - Key file magic header id invalid + title - Found zero keys + Path of the entry to edit. - Failed to read public key. + Estimate the entropy of a password. - Corrupted key file, reading private key failed + Password for which to estimate the entropy. - No private key payload to decrypt + Perform advanced analysis on the password. - Trying to run KDF without cipher - + Extract and print the content of a database. + Εξαγωγή και τύπωμα των περιεχομένων της βάσης δεδομένων. - Passphrase is required to decrypt this key - + Path of the database to extract. + Διαδρομή της βάσης δεδομένων προς εξαγωγή. - Key derivation failed, key file corrupted? + Insert password to unlock %1: - Decryption failed, wrong passphrase? + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - Unexpected EOF while reading public key + + +Available commands: + - Unexpected EOF while reading private key - + Name of the command to execute. + Όνομα εντολής προς εκτέλεση. - Can't write public key as it is empty + List database entries. + Προβολή καταχωρίσεων βάσης δεδομένων. + + + Path of the group to list. Default is / - Unexpected EOF when writing public key + Find entries quickly. - Can't write private key as it is empty + Search term. - Unexpected EOF when writing private key + Merge two databases. + Συγχώνευση δύο βάσεων δεδομένων. + + + Path of the database to merge into. - Unsupported key type: %1 + Path of the database to merge from. - Unknown cipher: %1 + Use the same credentials for both database files. - Cipher IV is too short for MD5 kdf + Key file of the database to merge from. - Unknown KDF: %1 + Show an entry's information. - Unknown key type: %1 + 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. - - - OptionDialog - Dialog - Διάλογος + attribute + - This is required for accessing your databases from ChromeIPass or PassIFox - Αυτό είναι απαραίτητο για τη πρόσβαση στις βάσεις δεδομένων σας, από το ChromeIPass ή το PassIFox + Name of the entry to show. + Όνομα καταχώρησης προς προβολή. - Enable KeePassHTTP server - Ενεργοποίηση του εξυπηρετητή KeePassHTTP + NULL device + - General - Γενικά + error reading from device + σφάλμα κατά την ανάγνωση από συσκευή - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + malformed string - Only returns the best matches for a specific URL instead of all entries for the whole domain. + missing closing quote - &Return only best matching entries - + Group + Όμαδα - Re&quest to unlock the database if it is locked - + Title + Τίτλος - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - + Username + Όνομα χρήστη - &Match URL schemes - + Password + Κωδικός + + + Notes + Σημειώσεις - Sort matching entries by &username + Last Modified - Sort &matching entries by title + Created - R&emove all shared encryption keys from active database + Browser Integration + Ενσωμάτωση Περιηγητή + + + YubiKey[%1] Challenge Response - Slot %2 - %3 - Re&move all stored permissions from entries in active database + Press - Password Generator - Γεννήτρια Κωδικών + Passive + - Advanced - Για προχωρημένους + SSH Agent + πράκτορας SSH - Always allow &access to entries + Generate a new random diceware passphrase. - Always allow &updating entries + Word count for the diceware passphrase. - Only the selected database has to be connected with a client. + Wordlist for the diceware generator. +[Default: EFF English] - Searc&h in all opened databases for matching entries + Generate a new random password. - Automatically creating or updating string fields is not supported. + Invalid value for password length %1. - &Return advanced string fields which start with "KPH: " + Could not create entry with path %1. - HTTP Port: - HTTP Θύρα: + Enter password for new entry: + - Default port: 19455 - Προεπιλεγμένη θύρα: 19455 + Writing the database failed %1. + - KeePassXC will listen to this port on 127.0.0.1 - Το KeePassXC θα ακούει σε αυτή τη θύρα στο 127.0.0.1 + Successfully added entry %1. + - <b>Warning:</b> The following options can be dangerous! + Copy the current TOTP to the clipboard. - <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> + Invalid timeout value %1. - Cannot bind to privileged ports + Entry %1 not found. - Cannot bind to privileged ports below 1024! -Using default port 19455. + Entry with path %1 has no TOTP set up. - - - PasswordGeneratorWidget - %p% + Entry's current TOTP copied to the clipboard! - Password: - Κωδικός: + Entry's password copied to the clipboard! + - - strength - Password strength - ισχύς + + Clearing the clipboard in %1 second(s)... + - entropy - εντροπία + Clipboard cleared! + - Password - Κωδικός + Silence password prompt and other secondary outputs. + - Character Types - Τύποι χαρακτήρων + count + CLI parameter + - Upper Case Letters - Κεφαλαία γράμματα + Invalid value for password length: %1 + - Lower Case Letters - Πεζά γράμματα + Could not find entry with path %1. + - Numbers - Αριθμοί + Not changing any field for entry %1. + - Special Characters - Ειδικοί χαρακτήρες + Enter new password for entry: + - Extended ASCII + Writing the database failed: %1 - Exclude look-alike characters - Εξαίρεση χαρακτήρων που μοίαζουν + Successfully edited entry %1. + - Pick characters from every group + Length %1 - &Length: - &Μήκος: + Entropy %1 + - Passphrase - Φράση Κλειδί + Log10 %1 + - Wordlist: - Λίστα Λέξεων: + Multi-word extra bits %1 + - Word Count: - Αριθμός Λέξεων: + Type: Bruteforce + - Word Separator: - Διαχωριστικό Λέξεων: + Type: Dictionary + - Generate + Type: Dict+Leet - Copy - Αντιγραφή + Type: User Words + - Accept - Αποδοχή + Type: User+Leet + - Close - Κλείσιμο + Type: Repeated + - Apply - Εφαρμογή + Type: Sequence + - Entropy: %1 bit + Type: Spatial - Password Quality: %1 + Type: Date - Poor - Password quality - Φτωχή + Type: Bruteforce(Rep) + - Weak - Password quality - Αδύναμη + Type: Dictionary(Rep) + - Good - Password quality - Καλή + Type: Dict+Leet(Rep) + - Excellent - Password quality - Εξαιρετική + Type: User Words(Rep) + - - - QObject - Database not opened + Type: User+Leet(Rep) - Database hash not available + Type: Repeated(Rep) - Client public key not received + Type: Sequence(Rep) - Cannot decrypt message + Type: Spatial(Rep) - Timeout or cannot connect to KeePassXC + Type: Date(Rep) - Action cancelled or denied + Type: Unknown%1 - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + Entropy %1 (%2) - KeePassXC association failed, try again + *** Password length (%1) != sum of length of parts (%2) *** - Key change was not successful + Failed to load key file %1: %2 - Encryption key is not recognized + File %1 does not exist. - No saved databases found + Unable to open file %1. - Incorrect action + Error while reading the database: +%1 - Empty message received + Error while parsing the database: +%1 - No URL provided + Length of the generated password - No logins found + Use lowercase characters - Unknown error + Use uppercase characters - Add a new entry to a database. + Use numbers. - Path of the database. - Διαδρομή της βάσης δεδομένων. + Use special characters + - Key file of the database. + Use extended ASCII - path + Exclude character set - Username for the entry. + chars - username + Exclude similar looking characters - URL for the entry. + Include characters from every selected group - URL - URL + Recursively list the elements of the group. + - Prompt for the entry's password. + Cannot find group %1. - Generate a password for the entry. + Error reading merge file: +%1 - Length for the generated password. + Unable to save database to file : %1 - length + Unable to save database to file: %1 - Path of the entry to add. + Successfully recycled entry %1. - Copy an entry's password to the clipboard. + Successfully deleted entry %1. - Path of the entry to clip. - clip = copy to clipboard + Show the entry's current TOTP. - Timeout in seconds before clearing the clipboard. + ERROR: unknown attribute %1. - Edit an entry. + No program defined for clipboard manipulation - Title for the entry. + Unable to start program %1 - title + file empty - Path of the entry to edit. + %1: (row, col) %2,%3 - Estimate the entropy of a password. + AES: 256-bit - Password for which to estimate the entropy. + Twofish: 256-bit - Perform advanced analysis on the password. + ChaCha20: 256-bit - Extract and print the content of a database. - Εξαγωγή και τύπωμα των περιεχομένων της βάσης δεδομένων. + Argon2 (KDBX 4 – recommended) + - Path of the database to extract. - Διαδρομή της βάσης δεδομένων προς εξαγωγή. + AES-KDF (KDBX 4) + - Insert password to unlock %1: + AES-KDF (KDBX 3.1) - Failed to load key file %1 : %2 + Invalid Settings + TOTP - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + Invalid Key + TOTP - - -Available commands: - + Message encryption failed. - Name of the command to execute. - Όνομα εντολής προς εκτέλεση. + No groups found + - List database entries. - Προβολή καταχωρίσεων βάσης δεδομένων. + Create a new database. + - Path of the group to list. Default is / + File %1 already exists. - Find entries quickly. + Loading the key file failed - Search term. + No key is set. Aborting database creation. - Merge two databases. - Συγχώνευση δύο βάσεων δεδομένων. + Failed to save the database: %1. + - Path of the database to merge into. + Successfully created new database. - Path of the database to merge from. + Insert password to encrypt database (Press enter to leave blank): - Use the same credentials for both database files. + Creating KeyFile %1 failed: %2 - Key file of the database to merge from. + Loading KeyFile %1 failed: %2 - Show an entry's information. + Remove an entry from the database. - 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. + Path of the entry to remove. - attribute + Existing single-instance lock file is invalid. Launching new instance. - Name of the entry to show. - Όνομα καταχώρησης προς προβολή. + The lock file could not be created. Single-instance mode disabled. + - NULL device + KeePassXC - cross-platform password manager - error reading from device - σφάλμα κατά την ανάγνωση από συσκευή + filenames of the password databases to open (*.kdbx) + ονόματα αρχείων των βάσεων δεδομένων κωδικών προς άνοιγμα (*.kdbx) - file empty ! - - αρχείο κενό ! - + path to a custom config file + διαδρομή σε προσαρμοσμένο αρχείο ρυθμίσεων - malformed string - + key file of the database + Αρχείο κλειδί της βάσεως δεδομένων - missing closing quote - + read password of the database from stdin + Διάβασμα κωδικού βάσης από το stdin - Group - Όμαδα + Parent window handle + - Title - Τίτλος + Another instance of KeePassXC is already running. + Μία άλλη διεργασία του KeePassXC ήδη τρέχει. - Username - Όνομα χρήστη + Fatal error while testing the cryptographic functions. + Ανεπανόρθωτο σφάλμα κατά τον έλεγχο των κρυπτογραφικών λειτουργιών. - Password - Κωδικός + KeePassXC - Error + KeePassXC - Σφάλμα - Notes - Σημειώσεις + Database password: + + + + QtIOCompressor - Last Modified + Internal zlib error when compressing: - Created - + Error writing to underlying device: + Σφάλμα κατά την εγγραφή για την υποκείμενη συσκευή: - Legacy Browser Integration - + Error opening underlying device: + Σφάλμα άνοιγμα υποκείμενη συσκευή: - Browser Integration - Ενσωμάτωση Περιηγητή + Error reading data from underlying device: + Σφάλμα κατά την ανάγνωση δεδομένων από υποκείμενη συσκευή: - YubiKey[%1] Challenge Response - Slot %2 - %3 + Internal zlib error when decompressing: + + + QtIOCompressor::open - Press + The gzip format not supported in this version of zlib. - Passive + Internal zlib error: + Εσωτερικό σφάλμα zlib: + + + + SSHAgent + + Agent connection failed. - SSH Agent - πράκτορας SSH + Agent protocol error. + - Generate a new random diceware passphrase. + No agent running, cannot add identity. - Word count for the diceware passphrase. + No agent running, cannot remove identity. - count + Agent refused this identity. Possible reasons include: - Wordlist for the diceware generator. -[Default: EFF English] + The key has already been added. - Generate a new random password. + Restricted lifetime is not supported by the agent (check options). - Length of the generated password. + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - Use lowercase characters in the generated password. + Search Help - Use uppercase characters in the generated password. + Search terms are as follows: [modifiers][field:]["]term["] - Use numbers in the generated password. + Every search term must match (ie, logical AND) - Use special characters in the generated password. + Modifiers - Use extended ASCII in the generated password. + exclude term from results - - - QtIOCompressor - Internal zlib error when compressing: + match term exactly - Error writing to underlying device: - Σφάλμα κατά την εγγραφή για την υποκείμενη συσκευή: + use regex in term + - Error opening underlying device: - Σφάλμα άνοιγμα υποκείμενη συσκευή: + Fields + - Error reading data from underlying device: - Σφάλμα κατά την ανάγνωση δεδομένων από υποκείμενη συσκευή: + Term Wildcards + - Internal zlib error when decompressing: + match anything - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. + match one - Internal zlib error: - Εσωτερικό σφάλμα zlib: + logical OR + - - - SearchWidget - Search... - Αναζήτηση... + Examples + + + + SearchWidget Search Αναζήτηση @@ -3625,311 +4959,317 @@ Available commands: Clear - - Case Sensitive - - Limit search to selected group Περιορισμός αναζήτησης στην επιλεγμένη ομάδα - - - Service - KeePassXC: New key association request + 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. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut - KeePassXC: Overwrite existing key? - KeePassXC: Αντικατάσταση τρέχοντος κλειδιού; + Case sensitive + Διάκριση πεζών-κεφαλαίων + + + SettingsWidgetKeeShare - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Active - KeePassXC: Update Entry - KeePassXC: Ενημέρωση Καταχώρησης + Allow export + - Do you want to update the information in %1 - %2? + Allow import - KeePassXC: Database locked! - KeePassXC: Βάση δεδομένων κλειδωμένη! + Own certificate + - 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: + - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Signer + - KeePassXC: No keys found - KeePassXC: Δε βρεθήκαν κλειδιά + Key: + Κλειδί: - No shared encryption-keys found in KeePassHttp Settings. + Generate - KeePassXC: Settings not available! - KeePassXC: Ρυθμισμένες μη διαθέσιμες! + Import + Εισαγωγή - The active database does not contain an entry of KeePassHttp Settings. + Export - Removing stored permissions... - Αφαίρεση αποθηκευμένων δικαιωμάτων... + Imported certificates + - Abort - Διακοπή + Trust + - KeePassXC: Removed permissions - KeePassXC: Δικαιώματα αφαιρέθηκαν + Ask + - - Successfully removed permissions from %n entries. - + + Untrust + - KeePassXC: No entry with permissions found! - KeePassXC: Δε βρέθηκε καταχώρηση με δικαιώματα! + Remove + Αφαίρεση - The active database does not contain an entry with permissions. + Path - - - SettingsWidget - Application Settings - Ρυθμίσεις Εφαρμογής + Status + - General - Γενικά + Fingerprint + - Security - Ασφάλεια + Certificate + - Access error for config file %1 - Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 + Trusted + - - - SettingsWidgetGeneral - Basic Settings - Βασικές Ρυθμίσεις + Untrusted + - Start only a single instance of KeePassXC + Unknown - Remember last databases - Θυμηθείτε την τελευταία βάσεις δεδομένων + key.share + Filetype for KeeShare key + - Remember last key files and security dongles + KeeShare key file - Load previous databases on startup - Φόρτωμα προηγούμενων βάσεων δεδομένων κατά την εκκίνηση + All files + Όλα τα αρχεία - Automatically save on exit - Αυτόματη αποθήκευση κατα την έξοδο + Select path + - Automatically save after every change - Αυτόματη Αποθήκευση μετά απο κάθε αλλαγή + Exporting changed certificate + - Automatically reload the database when modified externally - Αυτόματη επαναφόρτωση βάσης σε περίπτωση εξωτερικής τροποποίησης + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Minimize when copying to clipboard - Ελαχιστοποίηση οταν αντιγράφετε στο πρόχειρο + %1.%2 + Template for KeeShare key file + + + + ShareObserver - Minimize window at application startup - Ελαχιστοποίηση παραθύρου κατά την εκκίνηση + Import from container without signature + - Use group icon on entry creation - Χρησιμοποίηση εικονιδίου ομάδας κατα την δημιουργία καταχώρησης + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Don't mark database as modified for non-data changes (e.g., expanding groups) + Import from container with certificate - Hide the Details view + Do you want to trust %1 with the fingerprint of %2 from %3 - Show a system tray icon - Δείχνουν ένα εικονίδιο του δίσκου συστήματος + Not this time + - Hide window to system tray when minimized + Never - Hide window to system tray instead of app exit + Always - Dark system tray icon + Just this time - Language - Γλώσσα + Import from %1 failed (%2) + - Auto-Type - Αυτόματη-Γραφή + Import from %1 successful (%2) + - Use entry title to match windows for global Auto-Type + Imported from %1 - Use entry URL to match windows for global Auto-Type + Signed share container are not supported - import prevented - Always ask before performing Auto-Type - Πάντα ερώτηση για την εκτέλεση του Auto-Type + File is not readable + - Global Auto-Type shortcut + Invalid sharing container - Auto-Type delay - Καθυστέρηση Auto-Type + Untrusted import prevented + - ms - Milliseconds - ms + Successful signed import + - Startup + Unexpected error - File Management + Unsigned share container are not supported - import prevented - Safely save database files (may be incompatible with Dropbox, etc) + Successful unsigned import - Backup database file before saving + File does not exist - Entry Management + Unknown share container type - General - Γενικά + Overwriting signed share container is not supported - export prevented + - - - SettingsWidgetSecurity - Timeouts + Could not write export container (%1) - Clear clipboard after - Εκκαθάριση πρόχειρου μετά από + Could not embed signature (%1) + - sec - Seconds - δευτερόλεπτα + Could not embed database (%1) + - Lock databases after inactivity of - Κλείδωμα βάσης δεδομένων μετα απο ανενεργεία + Overwriting unsigned share container is not supported - export prevented + - Convenience - Ευκολία + Could not write export container + - Lock databases when session is locked or lid is closed - Κλείδωμα βάσεων δεδομένων κατά το κλείδωμα της συνεδρίας ή την αναδίπλωση της οθόνης + Unexpected export error occurred + - Lock databases after minimizing the window - Κλείδωμα της βάσης δεδομένων μετά την ελαχιστοποίηση του παραθύρου + Export to %1 failed (%2) + - Don't require password repeat when it is visible + Export to %1 successful (%2) - Show passwords in cleartext by default - Εμφάνιση κωδίκων σε απλό κείμενο από προεπιλογή + Export to %1 + + + + TotpDialog - Hide passwords in the preview panel + Timed Password - Hide entry notes by default - + 000000 + 000000 - Privacy + 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 - Use Google as fallback for downloading website icons - Χρήση Google ως εφεδρικό τρόπο κατεβάσματος εικονιδίων ιστοσελίδων + There was an error creating the QR code. + - Re-lock previously locked database after performing Auto-Type + Closing in %1 seconds. - 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 Ψηφία + sec + Seconds + δευτερόλεπτα + + + Code size: + Μέγεθος κώδικα: 6 digits 6 Ψηφία - Code size: - Μέγεθος κώδικα: + 7 digits + - sec - Seconds - δευτερόλεπτα + 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. + + + + 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! + - - - UnlockDatabaseWidget - Unlock database - Ξεκλείδωμα βάσης δεδομένων + 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 - - Remove an entry from the database. - - + YubiKeyEditWidget - Path of the database. - Διαδρομή της βάσης δεδομένων. + Refresh + Ανανέωση - 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) - ονόματα αρχείων των βάσεων δεδομένων κωδικών προς άνοιγμα (*.kdbx) - - - path to a custom config file - διαδρομή σε προσαρμοσμένο αρχείο ρυθμίσεων - - - key file of the database - Αρχείο κλειδί της βάσεως δεδομένων - - - read password of the database from stdin - Διάβασμα κωδικού βάσης από το stdin + No YubiKey detected, please ensure it's plugged in. + - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_en.ts b/share/translations/keepassx_en.ts index a0e1b99b23..1f6b00076d 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 - + Copy to clipboard - Version %1 - - + Project Maintainers: + Project Maintainers: - Revision: %1 - + 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. + + + AgentSettingsWidget - Distribution: %1 - + Enable SSH Agent (requires restart) + Enable SSH Agent (requires restart) - Libraries: - + Use OpenSSH for Windows instead of Pageant + Use OpenSSH for Windows instead of Pageant + + + ApplicationSettingsWidget - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - + Application Settings + Application Settings - Enabled extensions: - + General + General - Project Maintainers: - + Security + Security - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - + Access error for config file %1 + Access error for config file %1 - Build Type: %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 - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - + Basic Settings + Basic Settings - Remember this decision - + Startup + Startup - Allow - + Start only a single instance of KeePassXC + Start only a single instance of KeePassXC - Deny - + Remember last databases + Remember last databases - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - + 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! - + <b>Warning:</b> The following options can be dangerous! - Executable Files (*.exe);;All Files (*.*) - + Select custom proxy location + Select custom proxy location - Executable Files (*) - + &Tor Browser + &Tor Browser - Select custom proxy location + <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? - + 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. - - - - + Abort + Abort - Removing stored permissions… - + Converting attributes to custom data… + Converting attributes to custom data… - Abort - + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes - KeePassXC: Removed permissions - + 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! - - - - 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 - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! - Empty password - - - - Do you really want to use an empty string as password? - - - - Different passwords supplied. - + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. - Failed to set %1 as the Key file: -%2 - + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected - Legacy key file format + KeePassXC: Create a new group - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + A request for creating a new group "%1" has been received. +Do you want to create this group? + - 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: - + Original data: - Error(s) detected in CSV file ! - + Error + Error - more messages skipped] - + Empty fieldname %1 + Empty fieldname %1 - Error - + column %1 + column %1 - CSV import: writer has errors: - - + Error(s) detected in CSV file! + Error(s) detected in CSV file! - - - CsvImportWizard - - Error - + + [%n more message(s) skipped] + + [%n more message(s) skipped] + [%n more message(s) skipped] + - Unable to calculate master key - + CSV import: writer has errors: +%1 + CSV import: writer has errors: +%1 CsvParserModel - %n byte(s), - - - + %n column(s) + + %n column(s) + %n column(s) + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + - %n row(s), - - - + %n byte(s) + + %n byte(s) + %n byte(s) - %n column(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 - - - DatabaseRepairWidget - Repair database - + TouchID for quick unlock + TouchID for quick unlock - Error - + Unable to open the database: +%1 + Unable to open the database: +%1 - Can't open key file - + Can't open key file: +%1 + Can't open key file: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - + Passwords + Passwords + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - + Advanced Settings + Advanced Settings - Success - + General + General - The database has been successfully repaired -You can now save it. - + Security + Security - Unable to repair the database. - + Master Key + Master Key - - - DatabaseSettingsWidget - General - + Encryption Settings + Encryption Settings - Encryption - + Browser Integration + Browser Integration + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - + KeePassXC-Browser settings + KeePassXC-Browser settings - 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! - + &Disconnect all browsers + &Disconnect all browsers - Understood, keep number - + Forg&et all site-specific settings on entries + Forg&et all site-specific settings on entries - Cancel - + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Move KeePassHTTP attributes to KeePassXC-Browser &custom data - Number of rounds too low - Key transformation rounds - + Stored keys + Stored keys - 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! - + Remove + Remove - KDF unchanged - + Delete the selected key? + Delete the selected key? - Failed to transform key with new KDF parameters; KDF unchanged. - + 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) - DatabaseTabWidget - - Root - Root group - - + DatabaseSettingsWidgetKeeShare - KeePass 2 Database - + Sharing + Sharing - All files - + Breadcrumb + Breadcrumb - Open database - + Type + Type - File not found! - + Path + Path - Unable to open the database. - + Last Signer + Last Signer - File opened in read only mode. - + Certificates + Certificates - Open CSV file - + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - CSV file - + Add additional protection... + Add additional protection... - All files (*) - + No encryption key added + No encryption key added - Merge database - + You must add at least one encryption key to secure your database! + You must add at least one encryption key to secure your database! - Open KeePass 1 database - + No password set + No password set - KeePass 1 database - + 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? - Close? - + Unknown error + Unknown error - "%1" is in edit mode. -Discard changes and close anyway? - + Failed to change master key + Failed to change master key + + + DatabaseSettingsWidgetMetaDataSimple - Save changes? - + Database Name: + Database Name: - "%1" was modified. -Save changes? - + Description: + Description: + + + DatabaseTabWidget - Writing the database failed. - + KeePass 2 Database + KeePass 2 Database - Passwords - + All files + All files - Save database as - + Open database + Open database - Export database to CSV file - + CSV file + CSV file - Writing the CSV file failed. - + Merge database + Merge database - New database - + Open KeePass 1 database + Open KeePass 1 database - locked - + KeePass 1 database + KeePass 1 database - Lock database - + Export database to CSV file + Export database to CSV file - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - + Writing the CSV file failed. + Writing the CSV file failed. - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - + Database creation error + Database creation error - Disable safe saves? - + 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. - 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 database file does not exist or is not accessible. + The database file does not exist or is not accessible. - - - DatabaseWidget - Searching... - + Select CSV file + Select CSV file - Change master key - + New Database + New Database - Delete entry? - + %1 [New Database] + Database tab name modifier + %1 [New Database] - Do you really want to delete the entry "%1" for good? - + %1 [Locked] + Database tab name modifier + %1 [Locked] - Delete entries? - + %1 [Read-only] + Database tab name modifier + %1 [Read-only] + + + DatabaseWidget - Do you really want to delete %1 entries for good? - + Searching... + Searching... - Move entry to recycle bin? - + Do you really want to delete the entry "%1" for good? + 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? + + + 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? + - - - DetailsWidget - Generate TOTP Token - + File opened in read only mode. + File opened in read only mode. - Close - + Lock Database? + Lock Database? - General - + You are editing an entry. Discard changes and lock anyway? + You are editing an entry. Discard changes and lock anyway? - Password - + "%1" was modified. +Save changes? + "%1" was modified. +Save changes? - URL - + Database was modified. +Save changes? + Database was modified. +Save changes? - Expiration - + Save changes? + Save changes? - Username - + 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 - Autotype - + Disable safe saves? + Disable safe saves? - Searching - + 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? - Attributes - + Writing the database failed. +%1 + Writing the database failed. +%1 - Attachments - + Passwords + Passwords - Notes - + Save database as + Save database as - Window - + KeePass 2 Database + KeePass 2 Database - Sequence - + 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? + - Search - + Delete group + Delete group - Clear - + Move group to recycle bin? + Move group to recycle bin? - Never - + 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? - [PROTECTED] - + Successfully merged the database files. + Successfully merged the database files. - Disabled - + Database was not modified by merge operation. + Database was not modified by merge operation. - Enabled + Shared group... @@ -1282,618 +1688,753 @@ 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) - EditGroupWidgetMain + EditGroupWidgetKeeShare - Name - + Form + Form - Notes - + Type: + Type: - Expires - + Path: + Path: - Search - + ... + ... - Auto-Type - + Password: + Password: - &Use default Auto-Type sequence of parent group - + Inactive + Inactive - Set default Auto-Type se&quence - + Import from path + Import from path - - - EditWidgetIcons - &Use default icon - + Export to path + Export to path - Use custo&m icon - + Synchronize with path + Synchronize with path - Add custom icon - + 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. - Delete custom icon - + Database sharing is disabled + Database sharing is disabled - Download favicon - + Database export is disabled + Database export is disabled - Unable to fetch favicon. - + Database import is disabled + Database import is disabled - Hint: You can enable Google as a fallback under Tools>Settings>Security - + KeeShare unsigned container + KeeShare unsigned container - Images - + KeeShare signed container + KeeShare signed container - All files - + Select import source + Select import source - Select Image - + Select export target + Select export target - Can't read icon - + Select import/export file + Select import/export file - Custom icon already exists + Clear + Clear + + + The export container %1 is already referenced. - Confirm Delete + The import container %1 is already imported. - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + The container %1 imported and export by different groups. - EditWidgetProperties + EditGroupWidgetMain - Created: - + Name + Name - Modified: - + Notes + Notes - Accessed: - + Expires + Expires - Uuid: - + Search + Search - Plugin Data - + Auto-Type + Auto-Type - Remove - + &Use default Auto-Type sequence of parent group + &Use default Auto-Type sequence of parent group - Delete plugin data? - + 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. + Unable to fetch favicon. + + + Images + Images + + + All files + All files + + + Custom icon already exists + Custom icon already exists + + + Confirm Delete + Confirm Delete + + + 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 - EntryView + EntryPreviewWidget - Customize View - + Generate TOTP Token + Generate TOTP Token - Hide Usernames - + Close + Close - Hide Passwords - + General + General - Fit to window - + Username + Username - Fit to contents - + Password + Password - Reset to defaults - + Expiration + Expiration - Attachments (icon) - + URL + URL - - - Group - Recycle Bin - + Attributes + Attributes - - - HostInstaller - KeePassXC: Cannot save file! - + Attachments + Attachments - Cannot save the native messaging script file. - + Notes + Notes - - - HttpPasswordGeneratorWidget - Length: - + Autotype + Autotype - Character Types - + Window + Window - Upper Case Letters - + Sequence + Sequence - A-Z - + Searching + Searching - Lower Case Letters - + Search + Search - a-z - + Clear + Clear - Numbers - + Never + Never - 0-9 - + [PROTECTED] + [PROTECTED] - Special Characters - + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 - /*_& ... - + Enabled + Enabled - Exclude look-alike characters - + Disabled + Disabled - Ensure that the password contains characters from every group - + Share + Share + + + EntryView - Extended ASCII - + 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. + 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 + + 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 - Unable to calculate master key - + Export to 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 + + + + MainWindow + + &Database + &Database + + + &Recent databases + &Recent databases + + + &Help + &Help + + + E&ntries + E&ntries + + + &Groups + &Groups + + + &Tools + &Tools + + + &Quit + &Quit + + + &About + &About + + + &Open database... + &Open database... + + + &Save database + &Save database + + + &Close database + &Close database + + + &Delete entry + &Delete entry - - - Kdbx4Reader - missing database headers - + &Edit group + &Edit group - Unable to calculate master key - + &Delete group + &Delete group - Invalid header checksum size - + Sa&ve database as... + Sa&ve database as... - Header SHA256 mismatch - + Database settings + Database settings - Wrong key or database file is corrupt. (HMAC mismatch) - + &Clone entry + &Clone entry - Unknown cipher - + Copy &username + Copy &username - Invalid header id size - + Copy username to clipboard + Copy username to clipboard - Invalid header field length - + Copy password to clipboard + Copy password to clipboard - Invalid header data length - + &Settings + &Settings - Failed to open buffer for KDF parameters in header - + Password Generator + Password Generator - Unsupported key derivation function (KDF) or invalid parameters - + &Lock databases + &Lock databases - Legacy header fields found in KDBX4 file. - + &Title + &Title - Invalid inner header id size - + Copy title to clipboard + Copy title to clipboard - Invalid inner header field length - + &URL + &URL - Invalid inner header binary size - + Copy URL to clipboard + Copy URL to clipboard - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data - + &Notes + &Notes - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data - + Copy notes to clipboard + Copy notes to clipboard - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data - + &Export to CSV file... + &Export to CSV file... - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data - + Set up TOTP... + Set up TOTP... - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data - + Copy &TOTP + Copy &TOTP - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data - + E&mpty recycle bin + E&mpty recycle bin - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data - + Clear history + Clear history - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data - + Access error for config file %1 + Access error for config file %1 - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data - + Settings + Settings - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data - + Toggle window + Toggle window - Invalid variant map entry type - Translation: variant map = data structure for storing meta data - + Quit KeePassXC + Quit KeePassXC - Invalid variant map field type size - Translation: variant map = data structure for storing meta data - + Please touch the button on your YubiKey! + Please touch the button on your YubiKey! - - - Kdbx4Writer - Invalid symmetric cipher algorithm. - + 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. - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher - + &Donate + &Donate - Unable to calculate master key - + Report a &bug + Report a &bug - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data - + 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. - - - KdbxReader - Invalid cipher uuid length - + &Import + &Import - Unsupported cipher - + Copy att&ribute... + Copy att&ribute... - Invalid compression flags length - + TOTP... + TOTP... - Unsupported compression algorithm - + &New database... + &New database... - Invalid master seed size - + Create a new database + Create a new database - Invalid transform seed size - + &Merge from database... + &Merge from database... - Invalid transform rounds size - + Merge from another KDBX database + Merge from another KDBX database - Invalid start bytes size - + &New entry + &New entry - Invalid random stream id size - + Add a new entry + Add a new entry - Invalid inner random stream cipher - + &Edit entry + &Edit entry - Not a KeePass database. - + View or edit entry + View or edit entry - 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. - + &New group + &New group - Unsupported KeePass 2 database version. - + Add a new group + Add a new group - - - KdbxXmlReader - XML parsing failure: %1 - + Change master &key... + Change master &key... - No root group - + &Database settings... + &Database settings... - Missing icon uuid or data - + Copy &password + Copy &password - Missing custom data key or value - + Perform &Auto-Type + Perform &Auto-Type - Multiple group elements - + Open &URL + Open &URL - Null group uuid - + KeePass 1 database... + KeePass 1 database... - Invalid group icon number - + Import a KeePass 1 database + Import a KeePass 1 database - Invalid EnableAutoType value - + CSV file... + CSV file... - Invalid EnableSearching value - + Import a CSV file + Import a CSV file - No group uuid found - + Show TOTP... + Show TOTP... - Null DeleteObject uuid - + Show TOTP QR Code... + Show TOTP QR Code... - Missing DeletedObject uuid or time - + Check for Updates... + Check for Updates... - Null entry uuid - + Share entry + Share entry - Invalid entry icon number - + 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. - History element in history entry - + Check for updates on startup? + Check for updates on startup? - No entry uuid found - + Would you like KeePassXC to check for updates on startup? + Would you like KeePassXC to check for updates on startup? - History element with different uuid - + You can always check for updates manually from the application menu. + You can always check for updates manually from the application menu. + + + Merger - Duplicate custom attribute found - + Creating missing %1 [%2] + Creating missing %1 [%2] - Entry string key or value missing - + Relocating %1 [%2] + Relocating %1 [%2] - Duplicate attachment found - + Overwriting %1 [%2] + Overwriting %1 [%2] - Entry binary key or value missing - + older entry merged from database "%1" + older entry merged from database "%1" - Auto-type association window or sequence missing - + Adding backup for older target %1 [%2] + Adding backup for older target %1 [%2] - Invalid bool value - + Adding backup for older source %1 [%2] + Adding backup for older source %1 [%2] - Invalid date time value - + Reapplying older target entry on top of newer source %1 [%2] + Reapplying older target entry on top of newer source %1 [%2] - Invalid color value - + Reapplying older source entry on top of newer target %1 [%2] + Reapplying older source entry on top of newer target %1 [%2] - Invalid color rgb part - + Synchronizing from newer source %1 [%2] + Synchronizing from newer source %1 [%2] - Invalid number value - + Synchronizing from older source %1 [%2] + Synchronizing from older source %1 [%2] - Invalid uuid value - + Deleting child %1 [%2] + Deleting child %1 [%2] - Unable to decompress binary - Translator meant is a binary data inside an entry - + Deleting orphan %1 [%2] + Deleting orphan %1 [%2] - - - KeePass1OpenWidget - Import KeePass1 database - + Changed deleted objects + Changed deleted objects - Unable to open the database. - + Adding missing icon %1 + Adding missing icon %1 - KeePass1Reader + NewDatabaseWizard - Unable to read keyfile. - + Create a new KeePassXC database... + Create a new KeePassXC database... - Not a KeePass database. - + Root + Root group + Root + + + NewDatabaseWizardPage - Unsupported encryption algorithm. - + WizardPage + WizardPage - Unsupported KeePass database version. - + En&cryption Settings + En&cryption Settings - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher - + 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. - Invalid number of groups - + Advanced Settings + Advanced Settings - Invalid number of entries - + Simple Settings + Simple Settings + + + NewDatabaseWizardPageEncryption - Invalid content hash size - + Encryption Settings + Encryption Settings - Invalid transform seed size - + 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 - Invalid number of transform rounds - + Database Master Key + Database Master Key - Unable to construct group tree - + A master key known only to you protects your database. + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - Root - + General Database Information + General Database Information - Unable to calculate master key - + 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 - Wrong key or database file is corrupt. - + Invalid key file, expecting an OpenSSH key + Invalid key file, expecting an OpenSSH key - Key transformation failed - + PEM boundary mismatch + PEM boundary mismatch - Invalid group field type number - + Base64 decoding failed + Base64 decoding failed - Invalid group field size - + Key file way too small. + Key file way too small. - Read group field data doesn't match size - + Key file magic header id invalid + Key file magic header id invalid - Incorrect group id field size - + Found zero keys + Found zero keys - Incorrect group creation time field size - + Failed to read public key. + Failed to read public key. - Incorrect group modification time field size - + Corrupted key file, reading private key failed + Corrupted key file, reading private key failed - Incorrect group access time field size - + No private key payload to decrypt + No private key payload to decrypt - Incorrect group expiry time field size - + Trying to run KDF without cipher + Trying to run KDF without cipher - Incorrect group icon field size - + Passphrase is required to decrypt this key + Passphrase is required to decrypt this key - Incorrect group level field size - + Key derivation failed, key file corrupted? + Key derivation failed, key file corrupted? - Invalid group field type - + Decryption failed, wrong passphrase? + Decryption failed, wrong passphrase? - Missing group id or level - + Unexpected EOF while reading public key + Unexpected EOF while reading public key - Missing entry field type number - + Unexpected EOF while reading private key + Unexpected EOF while reading private key - Invalid entry field size - + Can't write public key as it is empty + Can't write public key as it is empty - Read entry field data doesn't match size - + Unexpected EOF when writing public key + Unexpected EOF when writing public key - Invalid entry uuid field size - + Can't write private key as it is empty + Can't write private key as it is empty - Invalid entry group id field size - + Unexpected EOF when writing private key + Unexpected EOF when writing private key - Invalid entry icon field size - + Unsupported key type: %1 + Unsupported key type: %1 - Invalid entry creation time field size - + Unknown cipher: %1 + Unknown cipher: %1 - Invalid entry modification time field size - + Cipher IV is too short for MD5 kdf + Cipher IV is too short for MD5 kdf - Invalid entry expiry time field size - + Unknown KDF: %1 + Unknown KDF: %1 - Invalid entry field type - + Unknown key type: %1 + Unknown key type: %1 - KeePass2 + PasswordEditWidget - AES: 256-bit - + Enter password: + Enter password: - Twofish: 256-bit - + Confirm password: + Confirm password: - ChaCha20: 256-bit - + Password + Password - AES-KDF (KDBX 4) - + <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> - AES-KDF (KDBX 3.1) - + Passwords do not match. + Passwords do not match. - Argon2 (KDBX 4 – recommended) - + Generate master password + Generate master password - Main + PasswordGeneratorWidget - Existing single-instance lock file is invalid. Launching new instance. - + %p% + %p% - The lock file could not be created. Single-instance mode disabled. - + Password: + Password: - Another instance of KeePassXC is already running. - + strength + Password strength + strength - Fatal error while testing the cryptographic functions. - + entropy + entropy - KeePassXC - Error - + Password + Password - Database password: - + Character Types + Character Types - - - MainWindow - &Database - + Upper Case Letters + Upper Case Letters - &Recent databases - + Lower Case Letters + Lower Case Letters - Import - + Numbers + Numbers - &Help - + Special Characters + Special Characters - E&ntries - + Extended ASCII + Extended ASCII - Copy att&ribute to clipboard - + Exclude look-alike characters + Exclude look-alike characters - Time-based one-time password - + Pick characters from every group + Pick characters from every group - &Groups - + &Length: + &Length: - &Tools - + Passphrase + Passphrase - &Quit - + Wordlist: + Wordlist: - &About - + Word Separator: + Word Separator: - &Open database... - + Copy + Copy - &Save database - + Accept + Accept - &Close database - + Close + Close - &New database - + Entropy: %1 bit + Entropy: %1 bit - Merge from KeePassX database - + Password Quality: %1 + Password Quality: %1 - &Add new entry - + Poor + Password quality + Poor - &View/Edit entry - + Weak + Password quality + Weak - &Delete entry - + Good + Password quality + Good - &Add new group - + Excellent + Password quality + Excellent - &Edit group - + ExtendedASCII + ExtendedASCII - &Delete group - + Switch to advanced mode + Switch to advanced mode - Sa&ve database as... - + Advanced + Advanced - Change &master key... - + Upper Case Letters A to F + Upper Case Letters A to F - &Database settings - + A-Z + A-Z - Database settings - + Lower Case Letters A to F + Lower Case Letters A to F - &Clone entry - + a-z + a-z - Copy &username - + 0-9 + 0-9 - Copy username to clipboard - + Braces + Braces - Cop&y password - + {[( + {[( - Copy password to clipboard - + Punctuation + Punctuation - &Settings - + .,:; + .,:; - Password Generator - + Quotes + Quotes - &Perform Auto-Type - + " ' + " ' - &Open URL - + Math + Math - &Lock databases - + <*+!?= + <*+!?= - &Title - + Dashes + Dashes - Copy title to clipboard - + \_|-/ + \_|-/ - &URL - + Logograms + Logograms - Copy URL to clipboard - + #$%&&@^`~ + #$%&&@^`~ - &Notes - + Switch to simple mode + Switch to simple mode - Copy notes to clipboard - + Simple + Simple - &Export to CSV file... - + Character set to exclude from generated password + Character set to exclude from generated password - Import KeePass 1 database... - + Do not include: + Do not include: - Import CSV file... - + Add non-hex letters to "do not include" list + Add non-hex letters to "do not include" list - Re&pair database... - + Hex + Hex - Show TOTP - + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - Set up TOTP... - + Word Co&unt: + Word Co&unt: - Copy &TOTP - + Regenerate + Regenerate + + + QApplication - E&mpty recycle bin - + KeeShare + KeeShare + + + QFileDialog - Clear history - + Select + Select + + + QMessageBox - Access error for config file %1 - + Overwrite + Overwrite - <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> - + Delete + Delete - read-only - + Move + Move - Settings - + Empty + Empty - Toggle window - + Remove + Remove + + + Skip + Skip - Quit KeePassXC - + Disable + Disable + + + Merge + Merge + + + + QObject + + Database not opened + Database not opened - KeePass 2 Database - + Database hash not available + Database hash not available - All files - + Client public key not received + Client public key not received - Open database - + Cannot decrypt message + Cannot decrypt message - Save repaired database - + Action cancelled or denied + Action cancelled or denied - Writing the database failed. - + KeePassXC association failed, try again + KeePassXC association failed, try again - Please touch the button on your YubiKey! - + Encryption key is not recognized + Encryption key is not recognized - 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. - + Incorrect action + Incorrect action - &Donate - + Empty message received + Empty message received - Report a &bug - + No URL provided + No URL provided - 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. - + No logins found + No logins found - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - + Unknown error + Unknown error - PEM boundary mismatch - + Add a new entry to a database. + Add a new entry to a database. - Base64 decoding failed - + Path of the database. + Path of the database. - Key file way too small. - + Key file of the database. + Key file of the database. - Key file magic header id invalid - + path + path - Found zero keys - + Username for the entry. + Username for the entry. - Failed to read public key. - + username + username - Corrupted key file, reading private key failed - + URL for the entry. + URL for the entry. - No private key payload to decrypt - + URL + URL - Trying to run KDF without cipher - + Prompt for the entry's password. + Prompt for the entry's password. - Passphrase is required to decrypt this key - + Generate a password for the entry. + Generate a password for the entry. - Key derivation failed, key file corrupted? - + Length for the generated password. + Length for the generated password. - Decryption failed, wrong passphrase? - + length + length - Unexpected EOF while reading public key - + Path of the entry to add. + Path of the entry to add. - Unexpected EOF while reading private key - + Copy an entry's password to the clipboard. + Copy an entry's password to the clipboard. - Can't write public key as it is empty - + Path of the entry to clip. + clip = copy to clipboard + Path of the entry to clip. - Unexpected EOF when writing public key - + Timeout in seconds before clearing the clipboard. + Timeout in seconds before clearing the clipboard. - Can't write private key as it is empty - + Edit an entry. + Edit an entry. - Unexpected EOF when writing private key - + Title for the entry. + Title for the entry. - Unsupported key type: %1 - + title + title - Unknown cipher: %1 - + Path of the entry to edit. + Path of the entry to edit. - Cipher IV is too short for MD5 kdf - + Estimate the entropy of a password. + Estimate the entropy of a password. - Unknown KDF: %1 - + Password for which to estimate the entropy. + Password for which to estimate the entropy. - Unknown key type: %1 - + Perform advanced analysis on the password. + Perform advanced analysis on the password. - - - OptionDialog - Dialog - + Extract and print the content of a database. + Extract and print the content of a database. - This is required for accessing your databases from ChromeIPass or PassIFox - + Path of the database to extract. + Path of the database to extract. - Enable KeePassHTTP server - + Insert password to unlock %1: + Insert password to unlock %1: - General - + 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. - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - + + +Available commands: + + + +Available commands: + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - + Name of the command to execute. + Name of the command to execute. - &Return only best matching entries - + List database entries. + List database entries. - Re&quest to unlock the database if it is locked - + Path of the group to list. Default is / + Path of the group to list. Default is / - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - + Find entries quickly. + Find entries quickly. - &Match URL schemes - + Search term. + Search term. - Sort matching entries by &username - + Merge two databases. + Merge two databases. - Sort &matching entries by title - + Path of the database to merge into. + Path of the database to merge into. - R&emove all shared encryption keys from active database - + Path of the database to merge from. + Path of the database to merge from. - Re&move all stored permissions from entries in active database - + Use the same credentials for both database files. + Use the same credentials for both database files. - Password Generator - + Key file of the database to merge from. + Key file of the database to merge from. - Advanced - + Show an entry's information. + Show an entry's information. - Always allow &access to entries - + 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. - Always allow &updating entries - + attribute + attribute - Only the selected database has to be connected with a client. - + Name of the entry to show. + Name of the entry to show. - Searc&h in all opened databases for matching entries - + NULL device + NULL device - Automatically creating or updating string fields is not supported. - + error reading from device + error reading from device - &Return advanced string fields which start with "KPH: " - + malformed string + malformed string - HTTP Port: - + missing closing quote + missing closing quote - Default port: 19455 - + Group + Group - KeePassXC will listen to this port on 127.0.0.1 - + Title + Title - <b>Warning:</b> The following options can be dangerous! - + Username + Username - <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> - + Password + Password - Cannot bind to privileged ports - + Notes + Notes - Cannot bind to privileged ports below 1024! -Using default port 19455. - + Last Modified + Last Modified - - - PasswordGeneratorWidget - %p% - + Created + Created - Password: - + Browser Integration + Browser Integration - strength - Password strength - + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey[%1] Challenge Response - Slot %2 - %3 - entropy - + Press + Press - Password - + Passive + Passive - Character Types - + SSH Agent + SSH Agent - Upper Case Letters - + Generate a new random diceware passphrase. + Generate a new random diceware passphrase. - Lower Case Letters - + Word count for the diceware passphrase. + Word count for the diceware passphrase. - Numbers - + Wordlist for the diceware generator. +[Default: EFF English] + Wordlist for the diceware generator. +[Default: EFF English] - Special Characters - + Generate a new random password. + Generate a new random password. - Extended ASCII - + Invalid value for password length %1. + Invalid value for password length %1. - Exclude look-alike characters - + Could not create entry with path %1. + Could not create entry with path %1. - Pick characters from every group - + Enter password for new entry: + Enter password for new entry: - &Length: - + Writing the database failed %1. + Writing the database failed %1. - Passphrase - + Successfully added entry %1. + Successfully added entry %1. - Wordlist: - + Copy the current TOTP to the clipboard. + Copy the current TOTP to the clipboard. - Word Count: - + Invalid timeout value %1. + Invalid timeout value %1. - Word Separator: - + Entry %1 not found. + Entry %1 not found. - Generate - + Entry with path %1 has no TOTP set up. + Entry with path %1 has no TOTP set up. - Copy - + Entry's current TOTP copied to the clipboard! + Entry's current TOTP copied to the clipboard! - Accept - + 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)... + - Close - + Clipboard cleared! + Clipboard cleared! - Apply - + Silence password prompt and other secondary outputs. + Silence password prompt and other secondary outputs. - Entropy: %1 bit - + count + CLI parameter + count - Password Quality: %1 - + Invalid value for password length: %1 + Invalid value for password length: %1 - Poor - Password quality - + Could not find entry with path %1. + Could not find entry with path %1. - Weak - Password quality - + Not changing any field for entry %1. + Not changing any field for entry %1. - Good - Password quality - + Enter new password for entry: + Enter new password for entry: - Excellent - Password quality - + Writing the database failed: %1 + Writing the database failed: %1 - - - QObject - Database not opened - + Successfully edited entry %1. + Successfully edited entry %1. - Database hash not available - + Length %1 + Length %1 - Client public key not received - + Entropy %1 + Entropy %1 - Cannot decrypt message - + Log10 %1 + Log10 %1 - Timeout or cannot connect to KeePassXC - + Multi-word extra bits %1 + Multi-word extra bits %1 - Action cancelled or denied - + Type: Bruteforce + Type: Bruteforce - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - + Type: Dictionary + Type: Dictionary - KeePassXC association failed, try again - + Type: Dict+Leet + Type: Dict+Leet - Key change was not successful - + Type: User Words + Type: User Words - Encryption key is not recognized - + Type: User+Leet + Type: User+Leet - No saved databases found - + Type: Repeated + Type: Repeated - Incorrect action - + Type: Sequence + Type: Sequence - Empty message received - + Type: Spatial + Type: Spatial - No URL provided - + Type: Date + Type: Date - No logins found - + Type: Bruteforce(Rep) + Type: Bruteforce(Rep) - Unknown error - + Type: Dictionary(Rep) + Type: Dictionary(Rep) - Add a new entry to a database. - + Type: Dict+Leet(Rep) + Type: Dict+Leet(Rep) - Path of the database. - + Type: User Words(Rep) + Type: User Words(Rep) - Key file of the database. - + Type: User+Leet(Rep) + Type: User+Leet(Rep) - path - + Type: Repeated(Rep) + Type: Repeated(Rep) - Username for the entry. - + Type: Sequence(Rep) + Type: Sequence(Rep) - username - + Type: Spatial(Rep) + Type: Spatial(Rep) - URL for the entry. - + Type: Date(Rep) + Type: Date(Rep) - URL - + Type: Unknown%1 + Type: Unknown%1 - Prompt for the entry's password. - + Entropy %1 (%2) + Entropy %1 (%2) - Generate a password for the entry. - + *** Password length (%1) != sum of length of parts (%2) *** + *** Password length (%1) != sum of length of parts (%2) *** - Length for the generated password. - + Failed to load key file %1: %2 + Failed to load key file %1: %2 - length - + File %1 does not exist. + File %1 does not exist. - Path of the entry to add. - + Unable to open file %1. + Unable to open file %1. - Copy an entry's password to the clipboard. - + Error while reading the database: +%1 + Error while reading the database: +%1 - Path of the entry to clip. - clip = copy to clipboard - + Error while parsing the database: +%1 + Error while parsing the database: +%1 - Timeout in seconds before clearing the clipboard. - + Length of the generated password + Length of the generated password - Edit an entry. - + Use lowercase characters + Use lowercase characters - Title for the entry. - + Use uppercase characters + Use uppercase characters - title - + Use numbers. + Use numbers. - Path of the entry to edit. - + Use special characters + Use special characters - Estimate the entropy of a password. - + Use extended ASCII + Use extended ASCII - Password for which to estimate the entropy. - + Exclude character set + Exclude character set - Perform advanced analysis on the password. - + chars + chars - Extract and print the content of a database. - + Exclude similar looking characters + Exclude similar looking characters - Path of the database to extract. - + Include characters from every selected group + Include characters from every selected group - Insert password to unlock %1: - + Recursively list the elements of the group. + Recursively list the elements of the group. - Failed to load key file %1 : %2 - + Cannot find group %1. + Cannot find group %1. - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - + Error reading merge file: +%1 + Error reading merge file: +%1 - - -Available commands: - - + Unable to save database to file : %1 + Unable to save database to file : %1 - Name of the command to execute. - + Unable to save database to file: %1 + Unable to save database to file: %1 - List database entries. - + Successfully recycled entry %1. + Successfully recycled entry %1. - Path of the group to list. Default is / - + Successfully deleted entry %1. + Successfully deleted entry %1. - Find entries quickly. - + Show the entry's current TOTP. + Show the entry's current TOTP. - Search term. - + ERROR: unknown attribute %1. + ERROR: unknown attribute %1. - Merge two databases. - + No program defined for clipboard manipulation + No program defined for clipboard manipulation - Path of the database to merge into. - + Unable to start program %1 + Unable to start program %1 - Path of the database to merge from. - + file empty + file empty - Use the same credentials for both database files. - + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 - Key file of the database to merge from. - + AES: 256-bit + AES: 256-bit - Show an entry's information. - + Twofish: 256-bit + Twofish: 256-bit - 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. - + ChaCha20: 256-bit + ChaCha20: 256-bit - attribute - + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recommended) - Name of the entry to show. - + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - NULL device - + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - error reading from device - + Invalid Settings + TOTP + Invalid Settings - file empty ! - - + Invalid Key + TOTP + Invalid Key - malformed string - + Message encryption failed. + Message encryption failed. - missing closing quote - + No groups found + No groups found - Group - + Create a new database. + Create a new database. - Title - + File %1 already exists. + File %1 already exists. - Username - + Loading the key file failed + Loading the key file failed - Password - + No key is set. Aborting database creation. + No key is set. Aborting database creation. - Notes - + Failed to save the database: %1. + Failed to save the database: %1. - Last Modified - + Successfully created new database. + Successfully created new database. - Created - + Insert password to encrypt database (Press enter to leave blank): + Insert password to encrypt database (Press enter to leave blank): - Legacy Browser Integration - + Creating KeyFile %1 failed: %2 + Creating KeyFile %1 failed: %2 - Browser Integration - + Loading KeyFile %1 failed: %2 + Loading KeyFile %1 failed: %2 - YubiKey[%1] Challenge Response - Slot %2 - %3 - + Remove an entry from the database. + Remove an entry from the database. - Press - + Path of the entry to remove. + Path of the entry to remove. - Passive - + Existing single-instance lock file is invalid. Launching new instance. + Existing single-instance lock file is invalid. Launching new instance. - SSH Agent - + The lock file could not be created. Single-instance mode disabled. + The lock file could not be created. Single-instance mode disabled. - Generate a new random diceware passphrase. - + KeePassXC - cross-platform password manager + KeePassXC - cross-platform password manager - Word count for the diceware passphrase. - + filenames of the password databases to open (*.kdbx) + filenames of the password databases to open (*.kdbx) - count - + path to a custom config file + path to a custom config file - Wordlist for the diceware generator. -[Default: EFF English] - + key file of the database + key file of the database - Generate a new random password. - + read password of the database from stdin + read password of the database from stdin - Length of the generated password. - + Parent window handle + Parent window handle - Use lowercase characters in the generated password. - + Another instance of KeePassXC is already running. + Another instance of KeePassXC is already running. - Use uppercase characters in the generated password. - + Fatal error while testing the cryptographic functions. + Fatal error while testing the cryptographic functions. - Use numbers in the generated password. - + KeePassXC - Error + KeePassXC - Error - Use special characters in the generated password. - + Database password: + Database password: - Use extended ASCII in the generated password. + Cannot create new group @@ -3618,559 +4944,618 @@ 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 - Restricted lifetime is not supported by the agent (check options). - + logical OR + logical OR - A confirmation request is not supported by the agent (check options). - + Examples + Examples SearchWidget - - Search... - - Search - + Search Clear - + Clear - Case Sensitive - + Limit search to selected group + 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! - + Signer + Signer - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - + Key: + Key: - KeePassXC: Removed keys from database - + Generate + Generate - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - - - - + + Import + Import - KeePassXC: No keys found - + Export + Export - No shared encryption-keys found in KeePassHttp Settings. - + Imported certificates + Imported certificates - KeePassXC: Settings not available! - + Trust + Trust - The active database does not contain an entry of KeePassHttp Settings. - + Ask + Ask - Removing stored permissions... - + Untrust + Untrust - Abort - + Remove + Remove - KeePassXC: Removed permissions - + Path + Path - - Successfully removed permissions from %n entries. - - - - + + Status + Status - KeePassXC: No entry with permissions found! - + Fingerprint + Fingerprint - The active database does not contain an entry with permissions. - + Certificate + Certificate - - - SettingsWidget - Application Settings - + Trusted + Trusted - General - + Untrusted + Untrusted - Security - + Unknown + Unknown - Access error for config file %1 - + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - + KeeShare key file + KeeShare key file - Start only a single instance of KeePassXC - + All files + All files - Remember last databases - + Select path + Select path - Remember last key files and security dongles - + Exporting changed certificate + Exporting changed certificate - Load previous databases on startup - + 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? - Automatically save on exit + Signer: + + + ShareObserver - Automatically save after every change - + Import from container without signature + Import from container without signature - Automatically reload the database when modified externally - + 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? - Minimize when copying to clipboard - + Import from container with certificate + Import from container with certificate - Minimize window at application startup - + Not this time + Not this time - Use group icon on entry creation - + Never + Never - Don't mark database as modified for non-data changes (e.g., expanding groups) - + Always + Always - Hide the Details view - + Just this time + Just this time - Show a system tray icon - + Import from %1 failed (%2) + Import from %1 failed (%2) - Hide window to system tray when minimized - + Import from %1 successful (%2) + Import from %1 successful (%2) - Hide window to system tray instead of app exit - + Imported from %1 + Imported from %1 - Dark system tray icon - + Signed share container are not supported - import prevented + Signed share container are not supported - import prevented - Language - + File is not readable + File is not readable - Auto-Type - + Invalid sharing container + Invalid sharing container - Use entry title to match windows for global Auto-Type - + Untrusted import prevented + Untrusted import prevented - Use entry URL to match windows for global Auto-Type - + Successful signed import + Successful signed import - Always ask before performing Auto-Type - + Unexpected error + Unexpected error - Global Auto-Type shortcut - + Unsigned share container are not supported - import prevented + Unsigned share container are not supported - import prevented - ms - Milliseconds - + Successful unsigned import + Successful unsigned import - Startup - + File does not exist + File does not exist - File Management - + Unknown share container type + Unknown share container type - Safely save database files (may be incompatible with Dropbox, etc) - + Overwriting signed share container is not supported - export prevented + Overwriting signed share container is not supported - export prevented - Backup database file before saving - + Could not write export container (%1) + Could not write export container (%1) - Entry Management - + Overwriting unsigned share container is not supported - export prevented + Overwriting unsigned share container is not supported - export prevented - General - + Could not write export container + Could not write export container - Auto-Type typing delay - + Unexpected export error occurred + Unexpected export error occurred - Auto-Type start delay - + Export to %1 failed (%2) + Export to %1 failed (%2) - - - SettingsWidgetSecurity - Timeouts - + Export to %1 successful (%2) + Export to %1 successful (%2) - Clear clipboard after - + Export to %1 + Export to %1 - sec - Seconds - + 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 ?} - Lock databases after inactivity of + Multiple import source path to %1 in %2 - Convenience + Conflicting export target path %1 in %2 - Lock databases when session is locked or lid is closed + Could not embed signature: Could not open file to write (%1) - Lock databases after minimizing the window + Could not embed signature: Could not write file (%1) - Don't require password repeat when it is visible + Could not embed database: Could not open file to write (%1) - Show passwords in cleartext by default + Could not embed database: Could not write file (%1) + + + TotpDialog - Hide passwords in the preview panel - + Timed Password + Timed Password - Hide entry notes by default - + 000000 + 000000 - Privacy - + Copy + Copy + + + Expires in <b>%n</b> second(s) + + Expires in <b>%n</b> second(s) + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + Copy - Use Google as fallback for downloading website icons - + 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. - Re-lock previously locked database after performing Auto-Type - + There was an error creating the QR code. + There was an error creating the QR code. + + + Closing in %1 seconds. + Closing in %1 seconds. - SetupTotpDialog + TotpSetupDialog Setup TOTP - + Setup TOTP Key: - + Key: Default RFC 6238 token settings - + Default RFC 6238 token settings Steam token settings - + Steam token settings Use custom settings - + Use custom settings - Note: Change these settings only if you know what you are doing. - + Custom Settings + Custom Settings Time step: - + Time step: - 8 digits - + sec + Seconds + sec + + + Code size: + Code size: 6 digits - + 6 digits - Code size: - + 7 digits + 7 digits - sec - Seconds - + 8 digits + 8 digits - TotpDialog + UpdateCheckDialog - Timed Password - + Checking for updates + Checking for updates - 000000 - + Checking for updates... + Checking for updates... - Copy - + Close + Close - Expires in - + Update Error! + Update Error! - seconds - + An error occurred in retrieving update information. + An error occurred in retrieving update information. - - - UnlockDatabaseWidget - Unlock database - + Please try again later. + Please try again later. - - - UrlFetchProgressDialog - Download Progress - + Software Update + Software Update - Downloading %1. - + 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 - - Remove an entry from the database. - - - - Path of the database. - - - - Path of the entry to remove. - - - - KeePassXC - cross-platform password manager - - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - + Refresh + Refresh - path to a custom config file - + YubiKey Challenge-Response + YubiKey Challenge-Response - key file 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> + <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> - read password of the database from stdin - + No YubiKey detected, please ensure it's plugged in. + No YubiKey detected, please ensure it's plugged in. - 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 735921bbff..1918b28556 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 @@ -39,80 +38,290 @@ Copy to clipboard - Version %1 - - Version %1 - + Project Maintainers: + Project Maintainers: + + + 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. + + + + 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 - Revision: %1 - Revision: %1 + Application Settings + Application Settings - Distribution: %1 - Distribution: %1 + General + General - Libraries: - Libraries: + Security + Security - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 + Access error for config file %1 + Access error for config file %1 - Enabled extensions: - Enabled extensions: + Icon only + Icon only - Project Maintainers: - Project Maintainers: + Text only + Text only - 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. + Text beside icon + Text beside icon - Build Type: %1 - - Build Type: %1 - + Text under icon + Text under icon + + + Follow style + Follow style - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP Confirm Access + Basic Settings + Basic Settings - Remember this decision - Remember this decision + Startup + Startup - Allow - Allow + Start only a single instance of KeePassXC + Start only a single instance of KeePassXC - Deny - Deny + Remember last databases + Remember last databases - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Enable SSH Agent (requires restart) + 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 @@ -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. @@ -363,20 +585,41 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! - Executable Files (*.exe);;All Files (*.*) - + Select custom proxy location + Select custom proxy location - Executable Files (*) - Executable Files (*) + &Tor Browser + &Tor Browser - Select custom proxy location - Select custom proxy location + <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 + - 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. + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -418,150 +661,54 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? - KeePassXC: Database locked! - KeePassXC: Database locked! + Abort + Abort - 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. + Converting attributes to custom data… + Converting attributes to custom data… - KeePassXC: Settings not available! - KeePassXC: Settings not available! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes - The active database does not contain a settings entry. - The active database does not contain a settings entry. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + Successfully moved %n key to custom data.Successfully moved %n keys to custom data. - KeePassXC: No keys found - KeePassXC: No keys found + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! - No shared encryption keys found in KeePassXC Settings. - + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. - 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 - - - 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. - - - - ChangeMasterKeyWidget - - Password - Password - - - Enter password: - Enter password: - - - Repeat password: - Repeat password: - - - &Key file - - - - Browse - Browser - - - Create - Create - - - Cha&llenge Response - Cha&llenge Response - - - Refresh - Refresh - - - Key files - Key files - - - All files - All files - - - Create Key File... - - - - Unable to create Key File : - - - - Select a key file - Select a key file + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected - Empty password - Empty password - - - Do you really want to use an empty string as password? + KeePassXC: Create a new group - Different passwords supplied. - Different passwords supplied. - - - Failed to set %1 as the Key file: -%2 + A request for creating a new group "%1" has been received. +Do you want to create this group? + - 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. + 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? - - 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: - + Original data: - Error(s) detected in CSV file ! - + Error + Error - more messages skipped] - + Empty fieldname %1 + Empty fieldname %1 - Error - Error + column %1 + column %1 - CSV import: writer has errors: - - + Error(s) detected in CSV file! + Error(s) detected in CSV file! - - - CsvImportWizard - - Error - Error + + [%n more message(s) skipped] + [%n more message skipped][%n more messages skipped] - Unable to calculate master key - Unable to calculate master key + CSV import: writer has errors: +%1 + CSV import: writer has errors: +%1 CsvParserModel - %n byte(s), - + %n column(s) + %n column%n columns + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - + %n byte(s) + %n byte%n bytes - %n column(s) - + %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,142 +937,323 @@ 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 + Can't open key file: +%1 + Can't open key file: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Unable to open the database. + Passwords + Passwords + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Database opened fine. Nothing to do. + Advanced Settings + Advanced Settings - Success - Success + General + General - The database has been successfully repaired -You can now save it. - + Security + Security - Unable to repair the database. - Unable to repair the database. + Master Key + Master Key - - - DatabaseSettingsWidget - General - General + Encryption Settings + Encryption Settings - Encryption - Encryption + Browser Integration + Browser Integration + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Number of rounds too high + KeePassXC-Browser settings + KeePassXC-Browser settings - 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! - + &Disconnect all browsers + &Disconnect all browsers - Understood, keep number - Understood, keep number + Forg&et all site-specific settings on entries + Forg&et all site-specific settings on entries - Cancel - Cancel + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Move KeePassHTTP attributes to KeePassXC-Browser &custom data - Number of rounds too low - Key transformation rounds - Number of rounds too low + Stored keys + Stored keys - 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! - + Remove + Remove - KDF unchanged - + Delete the selected key? + Delete the selected key? - Failed to transform key with new KDF parameters; KDF unchanged. - Failed to transform key with new KDF parameters; KDF unchanged. + 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. - - MiB - Abbreviation for Mebibytes (KDF settings) - - - - thread(s) - Threads for parallel execution (KDF settings) - - - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - + Key + Key - AES: 256 Bit (default) - + Value + Value - Twofish: 256 Bit - + Enable Browser Integration to access these settings. + Enable Browser Integration to access these settings. - Key Derivation Function: - + Disconnect all browsers + Disconnect all browsers - Transform rounds: - + 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. - Benchmark 1-second delay - + KeePassXC: No keys found + KeePassXC: No keys found - Memory Usage: - + No shared encryption keys found in KeePassXC settings. + No shared encryption keys found in KeePassXC settings. - Parallelism: - + 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 + 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 threads + + + %1 ms + milliseconds + %1 ms%1 ms + + + %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,91 +1297,112 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + Sharing - KeePass 2 Database - KeePass 2 Database + Breadcrumb + Breadcrumb - All files - All files + Type + Type - Open database - Open database + Path + Path - File not found! - File not found! + Last Signer + Last Signer - Unable to open the database. - Unable to open the database. + Certificates + Certificates - File opened in read only mode. - + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Open CSV file + Add additional protection... + Add additional protection... - CSV file - + No encryption key added + No encryption key added - All files (*) - + You must add at least one encryption key to secure your database! + You must add at least one encryption key to secure your database! - Merge database - Merge database + No password set + No password set - Open KeePass 1 database - Open KeePass 1 database + 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? - KeePass 1 database - KeePass 1 database + Unknown error + Unknown error - Close? - + Failed to change master key + Failed to change master key + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" is in edit mode. -Discard changes and close anyway? + Database Name: + Database Name: - Save changes? - Save changes? + Description: + Description: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" was modified. -Save changes? + KeePass 2 Database + KeePass 2 Database - Writing the database failed. - Writing the database failed. + All files + All files - Passwords - + Open database + Open database - Save database as - + CSV file + CSV file + + + Merge database + Merge database + + + Open KeePass 1 database + Open KeePass 1 database + + + KeePass 1 database + KeePass 1 database 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? - - Close - Close + + Delete entry(s)? + Delete entry?Delete entries? + + + Move entry(s) to recycle bin? + Move entry to recycle bin?Move entries to recycle bin? - General - General + File opened in read only mode. + File opened in read only mode. - Password - Password + Lock Database? + Lock Database? - URL - URL + You are editing an entry. Discard changes and lock anyway? + You are editing an entry. Discard changes and lock anyway? - Expiration - + "%1" was modified. +Save changes? + "%1" was modified. +Save changes? - Username - Username + Database was modified. +Save changes? + Database was modified. +Save changes? - Autotype - + Save changes? + Save changes? - Searching - + 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 - Attributes - + Disable safe saves? + Disable safe saves? - Attachments - Attachments + 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? - Notes - Notes + Writing the database failed. +%1 + Writing the database failed. +%1 - Window - Window + Passwords + Passwords - Sequence - Sequence + Save database as + Save database as - Search - Search + KeePass 2 Database + KeePass 2 Database - Clear - Clear + 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? - Never - Never + Delete group + Delete group - [PROTECTED] - + Move group to recycle bin? + Move group to recycle bin? - Disabled - + 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? - Enabled + Successfully merged the database files. + Successfully merged the database files. + + + 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 @@ -1693,47 +2152,67 @@ Do you want to merge your changes? All files - Select Image - Select Image + Custom icon already exists + Custom icon already exists - Can't read icon - Can't read icon + Confirm Delete + Confirm Delete - Custom icon already exists - Custom icon already exists + Custom icon successfully downloaded + Custom icon successfully downloaded - Confirm Delete - + 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 - 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? + 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,2032 +2400,2905 @@ This may cause the affected plugins to malfunction. Created - + Created Modified - + Modified Accessed - + Accessed Attachments Attachments - - - EntryView - Customize View - + Yes + Yes - Hide Usernames - + TOTP + TOTP + + + EntryPreviewWidget - Hide Passwords - + Generate TOTP Token + Generate TOTP Token - Fit to window - Fit to window + Close + Close - Fit to contents - + General + General - Reset to defaults - + Username + Username - Attachments (icon) - + Password + Password - - - Group - Recycle Bin - Recycle Bin + Expiration + Expiration - - - HostInstaller - KeePassXC: Cannot save file! - + URL + URL - Cannot save the native messaging script file. - + Attributes + Attributes - - - HttpPasswordGeneratorWidget - Length: - + Attachments + Attachments - Character Types - Character Types + Notes + Notes - Upper Case Letters + 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. + 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 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 + + 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 + + + + 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 + Duplicate custom attribute found + + + Entry string key or value missing + + + + Duplicate attachment found + 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 colour value + + + Invalid color rgb part + Invalid colour 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. + Unable to open the database. + + + + KeePass1Reader + + Unable to read keyfile. + + + + Not a KeePass database. + Not a KeePass database. + + + Unsupported encryption algorithm. + 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 transform seed size + + + 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 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 - A-Z + Invalid entry uuid field size - Lower Case Letters + Invalid entry group id field size - a-z + Invalid entry icon field size - Numbers + Invalid entry creation time field size - 0-9 + Invalid entry modification time field size - Special Characters + Invalid entry expiry time field size - /*_& ... + Invalid entry field type - Exclude look-alike characters - Exclude look-alike characters + unable to seek to content position + + + + KeeShare - Ensure that the password contains characters from every group - Ensure that the password contains characters from every group + Disabled share + - Extended ASCII - Extended ASCII + Import from + + + + Export to + + + + Synchronize with + + + + Disabled share %1 + + + + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - KMessageWidget + 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 + + &Database + &Database + + + &Recent databases + &Recent databases + + + &Help + &Help + + + E&ntries + E&ntries + + + &Groups + &Groups + + + &Tools + &Tools + + + &Quit + &Quit + + + &About + &About + + + &Open database... + &Open database... + + + &Save database + &Save database + + + &Close database + &Close database + + + &Delete entry + &Delete entry + + + &Edit group + &Edit group + + + &Delete group + &Delete group + + + Sa&ve database as... + Sa&ve database as... + + + Database settings + Database settings + + + &Clone entry + &Clone entry + + + Copy &username + Copy &username + + + Copy username to clipboard + Copy username to clipboard + + + Copy password to clipboard + Copy password to clipboard + + + &Settings + &Settings + + + 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... + &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 + Access error for config file %1 + - &Close - &Close + Settings + Settings - Close message - Close message + Toggle window + Toggle window - - - Kdbx3Reader - Unable to calculate master key - Unable to calculate master key + Quit KeePassXC + Quit KeePassXC - Unable to issue challenge-response. - Unable to issue challenge-response. + Please touch the button on your YubiKey! + Please touch the button on your YubiKey! - Wrong key or database file is corrupt. - Wrong key or database file is corrupt. + 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. + - - - Kdbx3Writer - Unable to issue challenge-response. - Unable to issue challenge-response. + &Donate + - Unable to calculate master key - Unable to calculate master key + Report a &bug + - - - Kdbx4Reader - missing database headers + 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. - Unable to calculate master key - Unable to calculate master key + &Import + - Invalid header checksum size + Copy att&ribute... - Header SHA256 mismatch + TOTP... - Wrong key or database file is corrupt. (HMAC mismatch) - Wrong key or database file is corrupt. (HMAC mismatch) + &New database... + - Unknown cipher - Unknown cipher + Create a new database + - Invalid header id size + &Merge from database... - Invalid header field length - Invalid header field length + Merge from another KDBX database + - Invalid header data length - Invalid header data length + &New entry + - Failed to open buffer for KDF parameters in header + Add a new entry - Unsupported key derivation function (KDF) or invalid parameters + &Edit entry - Legacy header fields found in KDBX4 file. + View or edit entry - Invalid inner header id size + &New group - Invalid inner header field length + Add a new group - Invalid inner header binary size + Change master &key... - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data + &Database settings... - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data + Copy &password - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data + Perform &Auto-Type - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data + Open &URL - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data + KeePass 1 database... - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data + Import a KeePass 1 database - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data + CSV file... - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data + Import a CSV file - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data + Show TOTP... - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data + Show TOTP QR Code... - Invalid variant map entry type - Translation: variant map = data structure for storing meta data + Check for Updates... - Invalid variant map field type size - Translation: variant map = data structure for storing meta data + Share entry - - - Kdbx4Writer - Invalid symmetric cipher algorithm. + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher + Check for updates on startup? - Unable to calculate master key - Unable to calculate master key + Would you like KeePassXC to check for updates on startup? + - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data + You can always check for updates manually from the application menu. - KdbxReader + Merger - Invalid cipher uuid length + Creating missing %1 [%2] - Unsupported cipher + Relocating %1 [%2] - Invalid compression flags length + Overwriting %1 [%2] - Unsupported compression algorithm + older entry merged from database "%1" - Invalid master seed size + Adding backup for older target %1 [%2] - Invalid transform seed size + Adding backup for older source %1 [%2] - Invalid transform rounds size + Reapplying older target entry on top of newer source %1 [%2] - Invalid start bytes size + Reapplying older source entry on top of newer target %1 [%2] - Invalid random stream id size + Synchronizing from newer source %1 [%2] - Invalid inner random stream cipher + Synchronizing from older source %1 [%2] - Not a KeePass database. + Deleting child %1 [%2] - 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. + Deleting orphan %1 [%2] + - Unsupported KeePass 2 database version. - Unsupported KeePass 2 database version. + Changed deleted objects + + + + Adding missing icon %1 + - KdbxXmlReader + NewDatabaseWizard - XML parsing failure: %1 - XML parsing failure: %1 + Create a new KeePassXC database... + - No root group - No root group + Root + Root group + Root + + + NewDatabaseWizardPage - Missing icon uuid or data + WizardPage - Missing custom data key or value + En&cryption Settings - Multiple group elements + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Null group uuid - + Advanced Settings + Advanced Settings - Invalid group icon number + Simple Settings + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Encryption Settings + - Invalid EnableAutoType value + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - Invalid EnableSearching value + Database Master Key - No group uuid found + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - Null DeleteObject uuid + General Database Information - Missing DeletedObject uuid or time + Please fill in the display name and an optional description for your new database: + + + OpenSSHKey - Null entry uuid + Invalid key file, expecting an OpenSSH key - Invalid entry icon number + PEM boundary mismatch - History element in history entry + Base64 decoding failed - No entry uuid found + Key file way too small. - History element with different uuid + Key file magic header id invalid - Unable to decrypt entry string - Unable to decrypt entry string + Found zero keys + - Duplicate custom attribute found - Duplicate custom attribute found + Failed to read public key. + Failed to read public key. - Entry string key or value missing + Corrupted key file, reading private key failed - Duplicate attachment found - Duplicate attachment found + No private key payload to decrypt + - Entry binary key or value missing + Trying to run KDF without cipher - Auto-type association window or sequence missing - + Passphrase is required to decrypt this key + Passphrase is required to decrypt this key - Invalid bool value + Key derivation failed, key file corrupted? - Invalid date time value + Decryption failed, wrong passphrase? - Invalid color value - + Unexpected EOF while reading public key + Unexpected EOF while reading public key - Invalid color rgb part - + Unexpected EOF while reading private key + Unexpected EOF while reading private key - Invalid number value + Can't write public key as it is empty - Invalid uuid value - + Unexpected EOF when writing public key + Unexpected EOF when writing public key - Unable to decompress binary - Translator meant is a binary data inside an entry + Can't write private key as it is empty - - - KeePass1OpenWidget - Import KeePass1 database - + Unexpected EOF when writing private key + Unexpected EOF when writing private key - Unable to open the database. - Unable to open the database. + Unsupported key type: %1 + Unsupported key type: %1 - - - KeePass1Reader - Unable to read keyfile. - + Unknown cipher: %1 + Unknown cipher: %1 - Not a KeePass database. + Cipher IV is too short for MD5 kdf - Unsupported encryption algorithm. - Unsupported encryption algorithm. + Unknown KDF: %1 + - Unsupported KeePass database version. - + Unknown key type: %1 + Unknown key type: %1 + + + PasswordEditWidget - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher - + Enter password: + Enter password: - Invalid number of groups + Confirm password: - Invalid number of entries - + Password + Password - Invalid content hash size + <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> - Invalid transform seed size + Passwords do not match. - Invalid number of transform rounds + Generate master password + + + PasswordGeneratorWidget - Unable to construct group tree - Unable to construct group tree + %p% + - Root - Root + Password: + Password: - Unable to calculate master key - Unable to calculate master key + strength + Password strength + - Wrong key or database file is corrupt. - Wrong key or database file is corrupt. + entropy + - Key transformation failed - Key transformation failed + Password + Password - Invalid group field type number - + Character Types + Character Types - Invalid group field size + Upper Case Letters - Read group field data doesn't match size + Lower Case Letters - Incorrect group id field size + Numbers - Incorrect group creation time field size + Special Characters - Incorrect group modification time field size - + Extended ASCII + Extended ASCII - Incorrect group access time field size - + Exclude look-alike characters + Exclude look-alike characters - Incorrect group expiry time field size - + Pick characters from every group + Pick characters from every group - Incorrect group icon field size + &Length: - Incorrect group level field size - + Passphrase + Passphrase - Invalid group field type + Wordlist: - Missing group id or level + Word Separator: - Missing entry field type number - + Copy + Copy - Invalid entry field size - + Accept + Accept - Read entry field data doesn't match size - + Close + Close - Invalid entry uuid field size + Entropy: %1 bit - Invalid entry group id field size + Password Quality: %1 - Invalid entry icon field size + Poor + Password quality - Invalid entry creation time field size + Weak + Password quality - Invalid entry modification time field size + Good + Password quality - Invalid entry expiry time field size + Excellent + Password quality - Invalid entry field type + ExtendedASCII - - - KeePass2 - AES: 256-bit + Switch to advanced mode - Twofish: 256-bit - + Advanced + Advanced - ChaCha20: 256-bit + Upper Case Letters A to F - AES-KDF (KDBX 4) + A-Z - AES-KDF (KDBX 3.1) + Lower Case Letters A to F - Argon2 (KDBX 4 – recommended) + a-z - - - Main - Existing single-instance lock file is invalid. Launching new instance. - Existing single-instance lock file is invalid. Launching new instance. + 0-9 + - The lock file could not be created. Single-instance mode disabled. - The lock file could not be created. Single-instance mode disabled. + Braces + - 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. + Punctuation + - KeePassXC - Error + .,:; - - - MainWindow - &Database - &Database + Quotes + - &Recent databases - &Recent databases + " ' + - Import - Import + Math + - &Help - &Help + <*+!?= + - E&ntries - E&ntries + Dashes + - Copy att&ribute to clipboard - Copy att&ribute to clipboard + \_|-/ + - Time-based one-time password - Time-based one-time password + Logograms + - &Groups - &Groups + #$%&&@^`~ + - &Tools - &Tools + Switch to simple mode + - &Quit - &Quit + Simple + - &About - &About + Character set to exclude from generated password + - &Open database... - &Open database... + Do not include: + - &Save database - &Save database + Add non-hex letters to "do not include" list + - &Close database - &Close database + Hex + - &New database - &New database + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - Merge from KeePassX database + Word Co&unt: - &Add new entry - &Add new entry + Regenerate + + + + QApplication - &View/Edit entry + KeeShare + + + QFileDialog - &Delete entry - &Delete entry + Select + + + + QMessageBox - &Add new group - &Add new group + Overwrite + - &Edit group - &Edit group + Delete + Delete - &Delete group + Move - Sa&ve database as... - Sa&ve database as... + Empty + - Change &master key... - Change &master key... + Remove + Remove - &Database settings - &Database settings + Skip + - Database settings - Database settings + Disable + Disable - &Clone entry - &Clone entry + Merge + + + + QObject - &Find - &Find + Database not opened + Database not opened - Copy &username - Copy &username + Database hash not available + Database hash not available - Copy username to clipboard - Copy username to clipboard + Client public key not received + Client public key not received - Cop&y password - Cop&y password + Cannot decrypt message + Cannot decrypt message - Copy password to clipboard - Copy password to clipboard + Action cancelled or denied + Action cancelled or denied - &Settings - &Settings + KeePassXC association failed, try again + - Password Generator - + Encryption key is not recognized + Encryption key is not recognised - &Perform Auto-Type + Incorrect action - &Open URL - &Open URL + Empty message received + Empty message received - &Lock databases - &Lock databases + No URL provided + No URL provided - &Title - &Title + No logins found + No logins found - Copy title to clipboard - Copy title to clipboard + Unknown error + Unknown error - &URL - &URL + Add a new entry to a database. + Add a new entry to a database. - Copy URL to clipboard - Copy URL to clipboard + Path of the database. + Path of the database. - &Notes - &Notes + Key file of the database. + Key file of the database. - Copy notes to clipboard - Copy notes to clipboard + path + - &Export to CSV file... - &Export to CSV file... + Username for the entry. + Username for the entry. - Import KeePass 1 database... + username - Import CSV file... - Import CSV file... + URL for the entry. + URL for the entry. - Re&pair database... - Re&pair database... + URL + URL - Show TOTP - Show TOTP + Prompt for the entry's password. + Prompt for the entry's password. - Set up TOTP... - Set up TOTP... + Generate a password for the entry. + Generate a password for the entry. - Copy &TOTP - Copy &TOTP + Length for the generated password. + Length for the generated password. - E&mpty recycle bin - E&mpty recycle bin + length + - Clear history - Clear history + Path of the entry to add. + Path of the entry to add. - Access error for config file %1 - Access error for config file %1 + Copy an entry's password to the clipboard. + Copy an entry's password to the clipboard. - <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> + Path of the entry to clip. + clip = copy to clipboard - read-only - + Timeout in seconds before clearing the clipboard. + Timeout in seconds before clearing the clipboard. - Settings - Settings + Edit an entry. + Edit an entry. - Toggle window - Toggle window + Title for the entry. + Title for the entry. - Quit KeePassXC - Quit KeePassXC + title + - KeePass 2 Database - KeePass 2 Database + Path of the entry to edit. + Path of the entry to edit. - All files - All files + Estimate the entropy of a password. + Estimate the entropy of a password. - Open database - Open database + Password for which to estimate the entropy. + Password for which to estimate the entropy. - Save repaired database - Save repaired database + Perform advanced analysis on the password. + Perform advanced analysis on the password. - Writing the database failed. - Writing the database failed. + Extract and print the content of a database. + Extract and print the content of a database. - Please touch the button on your YubiKey! - Please touch the button on your YubiKey! + Path of the database to extract. + Path of the database to extract. - 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. + Insert password to unlock %1: - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - PEM boundary mismatch + + +Available commands: + - Base64 decoding failed - + Name of the command to execute. + Name of the command to execute. - Key file way too small. - + List database entries. + List database entries. - Key file magic header id invalid + Path of the group to list. Default is / - Found zero keys - + Find entries quickly. + Find entries quickly. - Failed to read public key. - Failed to read public key. + Search term. + Search term. - Corrupted key file, reading private key failed - + Merge two databases. + Merge two databases. - No private key payload to decrypt - + Path of the database to merge into. + Path of the database to merge into. - Trying to run KDF without cipher - + Path of the database to merge from. + Path of the database to merge from. - Passphrase is required to decrypt this key - Passphrase is required to decrypt this key + Use the same credentials for both database files. + Use the same credentials for both database files. - Key derivation failed, key file corrupted? - + Key file of the database to merge from. + Key file of the database to merge from. - Decryption failed, wrong passphrase? + 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 - Unexpected EOF while reading public key - Unexpected EOF while reading public key + Name of the entry to show. + Name of the entry to show. - Unexpected EOF while reading private key - Unexpected EOF while reading private key + NULL device + - Can't write public key as it is empty + error reading from device - Unexpected EOF when writing public key - Unexpected EOF when writing public key + malformed string + - Can't write private key as it is empty + missing closing quote - Unexpected EOF when writing private key - Unexpected EOF when writing private key + Group + Group - Unsupported key type: %1 - Unsupported key type: %1 + Title + Title - Unknown cipher: %1 - Unknown cipher: %1 + Username + Username - Cipher IV is too short for MD5 kdf - + Password + Password - Unknown KDF: %1 - + Notes + Notes - Unknown key type: %1 - Unknown key type: %1 + Last Modified + - - - OptionDialog - Dialog - Dialog + Created + Created - This is required for accessing your databases from ChromeIPass or PassIFox - This is required for accessing your databases from ChromeIPass or PassIFox + Browser Integration + Browser Integration - Enable KeePassHTTP server - Enable KeePassHTTP server + YubiKey[%1] Challenge Response - Slot %2 - %3 + - General - General + Press + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Sh&ow a notification when credentials are requested + Passive + - 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. + SSH Agent + SSH Agent - &Return only best matching entries - &Return only best matching entries + Generate a new random diceware passphrase. + Generate a new random diceware passphrase. - Re&quest to unlock the database if it is locked - Re&quest to unlock the database if it is locked + Word count for the diceware passphrase. + Word count for the diceware passphrase. - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + Wordlist for the diceware generator. +[Default: EFF English] - &Match URL schemes - &Match URL schemes + Generate a new random password. + Generate a new random password. - Sort matching entries by &username - Sort matching entries by &username + Invalid value for password length %1. + - Sort &matching entries by title - Sort &matching entries by title + Could not create entry with path %1. + - R&emove all shared encryption keys from active database - R&emove all shared encryption keys from active database + Enter password for new entry: + - Re&move all stored permissions from entries in active database - Re&move all stored permissions from entries in active database + Writing the database failed %1. + - Password Generator + Successfully added entry %1. - Advanced - Advanced + Copy the current TOTP to the clipboard. + - Always allow &access to entries - Always allow &access to entries + Invalid timeout value %1. + - Always allow &updating entries + Entry %1 not found. - Only the selected database has to be connected with a client. - Only the selected database has to be connected with a client. + Entry with path %1 has no TOTP set up. + - Searc&h in all opened databases for matching entries - Searc&h in all opened databases for matching entries + Entry's current TOTP copied to the clipboard! + - Automatically creating or updating string fields is not supported. - Automatically creating or updating string fields is not supported. + Entry's password copied to the clipboard! + - - &Return advanced string fields which start with "KPH: " - &Return advanced string fields which start with "KPH: " + + Clearing the clipboard in %1 second(s)... + - HTTP Port: + Clipboard cleared! - Default port: 19455 - Default port: 19455 + Silence password prompt and other secondary outputs. + - KeePassXC will listen to this port on 127.0.0.1 + count + CLI parameter - <b>Warning:</b> The following options can be dangerous! - <b>Warning:</b> The following options can be dangerous! + Invalid value for password length: %1 + - <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> + Could not find entry with path %1. - Cannot bind to privileged ports + Not changing any field for entry %1. - Cannot bind to privileged ports below 1024! -Using default port 19455. + Enter new password for entry: - - - PasswordGeneratorWidget - %p% + Writing the database failed: %1 - Password: + Successfully edited entry %1. - strength - Password strength + Length %1 - entropy + Entropy %1 - Password - Password + Log10 %1 + - Character Types - Character Types + Multi-word extra bits %1 + - Upper Case Letters + Type: Bruteforce - Lower Case Letters + Type: Dictionary - Numbers + Type: Dict+Leet - Special Characters + Type: User Words - Extended ASCII - Extended ASCII + Type: User+Leet + - Exclude look-alike characters - Exclude look-alike characters + Type: Repeated + - Pick characters from every group + Type: Sequence - &Length: + Type: Spatial - Passphrase - Passphrase + Type: Date + - Wordlist: + Type: Bruteforce(Rep) - Word Count: + Type: Dictionary(Rep) - Word Separator: + Type: Dict+Leet(Rep) - Generate - Generate + Type: User Words(Rep) + - Copy - Copy + Type: User+Leet(Rep) + - Accept - Accept + Type: Repeated(Rep) + - Close - Close + Type: Sequence(Rep) + - Apply - Apply + Type: Spatial(Rep) + - Entropy: %1 bit + Type: Date(Rep) - Password Quality: %1 + Type: Unknown%1 - Poor - Password quality + Entropy %1 (%2) - Weak - Password quality + *** Password length (%1) != sum of length of parts (%2) *** - Good - Password quality + Failed to load key file %1: %2 - Excellent - Password quality - + File %1 does not exist. + File %1 does not exist. - - - QObject - Database not opened - Database not opened + Unable to open file %1. + Unable to open file %1. - Database hash not available - Database hash not available + Error while reading the database: +%1 + - Client public key not received - Client public key not received + Error while parsing the database: +%1 + - Cannot decrypt message - Cannot decrypt message + Length of the generated password + - Timeout or cannot connect to KeePassXC + Use lowercase characters - Action cancelled or denied - Action cancelled or denied + Use uppercase characters + - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + Use numbers. - KeePassXC association failed, try again + Use special characters - Key change was not successful - Key change was not successful + Use extended ASCII + - Encryption key is not recognized - Encryption key is not recognised + Exclude character set + - No saved databases found - No saved databases found + chars + - Incorrect action + Exclude similar looking characters - Empty message received - Empty message received + Include characters from every selected group + - No URL provided - No URL provided + Recursively list the elements of the group. + - No logins found - No logins found + Cannot find group %1. + - Unknown error + Error reading merge file: +%1 - Add a new entry to a database. - Add a new entry to a database. + Unable to save database to file : %1 + - Path of the database. - Path of the database. + Unable to save database to file: %1 + - Key file of the database. - Key file of the database. + Successfully recycled entry %1. + - path + Successfully deleted entry %1. - Username for the entry. - Username for the entry. + Show the entry's current TOTP. + - username + ERROR: unknown attribute %1. - URL for the entry. - URL for the entry. + No program defined for clipboard manipulation + - URL - URL + Unable to start program %1 + - Prompt for the entry's password. - Prompt for the entry's password. + file empty + - Generate a password for the entry. - Generate a password for the entry. + %1: (row, col) %2,%3 + - Length for the generated password. + AES: 256-bit - length + Twofish: 256-bit - Path of the entry to add. - Path of the entry to add. + ChaCha20: 256-bit + - Copy an entry's password to the clipboard. - Copy an entry's password to the clipboard. + Argon2 (KDBX 4 – recommended) + - Path of the entry to clip. - clip = copy to clipboard + AES-KDF (KDBX 4) - Timeout in seconds before clearing the clipboard. - Timeout in seconds before clearing the clipboard. + AES-KDF (KDBX 3.1) + - Edit an entry. - Edit an entry. + Invalid Settings + TOTP + - Title for the entry. - Title for the entry. + Invalid Key + TOTP + - title + Message encryption failed. - Path of the entry to edit. - Path of the entry to edit. + No groups found + - Estimate the entropy of a password. - Estimate the entropy of a password. + Create a new database. + - Password for which to estimate the entropy. - Password for which to estimate the entropy. + File %1 already exists. + - Perform advanced analysis on the password. - Perform advanced analysis on the password. + Loading the key file failed + - Extract and print the content of a database. - Extract and print the content of a database. + No key is set. Aborting database creation. + - Path of the database to extract. - Path of the database to extract. + Failed to save the database: %1. + - Insert password to unlock %1: + Successfully created new database. - Failed to load key file %1 : %2 + Insert password to encrypt database (Press enter to leave blank): - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + Creating KeyFile %1 failed: %2 - - -Available commands: - + Loading KeyFile %1 failed: %2 - Name of the command to execute. - Name of the command to execute. + Remove an entry from the database. + Remove an entry from the database. - List database entries. - List database entries. + Path of the entry to remove. + Path of the entry to remove. - Path of the group to list. Default is / - + Existing single-instance lock file is invalid. Launching new instance. + Existing single-instance lock file is invalid. Launching new instance. - Find entries quickly. - Find entries quickly. + The lock file could not be created. Single-instance mode disabled. + The lock file could not be created. Single-instance mode disabled. - Search term. - Search term. + KeePassXC - cross-platform password manager + - Merge two databases. - Merge two databases. + filenames of the password databases to open (*.kdbx) + - Path of the database to merge into. - Path of the database to merge into. + path to a custom config file + - Path of the database to merge from. - Path of the database to merge from. + key file of the database + - Use the same credentials for both database files. - Use the same credentials for both database files. + read password of the database from stdin + - Key file of the database to merge from. - Key file of the database to merge from. + Parent window handle + - Show an entry's information. - Show an entry's information. + Another instance of KeePassXC is already running. + Another instance of KeePassXC is already running. - 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. + Fatal error while testing the cryptographic functions. + Fatal error while testing the cryptographic functions. - attribute + KeePassXC - Error - Name of the entry to show. - Name of the entry to show. + Database password: + - NULL device + Cannot create new group + + + QtIOCompressor - error reading from device + Internal zlib error when compressing: - file empty ! - + Error writing to underlying device: - malformed string + Error opening underlying device: - missing closing quote + Error reading data from underlying device: - Group - Group + Internal zlib error when decompressing: + + + + QtIOCompressor::open - Title - Title + The gzip format not supported in this version of zlib. + - Username - Username + Internal zlib error: + + + + SSHAgent - Password - Password + Agent connection failed. + - Notes - Notes + Agent protocol error. + - Last Modified + No agent running, cannot add identity. - Created + No agent running, cannot remove identity. - Legacy Browser Integration - Legacy Browser Integration + Agent refused this identity. Possible reasons include: + - Browser Integration - Browser Integration + The key has already been added. + - YubiKey[%1] Challenge Response - Slot %2 - %3 + Restricted lifetime is not supported by the agent (check options). - Press + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - Passive + Search Help - SSH Agent - SSH Agent + Search terms are as follows: [modifiers][field:]["]term["] + - Generate a new random diceware passphrase. - Generate a new random diceware passphrase. + Every search term must match (ie, logical AND) + - Word count for the diceware passphrase. - Word count for the diceware passphrase. + Modifiers + - count + exclude term from results - Wordlist for the diceware generator. -[Default: EFF English] + match term exactly - Generate a new random password. - Generate a new random password. + use regex in term + - Length of the generated password. - Length of the generated password. + Fields + - Use lowercase characters in the generated password. - Use lowercase characters in the generated password. + Term Wildcards + - Use uppercase characters in the generated password. + match anything - Use numbers in the generated password. - Use numbers in the generated password. + match one + - Use special characters in the generated password. - Use special characters in the generated password. + logical OR + - Use extended ASCII in the generated password. - Use extended ASCII in the generated password. + Examples + - QtIOCompressor + SearchWidget - Internal zlib error when compressing: - + Search + Search - Error writing to underlying device: - + Clear + Clear + + + Limit search to selected group + Limit search to selected group - Error opening underlying device: + Search Help - Error reading data from underlying device: + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut - Internal zlib error when decompressing: + Case sensitive - QtIOCompressor::open + SettingsWidgetKeeShare - The gzip format not supported in this version of zlib. + Active - Internal zlib error: + Allow export - - - SearchWidget - - Search... - Search... - - Search - Search + Allow import + - Clear - Clear + Own certificate + - Case Sensitive + Fingerprint: - Limit search to selected group - Limit search to selected group + Certificate: + - - - Service - KeePassXC: New key association request - KeePassXC: New key association request + Signer + - 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. + Key: - KeePassXC: Overwrite existing key? - KeePassXC: Overwrite existing key? + Generate + Generate - 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? + Import + Import - KeePassXC: Update Entry - KeePassXC: Update Entry + Export + - Do you want to update the information in %1 - %2? - Do you want to update the information in %1 - %2? + Imported certificates + - KeePassXC: Database locked! - KeePassXC: Database locked! + Trust + - 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. + Ask + - KeePassXC: Removed keys from database - KeePassXC: Removed keys from database + Untrust + - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Remove + Remove - KeePassXC: No keys found - KeePassXC: No keys found + Path + Path - No shared encryption-keys found in KeePassHttp Settings. + Status - KeePassXC: Settings not available! - KeePassXC: Settings not available! + Fingerprint + Fingerprint - The active database does not contain an entry of KeePassHttp Settings. + Certificate - Removing stored permissions... - Removing stored permissions... + Trusted + - Abort - Abort + Untrusted + - KeePassXC: Removed permissions - KeePassXC: Removed permissions + Unknown + - - Successfully removed permissions from %n entries. - + + key.share + Filetype for KeeShare key + - KeePassXC: No entry with permissions found! - KeePassXC: No entry with permissions found! + KeeShare key file + - The active database does not contain an entry with permissions. - The active database does not contain an entry with permissions. + All files + All files - - - SettingsWidget - Application Settings - Application Settings + Select path + - General - General + Exporting changed certificate + - Security - Security + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Access error for config file %1 - Access error for config file %1 + Signer: + - SettingsWidgetGeneral - - Basic Settings - Basic Settings - - - Start only a single instance of KeePassXC - Start only a single instance of KeePassXC - + ShareObserver - Remember last databases - Remember last databases + Import from container without signature + - Remember last key files and security dongles + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? - Load previous databases on startup - Load previous databases on startup + Import from container with certificate + - Automatically save on exit - Automatically save on exit + Not this time + - Automatically save after every change - Automatically save after every change + Never + Never - Automatically reload the database when modified externally - Automatically reload the database when modified externally + Always + - Minimize when copying to clipboard - Minimise when copying to clipboard + Just this time + - Minimize window at application startup - Minimise window at application startup + Import from %1 failed (%2) + - Use group icon on entry creation + Import from %1 successful (%2) - 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) + Imported from %1 + - Hide the Details view + Signed share container are not supported - import prevented - Show a system tray icon + File is not readable - Hide window to system tray when minimized - Hide window to system tray when minimised + Invalid sharing container + - Hide window to system tray instead of app exit + Untrusted import prevented - Dark system tray icon - Dark system tray icon + Successful signed import + - Language - Language + Unexpected error + - Auto-Type - Auto-Type + Unsigned share container are not supported - import prevented + - Use entry title to match windows for global Auto-Type + Successful unsigned import - Use entry URL to match windows for global Auto-Type + File does not exist - Always ask before performing Auto-Type + Unknown share container type - Global Auto-Type shortcut + Overwriting signed share container is not supported - export prevented - Auto-Type delay + Could not write export container (%1) - ms - Milliseconds + Overwriting unsigned share container is not supported - export prevented - Startup - Startup + Could not write export container + - File Management - File Management + Unexpected export error occurred + - Safely save database files (may be incompatible with Dropbox, etc) - Safely save database files (may be incompatible with Dropbox, etc) + Export to %1 failed (%2) + - Backup database file before saving + Export to %1 successful (%2) - Entry Management + Export to %1 - General - General + Do you want to trust %1 with the fingerprint of %2 from %3? + - - - SettingsWidgetSecurity - Timeouts + Multiple import source path to %1 in %2 - Clear clipboard after + Conflicting export target path %1 in %2 - sec - Seconds + Could not embed signature: Could not open file to write (%1) - Lock databases after inactivity of + Could not embed signature: Could not write file (%1) - Convenience + Could not embed database: Could not open file to write (%1) - Lock databases when session is locked or lid is closed - Lock databases when session is locked or lid is closed + Could not embed database: Could not write file (%1) + + + + TotpDialog - Lock databases after minimizing the window - Lock databases after minimising the window + Timed Password + - Don't require password repeat when it is visible - Don't require password repeat when it is visible + 000000 + - Show passwords in cleartext by default - Show passwords in cleartext by default + Copy + Copy - - Hide passwords in the preview panel - Hide passwords in the preview panel + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Hide entry notes by default - Hide entry notes by default + Copy + Copy - Privacy - Privacy + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Use Google as fallback for downloading website icons - Use Google as fallback for downloading website icons + There was an error creating the QR code. + - 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. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. - - - UnlockDatabaseWidget - Unlock database - Unlock database + 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 - - Remove an entry from the database. - Remove an entry from the database. - - - Path of the database. - Path of the database. - + YubiKeyEditWidget - Path of the entry to remove. - Path of the entry to remove. - - - KeePassXC - cross-platform password manager - - - - filenames of the password databases to open (*.kdbx) - + Refresh + Refresh - path to a custom config file + YubiKey Challenge-Response - key file 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> - read password of the database from stdin + No YubiKey detected, please ensure it's plugged in. - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_en_US.ts b/share/translations/keepassx_en_US.ts index 97d1014f08..f443aefe67 100644 --- a/share/translations/keepassx_en_US.ts +++ b/share/translations/keepassx_en_US.ts @@ -38,80 +38,290 @@ Copy to clipboard - Version %1 - - Version %1 - + Project Maintainers: + Project Maintainers: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Enable SSH Agent (requires restart) - Revision: %1 - Revision: %1 + Use OpenSSH for Windows instead of Pageant + Use OpenSSH for Windows instead of Pageant + + + ApplicationSettingsWidget - Distribution: %1 - Distribution: %1 + Application Settings + Application Settings - Libraries: - Libraries: + General + General - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 + Security + Security - Enabled extensions: - Enabled extensions: + Access error for config file %1 + Access error for config file %1 - Project Maintainers: - Project Maintainers: + Icon only + Icon only - 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. + Text only + Text only - Build Type: %1 - - Build Type: %1 - + Text beside icon + Text beside icon + + + Text under icon + Text under icon + + + Follow style + Follow style - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP Confirm Access + Basic Settings + Basic Settings - Remember this decision - Remember this decision + Startup + Startup - Allow - Allow + Start only a single instance of KeePassXC + Start only a single instance of KeePassXC - Deny - Deny + Remember last databases + Remember last databases - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Enable SSH Agent (requires restart) + 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 @@ -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 @@ -362,32 +585,53 @@ Please select whether you want to allow access. <b>Warning:</b> The following options can be dangerous! - Executable Files (*.exe);;All Files (*.*) - Executable Files (*.exe);;All Files (*.*) + Select custom proxy location + Select custom proxy location - Executable Files (*) - Executable Files (*) + &Tor Browser + &Tor Browser - Select custom proxy location - Select custom proxy location + <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: - 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. + Executable Files + Executable Files - - - BrowserService - KeePassXC: New key association request - KeePassXC: New key association request + All Files + All Files - You have received an association request for the above key. - -If you would like to allow it access to your KeePassXC database, + 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 + + + + 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. @@ -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 - - - 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. - - - - ChangeMasterKeyWidget - - Password - Password - - - Enter password: - Enter password: - - - Repeat password: - Repeat password: - - - &Key file - &Key file - - - 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... + Converting attributes to custom data… + Converting attributes to custom data… - Unable to create Key File : - Unable to create Key File : + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes - Select a key file - Select a key file + 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. - - Empty password - Empty password + + Successfully moved %n keys to custom data. + Successfully moved %n keys to custom data.Successfully moved %n keys to custom data. - Do you really want to use an empty string as password? - Do you really want to use an empty string as password? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! - Different passwords supplied. - Different passwords supplied. + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. - Failed to set %1 as the Key file: -%2 - Failed to set %1 as the Key file: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected - Legacy key file format - Legacy key file format + KeePassXC: Create a new group + KeePassXC: Create a new group - 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. + 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? + - 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 @@ -660,48 +801,89 @@ Please consider generating a new key file. Original data: - Error(s) detected in CSV file ! - Error(s) detected in CSV file ! + Error + Error - more messages skipped] - more messages skipped] + Empty fieldname %1 + Empty fieldname %1 - Error - Error + column %1 + column %1 - CSV import: writer has errors: - - CSV import: writer has errors: - + Error(s) detected in CSV file! + Error(s) detected in CSV file! - - - CsvImportWizard - - Error - Error + + [%n more message(s) skipped] + [%n more message(s) skipped][%n more message(s) skipped] - Unable to calculate master key - Unable to calculate master key + CSV import: writer has errors: +%1 + CSV import: writer has errors: +%1 CsvParserModel - %n byte(s), - %n byte, %n bytes, + %n column(s) + %n column(s)%n column(s) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n row, %n rows, + %n byte(s) + %n byte(s)%n byte(s) - %n column(s) - %n column%n columns + %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,131 +942,200 @@ 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 + Can't open key file: +%1 + Can't open key file: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Unable to open the database. + Passwords + Passwords + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Database opened fine. Nothing to do. + Advanced Settings + Advanced Settings - Success - Success + General + General - The database has been successfully repaired -You can now save it. - The database has been successfully repaired -You can now save it. + Security + Security - Unable to repair the database. - Unable to repair the database. + Master Key + Master Key - - - DatabaseSettingsWidget - General - General + Encryption Settings + Encryption Settings - Encryption - Encryption + Browser Integration + Browser Integration + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Number of rounds too high + KeePassXC-Browser settings + KeePassXC-Browser settings - 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! + &Disconnect all browsers + &Disconnect all browsers - Understood, keep number - Understood, keep number + Forg&et all site-specific settings on entries + Forg&et all site-specific settings on entries - Cancel - Cancel + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Move KeePassHTTP attributes to KeePassXC-Browser &custom data - Number of rounds too low - Key transformation rounds - Number of rounds too low + Stored keys + Stored keys - 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! + Remove + Remove - KDF unchanged - KDF unchanged + Delete the selected key? + Delete the selected key? - Failed to transform key with new KDF parameters; KDF unchanged. - Failed to transform key with new KDF parameters; KDF unchanged. + 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. - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB + + Key + Key - - thread(s) - Threads for parallel execution (KDF settings) - thread threads + + Value + Value - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Encryption Algorithm: + Enable Browser Integration to access these settings. + Enable Browser Integration to access these settings. - AES: 256 Bit (default) - AES: 256 Bit (default) + Disconnect all browsers + Disconnect all browsers - Twofish: 256 Bit - Twofish: 256 Bit + 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. - Key Derivation Function: - Key Derivation Function: + KeePassXC: No keys found + KeePassXC: No keys found - Transform rounds: - Transform rounds: + No shared encryption keys found in KeePassXC settings. + No shared encryption keys found in KeePassXC settings. - Benchmark 1-second delay + 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 @@ -903,6 +1146,113 @@ If you keep this number, your database may be too easy to crack! 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 threads + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + DatabaseSettingsWidgetGeneral @@ -952,91 +1302,112 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + Sharing - KeePass 2 Database - KeePass 2 Database + Breadcrumb + Breadcrumb - All files - All files + Type + Type - Open database - Open database + Path + Path - File not found! - File not found! + Last Signer + Last Signer - Unable to open the database. - Unable to open the database. + Certificates + Certificates - File opened in read only mode. - File opened in read only mode. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Open CSV file + Add additional protection... + Add additional protection... - CSV file - CSV file + No encryption key added + No encryption key added - All files (*) - All files (*) + You must add at least one encryption key to secure your database! + You must add at least one encryption key to secure your database! - Merge database - Merge database + No password set + No password set - Open KeePass 1 database - Open KeePass 1 database + 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? - KeePass 1 database - KeePass 1 database + Unknown error + Unknown error - Close? - Close? + Failed to change master key + Failed to change master key + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" is in edit mode. -Discard changes and close anyway? + Database Name: + Database Name: - Save changes? - Save changes? + Description: + Description: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" was modified. -Save changes? + KeePass 2 Database + KeePass 2 Database - Writing the database failed. - Writing the database failed. + All files + All files - Passwords - Passwords + Open database + Open database - Save database as - Save database as + CSV file + CSV file + + + Merge database + Merge database + + + Open KeePass 1 database + Open KeePass 1 database + + + KeePass 1 database + KeePass 1 database 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? - - Close - Close + + Delete entry(s)? + Delete entry?Delete entries? - - General - General + + Move entry(s) to recycle bin? + Move entry to recycle bin?Move entries to recycle bin? - Password - Password + File opened in read only mode. + File opened in read only mode. - URL - URL + Lock Database? + Lock Database? - Expiration - Expiration + You are editing an entry. Discard changes and lock anyway? + You are editing an entry. Discard changes and lock anyway? - Username - Username - + "%1" was modified. +Save changes? + "%1" was modified. +Save changes? + - Autotype - Auto-Type + Database was modified. +Save changes? + Database was modified. +Save changes? - Searching - Searching + Save changes? + Save changes? - Attributes - Attributes + 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 - Attachments - Attachments + Disable safe saves? + Disable safe saves? - Notes - Notes + 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? - Window - Window + Writing the database failed. +%1 + Writing the database failed. +%1 - Sequence - Sequence + Passwords + Passwords - Search - Search + Save database as + Save database as - Clear - Clear + KeePass 2 Database + KeePass 2 Database - Never - Never + 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? - [PROTECTED] - [PROTECTED] + Delete group + Delete group - Disabled - Disabled + Move group to recycle bin? + Move group to recycle bin? - Enabled - Enabled + 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? + + + Successfully merged the database files. + Successfully merged the database files. + + + 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 @@ -2000,84 +2575,49 @@ This may cause the affected plugins to malfunction. - HttpPasswordGeneratorWidget + KMessageWidget - Length: - Length: + &Close + &Close - Character Types - Character Types + Close message + Close message + + + Kdbx3Reader - 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 + Unable to calculate master key + Unable to calculate master key - Ensure that the password contains characters from every group - Ensure that the password contains characters from every group + Unable to issue challenge-response. + Unable to issue challenge-response. - Extended ASCII - Extended ASCII + Wrong key or database file is corrupt. + Wrong key or database file is corrupt. - - - KMessageWidget - &Close - &Close + missing database headers + missing database headers - Close message - Close message + Header doesn't match hash + Header doesn't match hash - - - Kdbx3Reader - Unable to calculate master key - Unable to calculate master key + Invalid header id size + Invalid header id size - Unable to issue challenge-response. - Unable to issue challenge-response. + Invalid header field length + Invalid header field length - Wrong key or database file is corrupt. - Wrong key or database file is corrupt. + Invalid header data length + Invalid header data length @@ -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 + + unable to seek to content position + unable to seek to content position + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + Disabled share - Twofish: 256-bit - Twofish: 256-bit + Import from + Import from - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + Export to - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Synchronize with - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + Disabled share %1 - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – recommended) + Import from share %1 + Import from share %1 + + + Export to share %1 + Export to share %1 + + + Synchronize with share %1 + Synchronize with share %1 - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Existing single-instance lock file is invalid. Launching new instance. + Key Component + Key Component - The lock file could not be created. Single-instance mode disabled. - The lock file could not be created. Single-instance mode disabled. + Key Component Description + Key Component Description - Another instance of KeePassXC is already running. - Another instance of KeePassXC is already running. + Cancel + Cancel - Fatal error while testing the cryptographic functions. - Fatal error while testing the cryptographic functions. + Key Component set, click to change or remove + Key Component set, click to change or remove - KeePassXC - Error - KeePassXC - Error + 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,226 +3442,394 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Invalid key file, expecting an OpenSSH key + &Donate + &Donate - PEM boundary mismatch - PEM boundary mismatch + Report a &bug + Report a &bug - Base64 decoding failed - Base64 decoding failed + 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. - Key file way too small. - Key file way too small. + &Import + &Import - Key file magic header id invalid - Key file magic header id invalid + Copy att&ribute... + Copy att&ribute... - Found zero keys - Found zero keys + TOTP... + TOTP... - Failed to read public key. - Failed to read public key. + &New database... + &New database... - Corrupted key file, reading private key failed - Corrupted key file, reading private key failed + Create a new database + Create a new database - No private key payload to decrypt - No private key payload to decrypt + &Merge from database... + &Merge from database... - Trying to run KDF without cipher - Trying to run KDF without cipher + Merge from another KDBX database + Merge from another KDBX database - Passphrase is required to decrypt this key - Passphrase is required to decrypt this key + &New entry + &New entry - Key derivation failed, key file corrupted? - Key derivation failed, key file corrupted? + Add a new entry + Add a new entry - Decryption failed, wrong passphrase? - Decryption failed, wrong passphrase? + &Edit entry + &Edit entry - Unexpected EOF while reading public key - Unexpected EOF while reading public key + View or edit entry + View or edit entry - Unexpected EOF while reading private key - Unexpected EOF while reading private key + &New group + &New group - Can't write public key as it is empty - Can't write public key as it is empty + Add a new group + Add a new group - Unexpected EOF when writing public key - Unexpected EOF when writing public key + Change master &key... + Change master &key... - Can't write private key as it is empty - Can't write private key as it is empty + &Database settings... + &Database settings... - Unexpected EOF when writing private key - Unexpected EOF when writing private key + Copy &password + Copy &password - Unsupported key type: %1 - Unsupported key type: %1 + Perform &Auto-Type + Perform &Auto-Type - Unknown cipher: %1 - Unknown cipher: %1 + Open &URL + Open &URL - Cipher IV is too short for MD5 kdf - Cipher IV is too short for MD5 kdf + KeePass 1 database... + KeePass 1 database... - Unknown KDF: %1 - Unknown KDF: %1 + Import a KeePass 1 database + Import a KeePass 1 database - Unknown key type: %1 - Unknown key type: %1 + 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. - OptionDialog + Merger - Dialog - Dialog + Creating missing %1 [%2] + Creating missing %1 [%2] - This is required for accessing your databases from ChromeIPass or PassIFox - This is required for accessing your databases from ChromeIPass or PassIFox + Relocating %1 [%2] + Relocating %1 [%2] - Enable KeePassHTTP server - Enable KeePassHTTP server + Overwriting %1 [%2] + Overwriting %1 [%2] - General - General + older entry merged from database "%1" + older entry merged from database "%1" - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Sh&ow a notification when credentials are requested + Adding backup for older target %1 [%2] + Adding backup for older target %1 [%2] - 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. + Adding backup for older source %1 [%2] + Adding backup for older source %1 [%2] - &Return only best matching entries - &Return only best matching entries + Reapplying older target entry on top of newer source %1 [%2] + Reapplying older target entry on top of newer source %1 [%2] - Re&quest to unlock the database if it is locked - Re&quest to unlock the database if it is locked + Reapplying older source entry on top of newer target %1 [%2] + Reapplying older source entry on top of newer target %1 [%2] - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + Synchronizing from newer source %1 [%2] + Synchronizing from newer source %1 [%2] - &Match URL schemes - &Match URL schemes + Synchronizing from older source %1 [%2] + Synchronizing from older source %1 [%2] - Sort matching entries by &username - Sort matching entries by &username + Deleting child %1 [%2] + Deleting child %1 [%2] - Sort &matching entries by title - Sort &matching entries by title + Deleting orphan %1 [%2] + Deleting orphan %1 [%2] - R&emove all shared encryption keys from active database - R&emove all shared encryption keys from active database + Changed deleted objects + Changed deleted objects - Re&move all stored permissions from entries in active database - Re&move all stored permissions from entries in active database + Adding missing icon %1 + Adding missing icon %1 + + + NewDatabaseWizard - Password Generator - Password Generator + Create a new KeePassXC database... + Create a new KeePassXC database... - Advanced - Advanced + Root + Root group + Root + + + NewDatabaseWizardPage - Always allow &access to entries - Always allow &access to entries + WizardPage + WizardPage - Always allow &updating entries - Always allow &updating entries + En&cryption Settings + En&cryption Settings - Only the selected database has to be connected with a client. - Only the selected database has to be connected with a client. + 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. - Searc&h in all opened databases for matching entries - Searc&h in all opened databases for matching entries + Advanced Settings + Advanced Settings - Automatically creating or updating string fields is not supported. - Automatically creating or updating string fields is not supported. + Simple Settings + Simple Settings + + + NewDatabaseWizardPageEncryption - &Return advanced string fields which start with "KPH: " - &Return advanced string fields which start with "KPH: " + Encryption Settings + Encryption Settings - HTTP Port: - HTTP Port: + 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 - Default port: 19455 - Default port: 19455 + Database Master Key + Database Master Key - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC will listen to this port on 127.0.0.1 + A master key known only to you protects your database. + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - <b>Warning:</b> The following options can be dangerous! - <b>Warning:</b> The following options can be dangerous! + 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 + + + + PasswordEditWidget + + Enter password: + Enter password: + + + Confirm password: + Confirm password: + + + Password + Password - <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> + <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> - Cannot bind to privileged ports - Cannot bind to privileged ports + Passwords do not match. + Passwords do not match. - 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,135 +3943,284 @@ Using default port 19455. Password quality Excellent - - - QObject - Database not opened - Database not opened + ExtendedASCII + ExtendedASCII - Database hash not available - Database hash not available + Switch to advanced mode + Switch to advanced mode - Client public key not received - Client public key not received + Advanced + Advanced - Cannot decrypt message - Cannot decrypt message + Upper Case Letters A to F + Upper Case Letters A to F - Timeout or cannot connect to KeePassXC - Timeout or cannot connect to KeePassXC + A-Z + A-Z - Action cancelled or denied - Action cancelled or denied + Lower Case Letters A to F + Lower Case Letters A to F - 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? + a-z + a-z - KeePassXC association failed, try again - KeePassXC association failed, try again + 0-9 + 0-9 - Key change was not successful - Key change was not successful + Braces + Braces - Encryption key is not recognized - Encryption key is not recognized + {[( + {[( - No saved databases found - No saved databases found + Punctuation + Punctuation - Incorrect action - Incorrect action + .,:; + .,:; - Empty message received - Empty message received + Quotes + Quotes - No URL provided - No URL provided + " ' + " ' - No logins found - No logins found + Math + Math - Unknown error - Unknown error + <*+!?= + <*+!?= - Add a new entry to a database. - Add a new entry to a database. + Dashes + Dashes - Path of the database. - Path of the database. + \_|-/ + \_|-/ - Key file of the database. - Key file of the database. + Logograms + Logograms - path - path + #$%&&@^`~ + #$%&&@^`~ - Username for the entry. - Username for the entry. + Switch to simple mode + Switch to simple mode - username - username + Simple + Simple - URL for the entry. - URL for the entry. + Character set to exclude from generated password + Character set to exclude from generated password - URL - URL + Do not include: + Do not include: - Prompt for the entry's password. - Prompt for the entry's password. + Add non-hex letters to "do not include" list + Add non-hex letters to "do not include" list - Generate a password for the entry. - Generate a password for the entry. + Hex + Hex - Length for the generated password. - Length for the generated password. + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - length - length + Word Co&unt: + Word Co&unt: - Path of the entry to add. - Path of the entry to add. + Regenerate + Regenerate + + + QApplication - Copy an entry's password to the clipboard. - Copy an entry's password to the clipboard. + KeeShare + KeeShare + + + QFileDialog - Path of the entry to clip. - clip = copy to clipboard - Path of the entry to clip. + 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 + Cannot decrypt message + + + Action cancelled or denied + Action cancelled or denied + + + KeePassXC association failed, try again + KeePassXC association failed, try again + + + Encryption key is not recognized + 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. @@ -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,70 +4423,573 @@ 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. + + + Could not create entry with path %1. + Could not create entry with path %1. + + + Enter password for new entry: + Enter password for new entry: + + + Writing the database failed %1. + Writing the database failed %1. + + + Successfully added entry %1. + Successfully added entry %1. + + + 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) - Use lowercase characters in the generated password. - Use lowercase characters in the generated password. + Type: Spatial(Rep) + Type: Spatial(Rep) - Use uppercase characters in the generated password. - Use uppercase characters in the generated password. + Type: Date(Rep) + Type: Date(Rep) - Use numbers in the generated password. - Use numbers in the generated password. + Type: Unknown%1 + Type: Unknown%1 - Use special characters in the generated password. - Use special characters in the generated password. + Entropy %1 (%2) + Entropy %1 (%2) - Use extended ASCII in the generated password. - Use extended ASCII in the generated password. + *** 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 QtIOCompressor - Internal zlib error when compressing: - Internal zlib error when compressing: + 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. + 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 - Error writing to underlying device: - Error writing to underlying device: + Fields + Fields - Error opening underlying device: - Error opening underlying device: + Term Wildcards + Term Wildcards - Error reading data from underlying device: - Error reading data from underlying device: + match anything + match anything - Internal zlib error when decompressing: - Internal zlib error when decompressing: + match one + match one - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - The gzip format not supported in this version of zlib. + logical OR + logical OR - Internal zlib error: - Internal zlib error: + Examples + Examples SearchWidget - - Search... - Search... - 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 - - 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. + + Import + Import - KeePassXC: No keys found - KeePassXC: No keys found + Export + Export - No shared encryption-keys found in KeePassHttp Settings. - No shared encryption-keys found in KeePassHttp Settings. + Imported certificates + Imported certificates - KeePassXC: Settings not available! - KeePassXC: Settings not available! + Trust + Trust - The active database does not contain an entry of KeePassHttp Settings. - The active database does not contain an entry of KeePassHttp Settings. + Ask + Ask - Removing stored permissions... - Removing stored permissions... + Untrust + Untrust - Abort - Abort + Remove + Remove - KeePassXC: Removed permissions - KeePassXC: Removed permissions + Path + Path - - Successfully removed permissions from %n entries. - Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. + + Status + Status - KeePassXC: No entry with permissions found! - KeePassXC: No entry with permissions found! + Fingerprint + Fingerprint - The active database does not contain an entry with permissions. - The active database does not contain an entry with permissions. + Certificate + Certificate - - - SettingsWidget - Application Settings - Application Settings + Trusted + Trusted - General - General + Untrusted + Untrusted - Security - Security + Unknown + Unknown - Access error for config file %1 - Access error for config file %1 + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - Basic Settings + KeeShare key file + KeeShare key file - Start only a single instance of KeePassXC - Start only a single instance of KeePassXC + All files + All files - Remember last databases - Remember last databases + Select path + Select path - Remember last key files and security dongles - Remember last key files and security dongles + Exporting changed certificate + Exporting changed certificate - Load previous databases on startup - Load previous databases on startup + 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? - Automatically save on exit - Automatically save on exit + Signer: + Signer: + + + ShareObserver - Automatically save after every change - Automatically save after every change + Import from container without signature + Import from container without signature - Automatically reload the database when modified externally - Automatically reload the database when modified externally + 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? - Minimize when copying to clipboard - Minimize when copying to clipboard + Import from container with certificate + Import from container with certificate - Minimize window at application startup - Minimize window at application startup + Not this time + Not this time - Use group icon on entry creation - Use group icon on entry creation + Never + Never - 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) + Always + Always - Hide the Details view - Hide the Details view + Just this time + Just this time - Show a system tray icon - Show a system tray icon + Import from %1 failed (%2) + Import from %1 failed (%2) - Hide window to system tray when minimized - Hide window to system tray when minimized + Import from %1 successful (%2) + Import from %1 successful (%2) - Hide window to system tray instead of app exit - Hide window to system tray instead of app exit + Imported from %1 + Imported from %1 - Dark system tray icon - Dark system tray icon + Signed share container are not supported - import prevented + Signed share container are not supported - import prevented - Language - Language + File is not readable + File is not readable - Auto-Type - Auto-Type + Invalid sharing container + Invalid sharing container - Use entry title to match windows for global Auto-Type - Use entry title to match windows for global Auto-Type + Untrusted import prevented + Untrusted import prevented - Use entry URL to match windows for global Auto-Type - Use entry URL to match windows for global Auto-Type + Successful signed import + Successful signed import - Always ask before performing Auto-Type - Always ask before performing Auto-Type + Unexpected error + Unexpected error - Global Auto-Type shortcut - Global Auto-Type shortcut + Unsigned share container are not supported - import prevented + Unsigned share container are not supported - import prevented - Auto-Type delay - Auto-Type delay + Successful unsigned import + Successful unsigned import - ms - Milliseconds - ms + File does not exist + File does not exist - Startup - Startup + Unknown share container type + Unknown share container type - File Management - File Management + Overwriting signed share container is not supported - export prevented + Overwriting signed share container is not supported - export prevented - Safely save database files (may be incompatible with Dropbox, etc) - Safely save database files (may be incompatible with Dropbox, etc) + Could not write export container (%1) + Could not write export container (%1) - Backup database file before saving - Backup database file before saving + Overwriting unsigned share container is not supported - export prevented + Overwriting unsigned share container is not supported - export prevented - Entry Management - Entry Management + Could not write export container + Could not write export container - General - General + Unexpected export error occurred + Unexpected export error occurred - - - SettingsWidgetSecurity - Timeouts - Timeouts + Export to %1 failed (%2) + Export to %1 failed (%2) - Clear clipboard after - Clear clipboard after + Export to %1 successful (%2) + Export to %1 successful (%2) - sec - Seconds - sec + Export to %1 + Export to %1 - Lock databases after inactivity of - Lock databases after inactivity of + 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 ?} - Convenience - Convenience + Multiple import source path to %1 in %2 + Multiple import source path to %1 in %2 - Lock databases when session is locked or lid is closed - Lock databases when session is locked or lid is closed + Conflicting export target path %1 in %2 + Conflicting export target path %1 in %2 - Lock databases after minimizing the window - Lock databases after minimizing the window + Could not embed signature: Could not open file to write (%1) + Could not embed signature: Could not open file to write (%1) - Don't require password repeat when it is visible - Don't require password repeat when it is visible + Could not embed signature: Could not write file (%1) + Could not embed signature: Could not write file (%1) - Show passwords in cleartext by default - Show passwords in cleartext by default + Could not embed database: Could not open file to write (%1) + Could not embed database: Could not open file to write (%1) - Hide passwords in the preview panel - Hide passwords in the preview panel + Could not embed database: Could not write file (%1) + Could not embed database: Could not write file (%1) + + + TotpDialog - Hide entry notes by default - Hide entry notes by default + Timed Password + Timed Password - Privacy - Privacy + 000000 + 000000 + + + Copy + Copy + + + Expires in <b>%n</b> second(s) + Expires in <b>%n</b> secondExpires in <b>%n</b> seconds + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Use Google as fallback for downloading website icons + Copy + Copy - Re-lock previously locked database after performing Auto-Type - Re-lock previously locked database after performing Auto-Type + 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. - 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 + sec + Seconds + sec + + + Code size: + Code size: 6 digits 6 digits - Code size: - Code size: + 7 digits + 7 digits - sec - Seconds - sec + 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. + + + 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. - - - UnlockDatabaseWidget - Unlock database - Unlock database + 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 - - Remove an entry from the database. - Remove an entry from the database. - - - Path of the database. - Path of the database. - - - Path of the entry to remove. - Path of the entry to remove. - + YubiKeyEditWidget - 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) + Refresh + Refresh - path to a custom config file - path to a custom config file + YubiKey Challenge-Response + YubiKey Challenge-Response - key file of the database - key file 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> + <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> - read password of the database from stdin - read password of the database from stdin + No YubiKey detected, please ensure it's plugged in. + No YubiKey detected, please ensure it's plugged in. - 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 092eada9fa..99d394ff91 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: @@ -38,80 +38,290 @@ Copiar al portapapeles - Version %1 - - Versión %1 - + Project Maintainers: + Mantenedores del proyecto: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + El equipo de KeePassXC quiere agradecer de manera especial el trabajo de debfx por la creación de KeePassX. + + + + AgentSettingsWidget + + 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 - Revision: %1 - Revisión: %1 + Application Settings + Configuración de la aplicación - Distribution: %1 - Distribución: %1 + General + General - Libraries: - Librerías: + Security + Seguridad - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operativo: %1 -Arquitectura de CPU: %2 -Núcleo: %3 %4 + Access error for config file %1 + Error de acceso al archivo de configuración %1 - Enabled extensions: - Extensiones habilitadas: + Icon only + Solo icono - Project Maintainers: - Mantenedores del proyecto: + Text only + Solo texto - 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. + Text beside icon + Texto al lado del icono - Build Type: %1 - - Tipo de compilación: %1 - + Text under icon + Texto debajo del icono + + + Follow style + Seguir estilo - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - Confirmar acceso para KeePassXC HTTP + Basic Settings + Configuraciones Básicas - Remember this decision - Recordar esta decisión + Startup + Inicio - Allow - Permitir + Start only a single instance of KeePassXC + Inicie solo una instancia de KeePassXC - Deny - Denegar + Remember last databases + Recordar última base de datos - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Habilitar el Agente SSH (requiere reinicio) + 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 @@ -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. @@ -362,20 +585,41 @@ Por favor seleccione si desea autorizar su acceso. <b>Advertencia:</b> Las siguientes opciones pueden ser peligrosas. - Executable Files (*.exe);;All Files (*.*) - Archivos ejecutables (*.exe); Todos los archivos (*. *) + Select custom proxy location + Elegir una ubicación de proxy personalizada + + + &Tor Browser + Navegador &Tor - Executable Files (*) - Archivos ejecutables (*) + <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: - Select custom proxy location - Elegir una ubicación de proxy personalizada + Executable Files + Archivos ejecutables + + + All Files + Todos los archivos - 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. + 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 @@ -418,153 +662,54 @@ Do you want to overwrite it? ¿Desea actualizar la información en %1 - %2? - KeePassXC: Database locked! - KeePassXC: ¡Base de datos bloqueada! + Abort + Abortar - 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. + Converting attributes to custom data… + Convirtiendo atributos a datos personalizados ... - KeePassXC: Settings not available! - KeePassXC: ¡Configuraciones no disponibles! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: atributos de KeePassHTTP convertidos - 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 + 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). - - - 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. - - - - ChangeMasterKeyWidget - - Password - Contraseña - - - Enter password: - Ingrese la contraseña - - - Repeat password: - Repita la contraseña: - - - &Key file - &Archivo llave - - - 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 + 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. - Do you really want to use an empty string as password? - ¿Realmente desea usar una cadena vacía como contraseña? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: ¡No se encontró entrada con los atributos KeePassHTTP! - Different passwords supplied. - Las contraseñas ingresadas son distintas. + The active database does not contain an entry with KeePassHTTP attributes. + La base de datos activa no contiene una entrada con atributos de KeePassHTTP. - Failed to set %1 as the Key file: -%2 - No se pudo establecer %1 como el Archivo llave: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: detectada configuración de integración del navegador heredada - Legacy key file format - Formato de archivo llave heredado + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -661,48 +798,89 @@ Considere generar un nuevo archivo llave. Dato original: - Error(s) detected in CSV file ! - ¡Error(es) detectado(s) en el archivo CSV! + Error + Error - more messages skipped] - más mensajes salteados] + Empty fieldname %1 + Nombre de campo vacío %1 - Error - Error + column %1 + columna %1 - CSV import: writer has errors: - - La importación CSV: la escritura tiene errores: - + Error(s) detected in CSV file! + ¡Error(es) detectado(s) en el archivo CSV! - - - CsvImportWizard - - Error - Error + + [%n more message(s) skipped] + [%n más mensaje(s) omitidos][%n más mensaje(s) omitidos] - Unable to calculate master key - No se puede calcular la clave maestra + CSV import: writer has errors: +%1 + Importación CSV: la escritura tiene errores: +% 1 CsvParserModel - %n byte(s), - %n byte(s), %n byte(s), + %n column(s) + %n columna(s)%n columna(s) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - filas de %n, %n fila(s), + %n byte(s) + %n byte(s)%n byte(s) - %n column(s) - %n columnas%n columna(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,162 +939,338 @@ 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 + Can't open key file: +%1 + No se puede abrir el archivo llave: +% 1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - No se pudo abrir la base de datos. + Passwords + Contraseñas + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Base de datos abierta correctamente. Nada que hacer. + Advanced Settings + Configuraciones avanzadas - Success - Éxito + General + General - The database has been successfully repaired -You can now save it. - La base de datos ha sido reparada correctamente -Ahora puede guardarla. + Security + Seguridad - Unable to repair the database. - No se pudo reparar la base de datos. + Master Key + Clave Maestra - - - DatabaseSettingsWidget - General - General + Encryption Settings + Configuraciones de Cifrado - Encryption - Cifrado + Browser Integration + Integración con Navegadores + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Número de rondas demasiado altas + KeePassXC-Browser settings + Configuraciones del KeePassXC-Browser - 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á utilizando una gran cantidad de rondas de transformación de clave con Argon2. - -Si conserva este número, ¡su base de datos puede tardar horas o días (o incluso más) en abrirse! + &Disconnect all browsers + &Desconectar todos los navegadores - Understood, keep number - Entendido, mantenga el número + Forg&et all site-specific settings on entries + Olvíd&e todas las configuraciones específicas del sitio en las entradas - Cancel - Cancelar + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Mueva los atributos de KeePassHTTP a los datos &personalizados de KeePassXC-Browser - Number of rounds too low - Key transformation rounds - Número de rondas demasiado bajas + Stored keys + Claves almacenadas - 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á utilizando una cantidad muy baja de rondas de transformación de llave con AES-KDF. - -Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar! + Remove + Eliminar - KDF unchanged - KDF sin cambios + Delete the selected key? + ¿Eliminar la clave seleccionada? - Failed to transform key with new KDF parameters; KDF unchanged. - Error al transformar la llave con nuevos parámetros KDF; KDF sin cambios. - - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB + 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. - - thread(s) - Threads for parallel execution (KDF settings) - o de los hiloshilo(s) - - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Algoritmo de cifrado: + Key + Clave - AES: 256 Bit (default) - AES: 256-Bit (por defecto) + Value + Valor - Twofish: 256 Bit - Twofish: 256 Bit + Enable Browser Integration to access these settings. + Habilitar la integración del navegador para acceder a esta configuración. - Key Derivation Function: - Función de derivación de la llave: + Disconnect all browsers + Desconectar todos los navegadores - Transform rounds: - Rondas de transformación: + 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. - Benchmark 1-second delay - Medición de retraso de un segundo + KeePassXC: No keys found + KeePassXC: No se encontró ninguna clave - Memory Usage: - Memoria utilizada: + No shared encryption keys found in KeePassXC settings. + No se encontraron claves de cifrado compartidas en la configuración de KeePassXC. - Parallelism: - Paralelismo: + KeePassXC: Removed keys from database + KeePassXC: Las claves se eliminaron de la base de datos - - - DatabaseSettingsWidgetGeneral - - Database Meta Data - Metadatos 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. - Database name: - Nombre de la base de datos: + Forget all site-specific settings on entries + Olvíde todas las configuraciones específicas del sitio en las entradas - Database description: - Descripción de la base de datos: + 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. - Default username: - Nombre de usuario por defecto: + Removing stored permissions… + Eliminando permisos almacenados... - History Settings + 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 + Key transformation rounds + Número de rondas demasiado altas + + + 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á utilizando una gran cantidad de rondas de transformación de clave con Argon2. + +Si conserva este número, ¡su base de datos puede tardar horas o días (o incluso más) en abrirse! + + + Understood, keep number + Entendido, mantenga el número + + + Cancel + Cancelar + + + Number of rounds too low + Key transformation rounds + Número de rondas demasiado bajas + + + 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á utilizando una cantidad muy baja de rondas de transformación de llave con AES-KDF. + +Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar! + + + KDF unchanged + KDF sin cambios + + + Failed to transform key with new KDF parameters; KDF unchanged. + Error al transformar la llave con nuevos parámetros KDF; KDF sin cambios. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + hilo(s)hilo(s) + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + Metadatos de la Base de Datos + + + Database name: + Nombre de la base de datos: + + + Database description: + Descripción de la base de datos: + + + Default username: + Nombre de usuario por defecto: + + + History Settings Configuración del Historial @@ -953,91 +1299,112 @@ 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 - KeePass 2 Database - Base de datos KeePass 2 + Breadcrumb + Pista - All files - Todos los archivos + Type + Tipo - Open database - Abrir base de datos + Path + Ruta - File not found! - ¡Archivo no encontrado! + Last Signer + Último firmante - Unable to open the database. - No se pudo abrir la base de datos. + Certificates + Certificados - File opened in read only mode. - Archivo abierto en modo sólo lectura. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Abrir archivo CSV + Add additional protection... + Añadir protección adicional... - CSV file - Archivo CSV + No encryption key added + No se añadió clave de cifrado - All files (*) - Todos los archivos (*) + 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! - Merge database - Unir base de datos + No password set + Sin contraseña establecida - Open KeePass 1 database - Abrir base de datos KeePass 1 + 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? - KeePass 1 database - Base de datos KeePass 1 + Unknown error + Error desconocido - Close? - ¿Cerrar? + Failed to change master key + Error al cambiar la clave maestra + + + DatabaseSettingsWidgetMetaDataSimple - "%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? + Database Name: + Nombre de la base de datos: - Save changes? - ¿Guardar cambios? + Description: + Descripción: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" ha sido modificado. -¿Guardar cambios? + KeePass 2 Database + Base de datos de KeePass 2 - Writing the database failed. - La escritura de la base de datos falló. + All files + Todos los archivos - Passwords - Contraseñas + Open database + Abrir base de datos - Save database as - Guardar base de datos como + CSV file + Archivo CSV + + + Merge database + Unir base de datos + + + Open KeePass 1 database + Abrir base de datos KeePass 1 + + + KeePass 1 database + Base de datos KeePass 1 Export database to CSV file @@ -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 + + 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? + - Generate TOTP Token - Generar Token TOTP + File opened in read only mode. + Archivo abierto en modo sólo lectura. - Close - Cerrar + Lock Database? + ¿Bloquear la Base de datos? - General - General + You are editing an entry. Discard changes and lock anyway? + Estás editando una entrada. ¿Descartar los cambios y bloquear todos modos? - Password - Contraseña + "%1" was modified. +Save changes? + "%1" ha sido modificado. +¿Guardar cambios? - URL - URL + Database was modified. +Save changes? + Se modificó la base de datos. +¿Guardar cambios? - Expiration - Vencimiento + Save changes? + ¿Guardar cambios? - Username - Nombre de usuario: + 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 - Autotype - Autoescritura + Disable safe saves? + ¿Deshabilitar guardados seguros? - Searching - Buscando... + 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? - Attributes - Atributos + Writing the database failed. +%1 + Fallo al escribir en la base de datos. +%1 - Attachments - Adjuntos + Passwords + Contraseñas - Notes - Notas + Save database as + Guardar base de datos como - Window - Ventana + KeePass 2 Database + Base de datos de KeePass 2 - Sequence - Secuencia + 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? - Search - Buscar + Delete group + Eliminar grupo - Clear - Limpiar + Move group to recycle bin? + ¿Mover grupo a la papelera de reciclaje? - Never - Nunca + Do you really want to move the group "%1" to the recycle bin? + ¿Realmente desea mover el grupo "%1" a la papelera de reciclaje? - [PROTECTED] - [PROTEGIDO] + Successfully merged the database files. + Unido correctamente los archivos de base de datos. - Disabled - Deshabilitado + Database was not modified by merge operation. + La base de datos no fue modificada por la operación de unir - Enabled - Habilitado + 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 @@ -1999,65 +2571,10 @@ Esto puede causar un mal funcionamiento de los complementos afectados. - HttpPasswordGeneratorWidget + KMessageWidget - 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 - - &Close - &Cerrar + &Close + &Cerrar Close message @@ -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,226 +3438,394 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Archivo de clave no válida, esperando una clave de OpenSSH + &Donate + &Donar - PEM boundary mismatch - Desajuste de límite PEM + Report a &bug + Reportar un &error - Base64 decoding failed - No se pudo decodificar Base64 + 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. - Key file way too small. - Archivo llave demasiado pequeño. + &Import + &Importar - Key file magic header id invalid - Id de encabezado mágico del archivo llave inválido + Copy att&ribute... + Copiar at&ributo... - Found zero keys - Cero claves encontradas + TOTP... + TOTP... - Failed to read public key. - No se pudo leer la clave pública. + &New database... + &Nueva base de datos... - Corrupted key file, reading private key failed - Fichero de claves corrupto, no se pudo leer la clave privada + Create a new database + Crear una nueva base de datos - No private key payload to decrypt - Sin contenido a desencriptar en llave privada + &Merge from database... + &Unir desde la base de datos... - Trying to run KDF without cipher - Tratando de ejecutar KDF sin cifrado + Merge from another KDBX database + Unir desde otra base de datos KDBX - Passphrase is required to decrypt this key - Frase de contraseña necesaria para descrifrar esta clave + &New entry + &Nueva entrada - Key derivation failed, key file corrupted? - Derivación de la llave falló, ¿archivo llave dañado? + Add a new entry + Añadir una nueva entrada - Decryption failed, wrong passphrase? - ¿Error de descifrado, contraseña incorrecta? + &Edit entry + &Editar entrada - Unexpected EOF while reading public key - EOF inesperado al leer la clave pública + View or edit entry + Ver o editar entrada - Unexpected EOF while reading private key - EOF inesperado al leer la clave privada + &New group + &Nuevo grupo - Can't write public key as it is empty - No se puede escribir la clave pública ya que es vacía + Add a new group + Añadir un nuevo grupo - Unexpected EOF when writing public key - EOF inesperado al escribir la clave pública + Change master &key... + Cambiar la clave &maestra... - Can't write private key as it is empty - No se puede escribir la clave privada ya que es vacía + &Database settings... + Configuración de la base de &datos - Unexpected EOF when writing private key - EOF inesperado al escribir la clave privada + Copy &password + Copiar &contraseña - Unsupported key type: %1 - Tipo de clave no soportada: %1 + Perform &Auto-Type + Relizar &Auto-Escritura - Unknown cipher: %1 - Cifrado desconocido: %1 + Open &URL + Abrir &URL - Cipher IV is too short for MD5 kdf - Cifrado IV demasiado corto para MD5 kdf + KeePass 1 database... + Base de datos KeePass 1... - Unknown KDF: %1 - KDF desconocido: %1 + Import a KeePass 1 database + Importar una base de datos KeePass 1 - Unknown key type: %1 - Tipo de clave desconocida: %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. - OptionDialog + Merger - Dialog - Cuadro de diálogo + Creating missing %1 [%2] + Creando %1 faltante [%2] - 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 + Relocating %1 [%2] + Reubicando %1 [%2] - Enable KeePassHTTP server - Habilitar el servidor de KeePassHTTP + Overwriting %1 [%2] + Sobrescribiendo %1 [%2] - General - General + older entry merged from database "%1" + la entrada más antigua se fusionó a la base de datos "%1" - 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 + Adding backup for older target %1 [%2] + Agregando copia de seguridad para el destino más antiguo %1 [%2] - 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. + Adding backup for older source %1 [%2] + Agregando copia de seguridad para la fuente anterior %1 [%2] - &Return only best matching entries - &Devolver sólo las entradas más relevantes + 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] - Re&quest to unlock the database if it is locked - Solicitar el desblo&queo de la base de datos si se encuentra bloqueada + 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] - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Sólo se devuelven las entradas con el mismo esquema (http://, https://, ftp://, ...) + Synchronizing from newer source %1 [%2] + Sincronización desde una fuente más nueva %1 [%2] - &Match URL schemes - &Validar los esquemas de las URL + Synchronizing from older source %1 [%2] + Sincronización desde una fuente anterior %1 [%2] - Sort matching entries by &username - Ordenar entradas por nombre de &usuario + Deleting child %1 [%2] + Borrando hijo %1[%2] - Sort &matching entries by title - Ordenar entradas por &título + Deleting orphan %1 [%2] + Eliminando huérfano %1 [%2] - R&emove all shared encryption keys from active database - &Eliminar todas las claves de cifrado compartidas de la base de datos activa + Changed deleted objects + cambiado objetos eliminados - 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 + Adding missing icon %1 + Añadiendo el icono faltante %1 + + + NewDatabaseWizard - Password Generator - Generador de contraseñas + Create a new KeePassXC database... + Crear una nueva base de datos KeePassXC ... - Advanced - Avanzado + Root + Root group + Raíz + + + NewDatabaseWizardPage - Always allow &access to entries - Siempre permitir &acceso a las entradas + WizardPage + PáginaAsistente - Always allow &updating entries - Siempre permitir act&ualizaciones de las entradas + En&cryption Settings + Configuraciones de &Cifrado - Only the selected database has to be connected with a client. - Sólo las bases de datos seleccionadas se conectaran con el cliente. + 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. - Searc&h in all opened databases for matching entries - Busca&r entradas que coincidan en todas las bases de datos abiertas + Advanced Settings + Configuraciones avanzadas - Automatically creating or updating string fields is not supported. - No se permite crear o actualizar campos de caracteres automáticamente. + Simple Settings + Ajustes simples + + + NewDatabaseWizardPageEncryption - &Return advanced string fields which start with "KPH: " - Mostra&r campos de caracteres avanzados que comiencen con "KPH: " + 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 - HTTP Port: - Puerto HTTP: + Database Master Key + Llave maestra de la base de datos - Default port: 19455 - Puerto por defecto: 19455 + A master key known only to you protects your database. + Una llave maestra, conocida por usted únicamente, protege su base de datos. + + + NewDatabaseWizardPageMetaData - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC escuchará por este puerto en 127.0.0.1 + General Database Information + Información general de la base de datos - <b>Warning:</b> The following options can be dangerous! - <b>Advertencia:</b> Las siguientes opciones pueden ser peligrosas. + 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 llave no válido, esperando una llave de OpenSSH + + + PEM boundary mismatch + Desajuste de límite PEM + + + Base64 decoding failed + No se pudo decodificar Base64 + + + Key file way too small. + Archivo llave demasiado pequeño. + + + Key file magic header id invalid + Id de encabezado mágico del archivo llave inválido + + + Found zero keys + Cero claves encontradas + + + Failed to read public key. + No se pudo leer la clave pública. + + + Corrupted key file, reading private key failed + Fichero de claves corrupto, no se pudo leer la clave privada + + + No private key payload to decrypt + Sin contenido a desencriptar en llave privada + + + Trying to run KDF without cipher + Tratando de ejecutar KDF sin cifrado + + + Passphrase is required to decrypt this key + Frase de contraseña necesaria para descrifrar esta clave + + + Key derivation failed, key file corrupted? + La derivación de la clave falló, ¿archivo de claves dañado? + + + Decryption failed, wrong passphrase? + ¿Error de descifrado, frase de contraseña incorrecta? + + + Unexpected EOF while reading public key + EOF inesperado al leer la clave pública + + + Unexpected EOF while reading private key + EOF inesperado al leer la clave privada + + + Can't write public key as it is empty + No se puede escribir la clave pública ya que es vacía + + + Unexpected EOF when writing public key + EOF inesperado al escribir la clave pública + + + Can't write private key as it is empty + No se puede escribir la clave privada ya que es vacía + + + Unexpected EOF when writing private key + EOF inesperado al escribir la clave privada + + + Unsupported key type: %1 + Tipo de clave no soportada: %1 + + + Unknown cipher: %1 + Cifrado desconocido: %1 + + + Cipher IV is too short for MD5 kdf + Cifrado IV demasiado corto para MD5 kdf + + + Unknown KDF: %1 + KDF desconocido: %1 + + + Unknown key type: %1 + Tipo de clave desconocida: %1 + + + + PasswordEditWidget + + Enter password: + Ingrese la contraseña + + + Confirm password: + Confirme la contraseña + + + Password + Contraseña - <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> + <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> - Cannot bind to privileged ports - No se puede asociar a puertos con privilegios + Passwords do not match. + Las contraseñas no coinciden. - 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,474 +3895,1097 @@ Usando el puerto por defecto 19455 Wordlist: Lista de palabras: - - Word Count: - Cantidad de Palabras: - Word Separator: Separador de Palabras: - Generate - Generar + Copy + Copiar + + + Accept + Aceptar + + + Close + Cerrar + + + Entropy: %1 bit + Entropía: %1 bit + + + Password Quality: %1 + Calidad de la contraseña: %1 + + + Poor + Password quality + Pobre + + + Weak + Password quality + Débil + + + Good + Password quality + Buena + + + Excellent + 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 + + Database not opened + Base de datos no abierta + + + Database hash not available + Hash de la base de datos no disponible + + + Client public key not received + Clave pública del cliente no recibida + + + Cannot decrypt message + No se puede descifrar el mensaje + + + Action cancelled or denied + Acción cancelada o denegada + + + KeePassXC association failed, try again + No se pudo asociar con KeePassXC, inténtelo de nuevo + + + Encryption key is not recognized + Clave de cifrado no es reconocida + + + Incorrect action + Acción incorrecta + + + Empty message received + Mensaje vacío recibido + + + No URL provided + No hay URL proporcionada + + + No logins found + No se encontraron logins + + + Unknown error + Error desconocido + + + Add a new entry to a database. + Añadir una nueva entrada a una base de datos. + + + Path of the database. + Ruta a la base de datos. + + + Key file of the database. + Archivo de llave de la base de datos + + + path + ruta + + + Username for the entry. + Nombre de usuario para la entrada. + + + username + nombre de usuario + + + URL for the entry. + URL de la entrada. + + + URL + URL + + + Prompt for the entry's password. + Solicitar contraseña de la entrada. + + + Generate a password for the entry. + Generar una contraseña para la entrada. + + + Length for the generated password. + Tamaño de la contraseña a generar + + + length + Tamaño + + + Path of the entry to add. + Camino de la entrada para añadir. + + + Copy an entry's password to the clipboard. + Copiar la contraseña de una entrada en el portapapeles. + + + Path of the entry to clip. + clip = copy to clipboard + Camino de la entrada para copiar. + + + Timeout in seconds before clearing the clipboard. + Tiempo de espera en segundos antes de borrar el portapapeles. + + + Edit an entry. + Editar una entrada + + + Title for the entry. + Título para la entrada + + + title + título + + + Path of the entry to edit. + Camino de la entrada para editar. + + + Estimate the entropy of a password. + Estimar la entropía de una contraseña. + + + Password for which to estimate the entropy. + Contraseña para el que desea calcular la entropía. + + + Perform advanced analysis on the password. + Realizar análisis avanzado sobre la contraseña. + + + Extract and print the content of a database. + Extraer e imprimir el contenido de la base de datos. + + + Path of the database to extract. + Ruta a la base de datos a extraer. + + + Insert password to unlock %1: + Introduzca la contraseña 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. + ADVERTENCIA: Está usando un fichero de claves con un formato antiguo que puede ser +incompatible en el futuro. + +Por favor, considere generar un nuevo fichero. + + + + +Available commands: + + + +Comandos disponibles: + + + + Name of the command to execute. + Nombre del comando a ejecutar. + + + List database entries. + Listar las entradas de la base de datos. + + + Path of the group to list. Default is / + Ruta del grupo a listar. Por defecto es / + + + Find entries quickly. + Encontrar las entradas rápidamente. + + + Search term. + Término de búsqueda. + + + Merge two databases. + Mezclar dos bases de datos. + + + Path of the database to merge into. + Ruta de la base de datos resultado de la mezcla. + + + Path of the database to merge from. + Ruta de la base de datos de inicio de la mezcla. + + + Use the same credentials for both database files. + Utilizar las mismas credenciales para ambos archivos de base de datos. + + + Key file of the database to merge from. + Archivo llave de la base de datos desde la cual desea combinar. + + + Show an entry's information. + Muestra información de una 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. + Nombres de los atributos para mostrar. Esta opción se puede especificar más de una vez, con cada atributo apareciendo uno por línea en el orden dado. Si no se especifica ningún atributo, se da un resumen de los atributos predeterminados. + + + attribute + atributo + + + Name of the entry to show. + Nombre de la entrada para mostrar. + + + NULL device + Dispositivo NULL + + + error reading from device + error leyendo del dispositivo + + + malformed string + cadena de caracteres mal formada + + + missing closing quote + comilla de cierre faltante + + + Group + Grupo + + + Title + Título + + + Username + Nombre de usuario: + + + Password + Contraseña + + + Notes + Notas + + + Last Modified + Última modificación + + + Created + Creado + + + Browser Integration + Integración con Navegadores + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey [%1] Desafío/Respuesta - Ranura %2 - %3 + + + Press + Presione + + + Passive + Pasivo + + + SSH Agent + Agente de SSH + + + Generate a new random diceware passphrase. + Generar una nueva frase de contraseña aleatoria diceware. + + + Word count for the diceware passphrase. + Número de palabras para la frase de contraseña de diceware. + + + Wordlist for the diceware generator. +[Default: EFF English] + Lista de palabras para el generador de diceware. +[Por defecto: Inglés EFF] + + + Generate a new random password. + Generar una nueva contraseña aleatoria. + + + Invalid value for password length %1. + Valor inválido para el largo de contraseña %1. + + + Could not create entry with path %1. + No pudo crearse la entrada con ruta %1. + + + Enter password for new entry: + Ingrese la contraseña para la nueva entrada: + + + Writing the database failed %1. + Falló escritura de la base de datos %1. + + + Successfully added entry %1. + La entrada se agregó exitosamente %1. + + + 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 - Copy - Copiar + Type: Sequence + Tipo: Secuencia - Accept - Aceptar + Type: Spatial + Tipo: Espacial - Close - Cerrar + Type: Date + Tipo: Fecha - Apply - Aplicar + Type: Bruteforce(Rep) + Tipo: Fuerza Bruta(Rep) - Entropy: %1 bit - Entropía: %1 bit + Type: Dictionary(Rep) + Tipo: Diccionario(Rep) - Password Quality: %1 - Calidad de la contraseña: %1 + Type: Dict+Leet(Rep) + Tipo: Dicc+Leet(Rep) - Poor - Password quality - Pobre + Type: User Words(Rep) + Tipo: Usuario Palabras(Rep) - Weak - Password quality - Débil + Type: User+Leet(Rep) + Tipo: Usuario + Leet(Rep) - Good - Password quality - Buena + Type: Repeated(Rep) + Tipo: Repetido(Rep) - Excellent - Password quality - Excelente + Type: Sequence(Rep) + Tipo: Secuencia(Rep) - - - QObject - Database not opened - Base de datos no abierta + Type: Spatial(Rep) + Tipo: Espacial(Rep) - Database hash not available - Hash de la base de datos no disponible + Type: Date(Rep) + Tipo: Fecha(Rep) - Client public key not received - Clave pública del cliente no recibida + Type: Unknown%1 + Tipo: Desconocido %1 - Cannot decrypt message - No se puede descifrar el mensaje + Entropy %1 (%2) + Entropía %1 (%2) - Timeout or cannot connect to KeePassXC - Tiempo de espera superado, o no se puede conectar a KeePassXC + *** Password length (%1) != sum of length of parts (%2) *** + *** Longitud de la contraseña (%1) != Suma de la longitud de las partes (%2) *** - Action cancelled or denied - Acción cancelada o denegada + Failed to load key file %1: %2 + Error al cargar el fichero de claves %1: %2 - 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? + File %1 does not exist. + El archivo %1 no existe. - KeePassXC association failed, try again - No se pudo asociar con KeePassXC, inténtelo de nuevo + Unable to open file %1. + Incapaz de abrir el archivo %1. - Key change was not successful - Cambio de clave no fue exitoso + Error while reading the database: +%1 + Error al leer la base de datos: +%1 - Encryption key is not recognized - Clave de cifrado no es reconocida + Error while parsing the database: +%1 + Error al analizar la base de datos: +%1 - No saved databases found - Ninguna base de datos guardadas encontrada + Length of the generated password + Longitud de la contraseña generada - Incorrect action - Acción incorrecta + Use lowercase characters + Usar caracteres en minúscula - Empty message received - Mensaje vacío recibido + Use uppercase characters + Usar caracteres en mayúscula - No URL provided - No hay URL proporcionada + Use numbers. + Usar números. - No logins found - No se encuentraron logins + Use special characters + Usar caracteres especiales - Unknown error - Error desconocido + Use extended ASCII + Usar ASCII extendido - Add a new entry to a database. - Añadir una nueva entrada a una base de datos. + Exclude character set + Excluir conjunto de caracteres - Path of the database. - Ruta a la base de datos. + chars + caracteres - Key file of the database. - Archivo de llave de la base de datos + Exclude similar looking characters + Excluir caracteres de aspecto similar - path - ruta + Include characters from every selected group + Incluir caracteres de cada grupo seleccionado - Username for the entry. - Nombre de usuario para la entrada. + Recursively list the elements of the group. + Listar recursivamente los elementos del grupo. - username - nombre de usuario + Cannot find group %1. + No se puede encontrar el grupo %1. - URL for the entry. - URL de la entrada. + Error reading merge file: +%1 + Error al leer el archivo a unir: +%1 - URL - URL + Unable to save database to file : %1 + No se puede guardar la base de datos en el archivo: %1 - Prompt for the entry's password. - Solicitar contraseña de la entrada. + Unable to save database to file: %1 + No se puede guardar la base de datos en el archivo: %1 - Generate a password for the entry. - Generar una contraseña para la entrada. + Successfully recycled entry %1. + Entrada %1 reciclada exitosamente. - Length for the generated password. - Tamaño de la contraseña a generar + Successfully deleted entry %1. + Se eliminó correctamente la entrada %1. - length - Tamaño + Show the entry's current TOTP. + Muestra la entrada actual del TOTP. - Path of the entry to add. - Camino de la entrada para añadir. + ERROR: unknown attribute %1. + ERROR: atributo desconocido %1. - Copy an entry's password to the clipboard. - Copiar la contraseña de una entrada en el portapapeles. + No program defined for clipboard manipulation + Ningún programa definido para la manipulación del portapapeles. - Path of the entry to clip. - clip = copy to clipboard - Camino de la entrada para copiar. + Unable to start program %1 + No se puede iniciar el programa %1 - Timeout in seconds before clearing the clipboard. - Tiempo de espera en segundos antes de borrar el portapapeles. + file empty + archivo vacío - Edit an entry. - Editar una entrada + %1: (row, col) %2,%3 + %1: (fila, col) %2,%3 - Title for the entry. - Título para la entrada + AES: 256-bit + AES: 256-bit - title - título + Twofish: 256-bit + Twofish: 256-bit - Path of the entry to edit. - Camino de la entrada para editar. + ChaCha20: 256-bit + ChaCha20: 256-bit - Estimate the entropy of a password. - Estimar la entropía de una contraseña. + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recomendado) - Password for which to estimate the entropy. - Contraseña para el que desea calcular la entropía. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Perform advanced analysis on the password. - Realizar análisis avanzado en la contraseña. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Extract and print the content of a database. - Extraer e imprimir el contenido de la base de datos. + Invalid Settings + TOTP + Configuración inválida - Path of the database to extract. - Ruta a la base de datos a extraer. + Invalid Key + TOTP + Clave Inválida - Insert password to unlock %1: - Introduzca la contraseña para desbloquear %1: + Message encryption failed. + El cifrado del mensaje falló. - Failed to load key file %1 : %2 - Error al cargar el archivo llave %1 : %2 + No groups found + No se encontraron grupos - 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. - -Por favor considere generar un nuevo archivo de llave. + Create a new database. + Crear una nueva base de datos. - - -Available commands: - - - -Comandos disponibles: - + File %1 already exists. + El archivo %1 ya existe. - Name of the command to execute. - Nombre del comando a ejecutar. + Loading the key file failed + La carga del fichero de claves falló - List database entries. - Listar las entradas de la base de datos. + No key is set. Aborting database creation. + No se establece ninguna clave. Anulando la creación de base de datos. - Path of the group to list. Default is / - Ruta del grupo a listar. Por defecto es / + Failed to save the database: %1. + Error al guardar la base de datos: %1. - Find entries quickly. - Encontrar las entradas rápidamente. + Successfully created new database. + Creación exitosa de nueva base de datos. - Search term. - Término de búsqueda. + 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): - Merge two databases. - Mezclar dos bases de datos. + Creating KeyFile %1 failed: %2 + Error al crear el archivo de clave %1: %2 - Path of the database to merge into. - Ruta de la base de datos resultado de la mezcla. + Loading KeyFile %1 failed: %2 + Error al cargar el archivo de claves %1: %2 - Path of the database to merge from. - Ruta de la base de datos de inicio de la mezcla. + Remove an entry from the database. + Quitar una entrada de la base de datos. - Use the same credentials for both database files. - Utilizar las mismas credenciales para ambos archivos de base de datos. + Path of the entry to remove. + Camino de la entrada a quitar. - Key file of the database to merge from. - Archivo llave de la base de datos desde la cual desea combinar. + 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. - Show an entry's information. - Muestra información de una entrada. + The lock file could not be created. Single-instance mode disabled. + El archivo de bloqueo no pudo ser creado. Modo de instancia única deshabilitado. - 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. - Nombres de los atributos para mostrar. Esta opción se puede especificar más de una vez, con cada atributo apareciendo uno por línea en el orden dado. Si no se especifica ningún atributo, se da un resumen de los atributos predeterminados. + KeePassXC - cross-platform password manager + KeePassXC - gestor de claves multiplataforma - attribute - atributo + filenames of the password databases to open (*.kdbx) + nombre de archivo de la base de datos de contraseñas a abrir (*.kdbx) - Name of the entry to show. - Nombre de la entrada para mostrar. + path to a custom config file + ruta a un archivo de configuración personalizado - NULL device - Dispositivo NULL + key file of the database + archivo llave de la base de datos - error reading from device - error leyendo del dispositivo + read password of the database from stdin + leer contraseña de la base de datos desde la entrada estándar - file empty ! - - ¡archivo vacío! - + Parent window handle + Identificador de la ventana padre - malformed string - cadena de caracteres mal formada + Another instance of KeePassXC is already running. + Otra instancia de KeePassXC ya se está ejecutando. - missing closing quote - comilla de cierre faltante + Fatal error while testing the cryptographic functions. + Error fatal comprobando las funciones criptográficas. - Group - Grupo + KeePassXC - Error + KeePassXC - Error - Title - Título + Database password: + Contraseña de la Base de Datos: - Username - Nombre de usuario: + Cannot create new group + + + + QtIOCompressor - Password - Contraseña + Internal zlib error when compressing: + Error interno de zlib comprimiendo: - Notes - Notas + Error writing to underlying device: + Error al escribir en el dispositivo subyacente: - Last Modified - Última modificación + Error opening underlying device: + Error al abrir el dispositivo subyacente: - Created - Creado + Error reading data from underlying device: + Error al leer el dispositivo subyacente: - Legacy Browser Integration - Integración de navegador obsoleta + Internal zlib error when decompressing: + Error interno de zlib descomprimiendo: + + + QtIOCompressor::open - Browser Integration - Integración con Navegadores + The gzip format not supported in this version of zlib. + El formato gzip no está soportado en esta versión de zlib. - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey [%1] Desafío/Respuesta - Ranura %2 - %3 + Internal zlib error: + Error interno de zlib: + + + SSHAgent - Press - Presione + Agent connection failed. + La conexión del agente falló. - Passive - Pasivo + Agent protocol error. + Error de protocolo del agente. - SSH Agent - Agente de SSH + No agent running, cannot add identity. + Ningún agente en ejecución, no se puede agregar identidad. - Generate a new random diceware passphrase. - Generar una nueva frase de contraseña aleatoria diceware. + No agent running, cannot remove identity. + Ningún agente en ejecución, no puede eliminar identidad. - Word count for the diceware passphrase. - Número de palabras para la frase de contraseña de diceware. + Agent refused this identity. Possible reasons include: + El agente rechazó esta identidad. Las posibles razones incluyen: - count - Número + The key has already been added. + La clave ya ha sido añadida. - Wordlist for the diceware generator. -[Default: EFF English] - Lista de palabras para el generador de diceware. -[Por defecto: Inglés EFF] + Restricted lifetime is not supported by the agent (check options). + La vida útil limitada no es soportada por el agente (verifique opciones). - Generate a new random password. - Generar una nueva contraseña aleatoria. + 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 - Length of the generated password. - Longitud de la contraseña generada. + Search Help + Buscar Ayuda - Use lowercase characters in the generated password. - Utilizar caracteres en minúsculas en la contraseña generada. + Search terms are as follows: [modifiers][field:]["]term["] + Los términos de búsqueda son los siguientes: [modificadores] [campo:] ["] término ["] - Use uppercase characters in the generated password. - Utilizar caracteres en mayúsculas en la contraseña generada. + Every search term must match (ie, logical AND) + Cada término de búsqueda debe coincidir (es decir, AND lógico) - Use numbers in the generated password. - Utilizar números en la contraseña generada. + Modifiers + Modificadores - Use special characters in the generated password. - Utilizar caracteres especiales en la contraseña generada. + exclude term from results + excluir término de resultados - Use extended ASCII in the generated password. - Utilizar ASCII extendido en la contraseña generada. + match term exactly + coincidencia en término exactamente - - - QtIOCompressor - Internal zlib error when compressing: - Error interno de zlib comprimiendo: + use regex in term + usar expresiones regulares en término - Error writing to underlying device: - Error al escribir en el dispositivo subyacente: + Fields + Campos - Error opening underlying device: - Error al abrir el dispositivo subyacente: + Term Wildcards + Comodines en término - Error reading data from underlying device: - Error al leer el dispositivo subyacente: + match anything + coincidir cualquier cosa - Internal zlib error when decompressing: - Error interno de zlib descomprimiendo: + match one + coincidir uno - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - El formato gzip no está soportado en esta versión de zlib. + logical OR + OR lógico - Internal zlib error: - Error interno de zlib: + Examples + Ejemplos SearchWidget - - Search... - Buscar... - 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 - - 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. + + Import + Importar - KeePassXC: No keys found - KeePassXC: No se encontró ninguna clave + Export + Exportar - No shared encryption-keys found in KeePassHttp Settings. - No se encontraron claves de cifrado en la configuración de KeePassHttp. + Imported certificates + Certificados importados - KeePassXC: Settings not available! - KeePassXC: ¡Configuraciones no disponibles! + Trust + Confianza - 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. + Ask + Preguntar - Removing stored permissions... - Eliminando los permisos guardados... + Untrust + Desconfianza - Abort - Abortar + Remove + Eliminar - KeePassXC: Removed permissions - KeePassXC: Permisos eliminados + Path + Ruta - - Successfully removed permissions from %n entries. - Con éxito quitar permisos de entradas %n.Removidos permisos de %n entradas exitosamente. + + Status + Estado - KeePassXC: No entry with permissions found! - KeePassXC: ¡No se encontró ninguna entrada con permisos! + Fingerprint + Huella dactilar - The active database does not contain an entry with permissions. - La base de datos activa no contiene una entrada con permisos. + Certificate + Certificado - - - SettingsWidget - Application Settings - Configuración de la aplicación + Trusted + De confianza - General - General + Untrusted + No es de confianza - Security - Seguridad + Unknown + Desconocido - Access error for config file %1 - Error de acceso al archivo de configuración %1 + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - Configuraciones Básicas + KeeShare key file + Archivo de clave de KeeShare - Start only a single instance of KeePassXC - Inicie sólo una instancia de KeePassXC + All files + Todos los archivos - Remember last databases - Recordar última base de datos + Select path + Seleccione ruta - Remember last key files and security dongles - Recordar los últimos archivos de llaves y el dongle de seguridad + Exporting changed certificate + Exportando certificado modificado - Load previous databases on startup - Abrir base de datos anterior al inicio + 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? - Automatically save on exit - Guardar automáticamente al salir + Signer: + + + + ShareObserver - Automatically save after every change - Guardar automáticamente después de cada cambio + Import from container without signature + Importación de contenedores sin firma - Automatically reload the database when modified externally - Recargar automáticamente la base de datos cuando sea modificada externamente + 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? - Minimize when copying to clipboard - Minimizar al copiar al portapapeles + Import from container with certificate + Importar desde contenedor con certificado - Minimize window at application startup - Minimizar la ventana al iniciar + Not this time + No esta vez - Use group icon on entry creation - Usar icono del grupo en la creación de entrada + Never + Nunca - 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) + Always + Siempre - Hide the Details view - Ocultar la vista de detalles + Just this time + Sólo esta vez - Show a system tray icon - Mostrar icono en la bandeja de del sistema + Import from %1 failed (%2) + Importación de %1 fallida (%2) - Hide window to system tray when minimized - Ocultar la ventana a la bandeja del sistema cuando se minimiza + Import from %1 successful (%2) + Importación de %1 exitosa (%2) - Hide window to system tray instead of app exit - Ocultar la ventana a la bandeja del sistema en vez de cerrar + Imported from %1 + Importado de %1 - Dark system tray icon - Icono de bandeja del sistema oscuro + Signed share container are not supported - import prevented + No se soportan contenedores compartidos firmados - importación prevenida - Language - Idioma + File is not readable + El archivo no es legible - Auto-Type - Auto-Escritura + Invalid sharing container + Contenedor compartido no válido - Use entry title to match windows for global Auto-Type - Use título de entrada para acertar ventanas en Auto-Tipeado global. + Untrusted import prevented + Se previno importación no fiable - Use entry URL to match windows for global Auto-Type - Use URL para acertar ventanas en Auto-Tipedo global + Successful signed import + Importación firmada exitosa - Always ask before performing Auto-Type - Siempre preguntar antes de hacer Auto-Escritura + Unexpected error + Error inesperado - Global Auto-Type shortcut - Atajo global de Auto-Escritura + Unsigned share container are not supported - import prevented + No se soportan contenedores compartidos sin firmar - Importación prevenida - Auto-Type delay - Retardo de Auto-Escritura + Successful unsigned import + Importación no firmada exitosa - ms - Milliseconds - Micro segundo + File does not exist + El archivo no existe - Startup - Inicio + Unknown share container type + Tipo de contenedor compartido desconocido - File Management - Administración de archivos + Overwriting signed share container is not supported - export prevented + No se soporta sobreescribir contenedor compartido - exportación prevenido - 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) + Could not write export container (%1) + No podría escribir el contenedor de exportación (%1) - Backup database file before saving - Hacer una copia de seguridad de la base de datos antes de guardar + Overwriting unsigned share container is not supported - export prevented + No se soporta la sobrescritura de contenedor compartido sin firmar - exportación prevenida - Entry Management - Gestión de entrada + Could not write export container + No se puede escribir contenedor de exportación - General - General + Unexpected export error occurred + Ha ocurrido un error inesperado en la exportación - - - SettingsWidgetSecurity - Timeouts - Intervalos + Export to %1 failed (%2) + Falló exportación a %1 (%2) - Clear clipboard after - Limpiar el portapapeles después de + Export to %1 successful (%2) + Exportación a %1 existosa (%2) - sec - Seconds - segundos + Export to %1 + Exportar a %1 - Lock databases after inactivity of - Bloquear base de datos tras un periodo de inactividad de + 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 ?} - Convenience - Conveniencia + Multiple import source path to %1 in %2 + - 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 + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Bloquear base de datos al minimizar la ventana + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - No pedir repetición de la contraseña cuando está visible + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Mostrar contraseñas en texto claro por defecto + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Ocultar contraseñas en el panel de vista previa + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Ocultar notas de entrada por defecto + Timed Password + Contraseña Cronometrada - Privacy - Privacidad + 000000 + 000000 + + + Copy + Copiar + + + Expires in <b>%n</b> second(s) + Caduca en <b>%n</b> segundo(s)Caduca en <b>%n</b> segundo (s) + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Usar Google como una alternativa para descargar iconos de sitios web + Copy + Copiar - Re-lock previously locked database after performing Auto-Type - Volver a bloquear la base de datos previamente bloqueada después de hacer Auto-Escritura + 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. + + + There was an error creating the QR code. + Se ha producido un error al crear el código QR. + + + Closing in %1 seconds. + Cernado en %1 segundos. - 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 + sec + Seconds + segundos + + + Code size: + Tamaño del código: 6 digits 6 dígitos - Code size: - Tamaño del código: + 7 digits + 7 digitos - sec - Seconds - segundos + 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. + + + 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. - - - UnlockDatabaseWidget - Unlock database - Desbloquear base de datos + 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 - - Remove an entry from the database. - Quitar una entrada de la base de datos. - - - Path of the database. - Ruta a la base de datos. - - - Path of the entry to remove. - Camino de la entrada a quitar. - + YubiKeyEditWidget - 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) + Refresh + Actualizar - path to a custom config file - ruta a un archivo de configuración personalizado + YubiKey Challenge-Response + Desafío/respuesta Yubikey - key file of the database - archivo llave de la base de datos + <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> - read password of the database from stdin - leer contraseña de la base de datos desde la entrada estándar + No YubiKey detected, please ensure it's plugged in. + No se ha detectado YubiKey, asegúrese de que esté conectado. - 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 2ac5f25b26..93fca6455c 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,1352 +70,1760 @@ Kernel: %3 %4 - Build Type: %1 - + Version %1 - - - AccessControlDialog - KeePassXC HTTP Confirm Access + Build Type: %1 - Remember this decision - Gogoratu erabaki hau - - - 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 - - - AgentSettingsWidget - Enable SSH Agent (requires restart) + YubiKey - - - AutoType - Couldn't find an entry that matches the window title: + TouchID - Auto-Type - KeePassXC + None - Auto-Type + KeeShare (signed and unsigned sharing) - The Syntax of your Auto-Type statement is incorrect! + KeeShare (only signed sharing) - This Auto-Type command contains a very long delay. Do you really want to proceed? + KeeShare (only unsigned sharing) + + + AgentSettingsWidget - This Auto-Type command contains very slow key presses. Do you really want to proceed? + Enable SSH Agent (requires restart) - This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + Use OpenSSH for Windows instead of Pageant - AutoTypeAssociationsModel + ApplicationSettingsWidget - Window - Leihoa + Application Settings + Aplikazioaren ezarpenak - Sequence - Sekuentzia + General + Orokorra - Default sequence - Lehenetsitako sekuentzia + Security + Segurtasuna - - - AutoTypeMatchModel - Group - Taldea + Access error for config file %1 + - Title - Izenburua + Icon only + - Username - Erabiltzaile-izena + Text only + - Sequence - Sekuentzia + Text beside icon + - - - AutoTypeSelectDialog - Auto-Type - KeePassXC + Text under icon - Select entry to Auto-Type: + Follow style - BrowserAccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC-Browser Confirm Access - + Basic Settings + Oinarrizko ezarpenak - Remember this decision - Gogoratu erabaki hau + Startup + - Allow - Onartu + Start only a single instance of KeePassXC + - Deny - Debekatu + Remember last databases + Gogoratu azken datu-baseak - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + Remember last key files and security dongles - - - BrowserOptionDialog - Dialog - Elkarrizketa + Load previous databases on startup + - This is required for accessing your databases with KeePassXC-Browser + Minimize window at application startup - Enable KeepassXC browser integration + File Management - General - Orokorra + Safely save database files (may be incompatible with Dropbox, etc) + - Enable integration for these browsers: + Backup database file before saving - &Google Chrome - &Google Chrome + Automatically save after every change + Automatikoki gorde aldaketa oro eta gero - &Firefox - &Firefox + Automatically save on exit + Automatikoki gorde irtetean - &Chromium - &Chromium + Don't mark database as modified for non-data changes (e.g., expanding groups) + - &Vivaldi - &Vivaldi + Automatically reload the database when modified externally + - Show a &notification when credentials are requested - Credentials mean login data requested via browser extension + Entry Management - Re&quest to unlock the database if it is locked - + Use group icon on entry creation + Erabili taldearen ikonoa sarrera sortzean - Only entries with the same scheme (http://, https://, ...) are returned. - + Minimize when copying to clipboard + Minimizatu arbelera kopiatzean - &Match URL scheme (e.g., https://...) + Hide the entry preview panel - Only returns the best matches for a specific URL instead of all entries for the whole domain. - + General + Orokorra - &Return only best-matching credentials + Hide toolbar (icons) - Sort &matching credentials by title - Credentials mean login data requested via browser extension + Minimize instead of app exit - Sort matching credentials by &username - Credentials mean login data requested via browser extension - + Show a system tray icon + Erakutsi ikonoa sistema-erretiluan - &Disconnect all browsers + Dark system tray icon - Forget all remembered &permissions + Hide window to system tray when minimized - Advanced - Aurreratua + Language + Hizkuntza - Never &ask before accessing credentials - Credentials mean login data requested via browser extension + Auto-Type - Never ask before &updating credentials - Credentials mean login data requested via browser extension + Use entry title to match windows for global Auto-Type - Only the selected database has to be connected with a client. + Use entry URL to match windows for global Auto-Type - Searc&h in all opened databases for matching credentials - Credentials mean login data requested via browser extension + Always ask before performing Auto-Type - Automatically creating or updating string fields is not supported. + Global Auto-Type shortcut - &Return advanced string fields which start with "KPH: " + Auto-Type typing delay - Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - + ms + Milliseconds + ms - Update &native messaging manifest files at startup + Auto-Type start delay - Support a proxy application between KeePassXC and browser extension. + Check for updates at application startup - Use a &proxy application between KeePassXC and browser extension + Include pre-releases when checking for updates - Use a custom proxy location if you installed a proxy manually. + Movable toolbar - Use a &custom proxy location - Meant is the proxy for KeePassXC-Browser + Button style + + + ApplicationSettingsWidgetSecurity - Browse... - Button for opening file dialog - Arakatu... - - - <b>Warning:</b> The following options can be dangerous! + Timeouts - Executable Files (*.exe);;All Files (*.*) + Clear clipboard after - Executable Files (*) + sec + Seconds - Select custom proxy location + Lock databases after inactivity of - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + min - - - BrowserService - KeePassXC: New key association request + Forget TouchID after inactivity of - 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. + Convenience - Save and allow access + Lock databases when session is locked or lid is closed - KeePassXC: Overwrite existing key? - KeePassXC: Gainidatzi aurreko gakoa? + Forget TouchID when session is locked or lid is closed + - A shared encryption key with the name "%1" already exists. -Do you want to overwrite it? + Lock databases after minimizing the window - KeePassXC: Update Entry - KeePassXC: Eguneratu sarrera + Re-lock previously locked database after performing Auto-Type + - Do you want to update the information in %1 - %2? + Don't require password repeat when it is visible - KeePassXC: Database locked! + Don't hide passwords when editing them - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Don't use placeholder for empty password fields - KeePassXC: Settings not available! + Hide passwords in the entry preview panel - The active database does not contain a settings entry. + Hide entry notes by default - KeePassXC: No keys found - KeePassXC: Ez da gakorik aurkitu + Privacy + Pribatasuna - No shared encryption keys found in KeePassXC Settings. + Use DuckDuckGo as fallback for downloading website icons + + + AutoType - KeePassXC: Removed keys from database + Couldn't find an entry that matches the window title: - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - Removing stored permissions… - Gordetako baimenak kentzen... + Auto-Type - KeePassXC + - Abort + Auto-Type - KeePassXC: Removed permissions - KeePassXC: Kendutako baimenak + The Syntax of your Auto-Type statement is incorrect! + - - Successfully removed permissions from %n entry(s). - + + This Auto-Type command contains a very long delay. Do you really want to proceed? + - KeePassXC: No entry with permissions found! + This Auto-Type command contains very slow key presses. Do you really want to proceed? - The active database does not contain an entry with permissions. + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - ChangeMasterKeyWidget + AutoTypeAssociationsModel - Password - Pasahitza - - - Enter password: - Sartu pasahitza: - - - Repeat password: - Errepikatu pasahitza: + Window + Leihoa - &Key file - &Gako fitxategia + Sequence + Sekuentzia - Browse - Arakatu + Default sequence + Lehenetsitako sekuentzia + + + AutoTypeMatchModel - Create - Sortu + Group + Taldea - Cha&llenge Response - + Title + Izenburua - Refresh - Freskatu + Username + Erabiltzaile-izena - Key files - Gako fitxategiak + Sequence + Sekuentzia + + + AutoTypeSelectDialog - All files - Fitxategi guztiak + Auto-Type - KeePassXC + - Create Key File... - Sortu gako fitxategia... + Select entry to Auto-Type: + + + + BrowserAccessControlDialog - Unable to create Key File : - Ezin izan da gako fitxategia sortu : + KeePassXC-Browser Confirm Access + - Select a key file - Aukeratu gako fitxategia + Remember this decision + Gogoratu erabaki hau - Empty password - Hustu pasahitza + Allow + Onartu - Do you really want to use an empty string as password? - Kate hutsa pasahitz modura erabili? + Deny + Debekatu - Different passwords supplied. - Pasahitz desberdinak paratu dira. + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + BrowserEntrySaveDialog - Failed to set %1 as the Key file: -%2 + KeePassXC-Browser Save Entry - Legacy key file format + Ok - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - + Cancel + Utzi - Changing master key failed: no YubiKey inserted. + You have multiple databases open. +Please select the correct database for saving credentials. - CloneDialog + BrowserOptionDialog - Clone Options - Klonatu aukerak + Dialog + Elkarrizketa - Append ' - Clone' to title + This is required for accessing your databases with KeePassXC-Browser - Replace username and password with references + Enable KeepassXC browser integration - Copy history - Kopiatu historia + General + Orokorra - - - CsvImportWidget - Import CSV fields - Inportatu CSV eremuak + Enable integration for these browsers: + - filename - fitxategi izena + &Google Chrome + &Google Chrome - size, rows, columns - tamaina, errenkadak, zutabeak + &Firefox + &Firefox - Encoding - Kodetzea + &Chromium + &Chromium - Codec - + &Vivaldi + &Vivaldi - Text is qualified by + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension - Fields are separated by + Re&quest to unlock the database if it is locked - Comments start with + Only entries with the same scheme (http://, https://, ...) are returned. - First record has field names + &Match URL scheme (e.g., https://...) - Number of headers line to discard + Only returns the best matches for a specific URL instead of all entries for the whole domain. - Consider '\' an escape character + &Return only best-matching credentials - Preview - Aurrebista + Sort &matching credentials by title + Credentials mean login data requested via browser extension + - Column layout + Sort matching credentials by &username + Credentials mean login data requested via browser extension - Not present in CSV file + Advanced + Aurreratua + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension - Empty fieldname + Never ask before &updating credentials + Credentials mean login data requested via browser extension - column - zutabea + Only the selected database has to be connected with a client. + - Imported from CSV file + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension - Original data: - Jatorrizko datuak: + Automatically creating or updating string fields is not supported. + - Error(s) detected in CSV file ! - Errorea(k) detektatu d(ir)a CSV fitxategian ! + &Return advanced string fields which start with "KPH: " + - more messages skipped] + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Error - Errorea + Update &native messaging manifest files at startup + - CSV import: writer has errors: - + Support a proxy application between KeePassXC and browser extension. - - - CsvImportWizard - Error - Errorea + Use a &proxy application between KeePassXC and browser extension + - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu + Use a custom proxy location if you installed a proxy manually. + - - - CsvParserModel - - %n byte(s), - + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + - - %n row(s), - + + Browse... + Button for opening file dialog + Arakatu... - - %n column(s) - + + <b>Warning:</b> The following options can be dangerous! + - - - DatabaseOpenWidget - Enter master key - Sartu gako nagusia + Select custom proxy location + - Key File: - Gako-fitxategia: + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + - Password: - Pasahitza: + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + - Browse - Arakatu + &Tor Browser + - Refresh - Freskatu + <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: + - Challenge Response: + Executable Files - Unable to open the database. - Ezin izan da datu-basea ireki. + All Files + - Can't open key file - Ezin da gako fitxategia ireki + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + BrowserService - Legacy key file format + KeePassXC: New key association request - You are using a legacy key file format which may become -unsupported in the future. + You have received an association request for the above key. -Please consider generating a new key file. +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. - Don't show this warning again + Save and allow access - All files - Fitxategi guztiak + KeePassXC: Overwrite existing key? + KeePassXC: Gainidatzi aurreko gakoa? - Key files - Gako fitxategiak + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + - Select key file - Aukeratu gako-fitxategia + KeePassXC: Update Entry + KeePassXC: Eguneratu sarrera - - - DatabaseRepairWidget - Repair database - Konpondu datu-basea + Do you want to update the information in %1 - %2? + - Error - Errorea + Abort + - Can't open key file - Ezin da gako fitxategia ireki + Converting attributes to custom data… + - Unable to open the database. - Ezin izan da datu-basea ireki. + KeePassXC: Converted KeePassHTTP attributes + - Database opened fine. Nothing to do. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + Successfully moved %n keys to custom data. + + - Success + KeePassXC: No entry with KeePassHTTP attributes found! - The database has been successfully repaired -You can now save it. - Datu-basea era egokian konpondu da -Gorde daiteke orain. + The active database does not contain an entry with KeePassHTTP attributes. + - Unable to repair the database. - Ezin izan da datu-basea konpondu. + 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. + - DatabaseSettingsWidget + CloneDialog - General - Orokorra + Clone Options + Klonatu aukerak - Encryption - Zifraketa + Append ' - Clone' to title + - Number of rounds too high - Key transformation rounds + Replace username and password with references - 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! - + Copy history + Kopiatu historia + + + CsvImportWidget - Understood, keep number - + Import CSV fields + Inportatu CSV eremuak - Cancel - Utzi + filename + fitxategi izena - Number of rounds too low - Key transformation rounds - + size, rows, columns + tamaina, errenkadak, zutabeak - 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! + Encoding + Kodetzea + + + Codec - KDF unchanged + Text is qualified by - Failed to transform key with new KDF parameters; KDF unchanged. + Fields are separated by - - MiB - Abbreviation for Mebibytes (KDF settings) - + + Comments start with + - - thread(s) - Threads for parallel execution (KDF settings) - + + First record has field names + - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Zifraketa algoritmoa + Number of headers line to discard + - AES: 256 Bit (default) - AES: 256 Bit (lehenetsia) + Consider '\' an escape character + - Twofish: 256 Bit - Twofish: 256 Bit + Preview + Aurrebista - Key Derivation Function: + Column layout - Transform rounds: + Not present in CSV file - Benchmark 1-second delay + Imported from CSV file - Memory Usage: - Memoria erabilera: + Original data: + Jatorrizko datuak: - Parallelism: - Paralelismoa: + Error + Errorea - - - DatabaseSettingsWidgetGeneral - Database Meta Data + Empty fieldname %1 - Database name: - Datu-basearen izena: + column %1 + - Database description: - Datu-basearen deskribapena: + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + - Default username: - Lehenetsitako erabiltzaile-izena: + CSV import: writer has errors: +%1 + + + + + CsvParserModel + + %n column(s) + zutabe %n%n zutabe - History Settings + %1, %2, %3 + file info: bytes, rows, columns + + %n byte(s) + + + + %n row(s) + + + + + Database - Max. history items: + Root + Root group name - Max. history size: + File %1 does not exist. - MiB - MiB + Unable to open file %1. + - Use recycle bin + Error while reading the database: %1 - Additional Database Settings + Could not save, database has no file name. - Enable &compression (recommended) + File cannot be written as it is opened in read-only mode. - DatabaseTabWidget + DatabaseOpenDialog - Root - Root group + Unlock Database - KeePassXC + + + DatabaseOpenWidget - KeePass 2 Database - KeePass 2 datu-basea + Enter master key + Sartu gako nagusia - All files - Fitxategi guztiak + Key File: + Gako-fitxategia: - Open database - Ireki datu-basea + Password: + Pasahitza: - File not found! - Fitxategia ez da aurkitu! + Browse + Arakatu - Unable to open the database. - Ezin izan da datu-basea ireki. + Refresh + Freskatu - File opened in read only mode. + Challenge Response: - Open CSV file - Ireki CSV fitxategia - - - CSV file - CSV fitxategia + Legacy key file format + - All files (*) - Fitxategi guztiak (*) + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + - Merge database - Bateratu datu-basea + Don't show this warning again + - Open KeePass 1 database - Ireki KeePass 1 datu-basea + All files + Fitxategi guztiak - KeePass 1 database - KeePass 1 datu-basea + Key files + Gako fitxategiak - Close? - Itxi? + Select key file + Aukeratu gako-fitxategia - "%1" is in edit mode. -Discard changes and close anyway? + TouchID for quick unlock - Save changes? - Aldaketak gorde? - - - "%1" was modified. -Save changes? + Unable to open the database: +%1 - Writing the database failed. + Can't open key file: +%1 + + + DatabaseSettingWidgetMetaData Passwords Pasahitzak + + + DatabaseSettingsDialog - Save database as - Gorde datu-basea honela + Advanced Settings + - Export database to CSV file - Esportatu datu-basea CSV fitxategira + General + Orokorra - Writing the CSV file failed. - + Security + Segurtasuna - New database - Datu-base berria + Master Key + - locked + Encryption Settings - Lock database + Browser Integration + + + DatabaseSettingsWidgetBrowser - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + KeePassXC-Browser settings - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. + &Disconnect all browsers - Disable safe saves? + Forg&et all site-specific settings on entries - 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? + Move KeePassHTTP attributes to KeePassXC-Browser &custom data - - - DatabaseWidget - Searching... - Bilatzen... + Stored keys + - Change master key - Aldatu gako nagusia + Remove + Kendu - Delete entry? - Ezabatu sarrera? + Delete the selected key? + - Do you really want to delete the entry "%1" for good? + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. - Delete entries? - Ezabatu sarrerak? + Key + - Do you really want to delete %1 entries for good? + Value - Move entry to recycle bin? + Enable Browser Integration to access these settings. - Do you really want to move entry "%1" to the recycle bin? + Disconnect all browsers - Move entries to recycle bin? + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. - - Do you really want to move %n entry(s) to the recycle bin? - - - Execute command? - Exekutatu komandoa? + KeePassXC: No keys found + KeePassXC: Ez da gakorik aurkitu - Do you really want to execute the following command?<br><br>%1<br> + No shared encryption keys found in KeePassXC settings. - Remember my choice + KeePassXC: Removed keys from database - - Delete group? - Ezabatu taldea? + + Successfully removed %n encryption key(s) from KeePassXC settings. + - Do you really want to delete the group "%1" for good? + Forget all site-specific settings on entries - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + - No current database. - + Removing stored permissions… + Gordetako baimenak kentzen... - No source database, nothing to do. + Abort - Search Results (%1) - Bilaketa emaitzak (%1) - - - No Results - Emaitzarik ez + KeePassXC: Removed permissions + KeePassXC: Kendutako baimenak + + + Successfully removed permissions from %n entry(s). + - File has changed + KeePassXC: No entry with permissions found! - The database file has changed. Do you want to load the changes? + The active database does not contain an entry with permissions. - Merge Request + Move KeePassHTTP attributes to custom data - The database file has changed and you have unsaved changes. -Do you want to merge your changes? + 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 - Could not open the new database file while attempting to autoreload this database. - + Encryption Algorithm: + Zifraketa algoritmoa - Empty recycle bin? - + AES: 256 Bit (default) + AES: 256 Bit (lehenetsia) - Are you sure you want to permanently delete everything from your recycle bin? + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: - - - DetailsWidget - Generate TOTP Token + Transform rounds: - Close - Itxi + Benchmark 1-second delay + - General - Orokorra + Memory Usage: + Memoria erabilera: - Password - Pasahitza + Parallelism: + Paralelismoa: - URL - URL + Decryption Time: + - Expiration - Iraungitzea + ?? s + - Username - Erabiltzaile-izena + Change + - Autotype + 100 ms - Searching - Bilatzen + 5 s + - Attributes + Higher values offer more protection, but opening the database will take longer. - Attachments + Database format: - Notes - Oharrak + This is only important if you need to use your database with other programs. + - Window - Leihoa + KDBX 4.0 (recommended) + - Sequence - Sekuentzia + KDBX 3.1 + - Search - Bilatu + unchanged + Database decryption time is unchanged + - Clear - Garbitu + Number of rounds too high + Key transformation rounds + - Never - Inoiz + 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! + - [PROTECTED] - [BABESTUA] + Understood, keep number + - Disabled - Ezgaitua + Cancel + Utzi - Enabled - Gaitua + Number of rounds too low + Key transformation rounds + - - - EditEntryWidget - Entry - Sarrera + 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! + - Advanced - Aurreratua + KDF unchanged + - Icon - Ikonoa + 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 - Auto-Type + Database Meta Data - Properties - Propietateak + Database name: + Datu-basearen izena: - History - Historia + Database description: + Datu-basearen deskribapena: - SSH Agent + Default username: + Lehenetsitako erabiltzaile-izena: + + + History Settings - n/a + Max. history items: - (encrypted) - (zifratua) + Max. history size: + - Select private key + MiB + MiB + + + Use recycle bin - File too large to be a private key + Additional Database Settings - Failed to open private key + Enable &compression (recommended) + + + DatabaseSettingsWidgetKeeShare - Entry history - Sarrera historia + Sharing + - Add entry - Gehitu sarrera + Breadcrumb + - Edit entry - Editatu sarrera + Type + - Different passwords supplied. - Pasahitz desberdinak paratu dira. + Path + - New attribute - Gehitu ezaugarria + Last Signer + - Confirm Remove - Baieztatu kentzea + Certificates + - Are you sure you want to remove this attribute? + > + Breadcrumb separator + + + DatabaseSettingsWidgetMasterKey - [PROTECTED] - [BABESTUA] + Add additional protection... + - Press reveal to view or edit + No encryption key added - Tomorrow - Bihar + You must add at least one encryption key to secure your database! + - - %n week(s) - + + No password set + - - %n month(s) - + + 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? + - 1 year - urte 1 + Unknown error + - Apply generated password? + Failed to change master key + + + DatabaseSettingsWidgetMetaDataSimple - Do you want to apply the generated password to this entry? + Database Name: - Entry updated successfully. + Description: - EditEntryWidgetAdvanced + DatabaseTabWidget - Additional attributes - + KeePass 2 Database + KeePass 2 datu-basea - Add - Gehitu + All files + Fitxategi guztiak - Remove - Kendu + Open database + Ireki datu-basea - Edit Name - Izena editatu + CSV file + CSV fitxategia - Protect - Babestu + Merge database + Bateratu datu-basea - Reveal - + Open KeePass 1 database + Ireki KeePass 1 datu-basea - Attachments - + KeePass 1 database + KeePass 1 datu-basea - Foreground Color: + Export database to CSV file + Esportatu datu-basea CSV fitxategira + + + Writing the CSV file failed. - Background Color: + Database creation error - - - EditEntryWidgetAutoType - Enable Auto-Type for this entry + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. - Inherit default Auto-Type sequence from the &group + The database file does not exist or is not accessible. - &Use custom Auto-Type sequence: + Select CSV file - Window Associations + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + + + %1 [Read-only] + Database tab name modifier + + + + + DatabaseWidget + + Searching... + Bilatzen... + + + 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? + Ziur zaude sarrera %n zakarrontzira mugitu nahi duzula?Ziur zaude %n sarrera zakarrontzira mugitu nahi dituzula? + + + Execute command? + Exekutatu komandoa? + + + 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) + Bilaketa emaitzak (%1) + + + No Results + Emaitzarik ez + + + 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? + Aldaketak gorde? + + + 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 + Pasahitzak + + + Save database as + Gorde datu-basea honela + + + 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. + + + + + EditEntryWidget + + Entry + Sarrera + + + Advanced + Aurreratua + + + Icon + Ikonoa + + + Auto-Type + + + + Properties + Propietateak + + + History + Historia + + + SSH Agent + + + + n/a + + + + (encrypted) + (zifratua) + + + Select private key + + + + File too large to be a private key + + + + Failed to open private key + + + + Entry history + Sarrera historia + + + Add entry + Gehitu sarrera + + + Edit entry + Editatu sarrera + + + Different passwords supplied. + Pasahitz desberdinak paratu dira. + + + New attribute + Gehitu ezaugarria + + + Are you sure you want to remove this attribute? + + + + Tomorrow + Bihar + + + %n week(s) + aste %n%n aste + + + %n month(s) + hilabete %n%n hilabete + + + 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 + Gehitu + + + Remove + Kendu + + + Edit Name + Izena editatu + + + Protect + Babestu + + + 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 @@ -1429,2187 +1831,3123 @@ Do you want to merge your changes? + - - - - + - + - + + + Window title: + Leihoaren izenburua: + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + Erakutsi + + + Restore + Berrezarri + + + Delete + Ezabatu + + + Delete all + Ezabatu guztiak + + + + EditEntryWidgetMain + + URL: + URL: + + + Password: + Pasahitza: + + + Repeat: + Errepikatu: + + + Title: + Izenburua: + + + Notes + Oharrak + + + Presets + + + + Toggle the checkbox to reveal the notes section. + + + + Username: + Erabitzaile-izena: + + + Expires + Iraungitzea + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + segundu + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + Gako publikoa + + + Add key to agent when database is opened/unlocked + + + + Comment + Iruzkina + + + Decrypt + Deszifratu + + + n/a + + + + Copy to clipboard + Kopiatu arbelera + + + Private key + Gako pribatua + + + External file + + + + Browse... + Button for opening file dialog + Arakatu... + + + Attachment + Eranskina + + + Add to agent + + + + Remove from agent + + + + Require user confirmation when this key is used + + + + + EditGroupWidget + + Group + Taldea + + + Icon + Ikonoa + + + Properties + Propietateak + + + Add group + Gehitu taldea + + + Edit group + Editatu taldea + + + Enable + Gaitu + + + Disable + Ezgaitu + + + Inherit from parent group (%1) + + + + + 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 + + Name + Izena + + + Notes + Oharrak + + + Expires + Iraungitzea + + + Search + Bilatu + + + 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 + Gehitu ikono pertsonalizatua + + + Delete custom icon + Ezabatu ikono pertsonalizatua + + + Download favicon + Deskargatu favicon-a + + + Unable to fetch favicon. + Ezin izan da favicon-a atzitu. + + + Images + Irudiak + + + All files + Fitxategi guztiak + + + Custom icon already exists + + + + Confirm Delete + Baieztatu ezabaketa + + + 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: + Noiz sortua: + + + Modified: + Noiz aldatua: + + + Accessed: + Noiz eskuratua: + + + Uuid: + Uuid: + + + Plugin Data + + + + Remove + Kendu + + + 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 + Izena + + + Size + Tamainua + + + + EntryAttachmentsWidget + + Form + + + + Add + Gehitu + + + Remove + Kendu + + + Open + Ireki + + + Save + Gorde + + + Select files + Aukeratu fitxategiak + + + Are you sure you want to remove %n attachment(s)? + Ziur zaude eranskin %n kendu nahi duzula?Ziur zaude %n eranskin kendu nahi dituzula? + + + Save attachments + Gorde eranskinak + + + 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 + Izena + + + + EntryHistoryModel + + Last modified + Azken aldaketa + + + Title + Izenburua + + + Username + Erabiltzaile-izena + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + + + + Group + Taldea + + + Title + Izenburua + + + Username + Erabiltzaile-izena + + + URL + URL + + + Never + Inoiz + + + Password + Pasahitza + + + Notes + Oharrak + + + Expires + Iraungitzea + + + Created + + + + Modified + + + + Accessed + + + + 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 + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + + + + + Group + + Recycle Bin + Zakarrontzia + + + [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 + &Itxi + + + Close message + Itxi mezua + + + + Kdbx3Reader + + Unable to calculate master key + Ezin izan da gako nagusia kalkulatu + + + 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 + Ezin izan da gako nagusia kalkulatu + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + Ezin izan da gako nagusia kalkulatu - Window title: - Leihoaren titulua: + Invalid header checksum size + - Use a specific sequence for this association: + 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 - EditEntryWidgetHistory + Kdbx4Writer - Show - Erakutsi + Invalid symmetric cipher algorithm. + - Restore - Berrezarri + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + - Delete - Ezabatu + Unable to calculate master key + Ezin izan da gako nagusia kalkulatu - Delete all - Ezabatu guztiak + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + - EditEntryWidgetMain + KdbxReader - URL: - URL: + Unsupported cipher + - Password: - Pasahitza: + Invalid compression flags length + - Repeat: - Errepikatu: + Unsupported compression algorithm + - Title: - Izenburua: + Invalid master seed size + - Notes - Oharrak + Invalid transform seed size + - Presets + Invalid transform rounds size - Toggle the checkbox to reveal the notes section. + Invalid start bytes size - Username: - Erabitzaile-izena: + Invalid random stream id size + - Expires - Iraungitzea + Invalid inner random stream cipher + + + + Not a KeePass database. + Ez da KeePass datu-basea. + + + 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. + - EditEntryWidgetSSHAgent + KdbxXmlReader - Form + XML parsing failure: %1 - Remove key from agent after + No root group - seconds - segundu + Missing icon uuid or data + - Fingerprint + Missing custom data key or value - Remove key from agent when database is closed/locked + 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 - Public key - Gako publikoa + Duplicate custom attribute found + - Add key to agent when database is opened/unlocked + Entry string key or value missing - Comment - Iruzkina + Duplicate attachment found + - Decrypt - Deszifratu + Entry binary key or value missing + - n/a + Auto-type association window or sequence missing - Copy to clipboard - Kopiatu arbelera + Invalid bool value + - Private key - Gako pribatua + Invalid date time value + - External file + Invalid color value - Browse... - Button for opening file dialog - Arakatu... + Invalid color rgb part + - Attachment - Eranskina + Invalid number value + - Add to agent + Invalid uuid value - Remove from agent + Unable to decompress binary + Translator meant is a binary data inside an entry - Require user confirmation when this key is used + XML error: +%1 +Line %2, column %3 - EditGroupWidget - - Group - Taldea - - - Icon - Ikonoa - + KeePass1OpenWidget - Properties - Propietateak + Import KeePass1 database + Inportatu Keepass1 datu-basea - Add group - Gehitu taldea + Unable to open the database. + Ezin izan da datu-basea ireki. + + + KeePass1Reader - Edit group - Editatu taldea + Unable to read keyfile. + - Enable - Gaitu + Not a KeePass database. + Ez da KeePass datu-basea. - Disable - Ezgaitu + Unsupported encryption algorithm. + - Inherit from parent group (%1) + Unsupported KeePass database version. - - - EditGroupWidgetMain - Name - Izena + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + - Notes - Oharrak + Invalid number of groups + - Expires - Iraungitzea + Invalid number of entries + - Search - Bilatu + Invalid content hash size + - Auto-Type + Invalid transform seed size - &Use default Auto-Type sequence of parent group + Invalid number of transform rounds - Set default Auto-Type se&quence + Unable to construct group tree - - - EditWidgetIcons - &Use default icon + Root - Use custo&m icon - + Unable to calculate master key + Ezin izan da gako nagusia kalkulatu - Add custom icon - Gehitu ikono pertsonalizatua + Wrong key or database file is corrupt. + - Delete custom icon - Ezabatu ikono pertsonalizatua + Key transformation failed + - Download favicon - Deskargatu favicon-a + Invalid group field type number + - Unable to fetch favicon. - Ezin izan da favicon-a atzitu. + Invalid group field size + - Hint: You can enable Google as a fallback under Tools>Settings>Security + Read group field data doesn't match size - Images - Irudiak + Incorrect group id field size + - All files - Fitxategi guztiak + Incorrect group creation time field size + - Select Image - Aukeratu irudia + Incorrect group modification time field size + - Can't read icon + Incorrect group access time field size - Custom icon already exists + Incorrect group expiry time field size - Confirm Delete - Baieztatu ezabaketa + Incorrect group icon field size + - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Incorrect group level field size - - - EditWidgetProperties - Created: - Noiz sortua: + Invalid group field type + - Modified: - Noiz aldatua: + Missing group id or level + - Accessed: - Noiz eskuratua: + Missing entry field type number + - Uuid: - Uuid: + Invalid entry field size + - Plugin Data + Read entry field data doesn't match size - Remove - Kendu + Invalid entry uuid field size + - Delete plugin data? + Invalid entry group id field size - Do you really want to delete the selected plugin data? -This may cause the affected plugins to malfunction. + Invalid entry icon field size - Key + Invalid entry creation time field size - Value + Invalid entry modification time field size - - - Entry - - Clone - Suffix added to cloned entries - - Klonatu + Invalid entry expiry time field size + - - - EntryAttachmentsModel - Name - Izena + Invalid entry field type + - Size - Tamainua + unable to seek to content position + - EntryAttachmentsWidget + KeeShare - Form + Disabled share - Add - Gehitu + Import from + - Remove - Kendu + Export to + - Open - Ireki + Synchronize with + + + + KeyComponentWidget - Save - Gorde + Key Component + - Select files - Aukeratu fitxategiak - - - Are you sure you want to remove %n attachment(s)? - + Key Component Description + - Confirm Remove - Baieztatu kentzea + Cancel + Utzi - Save attachments - Gorde eranskinak + Key Component set, click to change or remove + - Unable to create directory: -%1 + Add %1 + Add a key component - Are you sure you want to overwrite the existing file "%1" with the attachment? + Change %1 + Change a key component - Confirm overwrite + Remove %1 + Remove a key component - Unable to save attachments: -%1 + %1 set, click to change or remove + Change or remove a key component + + + KeyFileEditWidget - Unable to open attachment: -%1 - + Browse + Arakatu - Unable to open attachments: -%1 - + Generate + Sortu - Unable to open files: -%1 + Key File - - - EntryAttributesModel - Name - Izena + <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> + - - - EntryHistoryModel - Last modified - Azken aldaketa + Legacy key file format + - Title - Izenburua + 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. + - Username - Erabiltzaile-izena + Error loading the key file '%1' +Message: %2 + - URL - URL + Key files + Gako fitxategiak - - - EntryModel - Ref: - Reference abbreviation - + All files + Fitxategi guztiak - Group - Taldea + Create Key File... + Sortu gako fitxategia... - Title - Izenburua + Error creating key file + - Username - Erabiltzaile-izena + Unable to create key file: %1 + - URL - URL + Select a key file + Aukeratu gako fitxategia + + + MainWindow - Never - Inoiz + &Database + &Datu-basea - Password - Pasahitza + &Recent databases + - Notes - Oharrak + &Help + &Laguntza - Expires - Iraungitzea + E&ntries + Sa&rrerak - Created - + &Groups + &Taldeak - Modified - + &Tools + &Tresnak - Accessed - + &Quit + &Irten - Attachments - + &About + &Honi buruz - - - EntryView - Customize View + &Open database... - Hide Usernames - + &Save database + &Gorde datubasea - Hide Passwords - + &Close database + &Itxi datubasea - Fit to window - + &Delete entry + &Ezabatu sarrera - Fit to contents - + &Edit group + &Editatu taldea - Reset to defaults - + &Delete group + &Ezabatu taldea - Attachments (icon) + Sa&ve database as... - - - Group - Recycle Bin - Zakarrontzia + Database settings + Datu-basearen ezarpenak - - - HostInstaller - KeePassXC: Cannot save file! - + &Clone entry + &Klonatu sarrera - Cannot save the native messaging script file. - + Copy &username + Kopiatu &erabiltzailea - - - HttpPasswordGeneratorWidget - Length: - Luzeera + Copy username to clipboard + Kopiatu erabiltzaile-izena arbelera - Character Types - Karaktere motak + Copy password to clipboard + Kopiatu pasahitza arbelera - Upper Case Letters - Letra larriak + &Settings + &Ezarpenak - A-Z - A-Z + Password Generator + Pasahitz sortzailea - Lower Case Letters - Letra xeheak + &Lock databases + - a-z - a-z + &Title + &Izenburua - Numbers - Zenbakiak + Copy title to clipboard + - 0-9 - 0-9 + &URL + &URL - Special Characters - Karaktere bereziak + Copy URL to clipboard + - /*_& ... - /*_& ... + &Notes + &Oharrak - Exclude look-alike characters + Copy notes to clipboard - Ensure that the password contains characters from every group + &Export to CSV file... - Extended ASCII + Set up TOTP... - - - KMessageWidget - &Close - &Itxi + Copy &TOTP + - Close message - Itxi mezua + E&mpty recycle bin + - - - Kdbx3Reader - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu + Clear history + Garbitu historia - Unable to issue challenge-response. + Access error for config file %1 - Wrong key or database file is corrupt. - + Settings + Ezarpenak - - - Kdbx3Writer - Unable to issue challenge-response. + Toggle window - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu + Quit KeePassXC + Irten KeePassXC-tik - - - Kdbx4Reader - missing database headers + Please touch the button on your YubiKey! - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu + 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. + - Invalid header checksum size + &Donate - Header SHA256 mismatch + Report a &bug - Wrong key or database file is corrupt. (HMAC mismatch) + 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. - Unknown cipher + &Import - Invalid header id size + Copy att&ribute... - Invalid header field length + TOTP... - Invalid header data length + &New database... - Failed to open buffer for KDF parameters in header + Create a new database - Unsupported key derivation function (KDF) or invalid parameters + &Merge from database... - Legacy header fields found in KDBX4 file. + Merge from another KDBX database - Invalid inner header id size + &New entry - Invalid inner header field length + Add a new entry - Invalid inner header binary size + &Edit entry - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data + View or edit entry - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data + &New group - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data + Add a new group - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data + Change master &key... - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data + &Database settings... - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data + Copy &password - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data + Perform &Auto-Type - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data + Open &URL - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data + KeePass 1 database... - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data + Import a KeePass 1 database - Invalid variant map entry type - Translation: variant map = data structure for storing meta data + CSV file... - Invalid variant map field type size - Translation: variant map = data structure for storing meta data + Import a CSV file - - - Kdbx4Writer - Invalid symmetric cipher algorithm. + Show TOTP... - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher + Show TOTP QR Code... - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu + Check for Updates... + - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data + Share entry - - - KdbxReader - Invalid cipher uuid length + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. - Unsupported cipher + Check for updates on startup? - Invalid compression flags length + Would you like KeePassXC to check for updates on startup? - Unsupported compression algorithm + You can always check for updates manually from the application menu. + + + Merger - Invalid master seed size + Creating missing %1 [%2] - Invalid transform seed size + Relocating %1 [%2] - Invalid transform rounds size + Overwriting %1 [%2] - Invalid start bytes size + older entry merged from database "%1" - Invalid random stream id size + Adding backup for older target %1 [%2] - Invalid inner random stream cipher + Adding backup for older source %1 [%2] - Not a KeePass database. - Ez da KeePass datu-basea. + Reapplying older target entry on top of newer source %1 [%2] + - 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. + Reapplying older source entry on top of newer target %1 [%2] - Unsupported KeePass 2 database version. + Synchronizing from newer source %1 [%2] - - - KdbxXmlReader - XML parsing failure: %1 + Synchronizing from older source %1 [%2] - No root group + Deleting child %1 [%2] - Missing icon uuid or data + Deleting orphan %1 [%2] - Missing custom data key or value + Changed deleted objects - Multiple group elements + Adding missing icon %1 + + + NewDatabaseWizard - Null group uuid + Create a new KeePassXC database... - Invalid group icon number + Root + Root group + + + NewDatabaseWizardPage - Invalid EnableAutoType value + WizardPage - Invalid EnableSearching value + En&cryption Settings - No group uuid found + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Null DeleteObject uuid + Advanced Settings - Missing DeletedObject uuid or time + Simple Settings + + + NewDatabaseWizardPageEncryption - Null entry uuid + Encryption Settings - Invalid entry icon number + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - History element in history entry + Database Master Key - No entry uuid found + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - History element with different uuid + General Database Information - Unable to decrypt entry string + Please fill in the display name and an optional description for your new database: + + + OpenSSHKey - Duplicate custom attribute found + Invalid key file, expecting an OpenSSH key - Entry string key or value missing + PEM boundary mismatch - Duplicate attachment found + Base64 decoding failed - Entry binary key or value missing + Key file way too small. - Auto-type association window or sequence missing + Key file magic header id invalid - Invalid bool value + Found zero keys - Invalid date time value + Failed to read public key. - Invalid color value + Corrupted key file, reading private key failed - Invalid color rgb part + No private key payload to decrypt - Invalid number value + Trying to run KDF without cipher - Invalid uuid value + Passphrase is required to decrypt this key - Unable to decompress binary - Translator meant is a binary data inside an entry + Key derivation failed, key file corrupted? - - - KeePass1OpenWidget - Import KeePass1 database - Inportatu Keepass1 datu-basea + Decryption failed, wrong passphrase? + - Unable to open the database. - Ezin izan da datu-basea ireki. + Unexpected EOF while reading public key + - - - KeePass1Reader - Unable to read keyfile. + Unexpected EOF while reading private key - Not a KeePass database. - Ez da KeePass datu-basea. + Can't write public key as it is empty + - Unsupported encryption algorithm. + Unexpected EOF when writing public key - Unsupported KeePass database version. + Can't write private key as it is empty - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher + Unexpected EOF when writing private key - Invalid number of groups + Unsupported key type: %1 - Invalid number of entries + Unknown cipher: %1 - Invalid content hash size + Cipher IV is too short for MD5 kdf - Invalid transform seed size + Unknown KDF: %1 - Invalid number of transform rounds + Unknown key type: %1 + + + PasswordEditWidget - Unable to construct group tree - + Enter password: + Sartu pasahitza: - Root + Confirm password: - Unable to calculate master key - Ezin izan da gako nagusia kalkulatu + Password + Pasahitza - Wrong key or database file is corrupt. + <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> - Key transformation failed + Password cannot be empty. - Invalid group field type number + Passwords do not match. - Invalid group field size + Generate master password + + + PasswordGeneratorWidget - Read group field data doesn't match size + %p% - Incorrect group id field size - + Password: + Pasahitza: - Incorrect group creation time field size - + strength + Password strength + sendotasuna - Incorrect group modification time field size - + entropy + entropia - Incorrect group access time field size - + Password + Pasahitza - Incorrect group expiry time field size - + Character Types + Karaktere motak - Incorrect group icon field size - + Upper Case Letters + Letra larriak - Incorrect group level field size - + Lower Case Letters + Letra xeheak - Invalid group field type - + Numbers + Zenbakiak - Missing group id or level - + Special Characters + Karaktere bereziak - Missing entry field type number + Extended ASCII - Invalid entry field size + Exclude look-alike characters - Read entry field data doesn't match size + Pick characters from every group - Invalid entry uuid field size - + &Length: + &Luzeera: - Invalid entry group id field size + Passphrase - Invalid entry icon field size - + Wordlist: + Hitz zerrenda: - Invalid entry creation time field size - + Word Separator: + Hitz banatzailea: - Invalid entry modification time field size - + Copy + Kopiatu - Invalid entry expiry time field size - + Accept + Onartu - Invalid entry field type - + Close + Itxi - - - KeePass2 - AES: 256-bit - AES: 256-bit + Entropy: %1 bit + Entropia: %1 bit - Twofish: 256-bit - Twofish: 256-bit + Password Quality: %1 + Pasahitzaren kalitatea: %1 - ChaCha20: 256-bit - ChaCha20: 256-bit + Poor + Password quality + Txarra - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Weak + Password quality + Ahula - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Good + Password quality + Ona - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – gomendatua) + Excellent + Password quality + Bikaina - - - Main - Existing single-instance lock file is invalid. Launching new instance. + ExtendedASCII - The lock file could not be created. Single-instance mode disabled. + Switch to advanced mode - Another instance of KeePassXC is already running. - + Advanced + Aurreratua - Fatal error while testing the cryptographic functions. + Upper Case Letters A to F - KeePassXC - Error - KeePassXC - Errorea + A-Z + A-Z - - - MainWindow - &Database - &Datu-basea + Lower Case Letters A to F + + + + a-z + a-z + + + 0-9 + 0-9 - &Recent databases + Braces - Import - Inportatu + {[( + - &Help - &Laguntza + Punctuation + - E&ntries - Sa&rrerak + .,:; + - Copy att&ribute to clipboard + Quotes - Time-based one-time password + " ' - &Groups - &Taldeak + Math + - &Tools - &Tresnak + <*+!?= + - &Quit - &Irten + Dashes + - &About - &Honi buruz + \_|-/ + - &Open database... + Logograms - &Save database - &Gorde datubasea + #$%&&@^`~ + - &Close database - &Itxi datubasea + Switch to simple mode + - &New database - &Datu-base berria + Simple + - Merge from KeePassX database + Character set to exclude from generated password - &Add new entry - &Gehitu sarrera berria + Do not include: + - &View/Edit entry - &Ikusi/Editatu sarrera + Add non-hex letters to "do not include" list + - &Delete entry - &Ezabatu sarrera + Hex + - &Add new group - &Gehitu talde berria + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - &Edit group - &Editatu taldea + Word Co&unt: + - &Delete group - &Ezabatu taldea + Regenerate + + + + QApplication - Sa&ve database as... + KeeShare + + + QFileDialog - Change &master key... + Select + + + QMessageBox - &Database settings - &Datu-basearen ezarpenak + Overwrite + - Database settings - Datu-basearen ezarpenak + Delete + Ezabatu - &Clone entry - &Klonatu sarrera + Move + - &Find - &Bilatu + Empty + - Copy &username - Kopiatu &erabiltzailea + Remove + Kendu - Copy username to clipboard - Kopiatu erabiltzaile-izena arbelera + Skip + - Cop&y password - Kopiatu pasahitza + Disable + Ezgaitu - Copy password to clipboard - Kopiatu pasahitza arbelera + Merge + + + + QObject - &Settings - &Ezarpenak + Database not opened + - Password Generator - Pasahitz sortzailea + Database hash not available + - &Perform Auto-Type + Client public key not received - &Open URL + Cannot decrypt message - &Lock databases + Action cancelled or denied - &Title - &Izenburua + KeePassXC association failed, try again + - Copy title to clipboard + Encryption key is not recognized - &URL - &URL + Incorrect action + - Copy URL to clipboard + Empty message received - &Notes - &Oharrak + No URL provided + - Copy notes to clipboard + No logins found - &Export to CSV file... + Unknown error - Import KeePass 1 database... + Add a new entry to a database. - Import CSV file... + Path of the database. - Re&pair database... + Key file of the database. - Show TOTP + path - Set up TOTP... + Username for the entry. - Copy &TOTP - + username + erabiltzaile-izena - E&mpty recycle bin + URL for the entry. - Clear history - Garbitu historia + URL + URL - Access error for config file %1 + Prompt for the entry's password. - <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> + Generate a password for the entry. - read-only + Length for the generated password. - Settings - Ezarpenak + length + luzeera - Toggle window + Path of the entry to add. - Quit KeePassXC - Irten KeePassXC-tik + Copy an entry's password to the clipboard. + - KeePass 2 Database - KeePass 2 datu-basea + Path of the entry to clip. + clip = copy to clipboard + - All files - Fitxategi guztiak + Timeout in seconds before clearing the clipboard. + - Open database - Ireki datu-basea + Edit an entry. + Editatu sarrera bat. - Save repaired database - + Title for the entry. + Sarreraren izenburua. - Writing the database failed. - + title + Izenburua - Please touch the button on your YubiKey! + Path of the entry to edit. - 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. + Estimate the entropy of a password. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key + Password for which to estimate the entropy. - PEM boundary mismatch + Perform advanced analysis on the password. - Base64 decoding failed + Extract and print the content of a database. - Key file way too small. + Path of the database to extract. - Key file magic header id invalid + Insert password to unlock %1: - Found zero keys + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - Failed to read public key. + + +Available commands: + - Corrupted key file, reading private key failed + Name of the command to execute. - No private key payload to decrypt - + List database entries. + Zerrendatu datu-baseko sarrerak. - Trying to run KDF without cipher + Path of the group to list. Default is / - Passphrase is required to decrypt this key + Find entries quickly. - Key derivation failed, key file corrupted? + Search term. - Decryption failed, wrong passphrase? - + Merge two databases. + Bateratu bi datu-base. - Unexpected EOF while reading public key + Path of the database to merge into. - Unexpected EOF while reading private key + Path of the database to merge from. - Can't write public key as it is empty + Use the same credentials for both database files. - Unexpected EOF when writing public key + Key file of the database to merge from. - Can't write private key as it is empty + Show an entry's information. - Unexpected EOF when writing private key + 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. - Unsupported key type: %1 - + attribute + ezaugarria - Unknown cipher: %1 - + Name of the entry to show. + Erakutsiko den sarreraren izena. - Cipher IV is too short for MD5 kdf + NULL device - Unknown KDF: %1 + error reading from device - Unknown key type: %1 + malformed string - - - OptionDialog - Dialog - Elkarrizketa + missing closing quote + - This is required for accessing your databases from ChromeIPass or PassIFox - Hau beharrezkoa da ChromeIPass edo PassIFox erabilita datu-baseetara sarbidea izateko + Group + Taldea - Enable KeePassHTTP server - Gaitu KeePassHTTP zerbitzaria + Title + Izenburua - General - Orokorra + Username + Erabiltzaile-izena - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - + Password + Pasahitza - Only returns the best matches for a specific URL instead of all entries for the whole domain. - + Notes + Oharrak - &Return only best matching entries - + Last Modified + Azken aldaketa - Re&quest to unlock the database if it is locked + Created - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + Browser Integration - &Match URL schemes + YubiKey[%1] Challenge Response - Slot %2 - %3 - Sort matching entries by &username - + Press + Sakatu - Sort &matching entries by title + Passive - R&emove all shared encryption keys from active database + SSH Agent - Re&move all stored permissions from entries in active database + Generate a new random diceware passphrase. - Password Generator - Pasahitz sortzailea + Word count for the diceware passphrase. + - Advanced - Aurreratua + Wordlist for the diceware generator. +[Default: EFF English] + - Always allow &access to entries + Generate a new random password. - Always allow &updating entries + Invalid value for password length %1. - Only the selected database has to be connected with a client. + Could not create entry with path %1. - Searc&h in all opened databases for matching entries + Enter password for new entry: - Automatically creating or updating string fields is not supported. + Writing the database failed %1. - &Return advanced string fields which start with "KPH: " + Successfully added entry %1. - HTTP Port: - HTTP portua: + Copy the current TOTP to the clipboard. + - Default port: 19455 - Portu lehenetsia: 19455 + Invalid timeout value %1. + - KeePassXC will listen to this port on 127.0.0.1 + Entry %1 not found. - <b>Warning:</b> The following options can be dangerous! + Entry with path %1 has no TOTP set up. - <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> + Entry's current TOTP copied to the clipboard! - Cannot bind to privileged ports + Entry's password copied to the clipboard! + + Clearing the clipboard in %1 second(s)... + + - Cannot bind to privileged ports below 1024! -Using default port 19455. + Clipboard cleared! - - - PasswordGeneratorWidget - %p% + Silence password prompt and other secondary outputs. - Password: - Pasahitza: + count + CLI parameter + - strength - Password strength - sendotasuna + Invalid value for password length: %1 + - entropy - entropia + Could not find entry with path %1. + - Password - Pasahitza + Not changing any field for entry %1. + - Character Types - Karaktere motak + Enter new password for entry: + - Upper Case Letters - Letra larriak + Writing the database failed: %1 + - Lower Case Letters - Letra xeheak + Successfully edited entry %1. + - Numbers - Zenbakiak + Length %1 + - Special Characters - Karaktere bereziak + Entropy %1 + - Extended ASCII + Log10 %1 - Exclude look-alike characters + Multi-word extra bits %1 - Pick characters from every group + Type: Bruteforce - &Length: - &Luzeera: + Type: Dictionary + - Passphrase + Type: Dict+Leet - Wordlist: - Hitz zerrenda: + Type: User Words + - Word Count: - Hitz kopurua: + Type: User+Leet + - Word Separator: - Hitz banatzailea: + Type: Repeated + - Generate - Sortu + Type: Sequence + - Copy - Kopiatu + Type: Spatial + - Accept - Onartu + Type: Date + - Close - Itxi + Type: Bruteforce(Rep) + - Apply - Aplikatu + Type: Dictionary(Rep) + - Entropy: %1 bit - Entropia: %1 bit + Type: Dict+Leet(Rep) + - Password Quality: %1 - Pasahitzaren kalitatea: %1 + Type: User Words(Rep) + - Poor - Password quality - Txarra + Type: User+Leet(Rep) + - Weak - Password quality - Ahula + Type: Repeated(Rep) + - Good - Password quality - Ona + Type: Sequence(Rep) + - Excellent - Password quality - Bikaina + Type: Spatial(Rep) + - - - QObject - Database not opened + Type: Date(Rep) - Database hash not available + Type: Unknown%1 - Client public key not received + Entropy %1 (%2) - Cannot decrypt message + *** Password length (%1) != sum of length of parts (%2) *** - Timeout or cannot connect to KeePassXC + Failed to load key file %1: %2 - Action cancelled or denied + File %1 does not exist. - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + Unable to open file %1. - KeePassXC association failed, try again + Error while reading the database: +%1 - Key change was not successful + Error while parsing the database: +%1 - Encryption key is not recognized + Length of the generated password - No saved databases found + Use lowercase characters - Incorrect action + Use uppercase characters - Empty message received + Use numbers. - No URL provided + Use special characters - No logins found + Use extended ASCII - Unknown error + Exclude character set - Add a new entry to a database. + chars - Path of the database. + Exclude similar looking characters - Key file of the database. + Include characters from every selected group - path + Recursively list the elements of the group. - Username for the entry. + Cannot find group %1. - username - erabiltzaile-izena + Error reading merge file: +%1 + - URL for the entry. + Unable to save database to file : %1 - URL - URL + Unable to save database to file: %1 + - Prompt for the entry's password. + Successfully recycled entry %1. - Generate a password for the entry. + Successfully deleted entry %1. - Length for the generated password. + Show the entry's current TOTP. - length - luzeera + ERROR: unknown attribute %1. + - Path of the entry to add. + No program defined for clipboard manipulation - Copy an entry's password to the clipboard. + Unable to start program %1 - Path of the entry to clip. - clip = copy to clipboard + file empty - Timeout in seconds before clearing the clipboard. + %1: (row, col) %2,%3 - Edit an entry. - Editatu sarrera bat. + AES: 256-bit + AES: 256-bit - Title for the entry. - Sarreraren izenburua. + Twofish: 256-bit + Twofish: 256-bit - title - Izenburua + ChaCha20: 256-bit + ChaCha20: 256-bit - Path of the entry to edit. - + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – gomendatua) - Estimate the entropy of a password. - + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Password for which to estimate the entropy. - + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Perform advanced analysis on the password. + Invalid Settings + TOTP - Extract and print the content of a database. + Invalid Key + TOTP - Path of the database to extract. + Message encryption failed. - Insert password to unlock %1: + No groups found - Failed to load key file %1 : %2 + Create a new database. - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + File %1 already exists. - - -Available commands: - + Loading the key file failed - Name of the command to execute. + No key is set. Aborting database creation. - List database entries. - Zerrendatu datu-baseko sarrerak. - - - Path of the group to list. Default is / + Failed to save the database: %1. - Find entries quickly. + Successfully created new database. - Search term. + Insert password to encrypt database (Press enter to leave blank): - Merge two databases. - Bateratu bi datu-base. - - - Path of the database to merge into. + Creating KeyFile %1 failed: %2 - Path of the database to merge from. + Loading KeyFile %1 failed: %2 - Use the same credentials for both database files. + Remove an entry from the database. - Key file of the database to merge from. + Path of the entry to remove. - Show an entry's information. + Existing single-instance lock file is invalid. Launching new instance. - 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. + The lock file could not be created. Single-instance mode disabled. - attribute - ezaugarria + KeePassXC - cross-platform password manager + KeePassXC - plataforma anitzeko pasahitz kudeatzailea - Name of the entry to show. - Erakutsiko den sarreraren izena. + filenames of the password databases to open (*.kdbx) + - NULL device + path to a custom config file - error reading from device - + key file of the database + datu-basearen gako-fitxategia - file empty ! - - fitxategia hutsik dago! + read password of the database from stdin + - malformed string + Parent window handle - missing closing quote + Another instance of KeePassXC is already running. - Group - Taldea + Fatal error while testing the cryptographic functions. + - Title - Izenburua + KeePassXC - Error + KeePassXC - Errorea - Username - Erabiltzaile-izena + Database password: + + + + QtIOCompressor - Password - Pasahitza + Internal zlib error when compressing: + - Notes - Oharrak + Error writing to underlying device: + - Last Modified - Azken aldaketa + Error opening underlying device: + - Created + Error reading data from underlying device: - Legacy Browser Integration + Internal zlib error when decompressing: + + + QtIOCompressor::open - Browser Integration + The gzip format not supported in this version of zlib. - YubiKey[%1] Challenge Response - Slot %2 - %3 + Internal zlib error: + + + SSHAgent - Press - Sakatu + Agent connection failed. + - Passive + Agent protocol error. - SSH Agent + No agent running, cannot add identity. - Generate a new random diceware passphrase. + No agent running, cannot remove identity. - Word count for the diceware passphrase. + Agent refused this identity. Possible reasons include: - count + The key has already been added. - Wordlist for the diceware generator. -[Default: EFF English] + Restricted lifetime is not supported by the agent (check options). - Generate a new random password. + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - Length of the generated password. + Search Help - Use lowercase characters in the generated password. + Search terms are as follows: [modifiers][field:]["]term["] - Use uppercase characters in the generated password. + Every search term must match (ie, logical AND) - Use numbers in the generated password. + Modifiers - Use special characters in the generated password. + exclude term from results - Use extended ASCII in the generated password. + match term exactly - - - QtIOCompressor - Internal zlib error when compressing: + use regex in term - Error writing to underlying device: + Fields - Error opening underlying device: + Term Wildcards - Error reading data from underlying device: + match anything - Internal zlib error when decompressing: + match one - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. + logical OR - Internal zlib error: + Examples SearchWidget - - Search... - Bilatu... - Search Bilatu @@ -3619,310 +4957,316 @@ Available commands: Garbitu - Case Sensitive + Limit search to selected group - Limit search to selected group + Search Help - - - Service - KeePassXC: New key association request + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut - 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. + Case sensitive + + + SettingsWidgetKeeShare - KeePassXC: Overwrite existing key? - KeePassXC: Gainidatzi aurreko gakoa? + Active + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Allow export - KeePassXC: Update Entry - KeePassXC: Eguneratu sarrera + Allow import + - 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 - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Key: + Gakoa: - KeePassXC: No keys found - KeePassXC: Ez da gakorik aurkitu + Generate + Sortu - No shared encryption-keys found in KeePassHttp Settings. - + Import + Inportatu - KeePassXC: Settings not available! + Export - The active database does not contain an entry of KeePassHttp Settings. + Imported certificates - Removing stored permissions... - Gordetako baimenak kentzen... + Trust + - Abort + Ask - KeePassXC: Removed permissions - KeePassXC: Kendutako baimenak + Untrust + - - Successfully removed permissions from %n entries. - + + Remove + Kendu - KeePassXC: No entry with permissions found! + Path - The active database does not contain an entry with permissions. + Status - - - SettingsWidget - Application Settings - Aplikazioaren ezarpenak + Fingerprint + - General - Orokorra + Certificate + - Security - Segurtasuna + Trusted + - Access error for config file %1 + Untrusted - - - SettingsWidgetGeneral - Basic Settings - Oinarrizko ezarpenak + Unknown + - Start only a single instance of KeePassXC + key.share + Filetype for KeeShare key - Remember last databases - Gogoratu azken datu-baseak + KeeShare key file + - Remember last key files and security dongles - + All files + Fitxategi guztiak - Load previous databases on startup + Select path - Automatically save on exit - Automatikoki gorde irtetean + Exporting changed certificate + - Automatically save after every change - Automatikoki gorde aldaketa oro eta gero + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Automatically reload the database when modified externally + %1.%2 + Template for KeeShare key file + + + ShareObserver - Minimize when copying to clipboard - Minimizatu arbelera kopiatzean + Import from container without signature + - Minimize window at application startup + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? - Use group icon on entry creation - Erabili taldearen ikonoa sarrera sortzean + Import from container with certificate + - Don't mark database as modified for non-data changes (e.g., expanding groups) + Do you want to trust %1 with the fingerprint of %2 from %3 - Hide the Details view + Not this time - Show a system tray icon - Erakutsi ikonoa sistema-erretiluan + Never + Inoiz - Hide window to system tray when minimized + Always - Hide window to system tray instead of app exit + Just this time - Dark system tray icon + Import from %1 failed (%2) - Language - Hizkuntza + Import from %1 successful (%2) + - Auto-Type + Imported from %1 - Use entry title to match windows for global Auto-Type + Signed share container are not supported - import prevented - Use entry URL to match windows for global Auto-Type + File is not readable - Always ask before performing Auto-Type + Invalid sharing container - Global Auto-Type shortcut + Untrusted import prevented - Auto-Type delay + Successful signed import - ms - Milliseconds - ms + Unexpected error + - Startup + Unsigned share container are not supported - import prevented - File Management + Successful unsigned import - Safely save database files (may be incompatible with Dropbox, etc) + File does not exist - Backup database file before saving + Unknown share container type - Entry Management + Overwriting signed share container is not supported - export prevented - General - Orokorra + Could not write export container (%1) + - - - SettingsWidgetSecurity - Timeouts + Could not embed signature (%1) - Clear clipboard after + Could not embed database (%1) - sec - Seconds + Overwriting unsigned share container is not supported - export prevented - Lock databases after inactivity of + Could not write export container - Convenience + Unexpected export error occurred - Lock databases when session is locked or lid is closed + Export to %1 failed (%2) - Lock databases after minimizing the window + Export to %1 successful (%2) - Don't require password repeat when it is visible + Export to %1 + + + TotpDialog - Show passwords in cleartext by default + Timed Password - Hide passwords in the preview panel - + 000000 + 000000 - Hide entry notes by default - + Copy + Kopiatu + + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Privacy - Pribatasuna + Copy + Kopiatu - Use Google as fallback for downloading website icons + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - Re-lock previously locked database after performing Auto-Type + There was an error creating the QR code. + + + + Closing in %1 seconds. - 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 + sec + Seconds + + + + Code size: + 6 digits 6 zifra - Code size: + 7 digits - sec - Seconds - + 8 digits + 8 zifra - TotpDialog + UpdateCheckDialog - Timed Password + Checking for updates - 000000 - 000000 + Checking for updates... + - Copy - Kopiatu + Close + Itxi - Expires in + Update Error! - seconds - segundu + 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! + - - - UnlockDatabaseWidget - Unlock database + 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 - - Remove an entry from the database. - - - - Path of the database. - - + YubiKeyEditWidget - Path of the entry to remove. - - - - KeePassXC - cross-platform password manager - KeePassXC - plataforma anitzeko pasahitz kudeatzailea + Refresh + Freskatu - filenames of the password databases to open (*.kdbx) + YubiKey Challenge-Response - path to a custom config file + <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> - key file of the database - datu-basearen gako-fitxategia - - - read password of the database from stdin + No YubiKey detected, please ensure it's plugged in. - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_fi.ts b/share/translations/keepassx_fi.ts index 113927dcd7..de8237ea59 100644 --- a/share/translations/keepassx_fi.ts +++ b/share/translations/keepassx_fi.ts @@ -38,86 +38,297 @@ Kopioi leikepöydälle - Version %1 - - Versio %1 - + Project Maintainers: + Projektin ylläpitäjät: + + + 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 + + + + AgentSettingsWidget + + 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 - Revision: %1 - Revisio: %1 + Application Settings + Sovelluksen asetukset - Distribution: %1 - Jakelu: %1 + General + Yleistä - Libraries: - Kirjastot: + Security + Turvallisuus - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Käyttöjärjestelmä: %1 -Suoritinarkkitehtuuri: %2 -Kernel: %3 %4 + Access error for config file %1 + Pääsyvirhe asetustiedostoon %1 - Enabled extensions: - Käytössä olevat laajennukset: + Icon only + Vain kuvake - Project Maintainers: - Projektin ylläpitäjät: + Text only + Vain teksti - 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 + Text beside icon + Teksti kuvakkeen vieressä - Build Type: %1 - - Julkaisun tyyppi: %1 + Text under icon + Teksti kuvakkeen alla + + + Follow style + Seuraa tyyliä - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP - Vahvista pääsy + Basic Settings + Perusasetukset - Remember this decision - Muista tämä valinta + Startup + Käynnistys - Allow - Salli + Start only a single instance of KeePassXC + Käynnistä vain yksi KeePassXC-instanssi - Deny - Estä + Remember last databases + Muista viimeisimmät tietokannat - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Käytä SSH-agenttia (vaatii uudelleenkäynnistyksen) + 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 @@ -361,20 +585,41 @@ Ole hyvä ja valitse sallitaanko pääsy. <b>Varoitus:</b> Seuraavat valinnat voivat olla vaarallisia! - Executable Files (*.exe);;All Files (*.*) - Suoritettavat tiedostot (*.exe);;Kaikki tiedostot (*.*) + Select custom proxy location + Valitse mukautettu välitysohjelma + + + &Tor Browser + &Tor-selain - Executable Files (*) - Suoritettavat tiedostot (*) + <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: - Select custom proxy location - Valitse mukautettu välitysohjelma + 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 + - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Valitettavasti KeePassXC-Browser ei ole vielä tuettu Snap-julkaisuissa. + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -415,160 +660,61 @@ Haluatko korvata sen? Haluatko päivittää tiedot osoitteesta %1 - %2? - KeePassXC: Database locked! - KeePassXC: Tietokanta lukittu! + Abort + Keskeytä - 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. + Converting attributes to custom data… + Muutetaan attribuutteja mukautetuiksi tiedoiksi... - KeePassXC: Settings not available! - KeePassXC: Asetukset eivät ole käytettävissä! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Muutetut KeePassHTTP-attribuutit - 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 + 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. - - - 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. - - - - ChangeMasterKeyWidget - - Password - Salasana - - - Enter password: - Syötä salasana: - - - Repeat password: - Toista salasana: - - - &Key file - Avaintiedosto - - - 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 + Successfully moved %n keys to custom data. + Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin.Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin. - Do you really want to use an empty string as password? - Haluatko varmasti asettaa tyhjän merkkijonon salasanaksi? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Tietueita KeePassHTTP-attribuuteilla ei löytynyt! - Different passwords supplied. - Annetut salasanat eivät täsmää. + The active database does not contain an entry with KeePassHTTP attributes. + Aktiivinen tietokanta ei sisällä tietueita KeePassHTTP-attribuuteilla. - Failed to set %1 as the Key file: -%2 - Kohteen %1 asettaminen avaintiedostoksi ei onnistunut: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: Vanhoja selainintegraatioasetuksia havaittu - Legacy key file format - Vanha avaintiedostomuoto + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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: + Alkuperäiset tiedot: - Error(s) detected in CSV file ! - Yksi tai useampi virhe havaittu CSV-tiedostossa! + Error + Virhe - more messages skipped] - viestiä lisää ohitettu] + Empty fieldname %1 + Tyhjä kentän nimi %1 - Error - Virhe + column %1 + sarake %1 - CSV import: writer has errors: - - CSV:n tuonti: kirjoittamisessa tapahtui virhe: - + Error(s) detected in CSV file! + CSV-tiedostossa havaittiin virhe/virheitä! - - - CsvImportWizard - - Error - Virhe + + [%n more message(s) skipped] + [%n more message(s) skipped][%n kappaletta viestejä ohitettiin] - Unable to calculate master key - Pääavaimen laskeminen ei onnistu + CSV import: writer has errors: +%1 + CSV-tuonti: kirjoituksessa on virheitä: +%1 CsvParserModel - %n byte(s), - %n tavua,%n tavua, + %n column(s) + %n sarake.%n saraketta + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n riviä,%n riviä, + %n byte(s) + %n tavu%n tavua - %n column(s) - %n saraketta%n saraketta + %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,155 +937,331 @@ 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 + Can't open key file: +%1 + Avaintiedostoa ei voitu avata: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Tietokannan avaaminen epäonnistui. + Passwords + Salasanat + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Tietokannan avaaminen onnistui. Ei tehtävää. + Advanced Settings + Lisäasetukset - Success - Onnistui! + General + Yleistä - The database has been successfully repaired -You can now save it. - Tietokanta korjattiin onnistuneesti. -Voit nyt tallentaa sen. + Security + Turvallisuus - Unable to repair the database. - Tietokannan korjaus epäonnistui. + Master Key + Pääsalasana - - - DatabaseSettingsWidget - General - Yleistä + Encryption Settings + Salausasetukset - Encryption - Salaus + Browser Integration + Selainintegraatio + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Iteraatioiden lukumäärä on liian suuri + KeePassXC-Browser settings + KeePassXC-Browser -asetukset - 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! - Käytät todella suurta lukua iteraatioiden määränä avaimen muunnoksen yhteydessä Argon2:lla. - -Jos pidät tämän arvon, tietokannan avauksessa voi kestää tunteja tai päiviä (tai jopa pidempään)! + &Disconnect all browsers + &Katkaise yhteys kaikkiin selaimiin - Understood, keep number - Ymmärrän, säilytä numero + Forg&et all site-specific settings on entries + &Unohda kaikki tietueiden sivustokohtaiset asetukset - Cancel - Peruuta + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Siirrä KeePassHTTP-attribuutit KeePassXC-Browser:in &mukautettuihin tietoihin - Number of rounds too low - Key transformation rounds - Iteraatioiden lukumäärä on liian pieni + Stored keys + Tallennetut avaimet - 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! - Käytät todella pientä lukua iteraatioiden määränä avaimen muunnoksessa AES-KDF:llä. - -Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! + Remove + Poista - KDF unchanged - Avainmuunnosfunktio ei ole muuttunut + Delete the selected key? + Poista valittu avain? - Failed to transform key with new KDF parameters; KDF unchanged. - Avaimen muunnos uusia KDF-parametreja käyttäen epäonnistui; KDF:ää ei muutettu. - - - MiB - Abbreviation for Mebibytes (KDF settings) - Mt Mt - - - thread(s) - Threads for parallel execution (KDF settings) - säie(ttä) säie(ttä) + 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. - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Salausalgoritmi: + Key + Avain - AES: 256 Bit (default) - AES: 256 Bit (oletus) + Value + Arvo - Twofish: 256 Bit - Twofish: 256 Bit + Enable Browser Integration to access these settings. + Käytä selainintegraatiota käyttääksesi näitä asetuksia. - Key Derivation Function: - Avainmuunnosfunktio: + Disconnect all browsers + Unohda kaikki selaimet - Transform rounds: - Muunnositeraatioita: + 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. - Benchmark 1-second delay - Laske parametrit 1:n sekunnin viiveelle + KeePassXC: No keys found + KeePassXC: Avaimia ei löytynyt - Memory Usage: - Muistin käyttö: + No shared encryption keys found in KeePassXC settings. + Jaettuja salausavaimia ei löytynyt KeePassXC:n asetuksista. - Parallelism: - Rinnakkaisuus: + 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. - - - DatabaseSettingsWidgetGeneral - Database Meta Data - Tietokannan metatiedot + Forget all site-specific settings on entries + Unohda kaikki sivustokohtaiset asetukset tietueilta - Database name: - Tietokannan nimi: + 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. - Database description: - Tietokannan kuvaus: + 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 + Key transformation rounds + Iteraatioiden lukumäärä on liian suuri + + + 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! + Käytät todella suurta lukua iteraatioiden määränä avaimen muunnoksen yhteydessä Argon2:lla. + +Jos pidät tämän arvon, tietokannan avauksessa voi kestää tunteja tai päiviä (tai jopa pidempään)! + + + Understood, keep number + Ymmärrän, säilytä numero + + + Cancel + Peruuta + + + Number of rounds too low + Key transformation rounds + Iteraatioiden lukumäärä on liian pieni + + + 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! + Käytät todella pientä lukua iteraatioiden määränä avaimen muunnoksessa AES-KDF:llä. + +Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! + + + KDF unchanged + Avainmuunnosfunktio ei ole muuttunut + + + Failed to transform key with new KDF parameters; KDF unchanged. + Avaimen muunnos uusia KDF-parametreja käyttäen epäonnistui; KDF:ää ei muutettu. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiBMiB + + + thread(s) + Threads for parallel execution (KDF settings) + säiesäiettä + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + Tietokannan metatiedot + + + Database name: + Tietokannan nimi: + + + Database description: + Tietokannan kuvaus: Default username: @@ -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,91 +1297,112 @@ Jos pidät tämän arvon, tietokanta voi olla liian helppo murtaa! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Juuri + Sharing + Jakaminen - KeePass 2 Database - KeePass 2 -tietokanta + Breadcrumb + Leipätiedosto - All files - Kaikki tiedostot + Type + Tyyppi - Open database - Avaa tietokanta + Path + Polku - File not found! - Tiedostoa ei löytynyt! + Last Signer + Viimeinen allekirjoittaja - Unable to open the database. - Tietokannan avaaminen ei onnistunut. + Certificates + Varmenteet - File opened in read only mode. - Tiedosto on avattu "vain luku"-tilassa. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Avaa CSV-tiedosto + Add additional protection... + Lisäsuoja... - CSV file - CSV-tiedosto + No encryption key added + Salausavainta ei ole lisätty - All files (*) - Kaikki tiedostot(*) + You must add at least one encryption key to secure your database! + Ainakin yksi salausavain täytyy lisätä, jotta tietokanta pysyy suojassa! - Merge database - Yhdistä tietokanta + No password set + Salasanaa ei ole asetettu - Open KeePass 1 database - Avaa KeePass 1 -tietokanta + 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? - KeePass 1 database - KeePass 1 -tietokanta + Unknown error + Tuntematon virhe - Close? - Sulje? + Failed to change master key + Pääsalasanan muuttaminen ei onnistunut + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" on muokkaustilassa. -Hylkää muutokset ja sulje? + Database Name: + Tietokannan nimi: - Save changes? - Tallenna muutokset? + Description: + Kuvaus: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - Kohdetta "%1" muokattiin. -Tallennetaanko muutokset? + KeePass 2 Database + KeePass 2 -tietokanta - Writing the database failed. - Tietokannan kirjoitus levylle epäonnistui. + All files + Kaikki tiedostot - Passwords - Salasanat + Open database + Avaa tietokanta - Save database as - Tallenna tietokanta nimellä + CSV file + CSV-tiedosto + + + Merge database + Yhdistä tietokanta + + + Open KeePass 1 database + Avaa KeePass 1 -tietokanta + + + KeePass 1 database + KeePass 1 -tietokanta Export database to CSV file @@ -1045,40 +1413,41 @@ Tallennetaanko muutokset? CSV-tiedoston kirjoitus levylle epäonnistui. - New database - Uusi tietokanta + Database creation error + Tietokannan luomisvirhe - locked - Lukittu + 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. - Lock database - Lukitse tietokanta + The database file does not exist or is not accessible. + Tietokantatiedostoa ei ole olemassa tai siihen ei ole pääsyä. - 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. + Select CSV file + Valitse CSV-tiedosto - 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. + New Database + Uusi tietokanta - Disable safe saves? - Ota turvallinen tallennus pois käytöstä? + %1 [New Database] + Database tab name modifier + %1 [Uusi tietokanta] - 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 [Locked] + Database tab name modifier + %1 [Lukittu] + + + %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 + + 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? + - Generate TOTP Token - Luo aikapohjaisen salasanan (TOTP) tunniste + File opened in read only mode. + Tiedosto on avattu "vain luku"-tilassa. - Close - Sulje + Lock Database? + Lukitse tietokanta? - General - Yleistä + You are editing an entry. Discard changes and lock anyway? + Muokkaat tietuetta. Hylkää muutokset ja lukitse silti? - Password - Salasana + "%1" was modified. +Save changes? + Tietuetta "%1" muokattiin. +Tallennetaanko muutokset? - URL - URL + Database was modified. +Save changes? + Tietokantaa on muokattu. +Tallenna muutokset? - Expiration - Vanhentumisaika + Save changes? + Tallenna muutokset? - Username - Käyttäjätunnus + Could not open the new database file while attempting to autoreload. +Error: %1 + Uutta tietokantaa ei voitu avata automaattisen uudelleenlatauksen yhteydessä. +Virhe: %1 - Autotype - Automaattitäydennys + Disable safe saves? + Ota turvallinen tallennus pois käytöstä? - Searching - Etsitää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? + 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? - Attributes - Attribuutit + Writing the database failed. +%1 + Tietokantaan kirjoittaminen epäonnistui. +%1 - Attachments - Liitteet + Passwords + Salasanat - Notes - Muistiinpanot + Save database as + Tallenna tietokanta nimellä - Window - Ikkuna + KeePass 2 Database + KeePass 2 -tietokanta - Sequence - Sekvenssi + 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? - Search - Etsi + Delete group + Poista ryhmä - Clear - Tyhjennä + Move group to recycle bin? + Siirretäänkö ryhmä roskakoriin? - Never - Ei koskaan + Do you really want to move the group "%1" to the recycle bin? + Haluatko varmasti siirtää ryhmän "%1" roskakoriin? - [PROTECTED] - [SUOJATTU] + Successfully merged the database files. + Tietokantatiedostot yhdistettiin onnistuneesti. - Disabled - Pois käytöstä + Database was not modified by merge operation. + Tietokannan sisältö ei muuttunut yhdistämisen yhteydessä. - Enabled - Käytössä + 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 @@ -1998,84 +2570,49 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. - HttpPasswordGeneratorWidget + KMessageWidget - Length: - Pituus: + &Close + &Sulje - 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 - - - /*_& ... - /*_& ... + Close message + Sulje viesti + + + Kdbx3Reader - Exclude look-alike characters - Poissulje samannäköiset merkit + Unable to calculate master key + Pääavaimen laskeminen ei onnistu - Ensure that the password contains characters from every group - Varmista, että salasana sisältää merkkejä jokaisesta ryhmästä + Unable to issue challenge-response. + Haaste-vastauksen tekeminen epäonnistui. - Extended ASCII - Laajennettu ASCII + Wrong key or database file is corrupt. + Väärä avain tai tietokanta on korruptoitunut. - - - KMessageWidget - &Close - &Sulje + missing database headers + tietokannan otsaketiedot puuttuvat - Close message - Sulje viesti + Header doesn't match hash + Otsaketieto ei vastaa tiivistettä (hash) - - - Kdbx3Reader - Unable to calculate master key - Pääavaimen laskeminen ei onnistu + Invalid header id size + Virheellinen otsaketietojen id:n koko - Unable to issue challenge-response. - Haaste-vastauksen tekeminen epäonnistui. + Invalid header field length + Virhellinen otsaketietojen kentän koko - Wrong key or database file is corrupt. - Väärä avain tai tietokanta on korruptoitunut. + Invalid header data length + Virheellinen otsaketietojen sisällön koko @@ -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 + + unable to seek to content position + sisällön sijaintia ei voitu hakea + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + Jakaminen poistettu käytöstä - Twofish: 256-bit - Twofish: 256-bit + Import from + Tuo - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + Vie - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Synkronoi - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – suositeltu) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Olemassa oleva yhden instanssin lukkotiedosto on virheellinen. Avataan uusi instanssi. + Key Component + Avainkomponentti - The lock file could not be created. Single-instance mode disabled. - Lukkotiedosto ei voitu luoda. Yhden instanssin tila otettu pois käytöstä. + Key Component Description + Avainkomponentin kuvaus - Another instance of KeePassXC is already running. - Toinen KeePassXC-instanssi on jo käynnissä. + Cancel + Peruuta - Fatal error while testing the cryptographic functions. - Vakava virhe kryptografisia toimintoa testattaessa. + Key Component set, click to change or remove + Avainkomponentti asetettu, paina muokataksesi tai poistaaksesi - KeePassXC - Error - KeePassXC - Virhe + 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,226 +3436,394 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Virheellinen avaintiedosto, odotetaan OpenSSH-avainta + &Donate + &Lahjoita - PEM boundary mismatch - Yhteensopimaton PEM-raja-arvo + Report a &bug + Ilmoita &virheestä - Base64 decoding failed - Base64-dekoodaus epäonnistui + 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. - Key file way too small. - Avaintiedosto aivan liian pieni. + &Import + &Tuo - Key file magic header id invalid - Otsaketietojen taikatunniste on virheellinen + Copy att&ribute... + Kopioi att&ribuutti... - Found zero keys - Yhtään avainta ei löytynyt + TOTP... + TOTP... - Failed to read public key. - Julkisen avaimen lukeminen epäonnistui. + &New database... + &Uusi tietokanta - Corrupted key file, reading private key failed - Rikkinäinen avaintiedosto, yksityisen avaimen lukeminen epäonnistui + Create a new database + Luo uusi tietokanta - No private key payload to decrypt - Salauksen purku epäonnistui: salainen avain ei sisällä dataa + &Merge from database... + &Yhdistä tietokannasta... - Trying to run KDF without cipher - Yritetään tehdä avainderivaatiofunktiota ilman salausta + Merge from another KDBX database + Yhdistä toisesta KDBX-tietokannasta - Passphrase is required to decrypt this key - Avaimen purkuun vaaditaan tunnuslause + &New entry + Uusi &tietue - Key derivation failed, key file corrupted? - Avaimen derivointi epäonnistui. Onko avaintiedosto korruptoitunut? + Add a new entry + Lisää uusi tietue - Decryption failed, wrong passphrase? - Salauksen purku epäonnistui, väärä tunnuslause? + &Edit entry + &Muokkaa tietuetta - Unexpected EOF while reading public key - Odottamaton EOF julkista avainta luettaessa + View or edit entry + Katso tai muokkaa tietuetta - Unexpected EOF while reading private key - Odottamaton EOF yksityistä avainta luettaessa + &New group + Uusi &ryhmä - Can't write public key as it is empty - Ei voida kirjoittaa julkista avainta, koska se on tyhjä + Add a new group + Lisää uusi ryhmä - Unexpected EOF when writing public key - Odottamaton EOF julkista avainta kirjoittaessa + Change master &key... + Muuta &pääsalasanaa - Can't write private key as it is empty - Ei voida kirjoittaa yksityistä avainta, koska se on tyhjä + &Database settings... + &Tietokannan asetukset - Unexpected EOF when writing private key - Odottamaton EOF yksityistä avainta kirjoittaessa + Copy &password + Kopioi &salasana - Unsupported key type: %1 - Tuntematon avaimen tyyppi: %1 + Perform &Auto-Type + Suorita &automaattitäydennys - Unknown cipher: %1 - Tuntematon salausalgoritmi: %1 + Open &URL + &Avaa URL - Cipher IV is too short for MD5 kdf - Salausalgoritmin alustusvektori on liian lyhyt MD5-avainmuunnosfunktiolle + KeePass 1 database... + KeePass 1 -tietokanta... - Unknown KDF: %1 - Tuntematon avainmuunnosfunktio: %1 + Import a KeePass 1 database + Tuo KeePass 1 -tietokanta - Unknown key type: %1 - Tuntematon avaimen tyyppi: %1 + 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. - OptionDialog + Merger - Dialog - Dialogi + Creating missing %1 [%2] + Luodaan puuttunutta %1 [%2] - This is required for accessing your databases from ChromeIPass or PassIFox - Tämä vaaditaan, jotta tietokantoja voidaan käyttää ChromeIPassilla or PassIFoxilla + Relocating %1 [%2] + Uudelleensijoitetaan %1 [%2] - Enable KeePassHTTP server - Ota käyttöön KeePassHTTP-palvelin + Overwriting %1 [%2] + Ylikirjoitetaan %1 [%2] - General - Yleistä + older entry merged from database "%1" + vanhempi tietue yhdistetty tietokannasta "%1" - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Nä&ytä ilmoitus kun tilitietoja pyydetään + Adding backup for older target %1 [%2] + Lisätään varmuuskopio vanhemmalle kohteelle %1 [%2] - 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 + Adding backup for older source %1 [%2] + Lisätään varmuuskopio vanhemmalle lähteelle %1 [%2] - &Return only best matching entries - &Palauta vain parhaiten vastaavat tietueet + Reapplying older target entry on top of newer source %1 [%2] + Uudelleensijoitetaan vanhempi kohdetietue uuden lähteen päälle %1 [%2] - Re&quest to unlock the database if it is locked - Pyyd&ä tietokannan lukituksen avaamista jos se on lukittu + Reapplying older source entry on top of newer target %1 [%2] + Uudelleensijoitetaan vanhempi lähdetietue uuden kohteen päälle %1 [%2] - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Vain tietueet samalla skeemalla (http://, https://, ftp://, ...) palautetaan. + Synchronizing from newer source %1 [%2] + Synkronoidaan uudemmasta lähteestä %1 [%2] - &Match URL schemes - Sovita verkko-osoitteen kaavaan + Synchronizing from older source %1 [%2] + Synkronoidaan vanhemmasta lähteestä %1 [%2] - Sort matching entries by &username - Järjestä &vastaavat tietueet käyttäjätunnuksen mukaan + Deleting child %1 [%2] + Poistetaan lasta %1 [%2] - Sort &matching entries by title - Järjestä &vastaavat merkinnät otsikon mukaan + Deleting orphan %1 [%2] + Poistetaan orpoa %1 [%2] - R&emove all shared encryption keys from active database - &Poista kaikki jaetut salausavaimet aktiivisesta tietokannasta + Changed deleted objects + Muutettiin poistettuja kohteita - Re&move all stored permissions from entries in active database - &Poista kaikki jaetut salausavaimet aktiivisesta tietokannasta + Adding missing icon %1 + Lisätään puuttuva ikoni %1 + + + NewDatabaseWizard - Password Generator - Salasanageneraattori + Create a new KeePassXC database... + Luo uusi KeePassXC-tietokanta... - Advanced - Lisää.. + Root + Root group + Juuri + + + NewDatabaseWizardPage - Always allow &access to entries - Salli aina &pääsy tietueisiin + WizardPage + Ohjattu sivu - Always allow &updating entries - Salli aina tietueiden p&äivittäminen + En&cryption Settings + &Salausasetukset - Only the selected database has to be connected with a client. - Vain valittu tietokanta tulee olla yhdistetty asiakkaan kanssa. + 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 - Searc&h in all opened databases for matching entries - E&tsi kaikista avatuista tietokannoista vastaavia tietueita + Simple Settings + Yksinkertaiset asetukset + + + NewDatabaseWizardPageEncryption - Automatically creating or updating string fields is not supported. - Automaattinen lisäjonokenttien luonti tai päivittäminen ei ole tuettu + Encryption Settings + Salausasetukset - &Return advanced string fields which start with "KPH: " - Palauta lisämerkkijonokentät jotka alkavat "KPH: " + 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 - HTTP Port: - HTTP-portti: + Database Master Key + Tietokannan pääsalasana - Default port: 19455 - Oletusportti: 19455 + A master key known only to you protects your database. + Pääsalasana jonka vain sinä tiedät suojaa tietokantaasi. + + + NewDatabaseWizardPageMetaData - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC kuuntelee tätä porttia osoitteessa 127.0.0.1 + General Database Information + Yleiset tietokannan tiedot - <b>Warning:</b> The following options can be dangerous! - <b>Varoitus:</b> Seuraavat valinnat voivat olla vaarallisia! + 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 + + Invalid key file, expecting an OpenSSH key + Virheellinen avaintiedosto, odotetaan OpenSSH-avainta + + + PEM boundary mismatch + Yhteensopimaton PEM-raja-arvo + + + Base64 decoding failed + Base64-dekoodaus epäonnistui + + + Key file way too small. + Avaintiedosto aivan liian pieni. + + + Key file magic header id invalid + Otsaketietojen taikatunniste on virheellinen + + + Found zero keys + Löytyi nolla avainta + + + Failed to read public key. + Julkisen avaimen lukeminen epäonnistui. + + + Corrupted key file, reading private key failed + Rikkinäinen avaintiedosto, yksityisen avaimen lukeminen epäonnistui + + + No private key payload to decrypt + Salauksen purku epäonnistui: yksityisen avaimen sisältö on tyhjä + + + Trying to run KDF without cipher + Yritetään tehdä avainmuunnosfunktiota ilman salausta + + + Passphrase is required to decrypt this key + Avaimen purkuun vaaditaan salalause + + + Key derivation failed, key file corrupted? + Avaimen muuntaminen epäonnistui. Onko avaintiedosto korruptoitunut? + + + Decryption failed, wrong passphrase? + Salauksen purku epäonnistui, väärä salalause? + + + Unexpected EOF while reading public key + Odottamaton EOF julkista avainta luettaessa + + + Unexpected EOF while reading private key + Odottamaton EOF yksityistä avainta luettaessa + + + Can't write public key as it is empty + Ei voida kirjoittaa julkista avainta, koska se on tyhjä + + + Unexpected EOF when writing public key + Odottamaton EOF julkista avainta kirjoittaessa + + + Can't write private key as it is empty + Ei voida kirjoittaa yksityistä avainta, koska se on tyhjä + + + Unexpected EOF when writing private key + Odottamaton EOF yksityistä avainta kirjoittaessa + + + Unsupported key type: %1 + Tuntematon avaimen tyyppi: %1 + + + Unknown cipher: %1 + Tuntematon salausalgoritmi: %1 + + + Cipher IV is too short for MD5 kdf + Salausalgoritmin alustusvektori on liian lyhyt MD5-avainmuunnosfunktiolle + + + Unknown KDF: %1 + Tuntematon avainmuunnosfunktio: %1 + + + Unknown key type: %1 + Tuntematon avaimen tyyppi: %1 + + + + PasswordEditWidget + + Enter password: + Syötä salasana: + + + Confirm password: + Vahvista salasana: + + + Password + Salasana - <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> + <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> - Cannot bind to privileged ports - Ei voida sitoutua etuoikeutettuihin portteihin + Passwords do not match. + Salasanat eivät ole samoja. - 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,481 +3887,1103 @@ Käytetään oletusporttia 19455. Passphrase - Tunnuslause + Salalause + + + Wordlist: + Sanalista: + + + Word Separator: + Sanaerotin: + + + Copy + Kopioi + + + Accept + Hyväksy + + + Close + Sulje + + + Entropy: %1 bit + Entropia: %1 bit + + + Password Quality: %1 + Salasanan laatu: %1 + + + Poor + Password quality + Huono + + + Weak + Password quality + Heikko + + + Good + Password quality + Hyvä + + + Excellent + 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 + + Database not opened + Tietokanta ei avattu + + + Database hash not available + Tietokannan tiivistettä (hash) ei saatu + + + Client public key not received + Asiakkaan julkista avainta ei saatu + + + Cannot decrypt message + Viestin salauksen purkaminen ei onnistu + + + Action cancelled or denied + Toiminto peruttiin tai estettiin + + + KeePassXC association failed, try again + Liittäminen KeePassXC:hen epäonnistui, yritä uudelleen + + + Encryption key is not recognized + Salausavainta ei tunnistettu + + + Incorrect action + Virheellinen toiminto + + + Empty message received + Vastaanotettiin tyhjä viesti + + + No URL provided + Sivuston osoitetta ei ole annettu + + + No logins found + Tunnuksia ei löydy + + + Unknown error + Tuntematon virhe + + + Add a new entry to a database. + Lisää uusi tietue tietokantaan. + + + Path of the database. + Tietokannan polku. + + + Key file of the database. + Tietokannan avaintiedosto. + + + path + polku + + + Username for the entry. + Tietueen käyttäjänimi. + + + username + käyttäjätunnus + + + URL for the entry. + Tietueen osoite. + + + URL + URL + + + Prompt for the entry's password. + Tietueen salasanan kuvaus. + + + Generate a password for the entry. + Luo tietueelle salasana. + + + Length for the generated password. + Luodun salasanan pituus. + + + length + pituus + + + Path of the entry to add. + Lisättävän tietueen polku. + + + Copy an entry's password to the clipboard. + Kopioi salasana leikepöydälle. + + + Path of the entry to clip. + clip = copy to clipboard + Kopioitavan tietueen polku. + + + Timeout in seconds before clearing the clipboard. + Viive sekunneissa ennen leikepöydän tyhjentämistä. + + + Edit an entry. + Muokkaa tietuetta. + + + Title for the entry. + Tietueen nimi + + + title + nimi + + + Path of the entry to edit. + Muokattavan tietueen polku. + + + Estimate the entropy of a password. + Salasanan arvioitu entropia. + + + Password for which to estimate the entropy. + Salasana josta entropia arvioidaan. + + + Perform advanced analysis on the password. + Suorita salasanalle edistynyt analyysi. + + + Extract and print the content of a database. + Pura ja tulosta tietokannan sisältö. + + + Path of the database to extract. + Purettavan tietokannan polku. + + + Insert password to unlock %1: + Syötä salasana avataksesi %1: + + + WARNING: 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. + + + + +Available commands: + + + +Käytettävissä olevat komennot: + + + + Name of the command to execute. + Suoritettavan komennon nimi. + + + List database entries. + Listaa tietokannan tietueet. + + + Path of the group to list. Default is / + Listattavan ryhmän polku. Oletus on / + + + Find entries quickly. + Etsi tietueita nopeasti. + + + Search term. + Hakutermi. + + + Merge two databases. + Yhdistä kaksi tietokantaa. + + + Path of the database to merge into. + Tietokannan polku, johon yhdistetään. + + + Path of the database to merge from. + Tietokannan polku, josta yhdistetään. + + + Use the same credentials for both database files. + Käytä samoja tilitietoja molemmille tietokantatiedostoille. + + + Key file of the database to merge from. + Tietokannan avaintiedosto, josta yhdistetään. + + + Show an entry's information. + Näytä tietueen tiedot. + + + 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. + Näytettävien attribuuttien nimi. Tämän asetuksen voi määrittää useammin kuin kerran, jokaisen attribuutin näkyessä omalla rivillään annetussa järjestyksessä. Jos attribuutteja ei ole määritetty, näytetään yhteenveto oletuksista. + + + attribute + attribuutti + + + Name of the entry to show. + Näytettävän tietueen nimi. + + + NULL device + Tyhjä laite (NULL) + + + error reading from device + virhe laitteelta luettaessa + + + malformed string + Viallinen merkkijono + + + missing closing quote + lainausmerkki puuttuu lopusta + + + Group + Ryhmä + + + Title + Otsikko + + + Username + Käyttäjätunnus + + + Password + Salasana + + + Notes + Muistiinpanot + + + Last Modified + Viimeksi muokattu + + + Created + Luotu + + + Browser Integration + Selainintegraatio + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey[%1] Haaste/vastaus - Slot %2 - %3 + + + Press + Paina + + + Passive + Passiivi + + + SSH Agent + SSH-agentti + + + Generate a new random diceware passphrase. + Luo uusi satunnainen noppaware-salalause + + + Word count for the diceware passphrase. + Sanamäärä noppaware-salalauseelle. + + + Wordlist for the diceware generator. +[Default: EFF English] + Sanalista noppaware-luojalle. +[Oletus: EFF Englanti] + + + Generate a new random password. + Luo uusi satunnainen salasana. + + + Invalid value for password length %1. + Väärä arvo salasanan pituudeksi %1. + + + Could not create entry with path %1. + Tietuetta ei voitu luoda polun %1 kanssa. + + + Enter password for new entry: + Anna uuden tietueen salasana: + + + Writing the database failed %1. + Tietokantaan kirjoittaminen epäonnistui %1. + + + Successfully added entry %1. + Tietueen %1 lisäys onnistui. + + + 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 - Wordlist: - Sanalista: + Type: Dictionary + Tyyppi: Sanakirja - Word Count: - Sanamäärä: + Type: Dict+Leet + Tyyppi: Sanakirja + Leet - Word Separator: - Sanaerotin: + Type: User Words + Tyyppi: Käyttäjän sanat - Generate - Generoi + Type: User+Leet + Tyyppi: Käyttäjän sanat + Leet - Copy - Kopioi + Type: Repeated + Tyyppi: Toistettu - Accept - Hyväksy + Type: Sequence + Tyyppi: Sekvenssi - Close - Sulje + Type: Spatial + Tyyppi: Spatiaalinen - Apply - Käytä + Type: Date + Tyyppi: Päivämäärä - Entropy: %1 bit - Entropia: %1 bit + Type: Bruteforce(Rep) + Tyyppi: Väsytyshyökkäys (toistettu) - Password Quality: %1 - Salasanan laatu: %1 + Type: Dictionary(Rep) + Tyyppi: Sanakirja (toistettu) - Poor - Password quality - Huono + Type: Dict+Leet(Rep) + Tyyppi: Sanakirja + Leet (toistettu) - Weak - Password quality - Heikko + Type: User Words(Rep) + Tyyppi: Käyttäjän sanat (toistettu) - Good - Password quality - Hyvä + Type: User+Leet(Rep) + Tyyppi: Käyttäjän sanat + Leet (toistettu) - Excellent - Password quality - Erinomainen + Type: Repeated(Rep) + Tyyppi: Toistettu (toistettu) - - - QObject - Database not opened - Tietokanta ei avattu + Type: Sequence(Rep) + Tyyppi: Sekvenssi (toistettu) - Database hash not available - Tietokannan tiivistettä (hash) ei saatu + Type: Spatial(Rep) + Tyyppi: Spatiaalinen (toistettu) - Client public key not received - Asiakkaan julkista avainta ei saatu + Type: Date(Rep) + Tyyppi: Päivämäärä (toistettu) - Cannot decrypt message - Viestin salauksen purkaminen ei onnistu + Type: Unknown%1 + Tyyppi: Tuntematon %1 - Timeout or cannot connect to KeePassXC - Aikakatkaisu tai yhteys KeePassXC:hen ei onnistu + Entropy %1 (%2) + Entropia %1 (%2) - Action cancelled or denied - Toiminto peruttiin tai estettiin + *** Password length (%1) != sum of length of parts (%2) *** + *** Salasanan pituus (%1) != osien (%2) summa *** - 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ä? + Failed to load key file %1: %2 + Avaintiedoston %1 lataaminen epäonnistui: %2 - KeePassXC association failed, try again - Liittäminen KeePassXC:hen epäonnistui, yritä uudelleen + File %1 does not exist. + Tiedostoa %1 ei ole. - Key change was not successful - Avainvaihto ei onnistunut + Unable to open file %1. + Tiedostoa %1 ei voitu avata. - Encryption key is not recognized - Salausavainta ei tunnistettu + Error while reading the database: +%1 + Virhe tietokantaa luettaessa: +%1 - No saved databases found - Tallennettuja tietokantoja ei löytynyt + Error while parsing the database: +%1 + Virhe tietokantaa jäsennettäessä: +%1 - Incorrect action - Virheellinen toiminto + Length of the generated password + Luodun salasanan pituus - Empty message received - Vastaanotettiin tyhjä viesti + Use lowercase characters + Käytiä pieniä merkkejä - No URL provided - Sivuston osoitetta ei ole annettu + Use uppercase characters + Käytä isoja merkkejä - No logins found - Tunnuksia ei löydy + Use numbers. + Käytä numeroita. - Unknown error - Tuntematon virhe + Use special characters + Käytä erikoismerkkejä - Add a new entry to a database. - Lisää uusi tietue tietokantaan + Use extended ASCII + Käytä laajennettua ASCII-merkistöä - Path of the database. - Tietokannan polku. + Exclude character set + Älä sisällytä merkkejä - Key file of the database. - Tietokannan avaintiedosto. + chars + merkit - path - polku + Exclude similar looking characters + Älä sisällytä samankaltaisilta vaikuttavia kirjaimia - Username for the entry. - Tietueen käyttäjänimi + Include characters from every selected group + Sisällytä kirjaimia jokaisesta valitusta ryhmästä - username - käyttäjätunnus + Recursively list the elements of the group. + Listaa ryhmän elementit rekursiivisesti - URL for the entry. - Tietueen osoite. + Cannot find group %1. + Ryhmää %1 ei löytynyt. - URL - URL + Error reading merge file: +%1 + Virhe lukiessa yhdistämiseen tarvittavaa tiedostoa: +%1 - Prompt for the entry's password. - Tietueen salasanan kuvaus. + Unable to save database to file : %1 + Tietokannan tallentaminen tiedostoon ei onnistu: %1 - Generate a password for the entry. - Luo tietueelle salasana. + Unable to save database to file: %1 + Tietokantaa ei voitu tallentaa tiedostoon: %1 - Length for the generated password. - Luodun salasanan pituus. + Successfully recycled entry %1. + Tietue %1 siirrettiin onnistuneesti roskakoriin. - length - pituus + Successfully deleted entry %1. + Tietue %1 poistettiin onnistuneesti. - Path of the entry to add. - Lisättävän tietueen polku. + Show the entry's current TOTP. + Näytä tietueen tämän hetkinen TOTP. - Copy an entry's password to the clipboard. - Kopioi salasana leikepöydälle. + ERROR: unknown attribute %1. + VIRHE: Tuntematon attribuutti %1. - Path of the entry to clip. - clip = copy to clipboard - Kopioitavan tietueen polku. + No program defined for clipboard manipulation + Ohjelmaa leikepöydän hallintaan ei ole määritelty. - Timeout in seconds before clearing the clipboard. - Viive sekunneissa ennen leikepöydän tyhjentämistä. + Unable to start program %1 + Ohjelmaa %1 ei voitu käynnistää - Edit an entry. - Muokkaa tietuetta. + file empty + tyhjä tiedosto - Title for the entry. - Tietueen otsikko. + %1: (row, col) %2,%3 + %1: (rivi, sarake) %2,%3 - title - otsikko + AES: 256-bit + AES: 256-bit - Path of the entry to edit. - Muokattavan tietueen polku. + Twofish: 256-bit + Twofish: 256-bit - Estimate the entropy of a password. - Salasanan arvioitu entropia. + ChaCha20: 256-bit + ChaCha20: 256-bit - Password for which to estimate the entropy. - Salasana josta entropia arvioidaan. + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – suositeltu) - Perform advanced analysis on the password. - Suorita salasanalle edistynyt analyysi. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Extract and print the content of a database. - Pura ja tulosta tietokannan sisältö. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Path of the database to extract. - Purettavan tietokannan polku. + Invalid Settings + TOTP + Virheelliset asetukset - Insert password to unlock %1: - Syötä salasana avataksesi %1: + Invalid Key + TOTP + Virheellinen avain - Failed to load key file %1 : %2 - Avaintiedoston %1 lataaminen epäonnistui : %2 + Message encryption failed. + Viestin salaus epäonnistui - WARNING: 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. + No groups found + Ryhmiä ei löytynyt - - -Available commands: - - - -Käytettävissä olevat komennot: - + Create a new database. + Luo uusi tietokanta. - Name of the command to execute. - Suoritettavan komennon nimi. + File %1 already exists. + Tiedosto %1 on jo olemassa. - List database entries. - Listaa tietokannan tietueet. + Loading the key file failed + Avaintiedoston lataaminen epäonnistui - Path of the group to list. Default is / - Listattavan ryhmän polku. Oletus on / + No key is set. Aborting database creation. + Avainta ei ole asetettu. Perutaan tietokannan luominen. - Find entries quickly. - Etsi tietueita nopeasti. + Failed to save the database: %1. + Tietokannan tallentaminen epäonnistui: %1. - Search term. - Hakutermi. + Successfully created new database. + Luotiin onnistuneesti uusi tietokanta. - Merge two databases. - Yhdistä kaksi tietokantaa. + Insert password to encrypt database (Press enter to leave blank): + Syötä salasana salataksesi tietokannan (Paina enter jättääksesi se tyhjäksi): - Path of the database to merge into. - Tietokannan polku, johon yhdistetään. + Creating KeyFile %1 failed: %2 + Avaintiedoston %1 luonti epäonnistui: %2 - Path of the database to merge from. - Tietokannan polku, josta yhdistetään. + Loading KeyFile %1 failed: %2 + Avaintiedoston %1 lataus epäonnistui: %2 - Use the same credentials for both database files. - Käytä samoja tilitietoja molemmille tietokantatiedostoille. + Remove an entry from the database. + Poista tietue tietokannasta. - Key file of the database to merge from. - Tietokannan avaintiedosto, josta yhdistetään. + Path of the entry to remove. + Poistettavan tietueen polku. - Show an entry's information. - Näytä tietueen tiedot. + Existing single-instance lock file is invalid. Launching new instance. + Olemassa oleva yhden instanssin lukkotiedosto on virheellinen. Avataan uusi instanssi. - 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. - Näytettävien attribuuttien nimi. Tämän asetuksen voi määrittää useammin kuin kerran, jokaisen attribuutin näkyessä omalla rivillään annetussa järjestyksessä. Jos attribuutteja ei ole määritetty, näytetään yhteenveto oletuksista. + The lock file could not be created. Single-instance mode disabled. + Lukkotiedosto ei voitu luoda. Yhden instanssin tila otettu pois käytöstä. - attribute - attribuutti + KeePassXC - cross-platform password manager + KeePassXC - järjestelmäriippumaton salasanojen hallintasovellus - Name of the entry to show. - Näytettävän tietueen nimi. + filenames of the password databases to open (*.kdbx) + avattavien salasanatietokantojen tiedostonimet (*.kdbx) - NULL device - Tyhjä laite (NULL) + path to a custom config file + polku mukautettuun asetustiedostoon - error reading from device - virhe laitteelta luettaessa + key file of the database + tietokannan avaintiedosto - file empty ! - - tiedosto tyhjä ! - + read password of the database from stdin + lue tietokannan salasana stdin:istä - malformed string - Viallinen merkkijono + Parent window handle + Ylemmän ikkunan kahva - missing closing quote - lainausmerkki puuttuu lopusta + Another instance of KeePassXC is already running. + Toinen KeePassXC-instanssi on jo käynnissä. - Group - Ryhmä + Fatal error while testing the cryptographic functions. + Vakava virhe kryptografisia toimintoa testattaessa. - Title - Otsikko + KeePassXC - Error + KeePassXC - Virhe - Username - Käyttäjätunnus + Database password: + Tietokannan salasana: - Password - Salasana + Cannot create new group + + + + QtIOCompressor - Notes - Muistiinpanot + Internal zlib error when compressing: + Sisäinen zlib virhe pakatessa: - Last Modified - Viimeksi muokattu + Error writing to underlying device: + Kirjoitus taustalla olevaan laitteeseen epäonnistui: - Created - Luotu + Error opening underlying device: + Taustalla olevan laitteen avaus epäonnistui: - Legacy Browser Integration - Vanha selainintegraatio + Error reading data from underlying device: + Virhe luettaessa taustalla olevasta laitteesta: - Browser Integration - Selainintegraatio + Internal zlib error when decompressing: + Sisäinen zlib-virhe purkaessa: + + + QtIOCompressor::open - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] Haaste/vastaus - Slot %2 - %3 + The gzip format not supported in this version of zlib. + gzip-formaatti ei ole tuettu tässä zlib-versiossa. - Press - Paina + Internal zlib error: + Sisäinen zlib-virhe: + + + SSHAgent - Passive - Passiivi + Agent connection failed. + Agentin yhteydenotto epäonnistui. - SSH Agent - SSH-agentti + Agent protocol error. + Agentin protokollavirhe. - Generate a new random diceware passphrase. - Luo uusi satunnainen noppaware-salalause + No agent running, cannot add identity. + Agentti ei ole käynnissä. Identiteettiä ei voitu lisätä. - Word count for the diceware passphrase. - Sanamäärä noppaware-salalauseelle. + No agent running, cannot remove identity. + Agentti ei ole käynnissä. Identiteettiä ei voitu poistaa. - count - määrä + Agent refused this identity. Possible reasons include: + Agentti hylkäsi tämän identiteetin. Mahdolliset syyt sisältävät: - Wordlist for the diceware generator. -[Default: EFF English] - Sanalista noppaware-luojalle. -[Oletus: EFF Englanti] + 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). - Generate a new random password. - Luo uusi satunnainen salasana. + A confirmation request is not supported by the agent (check options). + Agentti ei tue vahvistuspyyntöä (tarkista asetukset). + + + SearchHelpWidget - Length of the generated password. - Luodun salasanan pituus. + Search Help + Etsi apua - Use lowercase characters in the generated password. - Käytä pieniä kirjaimia luodussa salasanassa. + Search terms are as follows: [modifiers][field:]["]term["] + Hakutermit ovat seuraavat: [modifikaattorit][kenttä:]["]termi["] - Use uppercase characters in the generated password. - Käytä isoja kirjaimia luodussa salasanassa. + Every search term must match (ie, logical AND) + Jokaisen hakutermin on sovittava yhteen (esim. looginen AND) - Use numbers in the generated password. - Käytä numeroita luodussa salasanassa. + Modifiers + Modifikaattorit - Use special characters in the generated password. - Käytä erikoismerkkejä luodussa salasanassa. + exclude term from results + älä sisällytä termiä hakutuloksiin - Use extended ASCII in the generated password. - Käytä laajennettua ASCII-merkistöä luodussa salasanassa. + match term exactly + termin on sovittava täysin yhteen - - - QtIOCompressor - Internal zlib error when compressing: - Sisäinen zlib-virhe pakatessa: + use regex in term + käytä termissä regex:iä - Error writing to underlying device: - Kirjoitus taustalla olevaan laitteeseen epäonnistui: + Fields + Kentät - Error opening underlying device: - Taustalla olevan laitteen avaus epäonnistui: + Term Wildcards + Termin jokerimerkit (wildcards) - Error reading data from underlying device: - Virhe luettaessa taustalla olevasta laitteesta: + match anything + vastaa minkä tahansa kanssa - Internal zlib error when decompressing: - Sisäinen zlib-virhe purkaessa: + match one + vastaa yhtä - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - gzip-formaatti ei ole tuettu tässä zlib-versiossa. + logical OR + looginen OR - Internal zlib error: - Sisäinen zlib-virhe: + 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 - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Poistettiin %n salausavain KeePassX/Http-asetuksista.Poistettiin %n salausavainta KeePassX/Http-asetuksista. + + Import + Tuo - KeePassXC: No keys found - KeePassXC: Avaimia ei löytynyt + Export + Vie - No shared encryption-keys found in KeePassHttp Settings. - Jaettuja salausavaimia ei löytynyt KeePassHttp-asetuksista. + Imported certificates + Tuodut varmenteet - KeePassXC: Settings not available! - KeePassXC: Asetukset eivät ole käytettävissä! + Trust + Luota - The active database does not contain an entry of KeePassHttp Settings. - Aktiivinen tietokanta ei sisällä tietuetta KeePassHttp-asetuksilla. + Ask + Kysy - Removing stored permissions... - Poistetaan talletettuja oikeuksia... + Untrust + Älä luota - Abort - Keskeytä + Remove + Poista - KeePassXC: Removed permissions - KeePassXC: Poistetut käyttöoikeudet + Path + Polku - - Successfully removed permissions from %n entries. - Poistettiin käyttöoikeus %n tietueelta.Poistettiin käyttöoikeus %n tietueelta. + + Status + Tila - KeePassXC: No entry with permissions found! - KeePassXC: Merkintää käyttöoikeuksilla ei löytynyt! + Fingerprint + Sormenjälki - The active database does not contain an entry with permissions. - Aktiivinen tietokanta ei sisällä yhtään tietuetta käyttöoikeuksien kanssa. + Certificate + Varmenne - - - SettingsWidget - Application Settings - Sovelluksen asetukset + Trusted + Luotettu - General - Yleistä + Untrusted + Ei luotettu - Security - Turvallisuus + Unknown + Tuntematon - Access error for config file %1 - Pääsyvirhe asetustiedostoon %1 + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - Perusasetukset + KeeShare key file + KeeShare-avaintiedosto - Start only a single instance of KeePassXC - Käynnistä vain yksi KeePassXC-instanssi + All files + Kaikki tiedostot - Remember last databases - Muista viimeisimmät tietokannat + Select path + Valitse polku - Remember last key files and security dongles - Muista viimeisimmät avaintiedostot ja tietoturva-avainlaitteet (donglet) + Exporting changed certificate + Viedään muuttuneita sertifikaatteja - Load previous databases on startup - Lataa edelliset tietokannat käynnistäessä + 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? - Automatically save on exit - Tallenna automaattisesti suljettaessa + Signer: + + + + ShareObserver - Automatically save after every change - Tallenna automaattisesti jokaisen muutoksen jälkeen + Import from container without signature + Tuo säiliöstä ilman allekirjoitusta - Automatically reload the database when modified externally - Lataa tietokanta automaattisesti uudelleen jos tietokantaa muokattiin muualla + 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? - Minimize when copying to clipboard - Pienennä ikkuna kopioidessa leikepöydälle + Import from container with certificate + Tuo säiliöstä sertifikaatin kanssa - Minimize window at application startup - Pienennä ikkuna ohjelman käynnistyessä + Not this time + Ei tällä kertaa - Use group icon on entry creation - Käytä ryhmän kuvaketta tietuetta luodessa + Never + Ei koskaan - 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ä) + Always + Aina - Hide the Details view - Piilota tarkemmat tiedot + Just this time + Vain tämän kerran - Show a system tray icon - Näytä ilmoitusalueen kuvake + Import from %1 failed (%2) + Tuonti kohteesta %1 epäonnistui (%2) - Hide window to system tray when minimized - Piiloita pienennetty ikkuna ilmoitusalueelle + Import from %1 successful (%2) + Tuonti kohteesta %1 onnistui (%2) - Hide window to system tray instead of app exit - Piiloita ikkuna ilmoitusalueelle sulkemisen sijaan + Imported from %1 + Tuotu kohteesta %1 - Dark system tray icon - Tumma ilmoitusalueen kuvake + Signed share container are not supported - import prevented + Allekirjoitettu jaettu säiliö ei ole tuettu - tuonti estettiin - Language - Kieli + File is not readable + Tiedosto ei ole luettavissa - Auto-Type - Automaattitäydennys + Invalid sharing container + Virheellinen jaettu säiliö - Use entry title to match windows for global Auto-Type - Tietue on sopiva, jos sen nimi sisältyy kohdeikkunan otsikkoon yleisessä automaattitäydennyksessä + Untrusted import prevented + Ei-luotettu tuonti estettiin - Use entry URL to match windows for global Auto-Type - Tietue on sopiva, jos sen osoite sisältyy kohdeikkunan otsikkoon yleisessä automaattitäydennyksessä + Successful signed import + Onnistunut allekirjoitettu tuonti - Always ask before performing Auto-Type - Kysy aina ennen automaattitäydennyksen käyttämistä + Unexpected error + Odottamaton virhe - Global Auto-Type shortcut - Globaalin automaattitäydennyksen pikanäppäin + Unsigned share container are not supported - import prevented + Allekirjoittamattoman jaetut säiliöt eivät ole tuettu - tuonti estettiin - Auto-Type delay - Automaattitäydennyksen viive + Successful unsigned import + Onnistunut allekirjoittamaton tuonti - ms - Milliseconds - ms + File does not exist + Tiedostoa ei ole olemassa - Startup - Käynnistys + Unknown share container type + Tuntematon jaetun säiliön tyyppi - File Management - Tiedostohallinta + Overwriting signed share container is not supported - export prevented + Allekirjoitetun jaetun säiliön ylikirjoittaminen ei ole tuettu - vienti estettiin - Safely save database files (may be incompatible with Dropbox, etc) - Tallenna tietokannat turvallisesti (voi olla epäyhteensopiva Dropboxin tmv. kanssa) + Could not write export container (%1) + Vietyä säiliötä ei voitu kirjoittaa (%1) - Backup database file before saving - Ota tietokannasta varmuuskopio ennen tallentamista + Overwriting unsigned share container is not supported - export prevented + Allekirjoittamattoman jaetun säiliön ylikirjoitus ei ole tuettu - vienti estettiin - Entry Management - Tietueiden hallinta + Could not write export container + Vietyä säiliötä ei voitu kirjoittaa - General - Yleistä + Unexpected export error occurred + Tapahtui odottamaton vientivirhe - - - SettingsWidgetSecurity - Timeouts - Aikakatkaisut + Export to %1 failed (%2) + Vienti kohteeseen %1 epäonnistui (%2) - Clear clipboard after - Tyhjennä leikepöytä kun on kulunut + Export to %1 successful (%2) + Vienti kohteeseen %1 onnistui (%2) - sec - Seconds - s + Export to %1 + Vie kohteeseen %1 - Lock databases after inactivity of - Lukitse tietokannat jos on oltu joutilaana + Do you want to trust %1 with the fingerprint of %2 from %3? + - Convenience - Mukavuus + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Lukitse tietokannat kun istunto lukitaan tai kansi suljetaan + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Lukitse tietokanta ikkunan pienennyksen jälkeen + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Älä vaadi salasanan toistoa jos salasana on näkyvillä + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Näytä salasanat oletuksena selkokielisenä + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Piilota salasanat esikatselussa + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Piilota tietueiden huomautukset + Timed Password + Ajastettu salasana - Privacy - Yksityisyys + 000000 + 000000 + + + Copy + Kopioi + + + Expires in <b>%n</b> second(s) + Umpeutuu <b>%n</b> sekunnin kuluttuaUmpeutuu <b>%n</b> sekunnin kuluttua + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Käytä Googlea varajärjestelmänä verkkosivustojen kuvakkeiden latausta varten + Copy + Kopioi - Re-lock previously locked database after performing Auto-Type - Uudelleenlukitse aikaisemmin lukittu tietokanta automaattisyötön jälkeen + 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. + + + There was an error creating the QR code. + QR-koodia luotaessa tapahtui virhe. + + + Closing in %1 seconds. + Suljetaan %1 sekunnin kuluttua. - 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 + sec + Seconds + s + + + Code size: + Koodikoko: 6 digits 6 numeroa - Code size: - Koodikoko: + 7 digits + 7 numeroa - sec - Seconds - s + 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. + + + 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. - - - UnlockDatabaseWidget - Unlock database - Avaa tietokannan lukitus + 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 - - Remove an entry from the database. - Poista tietue tietokannasta. - - - Path of the database. - Tietokannan polku. - - - Path of the entry to remove. - Poistettavan tietueen polku. - + YubiKeyEditWidget - KeePassXC - cross-platform password manager - KeePassXC - järjestelmäriippumaton salasanojen hallintasovellus - - - filenames of the password databases to open (*.kdbx) - avattavien salasanatietokantojen tiedostonimet (*.kdbx) + Refresh + Päivitä - path to a custom config file - polku mukautettuun asetustiedostoon + YubiKey Challenge-Response + YubiKeyn haaste/vastaus - key file of the database - tietokannan avaintiedosto + <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> - read password of the database from stdin - lue tietokannan salasana stdin:istä + No YubiKey detected, please ensure it's plugged in. + YubiKeyta ei ole valittu, varmista että se on liitetty. - 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 202d6c7b8a..8384e14622 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 @@ -38,87 +38,297 @@ Copier dans le presse-papiers - Version %1 - - Version %1 - + Project Maintainers: + 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. + + + + AgentSettingsWidget + + 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 - Revision: %1 - Révision : %1 + Application Settings + Paramètres de l’application - Distribution: %1 - Distribution : %1 + General + Général - Libraries: - Bibliothèques : + Security + Sécurité - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Système d’exploitation : %1 -Architecture processeur : %2 -Noyau : %3 %4 + Access error for config file %1 + Erreur d’accès au fichier de configuration %1 - Enabled extensions: - Extensions activées : + Icon only + Icône uniquement - Project Maintainers: - Mainteneurs du projet : + Text only + Texte uniquement - 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. + Text beside icon + Texte à côté de l'icône - Build Type: %1 - - Genre de la version : %1 - + Text under icon + Texte sous l'icône + + + Follow style + Suivre le style - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - Confirmer l’accès à KeePassXC HTTP + Basic Settings + Paramètres de base - Remember this decision - Mémoriser ce choix + Startup + Démarrage - Allow - Autoriser + Start only a single instance of KeePassXC + Démarrer une seule instance de KeePassXC - Deny - Refuser + Remember last databases + Se souvenir des dernières bases de données - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Activer l’agent SSH (redémarrage nécessaire) + 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 (*.*) + Select custom proxy location + Sélectionner un proxy personnalisé + + + &Tor Browser + &Navigateur Tor - Executable Files (*) - Fichiers exécutables (*) + <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 : - Select custom proxy location - Sélectionner un proxy personnalisé + 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 + - 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. + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -417,152 +661,54 @@ Voulez-vous la remplacer ? Voulez-vous mettre à jour les informations dans %1 - %2 ? - KeePassXC: Database locked! - KeePassXC : La base de données est verrouillée ! + Abort + Annuler - 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. + Converting attributes to custom data… + Conversion des attributs en données personnalisées… - KeePassXC: Settings not available! - KeePassXC : Les paramètres ne sont pas disponibles ! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC : Attributs KeePassHTTP convertis - 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 + 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. - - - 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. - - - - ChangeMasterKeyWidget - - Password - Mot de passe - - - Enter password: - Saisir un mot de passe : - - - Repeat password: - Répéter le mot de passe : - - - &Key file - &Fichier-clé - - - 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 + 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. - Do you really want to use an empty string as password? - Voulez-vous vraiment laisser vide le champ de mot de passe ? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC : Aucune entrée contenant des attributs KeePassHTTP trouvée ! - Different passwords supplied. - Les mots de passe que vous avez saisis sont différents. + 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. - Failed to set %1 as the Key file: -%2 - Échec de définition de %1 comme fichier-clé : -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC : Ancienne integration au navigateur détectée - Legacy key file format - Format de fichier-clé hérité + KeePassXC: Create a new group + - 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é. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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,65 +788,98 @@ 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 : + Données originales : - Error(s) detected in CSV file ! - Des erreurs ont été détectées dans le fichier CSV ! + Error + Erreur - more messages skipped] - d’autres messages ont été cachés] + Empty fieldname %1 + Nom de champ %1 vide - Error - Erreur + column %1 + colonne %1 - CSV import: writer has errors: - - Import CSV : erreurs d’écriture : - + Error(s) detected in CSV file! + Des erreurs ont été détectées dans le fichier CSV ! - - - CsvImportWizard - - Error - Erreur + + [%n more message(s) skipped] + [%n message supplémentaire ignoré][%n messages supplémentaires ignorés] - Unable to calculate master key - Impossible de calculer la clé maîtresse + CSV import: writer has errors: +%1 + Import CSV : scripteur a rencontré des erreurs : +%1 CsvParserModel - %n byte(s), - %n octet, %n octets, + %n column(s) + %n colonne%n colonnes + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n ligne, %n lignes, + %n byte(s) + %n octet%n octets - %n column(s) - %n colonne%n colonnes + %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 @@ -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,163 +937,337 @@ 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é + Can't open key file: +%1 + Impossible d’ouvrir le fichier-clé : +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Impossible d’ouvrir la base de données. + Passwords + Mots de passe + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - La base de données s’est bien ouverte. Aucune action n’est nécéssaire. + Advanced Settings + Paramètres avancés - Success - Réussite + General + Général - 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. + Security + Sécurité - Unable to repair the database. - Impossible de réparer la base de données. + Master Key + Clé maîtresse - - - DatabaseSettingsWidget - General - Général + Encryption Settings + Paramètres de chiffrement - Encryption - Chiffrement + Browser Integration + Intégration aux navigateurs + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Nombre de tours trop élevé + KeePassXC-Browser settings + Paramètres KeePassXC-Browser - 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! - Vous utilisez un très grand nombre de cycles de transformation de clé avec Argon2. - -Si vous conservez ce nombre, votre base de données pourrait prendre des heures voire des jours (ou plus) pour s’ouvrir ! + &Disconnect all browsers + &Déconnecter tous les navigateurs - Understood, keep number - Compris, conserver ce nombre + Forg&et all site-specific settings on entries + Oubli&er tous les paramètres d'entrée spécifiques aux sites - Cancel - Annuler + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Dépla&cer les attributs KeePassHTTP vers les données personnalisées KeePassXC-Browser - Number of rounds too low - Key transformation rounds - Nombre de tours trop faible + Stored keys + Clés stockées - 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! - Vous utilisez un très petit nombre de cycles de transformation de clé avec AES-KDF. - -Si vous conservez ce nombre, votre base de données pourrait être craquées trop facilement ! + Remove + Supprimer - KDF unchanged - KDF inchangé + Delete the selected key? + Supprimer la clé sélectionnée ? - Failed to transform key with new KDF parameters; KDF unchanged. - Échec de la transformation de la clé avec les nouveaux paramètres KDF ; KDF inchangé. - - - MiB - Abbreviation for Mebibytes (KDF settings) - MioMio - - - thread(s) - Threads for parallel execution (KDF settings) - fil d’exécution fils d’exécution + 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. - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Algorithme de chiffrement : + Key + Clé - AES: 256 Bit (default) - AES : 256 bits (par défaut) + Value + Valeur - Twofish: 256 Bit - Twofish : 256 bits + Enable Browser Integration to access these settings. + Activez l'intégration avec le navigateur pour accéder à ces paramètres. - Key Derivation Function: - Fonction de dérivation de clé (KDF) : + Disconnect all browsers + Déconnecter tous les navigateurs web - Transform rounds: - Cycles de transformation : + 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. - Benchmark 1-second delay - Mesurer pour un délai d’une seconde + KeePassXC: No keys found + KeePassXC : Aucune clé n’a été trouvée - Memory Usage: - Utilisation de la mémoire : + No shared encryption keys found in KeePassXC settings. + Aucune clé de chiffrement trouvée dans les paramètres de KeePassXC. - Parallelism: - Parallélisme : + KeePassXC: Removed keys from database + KeePassXC : Les clés ont été supprimées de la base de données - - - DatabaseSettingsWidgetGeneral - - Database Meta Data - Métadonné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. - Database name: - Nom de la base de données : + Forget all site-specific settings on entries + Oublier tous les paramètres d'entrée spécifiques aux sites - Database description: - Description de la base de données : + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + - Default username: - Nom d’utilisateur par défaut : + Removing stored permissions… + Retrait des autorisations enregistrées… - History Settings - Paramètres de l’historique + 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 + Key transformation rounds + Nombre de tours trop élevé + + + 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! + Vous utilisez un très grand nombre de cycles de transformation de clé avec Argon2. + +Si vous conservez ce nombre, votre base de données pourrait prendre des heures voire des jours (ou plus) pour s’ouvrir ! + + + Understood, keep number + Compris, conserver ce nombre + + + Cancel + Annuler + + + Number of rounds too low + Key transformation rounds + Nombre de tours trop faible + + + 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! + Vous utilisez un très petit nombre de cycles de transformation de clé avec AES-KDF. + +Si vous conservez ce nombre, votre base de données pourrait être craquées trop facilement ! + + + KDF unchanged + KDF inchangé + + + Failed to transform key with new KDF parameters; KDF unchanged. + Échec de la transformation de la clé avec les nouveaux paramètres KDF ; KDF inchangé. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + fils d'exécutionfils d'exécution + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + Métadonnées de la base de données + + + Database name: + Nom de la base de données : + + + Database description: + Description de la base de données : + + + Default username: + Nom d’utilisateur par défaut : + + + History Settings + Paramètres de l’historique Max. history items: @@ -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,91 +1295,112 @@ Si vous conservez ce nombre, votre base de données pourrait être craquées tro - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Racine + Sharing + Partage - KeePass 2 Database - Base de données Keepass 2 + Breadcrumb + Fil d'Ariane - All files - Tous les fichiers + Type + Type - Open database - Ouvrir la base de données + Path + Chemin - File not found! - Le fichier est introuvable ! + Last Signer + Dernier signataire - Unable to open the database. - Impossible d’ouvrir la base de données. + Certificates + Certificats - File opened in read only mode. - Fichier ouvert en lecture seule. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Ouvrir le fichier CSV + Add additional protection... + Ajouter une protection supplémentaire... - CSV file - Fichier CSV + No encryption key added + Aucune clé de chiffrement ajoutée - All files (*) - Tous les fichiers (*) + 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 ! - Merge database - Fusionner la base de données + No password set + Aucun mot de passe défini - Open KeePass 1 database - Ouvrir une base de données KeePass 1 + 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 ? - KeePass 1 database - Base de données Keepass 1 + Unknown error + Erreur inconnue - Close? - Fermer ? + Failed to change master key + Impossible de modifier la clé maîtresse + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - « %1 » est en mode édition. -Ignorer les changements et fermer quand même ? + Database Name: + Nom de la base de données : - Save changes? - Enregistrer les changements ? + Description: + Description : + + + DatabaseTabWidget - "%1" was modified. -Save changes? - « %1 » a été modifié. -Enregistrer les changements ? + KeePass 2 Database + Base de données KeePass 2 - Writing the database failed. - Une erreur s’est produite lors de l’écriture de la base de données. + All files + Tous les fichiers - Passwords - Mots de passe + Open database + Ouvrir la base de données - Save database as - Enregistrer la base de données sous + CSV file + Fichier CSV + + + Merge database + Fusionner la base de données + + + Open KeePass 1 database + Ouvrir une base de données KeePass 1 + + + KeePass 1 database + 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 - Nouvelle base de données + Database creation error + Erreur de création de la base de données - locked - verrouillée + 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. - Lock database - Verrouiller la base de données + 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. - 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. + Select CSV file + Sélectionner un fichier CSV - 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 + New Database + Nouvelle base de données - Disable safe saves? - Désactiver les enregistrements sécurisées ? + %1 [New Database] + Database tab name modifier + %1 [Nouvelle base de donné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 [Locked] + Database tab name modifier + %1 [Verrouillé] + + + %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 @@ -1995,1981 +2565,2755 @@ This may cause the affected plugins to malfunction. Cannot save the native messaging script file. Impossible d’enregistrer le fichier de script de la messagerie native - - - HttpPasswordGeneratorWidget + + + KMessageWidget + + &Close + &Fermer + + + Close message + Fermer le message + + + + Kdbx3Reader + + Unable to calculate master key + Impossible de calculer la clé maîtresse + + + Unable to issue challenge-response. + Impossible de lancer une question-réponse. + + + 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 + + Unable to issue challenge-response. + Impossible de lancer une question-réponse. + + + Unable to calculate master key + Impossible de calculer la clé maîtresse + + + + Kdbx4Reader + + missing database headers + les en-têtes de la base de données manquent + + + Unable to calculate master key + Impossible de calculer la clé maîtresse + + + Invalid header checksum size + Taille de la somme de contrôle de l’en-tête non valide + + + Header SHA256 mismatch + SHA256 de l’en-tête ne correspond pas + + + Wrong key or database file is corrupt. (HMAC mismatch) + La clé n’est pas la bonne ou le fichier de base de données est corrompu (non-correspondance HMAC). + + + Unknown cipher + Chiffrement inconnu + + + 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 non valide + + + Invalid header data length + Longueur des données de l’en-tête non valide + + + Failed to open buffer for KDF parameters in header + Échec d’ouverture d’une mémoire tampon pour les paramètres KDF dans l’en-tête + + + Unsupported key derivation function (KDF) or invalid parameters + Fonction de dérivation de clé (KDF) non supporté ou paramètres non valides + + + Legacy header fields found in KDBX4 file. + Champs d’en-tête hérités du fichier KDBX4. + + + Invalid inner header id size + 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 non valide + + + Invalid inner header binary size + Taille binaire de l’en-tête interne non valide + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + Version de table des variantes non supportée. + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + 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 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 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 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 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 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 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 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 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 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 non valide. + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + 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 non valide. + + + Unable to calculate master key + Impossible de calculer la clé maîtresse + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + Échec de sérialisation des paramètres KDF de la table de variantes. + + + + KdbxReader + + Unsupported cipher + Chiffrement non supporté + + + Invalid compression flags length + Longueur des paramètres de compression non valides. + + + Unsupported compression algorithm + Algorithme de compression non pris en charge + + + Invalid master seed size + Taille de semence primaire non valide. + + + Invalid transform seed size + Taille de la semence germée non valide. + + + Invalid transform rounds size + La taille de cycles de transformation est invalide + + + Invalid start bytes size + Taille des octets de début non valide + + + Invalid random stream id size + Taille de l’identifiant du flux aléatoire non valide. + + + Invalid inner random stream cipher + Taille du chiffrement du flux intérieur aléatoire non valide. + + + Not a KeePass database. + Ce n’est pas une base de données 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. + 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...' +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 + + + No root group + Aucun groupe racine + + + Missing icon uuid or data + Données ou uuid de l’icône manquant + + + Missing custom data key or value + Valeur ou clé de donnée personnalisée manquante + + + Multiple group elements + Éléments du groupe multiples + + + Null group uuid + Uuid du groupe sans valeur + + + Invalid group icon number + Numéro de l’icône du groupe non valide + + + Invalid EnableAutoType value + Valeur EnableAutoType non valide + + + Invalid EnableSearching value + Valeur de EnableSearching non valide + + + No group uuid found + Aucun uuid de groupe trouvé + + + Null DeleteObject uuid + Uuid de DeleteObject sans valeur + + + Missing DeletedObject uuid or time + Temps ou uuid de DeletedObject manquant + + + Null entry uuid + Uuid de l’entrée sans valeur + + + Invalid entry icon number + Numéro de l’icône de l’entrée non valide + + + History element in history entry + Élément de l’historique de l’entrée de l’historique + + + No entry uuid found + Aucun uuid d’entrée trouvé + + + History element with different uuid + Élément de l’historique avec un uuid différent + + + Duplicate custom attribute found + Dupliquer l’attribut personnalisé trouvé + + + Entry string key or value missing + Valeur ou clé de la chaîne de caractères de l’entrée manquante + + + Duplicate attachment found + Une pièce a été trouvée en double + + + Entry binary key or value missing + Valeur ou clé du binaire de l’entrée manquante + + + Auto-type association window or sequence missing + Fenêtre ou séquence d’association de saisie automatique manquante + + + Invalid bool value + Valeur bool non valide + + + Invalid date time value + Valeur date time non valide + + + Invalid color value + Valeur de couleur non valide + + + Invalid color rgb part + Partie de couleur RVB non valide + + + Invalid number value + Valeur de nombre non valide + + + Invalid uuid value + 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 KeePass 1 + + + Unable to open the database. + Impossible d’ouvrir la base de données. + + + + KeePass1Reader + + Unable to read keyfile. + Impossible de lire le fichier-clé. + + + Not a KeePass database. + Ce n’est pas une base de données KeePass. + + + Unsupported encryption algorithm. + Algorithme de chiffrement non supporté. + + + Unsupported KeePass database version. + Version de base de données KeePass non supportée. + + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + Impossible de lire le vecteur d’initialisation du chiffrement + + + Invalid number of groups + Nombre de groupes non valide + + + Invalid number of entries + Nombre d’entrées non valide + + + Invalid content hash size + La taille de l’empreinte numérique du contenu est invalide + + + Invalid transform seed size + Taille de la semence germée non valide. + + + Invalid number of transform rounds + Le nombre de cycles de transformation est invalide + + + Unable to construct group tree + Impossible de construire l’arborescence du groupe + + + Root + Racine + + + Unable to calculate master key + Impossible de calculer la clé maîtresse + + + Wrong key or database file is corrupt. + La clé n’est pas la bonne ou le fichier de base de données est corrompu. + + + Key transformation failed + Échec de la transformation de la clé + + + Invalid group field type number + Numéro du type de champ groupe non valide. + + + Invalid group field size + Taille du champ groupe non valide + + + Read group field data doesn't match size + Les données lues dans le champ groupe ne correspondent pas à la taille + + + Incorrect group id field size + Taille du champ "identifiant du groupe" incorrect + + + Incorrect group creation time field size + Taille du champ "date du la création du groupe" incorrect. + + + Incorrect group modification time field size + Taille du champ heure de modification du groupe non correct + + + Incorrect group access time field size + 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. + + + Incorrect group icon field size + Taille du champ "icône du groupe" incorrect. + + + Incorrect group level field size + Taille du champ du niveau du groupe incorrecte + + + Invalid group field type + Type du champ groupe incorrect. + + + Missing group id or level + Niveau ou id du groupe manquant + + + Missing entry field type number + Type du numéro du champ d’entrée manquante + + + Invalid entry field size + Taille du champ de l’entrée non valide + + + Read entry field data doesn't match size + Les données d’entrée lues ne correspondent pas à la taille. + + + Invalid entry uuid field size + 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 non valide + + + Invalid entry icon field size + 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 non valide + + + Invalid entry modification time field size + Taille du champ date de modification de l’entrée non valide + + + Invalid entry expiry time field size + Taille invalide du champ d’entrée heure d’expiration + + + Invalid entry field type + Champ d’entrée type est invalide + + + unable to seek to content position + incapable de se déplacer à la position du contenu + + + + KeeShare + + Disabled share + Partage désactivé + + + Import from + Importer de + + + Export to + Exporter vers + + + Synchronize with + Synchroniser avec + + + 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é + + + + MainWindow + + &Database + &Base de données + + + &Recent databases + &Bases de données récentes + + + &Help + &Aide + + + E&ntries + E&ntrées + + + &Groups + &Groupes + + + &Tools + &Outils + + + &Quit + &Quitter + + + &About + &À propos + + + &Open database... + &Ouvrir la base de données… + + + &Save database + &Enregistrer la base de données + + + &Close database + &Fermer la base de données + + + &Delete entry + &Supprimer l’entrée + + + &Edit group + &Modifier le groupe + + + &Delete group + &Supprimer le groupe + + + Sa&ve database as... + En&registrer la base de données sous... + + + Database settings + Paramètres de la base de données + + + &Clone entry + &Cloner l’entrée + + + Copy &username + Copier le nom d’utilisateur + + + Copy username to clipboard + Copier le nom d’utilisateur dans le presse-papiers + - Length: - Longueur : + Copy password to clipboard + Copier le mot de passe dans le presse-papiers - Character Types - Types de caractères : + &Settings + &Paramètres - Upper Case Letters - Lettres majuscules + Password Generator + Générateur de mots de passe - A-Z - A-Z + &Lock databases + &Verrouiller les bases de données - Lower Case Letters - Lettres minuscules + &Title + &Titre - a-z - a-z + Copy title to clipboard + Copier le titre dans le presse-papiers - Numbers - Chiffres + &URL + &URL - 0-9 - 0-9 + Copy URL to clipboard + Copier l’URL dans le presse-papiers - Special Characters - Caractères spéciaux + &Notes + &Notes - /*_& ... - /*_& … + Copy notes to clipboard + Copier les notes dans le presse-papiers - Exclude look-alike characters - Exclure les caractères qui se ressemblent + &Export to CSV file... + &Exporter dans un fichier CSV... - Ensure that the password contains characters from every group - S’assurer que le mot de passe contienne des caractères de chaque groupe + Set up TOTP... + Configurer TOTP... - Extended ASCII - ASCII étendu + Copy &TOTP + Copie &TOTP - - - KMessageWidget - &Close - &Fermer + E&mpty recycle bin + V&ider la corbeille - Close message - Fermer le message + Clear history + Effacer l’historique - - - Kdbx3Reader - Unable to calculate master key - Impossible de calculer la clé maîtresse + Access error for config file %1 + Erreur d’accès au fichier de configuration %1 - Unable to issue challenge-response. - Impossible de lancer une question-réponse. + Settings + Paramètres - Wrong key or database file is corrupt. - La clé n’est pas la bonne ou le fichier de base de données est corrompu. + Toggle window + Basculer de fenêtre - - - Kdbx3Writer - Unable to issue challenge-response. - Impossible de lancer une question-réponse. + Quit KeePassXC + Quitter KeePassXC - Unable to calculate master key - Impossible de calculer la clé maîtresse + Please touch the button on your YubiKey! + Veuillez appuyez sur le bouton de votre YubiKey ! - - - Kdbx4Reader - missing database headers - les en-têtes de la base de données manquent + 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. + AVERTISSEMENT : Vous utilisez une version instable du KeePassXC ! +Le risque de corruption est élevé, conservez une sauvegarde de vos bases de données. +Cette version n’est pas destinée à la production. - Unable to calculate master key - Impossible de calculer la clé maîtresse + &Donate + &Donner - Invalid header checksum size - Taille de la somme de contrôle de l’en-tête invalide + Report a &bug + Signaler un &bug - Header SHA256 mismatch - SHA256 de l’en-tête ne correspond pas + 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. - Wrong key or database file is corrupt. (HMAC mismatch) - La clé n’est pas la bonne ou le fichier de base de données est corrompu (non-correspondance HMAC). + &Import + &Importer - Unknown cipher - Chiffrement inconnu + Copy att&ribute... + Copier l'att&ribut ... - Invalid header id size - Taille de l’id de l’en-tête invalide + TOTP... + TOTP... - Invalid header field length - Longueur du champ de l’en-tête invalide + &New database... + &Ńouvelle base de données... - Invalid header data length - Longueur des données de l’en-tête invalide + Create a new database + Créer une nouvelle base de données - Failed to open buffer for KDF parameters in header - Échec d’ouverture d’une mémoire tampon pour les paramètres KDF dans l’en-tête + &Merge from database... + &Fusionner depuis la base de données... - Unsupported key derivation function (KDF) or invalid parameters - Fonction de dérivation de clé (KDF) non supporté ou paramètres invalide + Merge from another KDBX database + Fusionner depuis une autre base de données KDBX - Legacy header fields found in KDBX4 file. - Champs d’en-tête hérités du fichier KDBX4. + &New entry + &Nouvelle entrée - Invalid inner header id size - Taille de l’id de l’en-tête interne invalide + Add a new entry + Ajouter une entrée - Invalid inner header field length - Longueur du champ de l’en-tête interne invalide + &Edit entry + Modifier l’entrée - Invalid inner header binary size - Taille binaire de l’en-tête interne invalide + View or edit entry + Voir ou modifier l'entrée - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data - Version de table des variantes non supportée. + &New group + &Nouveau groupe - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data - Longueur du nom de la table des variantes invalide. + Add a new group + Ajouter un groupe - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data - Contenu du nom de la table des variantes invalide. + Change master &key... + Changer la clé &maîtresse… - 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. + &Database settings... + Paramètres de la base de &données ... - 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. + Copy &password + Copier le mot de &passe - 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. + Perform &Auto-Type + Effectuer un remplissage &automatique - 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. + Open &URL + Ouvrir l'&URL - 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. + KeePass 1 database... + Base de données KeePass 1 ... - 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. + Import a KeePass 1 database + Importer une base de données KeePass 1 - 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. + CSV file... + Fichier CSV ... - 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. + Import a CSV file + Importer un fichier CSV - 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. + Show TOTP... + Afficher TOTP ... - - - Kdbx4Writer - Invalid symmetric cipher algorithm. - Algorithme de chiffrement symétrique invalide. + Show TOTP QR Code... + Afficher le QR Code TOTP ... - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher - Taille du vecteur d’initialisation du chiffrement symétrique invalide. + Check for Updates... + Vérifier les mises à jour... - Unable to calculate master key - Impossible de calculer la clé maîtresse + Share entry + Partager l'entrée - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data - Échec de sérialisation des paramètres KDF de la table de variantes. + 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. - - - KdbxReader - Invalid cipher uuid length - Longueur de l’UUID du chiffrement invalide + Check for updates on startup? + Vérifier les mises à jour au démarrage ? - Unsupported cipher - Chiffrement non supporté + Would you like KeePassXC to check for updates on startup? + Voulez-vous que KeePassXC vérifie les mises à jour au démarrage ? - Invalid compression flags length - Longueur des paramètres de compression invalide. + 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 - Unsupported compression algorithm - Algorithme de compression non pris en charge + Creating missing %1 [%2] + Création du %1 manquant [%2] - Invalid master seed size - Taille de la semence primaire invalide. + Relocating %1 [%2] + Déplacement de %1 [%2] - Invalid transform seed size - Taille de la semence germée invalide. + Overwriting %1 [%2] + Écrasement de %1 [%2] - Invalid transform rounds size - La taille de cycles de transformation est invalide + older entry merged from database "%1" + ancienne entrée fusionnée de la base de données "%1" - Invalid start bytes size - Taille des octets de début invalide + Adding backup for older target %1 [%2] + Ajout d'une sauvegarde pour l'ancienne cible %1 [%2] - Invalid random stream id size - Taille de l’identifiant du flux aléatoire invalide. + Adding backup for older source %1 [%2] + Ajout d'une sauvegarde pour l'ancienne source %1 [%2] - Invalid inner random stream cipher - Taille du chiffrement du flux intérieur aléatoire invalide. + 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] - Not a KeePass database. - Ce n’est pas une base de données KeePass. + 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] - 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. - 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… » -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. + Synchronizing from newer source %1 [%2] + Synchronisation depuis une source plus récente %1 [%2] - Unsupported KeePass 2 database version. - Version de la base de données KeePass 2 non pris en charge. + Synchronizing from older source %1 [%2] + Synchronisation depuis une source plus ancienne %1 [%2] - - - KdbxXmlReader - XML parsing failure: %1 - Erreur d’analyse XML : %1 + Deleting child %1 [%2] + Suppression de l'enfant %1 [%2] - No root group - Aucun groupe racine + Deleting orphan %1 [%2] + Suppression de l'orphelin %1 [%2] - Missing icon uuid or data - Données ou UUID de l’icône manquant + Changed deleted objects + Objets supprimés modifiés - Missing custom data key or value - Valeur ou clé de données personnalisée manquante + Adding missing icon %1 + Ajout de l'icône manquante %1 + + + NewDatabaseWizard - Multiple group elements - Éléments du groupe multiples + Create a new KeePassXC database... + Créer une nouvelle base de données KeePassXC - Null group uuid - UUID du groupe sans valeur + Root + Root group + Racine + + + NewDatabaseWizardPage - Invalid group icon number - Numéro de l’icône du groupe invalide + WizardPage + Page d'aide - Invalid EnableAutoType value - Valeur EnableAutoType invalide + En&cryption Settings + Paramètres de &chiffrement - Invalid EnableSearching value - Valeur de EnableSearching invalide + 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. - No group uuid found - Aucun UUID de groupe trouvé + Advanced Settings + Paramètres avancés - Null DeleteObject uuid - UUID de DeleteObject sans valeur + Simple Settings + Paramètres simplifiés + + + NewDatabaseWizardPageEncryption - Missing DeletedObject uuid or time - Temps ou UUID de DeletedObject manquant + Encryption Settings + Paramètres de chiffrement - Null entry uuid - UUID de l’entrée sans valeur + 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 - Invalid entry icon number - Numéro de l’icône de l’entrée invalide + Database Master Key + Clé maîtresse de la base de données - History element in history entry - Élément de l’historique de l’entrée de l’historique + 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 - No entry uuid found - Aucun UUID d’entrée trouvé + General Database Information + Informations générales de base de données - History element with different uuid - Élément de l’historique avec un UUID différent + 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 - Unable to decrypt entry string - Impossible de déchiffrer la chaîne de caractères de l’entrée + Invalid key file, expecting an OpenSSH key + Le fichier-clé est invalide, une clé OpenSSH est attendue - Duplicate custom attribute found - Dupliquer l’attribut personnalisé trouvé + PEM boundary mismatch + Décalage de la limite PEM - Entry string key or value missing - Valeur ou clé de la chaîne de caractères de l’entrée manquante + Base64 decoding failed + Échec du décodage Base64 - Duplicate attachment found - Une pièce a été trouvée en double + Key file way too small. + Le fichier-clé est bien trop petit. - Entry binary key or value missing - Valeur ou clé du binaire de l’entrée manquante + Key file magic header id invalid + L’identifiant de l’en-tête magique du fichier-clé est invalide - Auto-type association window or sequence missing - Fenêtre ou séquence d’association de saisie automatique manquante + Found zero keys + Zéro clés trouvées - Invalid bool value - Valeur booléenne invalide + Failed to read public key. + Échec de lecture de la clé publique. - Invalid date time value - Valeur d’horodatage invalide + Corrupted key file, reading private key failed + Le fichier-clé est corrompu, échec de lecture de la clé privée - Invalid color value - Valeur de couleur invalide + No private key payload to decrypt + Aucune clé privée à décrypter - Invalid color rgb part - Partie de couleur RVB invalide + Trying to run KDF without cipher + Tentative d’exécuter KDF sans chiffrement - Invalid number value - Valeur de nombre invalide + Passphrase is required to decrypt this key + Une phrase de passe est exigée pour déchiffrer cette clé - Invalid uuid value - Valeur UUID invalide + Key derivation failed, key file corrupted? + Échec de dérivation de clé. Le fichier-clé est-il corrompu ? - Unable to decompress binary - Translator meant is a binary data inside an entry - Impossible de décompresser le binaire + Decryption failed, wrong passphrase? + Échec de déchiffrement. La phrase de passe serait-elle erronée ? - - - KeePass1OpenWidget - Import KeePass1 database - Importer une base de données au format KeePass1 + Unexpected EOF while reading public key + End-of-file inattendu lors de la lecture de la clé publique - Unable to open the database. - Impossible d’ouvrir la base de données. + Unexpected EOF while reading private key + End-of-file inattendu lors de la lecture de la clé privée - - - KeePass1Reader - Unable to read keyfile. - Impossible de lire le fichier-clé. + Can't write public key as it is empty + Impossible d’écrire une clé publique car elle est vide - Not a KeePass database. - Ce n’est pas une base de données KeePass. + Unexpected EOF when writing public key + End-of-file inattendu lors de l’écriture de la clé publique - Unsupported encryption algorithm. - Algorithme de chiffrement non supporté. + Can't write private key as it is empty + Impossible d’écrire une clé privée car elle est vide - Unsupported KeePass database version. - Version de base de données KeePass non supportée. + Unexpected EOF when writing private key + End-of-file inattendu lors de l’écriture de la clé privée - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher - Impossible de lire le vecteur d’initialisation du chiffrement + Unsupported key type: %1 + Type de clé non géré : %1 - Invalid number of groups - Nombre de groupes invalide + Unknown cipher: %1 + Chiffrement inconnu : %1 - Invalid number of entries - Nombre d’entrées invalide + Cipher IV is too short for MD5 kdf + Le vecteur d’initialisation du chiffrage est trop court pour la KDF MD5 - Invalid content hash size - La taille de l’empreinte numérique du contenu est invalide + Unknown KDF: %1 + KDF inconnu : %1 - Invalid transform seed size - Taille de la semence germée invalide. + Unknown key type: %1 + Type de clé inconnu : %1 + + + PasswordEditWidget - Invalid number of transform rounds - Le nombre de cycles de transformation est invalide + Enter password: + Saisir un mot de passe : - Unable to construct group tree - Impossible de construire l’arborescence du groupe + Confirm password: + Confirmation du mot de passe : - Root - Racine + Password + Mot de passe - Unable to calculate master key - Impossible de calculer la clé maîtresse + <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> - Wrong key or database file is corrupt. - La clé n’est pas la bonne ou le fichier de base de données est corrompu. + Passwords do not match. + Les mots de passe ne correspondent pas. - Key transformation failed - Échec de la transformation de la clé + Generate master password + Générer un mot de passe maître + + + PasswordGeneratorWidget - Invalid group field type number - Numéro du type de champ groupe invalide. + %p% + %p% - Invalid group field size - Taille du champ groupe invalide + Password: + Mot de passe : - Read group field data doesn't match size - Les données lues dans le champ groupe ne correspondent pas à la taille + strength + Password strength + force - Incorrect group id field size - Taille du champ « identifiant du groupe » incorrect + entropy + entropie - Incorrect group creation time field size - Taille du champ « date du la création du groupe » incorrect. + Password + Mot de passe - Incorrect group modification time field size - Taille du champ heure de modification du groupe non correct + Character Types + Types de caractères: - Incorrect group access time field size - Taille du champ « date d’accès au groupe » incorrect. + Upper Case Letters + Lettres majuscules - Incorrect group expiry time field size - Taille du champ « date d’expiration du groupe » incorrect. + Lower Case Letters + Lettres minuscules - Incorrect group icon field size - Taille du champ « icône du groupe » incorrect. + Numbers + Chiffres - Incorrect group level field size - Taille du champ du niveau du groupe incorrecte + Special Characters + Caractères spéciaux - Invalid group field type - Type du champ groupe incorrect. + Extended ASCII + ASCII étendu - Missing group id or level - Niveau ou id du groupe manquant + Exclude look-alike characters + Exclure les caractères qui se ressemblent - Missing entry field type number - Type du numéro du champ d’entrée manquante + Pick characters from every group + Inclure des caractères de chaque groupe - Invalid entry field size - Taille du champ de l’entrée invalide + &Length: + &Longueur : - Read entry field data doesn't match size - Les données d’entrée lues ne correspondent pas à la taille. + Passphrase + Phrase de passe - Invalid entry uuid field size - Taille du champ UUID de l’entrée invalide + Wordlist: + Liste de mots : - Invalid entry group id field size - Taille du champ id du groupe de l’entrée invalide + Word Separator: + Séparateur de mot : - Invalid entry icon field size - Taille du champ icône de l’entrée invalide + Copy + Copie - Invalid entry creation time field size - Taille du champ date de création de l’entrée invalide + Accept + Accepter - Invalid entry modification time field size - Taille du champ date de modification de l’entrée invalide + Close + Fermer - Invalid entry expiry time field size - Taille invalide du champ d’entrée heure d’expiration + Entropy: %1 bit + Entropie : %1 bits - Invalid entry field type - Champ d’entrée type est invalide + Password Quality: %1 + Qualité du mot de passe : %1 - - - KeePass2 - AES: 256-bit - AES : 256 bits + Poor + Password quality + Pauvre - Twofish: 256-bit - Twofish : 256 bits + Weak + Password quality + Faible - ChaCha20: 256-bit - ChaCha20 : 256 bits + Good + Password quality + Bon - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Excellent + Password quality + Excellent - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + ExtendedASCII + ASCII étendu - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – recommandé) + Switch to advanced mode + Basculer vers le mode avancé - - - Main - 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. + Advanced + Avancé - 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é. + Upper Case Letters A to F + Lettres majuscules de A à F - Another instance of KeePassXC is already running. - Une autre instance de KeePassXC est déjà en cours d’exécution. + A-Z + A-Z - Fatal error while testing the cryptographic functions. - Erreur fatale lors des tests des fonctions cryptographiques. + Lower Case Letters A to F + Lettres minuscules de A à F - KeePassXC - Error - KeePassXC - Erreur + a-z + a-z - - - MainWindow - &Database - &Base de données + 0-9 + 0-9 - &Recent databases - Bases de données récentes + Braces + Accolades - Import - Importer + {[( + {[( - &Help - Aide + Punctuation + Ponctuation - E&ntries - Entrées + .,:; + .,:; - Copy att&ribute to clipboard - Copier l’att&ribut dans le presse-papiers + Quotes + Guillemets - Time-based one-time password - Mot de passe à usage unique basé sur le temps + " ' + " ' - &Groups - Groupes + Math + Math - &Tools - &Outils + <*+!?= + <*+!?= - &Quit - &Quitter + Dashes + Tirets - &About - &À propos + \_|-/ + \_|-/ - &Open database... - &Ouvrir la base de données… + Logograms + Logogramme - &Save database - Enregistrer la base de données + #$%&&@^`~ + #$%&&@^`~ - &Close database - Fermer la base de données + Switch to simple mode + Basculer vers le mode simplifié - &New database - &Nouvelle base de données + Simple + Simple - Merge from KeePassX database - Fusionner depuis la base de données KeePassX + Character set to exclude from generated password + Ensemble de caractères à exclure du mot de passe généré - &Add new entry - Ajouter une nouvelle entrée + Do not include: + Ne pas inclure : - &View/Edit entry - Voir/Editer l’entrée + Add non-hex letters to "do not include" list + Ajouter les lettres non-hexadécimales à la liste "Ne pas inclure" - &Delete entry - Supprimer l’entrée + Hex + Hexadécimal - &Add new group - &Ajouter un nouveau groupe + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caractères exclus : "0", "1", "l", "I", "O", "|", "﹒" - &Edit group - &Modifier le groupe + Word Co&unt: + No&mbre de mot : - &Delete group - &Supprimer le groupe + Regenerate + Régénérer + + + QApplication - Sa&ve database as... - Sau&ver la base de données sous… + KeeShare + KeeShare + + + QFileDialog - Change &master key... - Changer la clé &maîtresse… + Select + Sélectionner + + + QMessageBox - &Database settings - Paramètres de la base de &données + Overwrite + Écraser - Database settings - Paramètres de la base de données + Delete + Supprimer - &Clone entry - Cloner l’entrée + Move + Déplacer - &Find - Trouver + Empty + Vide - Copy &username - Copier le nom d’utilisateur + Remove + Supprimer - Copy username to clipboard - Copier le nom d’utilisateur dans le presse-papiers + Skip + Ignorer - Cop&y password - Copier le mot de passe + Disable + Désactiver - Copy password to clipboard - Copier le mot de passe dans le presse-papiers + Merge + Fusionner + + + QObject - &Settings - Paramètres + Database not opened + La base de données n’est pas ouverte - Password Generator - Générateur de mot de passe + Database hash not available + L’empreinte numérique de la base de données n’est pas disponible - &Perform Auto-Type - Effectuer la saisie automatique + Client public key not received + Clé publique du client non reçue - &Open URL - &Ouvrir l’URL + Cannot decrypt message + Impossible de déchiffrer le message - &Lock databases - Verrouiller les bases de données + Action cancelled or denied + Action annulée ou refusée - &Title - &Titre + KeePassXC association failed, try again + L’association à KeePassXC a échoué, veuillez réessayer - Copy title to clipboard - Copier le titre dans le presse-papiers + Encryption key is not recognized + La clé de chiffrement n’est pas reconnue - &URL - &URL + Incorrect action + Action incorrecte - Copy URL to clipboard - Copier l’URL dans le presse-papiers + Empty message received + Message vide reçu - &Notes - &Notes + No URL provided + Aucune URL définie - Copy notes to clipboard - Copier les notes dans le presse-papiers + No logins found + Aucuns identifiants trouvés - &Export to CSV file... - &Exporter dans un fichier CSV… + Unknown error + Erreur inconnue - Import KeePass 1 database... - Importer une base de données KeePass 1… + Add a new entry to a database. + Ajouter une nouvelle entrée à la base de données. - Import CSV file... - Importer un fichier CSV… + Path of the database. + Chemin d’accès de la base de données. - Re&pair database... - Ré&parer la base de données… + Key file of the database. + Fichier-clé de la base de données. - Show TOTP - Afficher TOTP + path + chemin - Set up TOTP... - Configurer TOTP… + Username for the entry. + Nom d’utilisateur de l’entrée. - Copy &TOTP - Copie &TOTP + username + nom d’utilisateur - E&mpty recycle bin - V&ider la corbeille + URL for the entry. + URL de l’entrée. - Clear history - Effacer l’historique + URL + URL - Access error for config file %1 - Erreur d’accès au fichier de configuration %1 + Prompt for the entry's password. + Demande du mot de passe de l’entrée. - <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> + Generate a password for the entry. + Générer un mot de passe pour l’entrée. - read-only - Lecture seulement + Length for the generated password. + Longueur du mot de passe généré. - Settings - Paramètres + length + longueur - Toggle window - Basculer de fenêtre + Path of the entry to add. + Chemin de l’entrée à ajouter. - Quit KeePassXC - Quitter KeePass XC + Copy an entry's password to the clipboard. + Copier le mot de passe d’une entrée dans le presse-papiers. - KeePass 2 Database - Base de données KeePass 2 + Path of the entry to clip. + clip = copy to clipboard + Chemin de l’entrée à épingler. - All files - Tous les fichiers + Timeout in seconds before clearing the clipboard. + Délai en secondes avant effacement du presse-papiers. - Open database - Ouvrir une base de données + Edit an entry. + Modifier une entrée. - Save repaired database - Enregistrer la base de données réparée + Title for the entry. + Titre de l’entrée. - Writing the database failed. - Une erreur s’est produite lors de l’écriture de la base de données. + title + titre - Please touch the button on your YubiKey! - Veuillez appuyez sur le bouton de votre YubiKey ! + Path of the entry to edit. + Chemin de l’entrée à modifier. - 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. - AVERTISSEMENT : Vous utilisez une version instable du KeePassXC ! -Le risque de corruption est élevé, conservez une sauvegarde de vos bases de données. -Cette version n’est pas destinée à la production. + Estimate the entropy of a password. + Estimer l’entropie d’un mot de passe. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Le fichier-clé est invalide, une clé OpenSSH est attendue + Password for which to estimate the entropy. + Mot de passe pour lequel estimer l’entropie. - PEM boundary mismatch - Décalage de la limite PEM + Perform advanced analysis on the password. + Effectuer une analyse approfondie du mot de passe. - Base64 decoding failed - Échec du décodage Base64 + Extract and print the content of a database. + Extraire et imprimer le contenu d’une base de données. - Key file way too small. - Le fichier-clé est bien trop petit. + Path of the database to extract. + Chemin de la base de données à extraire. - Key file magic header id invalid - L’identifiant de l’en-tête magique du fichier-clé est invalide + Insert password to unlock %1: + Insérer le mot de passe pour déverrouiller %1 : - Found zero keys - Acune clé n’a été trouvée + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + AVERTISSEMENT : 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é. - Failed to read public key. - Échec de lecture de la clé publique. + + +Available commands: + + + +Commandes disponibles : + - Corrupted key file, reading private key failed - Le fichier-clé est corrompu. Échec de lecture de la clé privée. + Name of the command to execute. + Nom de la commande à exécuter. - No private key payload to decrypt - Aucune clé privée à décrypter + List database entries. + Lister les entrées de la base. - Trying to run KDF without cipher - Tentative d’exécuter KDF sans chiffrement + Path of the group to list. Default is / + Chemin du groupe à lister. Par défaut : / - Passphrase is required to decrypt this key - Une phrase de passe est exigée pour déchiffrer cette clé + Find entries quickly. + Trouver rapidement les entrées. - Key derivation failed, key file corrupted? - Échec de dérivation de clé. Le fichier-clé est-il corrompu ? + Search term. + Terme de recherche. - Decryption failed, wrong passphrase? - Échec de déchiffrement. La phrase de passe serait-elle erronée ? + Merge two databases. + Fusionner deux bases de données. - Unexpected EOF while reading public key - Fin de fichier inattendue lors de la lecture de la clé publique + Path of the database to merge into. + Chemin de la base de données cible. - Unexpected EOF while reading private key - Fin de fichier inattendue lors de la lecture de la clé privée + Path of the database to merge from. + Chemin de la base de données source. - Can't write public key as it is empty - Impossible d’écrire une clé publique car elle est vide + Use the same credentials for both database files. + Utiliser les mêmes identifiants pour les deux fichiers de base de données. - Unexpected EOF when writing public key - End-of-file inattendu lors de l’écriture de la clé publique + Key file of the database to merge from. + Fichier-clé de la base de données à partir de laquelle fusionner. - Can't write private key as it is empty - Impossible d’écrire une clé privée car elle est vide + Show an entry's information. + Afficher les informations d’une entrée. - Unexpected EOF when writing private key - Fin de fichier inattendue lors de l’écriture de la clé privée + 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. + Noms des attributs à afficher. Cette option peut être spécifiée plusieurs fois, avec chaque attribut indiqué par une ligne dans l’ordre indiqué. Si aucun attribut n’est spécifié, un résumé des attributs par défaut est donné. - Unsupported key type: %1 - Type de clé non supporté : %1 + attribute + attribut - Unknown cipher: %1 - Chiffrement inconnu : %1 + Name of the entry to show. + Nom de l’entrée à afficher. - Cipher IV is too short for MD5 kdf - Le vecteur d’initialisation du chiffrement est trop court pour la KDF MD5 + NULL device + Périphérique NULL - Unknown KDF: %1 - KDF inconnu : %1 + error reading from device + Erreur de lecture sur le périphérique - Unknown key type: %1 - Type de clé inconnu : %1 + malformed string + chaîne de caractères malformée - - - OptionDialog - Dialog - Dialogue + missing closing quote + fermeture de citation manquante - 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 + Group + Groupe - Enable KeePassHTTP server - Activer le serveur KeePassHTTP + Title + Titre - General - Général + Username + Nom d’utilisateur - 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 + Password + Mot de passe - 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. + Notes + Notes - &Return only best matching entries - &Retourner seulement les meilleures entrées + Last Modified + Dernière modification - 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 + Created + Créé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. + Browser Integration + Intégration aux navigateurs - &Match URL schemes - &Schémas de correspondance URL + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey[%1] question-réponse - Fente %2 - %3 - Sort matching entries by &username - Trier les entrées correspondantes par nom d’&utilisateur + Press + Pressez - Sort &matching entries by title - Trier les entrées correspondantes par titre + Passive + Passif - 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 + SSH Agent + Agent SSH - 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 + Generate a new random diceware passphrase. + Créer une nouvelle phrase de passe générée avec la méthode du lancer de dés. - Password Generator - Générateur de mot de passe + Word count for the diceware passphrase. + Nombre de mots de la phrase de passe générée avec la méthode du lancer de dés. - Advanced - Avancé + Wordlist for the diceware generator. +[Default: EFF English] + Liste de mots pour le générateur par dés. +[Par défaut : FFÉ anglais] - Always allow &access to entries - Toujours autoriser l’&accès aux entrées + Generate a new random password. + Générer un nouveau mot de passe aléatoire. - Always allow &updating entries - Toujours autoriser la mise à jour des entrées + Invalid value for password length %1. + Valeur invalide pour la taille de mot de passe %1. - 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. + Could not create entry with path %1. + Impossible de créer une entrée avec le chemin %1. - Searc&h in all opened databases for matching entries - Cherc&her dans toutes les bases de données ouvertes les entrées correspondantes + Enter password for new entry: + Saisir un mot de passe pour la nouvelle entrée : - 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 ! + Writing the database failed %1. + Échec de l'écriture de la base de données %1. - &Return advanced string fields which start with "KPH: " - &Retourne les champs textuels avancés qui commencent par « KPH : » + Successfully added entry %1. + Ajouté avec succès l'entrée %1. - HTTP Port: - Port HTTP : + Copy the current TOTP to the clipboard. + Copier le code TOTP courant dans le presse-papiers. - Default port: 19455 - Port par défaut : 19455 + Invalid timeout value %1. + Valeur d'expiration non valide %1. - KeePassXC will listen to this port on 127.0.0.1 - KeepassXC va écouter ce port sur 127.0.0.1 + Entry %1 not found. + Entrée %1 non trouvée. - <b>Warning:</b> The following options can be dangerous! - <b>Avertissement :</b> Les options suivantes peuvent être dangereuses ! + Entry with path %1 has no TOTP set up. + L'entrée avec le chemin %1 n'a pas de configuration TOTP. - <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> + Entry's current TOTP copied to the clipboard! + Le code TOTP courant de l'entrée a été copié dans le presse-papiers ! - Cannot bind to privileged ports - Liaison impossible avec les ports privilégiés + Entry's password copied to the clipboard! + Mot de passe de l'entrée copié dans le presse-papiers ! - - 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é. + + Clearing the clipboard in %1 second(s)... + Nettoyage du presse-papiers dans %1 seconde ...Nettoyage du presse-papiers dans %1 secondes ... - - - PasswordGeneratorWidget - %p% - %p% + Clipboard cleared! + Presse-papiers vidé ! - Password: - Mot de passe : + Silence password prompt and other secondary outputs. + Faire taire le champs mot de passe et les autres champs secondaires. - strength - Password strength - force + count + CLI parameter + Compte - entropy - entropie + Invalid value for password length: %1 + Valeur invalide pour la taille de mot de passe : %1 - Password - Mot de passe + Could not find entry with path %1. + Impossible de trouver une entrée avec le chemin %1. - Character Types - Types de caractères + Not changing any field for entry %1. + Aucun changement effectué dans les champs de l'entrée %1. - Upper Case Letters - Lettres majuscules + Enter new password for entry: + Saisir le nouveau mot de passe pour l'entrée : - Lower Case Letters - Lettres minuscules + Writing the database failed: %1 + Échec de l'écriture de la base de données : %1. - Numbers - Nombres + Successfully edited entry %1. + Édité l'entrée %1 avec succès. - Special Characters - Caractères spéciaux + Length %1 + Longueur %1 - Extended ASCII - ASCII étendu + Entropy %1 + Entropie %1 - Exclude look-alike characters - Exclure les caractères se ressemblant + Log10 %1 + Log10 %1 - Pick characters from every group - Inclure des caractères de chaque groupe + Multi-word extra bits %1 + - &Length: - &Longueur : + Type: Bruteforce + Type : Force brute - Passphrase - Phrase de passe + Type: Dictionary + Type : Dictionnaire - Wordlist: - Liste de mots : + Type: Dict+Leet + Type : Dictionnaire + Leet - Word Count: - Nombre de mots : + Type: User Words + Type : Mots utilisateur - Word Separator: - Séparateur de mots : + Type: User+Leet + Type : Utilisateur + Leet - Generate - Générer + Type: Repeated + Type : Répétition - Copy - Copie + Type: Sequence + Type : Séquence - Accept - Accepter + Type: Spatial + Type : Spatial - Close - Fermer + Type: Date + Type : Date - Apply - Appliquer + Type: Bruteforce(Rep) + Type : Bruteforce(Rep) - Entropy: %1 bit - Entropie : %1 bits + Type: Dictionary(Rep) + Type : Dictionnaire(Rep) - Password Quality: %1 - Qualité du mot de passe : %1 + Type: Dict+Leet(Rep) + - Poor - Password quality - Mauvais + Type: User Words(Rep) + Type : Mots Utilisateur(Rep) - Weak - Password quality - Faible + Type: User+Leet(Rep) + - Good - Password quality - Bon + Type: Repeated(Rep) + Type : Répétition(Rep) - Excellent - Password quality - Excellent + Type: Sequence(Rep) + Type : Séquence(Rep) - - - QObject - Database not opened - La base de données n’est pas ouverte + Type: Spatial(Rep) + Type : Spatial(Rep) - Database hash not available - L’empreinte numérique de la base de données n’est pas disponible + Type: Date(Rep) + Type : Date(Rep) - Client public key not received - Clé publique du client non reçue + Type: Unknown%1 + Type : Inconnu%1 - Cannot decrypt message - Impossible de déchiffrer le message + Entropy %1 (%2) + Entropie %1 (%2) - Timeout or cannot connect to KeePassXC - Connexion expirée ou impossible à KeePassXC + *** Password length (%1) != sum of length of parts (%2) *** + - Action cancelled or denied - Action annulée ou refusée + Failed to load key file %1: %2 + Échec de chargement du fichier-clé %1 : %2 - 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 ? + File %1 does not exist. + Le fichier %1 n'existe pas. - KeePassXC association failed, try again - L’association à KeePassXC a échoué, veuillez réessayer + Unable to open file %1. + Impossible d'ouvrir le fichier %1. - Key change was not successful - Le changement de clé n’a pas réussi + Error while reading the database: +%1 + Erreur lors de la lecture de la base de données : +%1 - Encryption key is not recognized - La clé de chiffrement n’est pas reconnue + Error while parsing the database: +%1 + Erreur lors de l'analyse de la base de données : +%1 - No saved databases found - Aucune base de données enregistrée n’a été trouvée + Length of the generated password + Taille du mot de passe généré - Incorrect action - Action incorrecte + Use lowercase characters + Utiliser les caractères minuscules - Empty message received - Message vide reçu + Use uppercase characters + Utiliser les caractères majuscules - No URL provided - Aucune URL définie + Use numbers. + Utiliser des nombres. - No logins found - Aucun identifiant trouvé + Use special characters + Utiliser les caractères spéciaux - Unknown error - Erreur inconnue + Use extended ASCII + Utiliser l'ASCII étendu - Add a new entry to a database. - Ajouter une nouvelle entrée à la base de données. + Exclude character set + Exclure les caractères suivants - Path of the database. - Chemin d’accès de la base de données. + chars + caractères - Key file of the database. - Fichier-clé de la base de données. + Exclude similar looking characters + Exclure les caractères qui se ressemblent - path - chemin + Include characters from every selected group + Inclure des caractères de chaque groupe - Username for the entry. - Nom d’utilisateur de l’entrée. + Recursively list the elements of the group. + Lister récursivement les éléments du groupe - username - nom d’utilisateur + Cannot find group %1. + Impossible de trouver le groupe %1. - URL for the entry. - URL de l’entrée. + Error reading merge file: +%1 + Erreur lors de la lecture du fichier fusionner : +%1 - URL - URL + Unable to save database to file : %1 + Impossible d'enregistrer la base de données dans le fichier : %1 - Prompt for the entry's password. - Demande du mot de passe de l’entrée. + Unable to save database to file: %1 + Impossible d'enregistrer la base de données dans le fichier : %1 - Generate a password for the entry. - Générer un mot de passe pour l’entrée. + Successfully recycled entry %1. + - Length for the generated password. - Longueur du mot de passe généré. + Successfully deleted entry %1. + Supprimé l'entrée %1 avec succès. - length - longueur + Show the entry's current TOTP. + Afficher le TOTP courant pour l'entrée. - Path of the entry to add. - Chemin de l’entrée à ajouter. + ERROR: unknown attribute %1. + ERREUR : attribut %1 inconnu. - Copy an entry's password to the clipboard. - Copier le mot de passe d’une entrée dans le presse-papiers. + No program defined for clipboard manipulation + Aucun logiciel configuré pour la manipulation du presse-papiers - Path of the entry to clip. - clip = copy to clipboard - Chemin de l’entrée à copier. + Unable to start program %1 + Impossible de démarrer le logiciel %1 - Timeout in seconds before clearing the clipboard. - Délai en secondes avant effacement du presse-papiers. + file empty + Fichier vide - Edit an entry. - Modifier une entrée. + %1: (row, col) %2,%3 + %1: (ligne,colonne) %2,%3 - Title for the entry. - Titre de l’entrée. + AES: 256-bit + AES : 256 bits - title - titre + Twofish: 256-bit + Twofish : 256 bits - Path of the entry to edit. - Chemin de l’entrée à modifier. + ChaCha20: 256-bit + ChaCha20 : 256 bits - Estimate the entropy of a password. - Estimer l’entropie d’un mot de passe. + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recommandé) - Password for which to estimate the entropy. - Mot de passe pour lequel estimer l’entropie. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Perform advanced analysis on the password. - Effectuer une analyse approfondie du mot de passe. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Extract and print the content of a database. - Extraire et imprimer le contenu d’une base de données. + Invalid Settings + TOTP + Paramètres invalides - Path of the database to extract. - Chemin de la base de données à extraire. + Invalid Key + TOTP + Clé invalide - Insert password to unlock %1: - Insérer le mot de passe pour déverrouiller %1 : + Message encryption failed. + Erreur lors du chiffrement du message. - Failed to load key file %1 : %2 - Échec de chargement du fichier-clé %1 : %2 + No groups found + Aucun groupe trouvé - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - AVERTISSEMENT : 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é. + Create a new database. + Créer un nouvelle base de données. - - -Available commands: - - - -Commandes disponibles : - + File %1 already exists. + Le fichier %1 existe déjà. - Name of the command to execute. - Nom de la commande à exécuter. + Loading the key file failed + Échec du chargement du fichier-clé - List database entries. - Lister les entrées de la base. + No key is set. Aborting database creation. + Aucune clé définie. Abandon de la création de la base de données. - Path of the group to list. Default is / - Chemin du groupe à lister. Par défaut : / + Failed to save the database: %1. + Impossible d'enregistrer la base de données: %1. - Find entries quickly. - Trouver rapidement les entrées. + Successfully created new database. + Créé avec succès la nouvelle base de données. - Search term. - Terme de recherche. + Insert password to encrypt database (Press enter to leave blank): + - Merge two databases. - Fusionner deux bases de données. + Creating KeyFile %1 failed: %2 + Creation du fichier clé %1 échoué : %2 - Path of the database to merge into. - Chemin de la base de données cible. + Loading KeyFile %1 failed: %2 + Chargement du fichier clé %1 échoué : %2 - Path of the database to merge from. - Chemin de la base de données source. + Remove an entry from the database. + Supprimer une entrée de la base de données. - Use the same credentials for both database files. - Utiliser les mêmes identifiants pour les deux bases de données. + Path of the entry to remove. + Chemin de l’entrée à supprimer. - Key file of the database to merge from. - Fichier-clé de la base de données à partir de laquelle fusionner. + 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. - Show an entry's information. - Afficher les informations d’une entrée. + 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é. - 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. - Noms des attributs à afficher. Cette option peut être spécifiée plusieurs fois, avec chaque attribut indiqué par une ligne dans l’ordre indiqué. Si aucun attribut n’est spécifié, un résumé des attributs par défaut est donné. + KeePassXC - cross-platform password manager + KeePassXC - Gestionnaire de mots de passe multiplateforme - attribute - attribut + filenames of the password databases to open (*.kdbx) + noms de fichiers des bases de données de mots de passe à ouvrir (*.kdbx) - Name of the entry to show. - Nom de l’entrée à afficher. + path to a custom config file + chemin vers un fichier de configuration personnalisé - NULL device - Périphérique NULL + key file of the database + fichier-clé de la base de données - error reading from device - Erreur de lecture sur le périphérique + read password of the database from stdin + lire le mot de passe de la base de données sur l’entrée standard - file empty ! - - le fichier est vide ! - + Parent window handle + Poignée de la fenêtre parent - malformed string - chaîne mal formée + Another instance of KeePassXC is already running. + Une autre instance de KeePassXC est déjà en cours d’exécution. - missing closing quote - Guillemet fermant manquant + Fatal error while testing the cryptographic functions. + Erreur fatale lors des tests des fonctions cryptographiques. - Group - Groupe + KeePassXC - Error + KeePassXC - Erreur - Title - Titre + Database password: + Mot de passe de la base de données : - Username - Nom d’utilisateur + Cannot create new group + + + + QtIOCompressor - Password - Mot de passe + Internal zlib error when compressing: + Erreur interne zlib lors de la compression : - Notes - Notes + Error writing to underlying device: + Erreur d’écriture sur le périphérique concerné : - Last Modified - Dernière modification + Error opening underlying device: + Erreur d’ouverture du périphérique concerné : - Created - Créée + Error reading data from underlying device: + Erreur de lecture sur le périphérique concerné : - Legacy Browser Integration - Ancienne intégration aux navigateurs + Internal zlib error when decompressing: + Erreur interne zlib lors de la décompression : + + + QtIOCompressor::open - Browser Integration - Intégration aux navigateurs + The gzip format not supported in this version of zlib. + Le format gzip n’est pas supporté dans cette version de zlib. - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] question-réponse - Fente %2 - %3 + Internal zlib error: + Erreur interne zlib : + + + SSHAgent - Press - Pressez + Agent connection failed. + Connexion à l'agent impossible. - Passive - Passif + Agent protocol error. + Erreur de protocole avec l'agent - SSH Agent - Agent SSH + No agent running, cannot add identity. + Aucun agent en cours d'exécution, impossible d'ajouter l'identité. - Generate a new random diceware passphrase. - Créer une nouvelle phrase de passe générée au hasard par des dés. + No agent running, cannot remove identity. + Aucun agent en cours d'exécution, impossible de supprimer l'identité. - Word count for the diceware passphrase. - Nombre de mots de la phrase de passe générée par des dés. + Agent refused this identity. Possible reasons include: + L'agent a refusé cette identité. Les raisons possibles sont : - count - Compte + The key has already been added. + La clé a déjà été ajoutée. - Wordlist for the diceware generator. -[Default: EFF English] - Liste de mots pour le générateur par Diceware. -[par défaut : anglais EFF] + 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). - Generate a new random password. - Générer un nouveau mot de passe aléatoire. + 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 - Length of the generated password. - Longueur du mot de passe généré. + Search Help + Chercher dans l'aide - Use lowercase characters in the generated password. - Utiliser les caractères minuscules dans le mot de passe créé. + Search terms are as follows: [modifiers][field:]["]term["] + - Use uppercase characters in the generated password. - Utiliser les caractères majuscules dans le mot de passe créé. + Every search term must match (ie, logical AND) + - Use numbers in the generated password. - Utiliser les nombres dans le mot de passe créé. + Modifiers + Modificateurs - Use special characters in the generated password. - Utiliser les caractères spéciaux dans le mot de passe créé. + exclude term from results + - Use extended ASCII in the generated password. - Utiliser les caractères ASCII étendus dans le mot de passe créé. + match term exactly + correspondance exacte - - - QtIOCompressor - Internal zlib error when compressing: - Erreur interne zlib lors de la compression : + use regex in term + - Error writing to underlying device: - Erreur d’écriture sur le périphérique concerné : + Fields + Champs - Error opening underlying device: - Erreur d’ouverture du périphérique concerné : + Term Wildcards + - Error reading data from underlying device: - Erreur de lecture sur le périphérique concerné : + match anything + - Internal zlib error when decompressing: - Erreur interne zlib lors de la décompression : + match one + - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Le format gzip n’est pas supporté dans cette version de zlib. + logical OR + OU logique - Internal zlib error: - Erreur interne zlib : + Examples + Exemples SearchWidget - - Search... - Recherche… - Search - Chercher + Recherche Clear Effacer - - Case Sensitive - Sensible à la casse - 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 + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC : Nouvelle demande d’association de touche + Active + Actif - 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. + Allow export + Autoriser l'export - KeePassXC: Overwrite existing key? - KeePassXC : Remplacer la clé existante ? + Allow import + Autoriser l'import - 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 ? + Own certificate + Propre certificat - KeePassXC: Update Entry - KeePassXC : Mettre l’entrée à jour + Fingerprint: + Empreinte : - Do you want to update the information in %1 - %2? - Voulez-vous mettre à jour l’information dans %1 - %2 ? + Certificate: + Certificat : - KeePassXC: Database locked! - KeePassXC : La base de données est verrouillée ! + Signer + Signataire - 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. + Key: + Clé : - KeePassXC: Removed keys from database - KeePassXC : Les clés ont été supprimées de la base de données + Generate + Générer - - 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. + + Import + Importer - KeePassXC: No keys found - KeePassXC : Aucune clé n’a été trouvée + Export + Exporter - No shared encryption-keys found in KeePassHttp Settings. - Aucune clé de chiffrement partagée trouvée dans les paramètres de KeePassHttp. + Imported certificates + Certificats importés - KeePassXC: Settings not available! - KeePassXC : Les paramètres ne sont pas disponibles ! + Trust + Approuver - 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. + Ask + Demander - Removing stored permissions... - Retrait des autorisations enregistrées… + Untrust + Désapprouver - Abort - Annuler + Remove + Supprimer - KeePassXC: Removed permissions - KeePassXC : Les autorisations ont été retirées + Path + Chemin - - 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. + + Status + Statut - KeePassXC: No entry with permissions found! - KeePassXC : Aucune entrée avec autorisation n’a été trouvée ! + Fingerprint + Empreinte - 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. + Certificate + Certificat - - - SettingsWidget - Application Settings - Paramètres de l’application + Trusted + Approuvé - General - Général + Untrusted + Non-approuvé - Security - Sécurité + Unknown + Inconnu - Access error for config file %1 - Erreur d’accès au fichier de configuration %1 + key.share + Filetype for KeeShare key + - - - SettingsWidgetGeneral - Basic Settings - Paramètres de base + KeeShare key file + - Start only a single instance of KeePassXC - Démarrer une seule instance de KeePassXC + All files + Tous les fichiers - Remember last databases - Se souvenir des dernières bases de données + Select path + Sélectionner le chemin - Remember last key files and security dongles - Mémoriser les derniers fichiers-clés et les clés électroniques de sécurité + Exporting changed certificate + - Load previous databases on startup - Charger les bases de données précédentes au démarrage + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Automatically save on exit - Enregistrer automatiquement à la sortie + Signer: + + + + ShareObserver - Automatically save after every change - Enregistrer automatiquement après chaque changement + Import from container without signature + - Automatically reload the database when modified externally - Recharger automatiquement la base de données quand celle-ci est modifiée depuis l’extérieur + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Minimize when copying to clipboard - Minimiser après avoir copié dans le presse-papiers + Import from container with certificate + - Minimize window at application startup - Minimiser la fenêtre lors du démarrage de l’application + Not this time + Pas cette fois - Use group icon on entry creation - Utiliser l’icône de groupe à la création d’une entrée + Never + Jamais - 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) + Always + Toujours - Hide the Details view - Masquer la Vue détaillée + Just this time + Cette fois uniquement - Show a system tray icon - Afficher une icône dans la zone de notification + Import from %1 failed (%2) + Échec de l'import depuis %1 (%2) - Hide window to system tray when minimized - Cacher la fenêtre dans la zone de notification une fois minimisée + Import from %1 successful (%2) + Importé avec succès depuis %1 (%2) - Hide window to system tray instead of app exit - Envoyer la fenêtre dans la zone de notification au lieu de quitter l’application + Imported from %1 + Imprté depuis %1 - Dark system tray icon - Icône sombre dans la zone de notification + Signed share container are not supported - import prevented + - Language - Langue + File is not readable + Le fichier n'est pas lisible - Auto-Type - Saisie automatique + Invalid sharing container + - 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. + Untrusted import prevented + - 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. + Successful signed import + - Always ask before performing Auto-Type - Toujours demander avant de procéder à une saisie automatique + Unexpected error + Erreur inattendue - Global Auto-Type shortcut - Raccourci de la saisie automatique + Unsigned share container are not supported - import prevented + - Auto-Type delay - Délai de remplissage de la saisie automatique + Successful unsigned import + - ms - Milliseconds - ms + File does not exist + Le fichier n'existe pas - Startup - Démarrage + Unknown share container type + - File Management - Gestion de fichiers + Overwriting signed share container is not supported - export prevented + - 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.) + Could not write export container (%1) + - Backup database file before saving - Sauvegarder le fichier de base de données avant d’enregistrer + Overwriting unsigned share container is not supported - export prevented + - Entry Management - Gestion des entrées + Could not write export container + - General - Général + Unexpected export error occurred + - - - SettingsWidgetSecurity - Timeouts - Timeouts + Export to %1 failed (%2) + - Clear clipboard after - Vider le presse-papiers après + Export to %1 successful (%2) + - sec - Seconds - s + Export to %1 + - Lock databases after inactivity of - Verrouiller les bases de données après une inactivité de + Do you want to trust %1 with the fingerprint of %2 from %3? + - Convenience - Commodités + Multiple import source path to %1 in %2 + - 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é + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Verrouiller la base de données lorsque la fenêtre est minimisée + Could not embed signature: Could not open file to write (%1) + - 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 + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Afficher les mots de passe en clair par défaut + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Masquer les mots de passe dans le panneau de prévisualisation + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Masquer les notes des entrées par défaut + Timed Password + Mot de passe programmé - Privacy - Confidentialité + 000000 + 000000 + + + Copy + Copie + + Expires in <b>%n</b> second(s) + Expiration dans <b>%n</b>secondeExpiration dans <b>%n</b>secondes + + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Utiliser Google en second recours pour télécharger les icônes des sites Web + Copy + Copie - 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 + 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. - SetupTotpDialog + TotpSetupDialog Setup TOTP Configuration TOTP @@ -3991,59 +5335,84 @@ Veuillez déverrouiller la base de données sélectionnée ou en choisir une aut Utiliser les paramètres personnalisés - 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. + Custom Settings + Paramètres personnalisés Time step: Période de temps : - 8 digits - 8 chiffres + sec + Seconds + s + + + Code size: + Taille du code : 6 digits 6 chiffres - Code size: - Taille du code : + 7 digits + 7 chiffres - sec - Seconds - s + 8 digits + 8 chiffres - TotpDialog + UpdateCheckDialog - Timed Password - Mot de passe programmé + Checking for updates + Vérification des mises à jour - 000000 - 000000 + Checking for updates... + Vérification des mises à jour ... - Copy - Copie + Close + Fermer - Expires in - Expire dans + Update Error! + Erreur de mise à jour ! - seconds - secondes + 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. - - - UnlockDatabaseWidget - Unlock database - Déverrouiller la base de données + 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. @@ -4066,7 +5435,7 @@ Veuillez déverrouiller la base de données sélectionnée ou en choisir une aut Import from CSV - Import depuis un fichier CSV + Importer depuis un CSV Recent databases @@ -4074,46 +5443,30 @@ Veuillez déverrouiller la base de données sélectionnée ou en choisir une aut Welcome to KeePassXC %1 - Bienvenue dans KeePassXC %1 + Bienvenue sur KeePassXC %1 - 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. - + YubiKeyEditWidget - KeePassXC - cross-platform password manager - KeePassXC - Gestionnaire de mots de passe multiplateforme - - - filenames of the password databases to open (*.kdbx) - noms de fichiers des bases de données de mots de passe à ouvrir (*.kdbx) + Refresh + Actualiser - path to a custom config file - chemin vers un fichier de configuration personnalisé + YubiKey Challenge-Response + Question-réponse YubiKey - key file of the database - fichier-clé de la base de données + <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> - read password of the database from stdin - lire le mot de passe de la base de données sur l’entrée standard + No YubiKey detected, please ensure it's plugged in. + Aucune YubiKey détectée, veuillez vérifier qu'elle soit bien branchée. - Parent window handle - Poignée de la fenêtre parent + 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 0000000000..309bf7626f --- /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 0000000000..4a497ba5c3 --- /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 eaf3a4722f..95e035abbc 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 @@ -38,79 +38,290 @@ Vágólapra másolás - Version %1 - - Verzió: %1 - + Project Maintainers: + Projektkarbantartók: + + + 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. + + + + AgentSettingsWidget + + 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 - Revision: %1 - Revízió: %1 + Application Settings + Alkalmazásbeállítások - Distribution: %1 - Disztribúció: %1 + General + Általános - Libraries: - Függvénykönyvtárak: + Security + Biztonság - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operációs rendszer: %1 -CPU architektúra: %2 -Kernel: %3 %4 + Access error for config file %1 + Hozzáférési hiba a beállítási fájlhoz: %1 - Enabled extensions: - Engedélyezett kiterjesztések: + Icon only + Csak ikonok - Project Maintainers: - Projektkarbantartók: + Text only + Csak szöveg - 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. + Text beside icon + Szöveg az ikonok mellett - Build Type: %1 - - Build típusa: %1 + Text under icon + Szöveg az ikonok alatt + + + Follow style + Stílus követése - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP hozzáférési engedély + Basic Settings + Alapvető beállítások - Remember this decision - Döntés megjegyzése + Startup + Indítás - Allow - Engedélyezés + Start only a single instance of KeePassXC + A KeePassXC többszörös indításának tiltása - Deny - Megtagadás + Remember last databases + Utolsó adatbázis megjegyzése - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - SSH ügynök engedélyezése (újraindítást igényel) + 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 @@ -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 @@ -361,31 +585,52 @@ Válassza ki, hogy engedélyezi-e a hozzáférést. <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 (*.*) + Select custom proxy location + Egyedi proxyhely kijelölése - Executable Files (*) - Végrehajtható fájlok (*) + &Tor Browser + &Tor böngésző - Select custom proxy location - Egyedi proxyhely kijelölése + <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: - 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. + Executable Files + Végrehajtható fájlok - - - BrowserService - KeePassXC: New key association request - KeePassXC: Új kulcstársítási kérés + All Files + Minden fájl - You have received an association request for the above key. - + 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 + + + + + BrowserService + + KeePassXC: New key association request + KeePassXC: Új kulcstársítási kérés + + + 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. @@ -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 - - - 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. - - - - ChangeMasterKeyWidget - - Password - Jelszó - - - Enter password: - Jelszó megadása: - - - Repeat password: - Jelszó ismétlése: - - - &Key file - &Kulcsfájl - - - 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… + Converting attributes to custom data… + Attribútumok átalakítása egyéni adatokká… - Unable to create Key File : - Nem hozható létre kulcsfájl: + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Átalakított KeePassHTTP attribútumok - Select a key file - Kulcsfájl kiválasztása + 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. - - Empty password - Üres jelszó + + Successfully moved %n keys to custom data. + %n kulcs sikeresen áthelyezve az egyéni adatokhoz.%n kulcs sikeresen áthelyezve az egyéni adatokhoz. - Do you really want to use an empty string as password? - Valóban üres szöveget szeretne használni jelszóként? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nem található bejegyzés KeePassHTTP attribútumokkal! - Different passwords supplied. - Eltérő jelszavak lettek megadva. + 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. - Failed to set %1 as the Key file: -%2 - A(z) %1 kulcsfájl beállítása sikertelen: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: Örökölt böngészőintegrációs beállítások észlelve - Legacy key file format - Örökölt kulcsfájl formátum + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -657,48 +796,89 @@ Megfontolandó egy új kulcsfájl készítése. Eredeti adatok: - Error(s) detected in CSV file ! - Hibák találhatók a CSV-fájlban! + Error + Hiba - more messages skipped] - további üzenet mellőzve] + Empty fieldname %1 + Üres mezőnév: %1 - Error - Hiba + column %1 + %1. oszlop - CSV import: writer has errors: - - CSV importálás: a mentés hibába ütközött: - + Error(s) detected in CSV file! + Hibák találhatók a CSV-fájlban! - - - CsvImportWizard - - Error - Hiba + + [%n more message(s) skipped] + [%n további üzenet mellőzve][%n további üzenet mellőzve] - Unable to calculate master key - Nem lehet kiszámítani a mesterkulcsot + CSV import: writer has errors: +%1 + CSV importálás: a mentés hibába ütközött: +%1 CsvParserModel - %n byte(s), - %n bájt, %n bájt, + %n column(s) + %n oszlop%n oszlop + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n sor, %n sor, + %n byte(s) + %n bájt%n bájt - %n column(s) - %n oszlop%n oszlop + %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 @@ -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,120 +936,189 @@ 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 + Can't open key file: +%1 + A kulcsfájl nem nyitható meg: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Nem lehet megnyitni az adatbázist. + Passwords + Jelszavak + + + + DatabaseSettingsDialog + + Advanced Settings + Speciális beállítások + + + General + Általános - Database opened fine. Nothing to do. - Az adatbázis megnyitása sikeres. Nincs további teendő. + Security + Biztonság - Success - Sikeres + Master Key + Mesterkulcs - 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. + Encryption Settings + Titkosítási beállítások - Unable to repair the database. - Nem lehet megjavítani az adatbázist. + Browser Integration + Böngészőintegráció - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Általános + KeePassXC-Browser settings + KeePassXC-böngésző beállítások - Encryption - Titkosítás + &Disconnect all browsers + Minden böngésző &leválasztása - Number of rounds too high - Key transformation rounds - Fordulók száma túl magas + Forg&et all site-specific settings on entries + A bejegyzések összes oldalfüggő beállításának &elfelejtése - 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! - Nagyon sok kulcsátalakítási forduló lett megadva az Argon2 számára. - -Ezt a számot megtartva az adatbázis megnyitása órákba vagy napokba (vagy még több időbe) telhet! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + HTTP attribútumok áthelyezése a KeePassXC-böngésző &egyéni adatokhoz - Understood, keep number - Megértettem, maradjon a szám + Stored keys + Tárolt kulcsok - Cancel - Mégse + Remove + Eltávolítás - Number of rounds too low - Key transformation rounds - Fordulók száma túl alacsony + Delete the selected key? + Törli a kiválasztott kulcsot? - 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! - Nagyon kevés kulcsátalakítási forduló lett megadva az AES-KDF számára. - -Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz. + 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. - KDF unchanged - KDF változatlan + Key + Kulcs - Failed to transform key with new KDF parameters; KDF unchanged. - A kulcsátalakítás sikertelen az új KDF paraméterrel; KDF változatlan. + Value + Érték - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB + + Enable Browser Integration to access these settings. + Engedélyezze a böngészőintegrációt ezekhez a beállításokhoz. - - thread(s) - Threads for parallel execution (KDF settings) - szálszál + + Disconnect all browsers + Minden böngésző leválasztása - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Titkosítási algoritmus: + 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. - AES: 256 Bit (default) - AES: 256 Bit (alapértelmezett) + KeePassXC: No keys found + KeePassXC: Nincs találat a kulcsok között - Twofish: 256 Bit - Twofish: 256 bit + 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: @@ -899,6 +1140,113 @@ Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz.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 + Key transformation rounds + Fordulók száma túl magas + + + 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! + Nagyon sok kulcsátalakítási forduló lett megadva az Argon2 számára. + +Ezt a számot megtartva az adatbázis megnyitása órákba vagy napokba (vagy még több időbe) telhet! + + + Understood, keep number + Megértettem, maradjon a szám + + + Cancel + Mégse + + + Number of rounds too low + Key transformation rounds + Fordulók száma túl alacsony + + + 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! + Nagyon kevés kulcsátalakítási forduló lett megadva az AES-KDF számára. + +Ezt a számot megtartva az adatbázis nagyon könnyen törhető lesz. + + + KDF unchanged + KDF változatlan + + + Failed to transform key with new KDF parameters; KDF unchanged. + A kulcsátalakítás sikertelen az új KDF paraméterrel; KDF változatlan. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + szálszál + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + DatabaseSettingsWidgetGeneral @@ -948,91 +1296,112 @@ 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 - KeePass 2 Database - KeePass 2 adatbázis + Breadcrumb + Morzsamenü - All files - Minden fájl + Type + Típus - Open database - Adatbázis megnyitása + Path + Útvonal - File not found! - A fájl nem található! + Last Signer + Legutóbbi aláíró - Unable to open the database. - Nem lehet megnyitni az adatbázist. + Certificates + Tanúsítványok - File opened in read only mode. - Fájl megnyitva csak olvashatóként + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - CSV-fájl megnyitása + Add additional protection... + További védelem hozzáadása… - CSV file - CSV-fájl + No encryption key added + Nincs titkosítási kulcs hozzáadva - All files (*) - Minden fájl (*) + 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! - Merge database - Adatbázis összeolvasztása + No password set + Nincs jelszó megadva - Open KeePass 1 database - KeePass 1 adatbázis megnyitása + 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? - KeePass 1 database - KeePass 1 adatbázis + Unknown error + Ismeretlen hiba - Close? - Bezárja? + Failed to change master key + A mesterkulcs módosítása meghiúsult + + + DatabaseSettingsWidgetMetaDataSimple - "%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? + Database Name: + Adatbázis neve: - Save changes? - Menti a módosításokat? + Description: + Leírás: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - A(z) „%1” módosítva lett. -Menti a módosításokat? + KeePass 2 Database + KeePass 2 adatbázis - Writing the database failed. - Az adatbázis kiírása sikertelen. + All files + Minden fájl - Passwords - Jelszavak + Open database + Adatbázis megnyitása - Save database as - Adatbázis mentése más néven + CSV file + CSV-fájl + + + Merge database + Adatbázis egyesítése + + + Open KeePass 1 database + KeePass 1 adatbázis megnyitása + + + KeePass 1 database + KeePass 1 adatbázis Export database to CSV file @@ -1043,40 +1412,41 @@ Menti a módosításokat? A CSV-fájl mentése sikertelen. - New database - Új adatbázis + Database creation error + Adatbázis létrehozási hiba - locked - zárolva + 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. - Lock database - Adatbázis zárolása + The database file does not exist or is not accessible. + Az adatbázisfájl nem létezik, vagy nem lehet hozzáférni. - 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. + Select CSV file + Válasszon CSV-fájlt - 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. + New Database + Új adatbázis - Disable safe saves? - Letiltható a biztonságos mentés? + %1 [New Database] + Database tab name modifier + %1 [Új adatbázis] - 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 [Locked] + Database tab name modifier + %1 [Zárolva] + + + %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 + + 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? + - Generate TOTP Token - TOTP jelsor előállítása + File opened in read only mode. + Fájl megnyitva csak olvashatóként - Close - Bezárás + Lock Database? + Zárolja az adatbázist? - General - Általános + You are editing an entry. Discard changes and lock anyway? + Egy bejegyzést szerkeszt. Elveti a változásokat, és mindenképp zárolja? - Password - Jelszó + "%1" was modified. +Save changes? + A(z) „%1” módosítva lett. +Menti a módosításokat? - URL - URL + Database was modified. +Save changes? + Az adatbázis módosítva lett. +Menti a változásokat? - Expiration - Lejárat + Save changes? + Menti a módosításokat? - Username - Felhasználónév + 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 - Autotype - Automatikus típus + Disable safe saves? + Letiltható a biztonságos mentés? - Searching - Keresé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? - Attributes - Attribútumok + Writing the database failed. +%1 + Az adatbázis írása meghiúsult. +%1 - Attachments - Mellékletek + Passwords + Jelszavak - Notes - Jegyzetek + Save database as + Adatbázis mentése más néven - Window - Ablak + KeePass 2 Database + KeePass 2 adatbázis - Sequence - Sorrend + 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? - Search - Keresés + Delete group + Csoport törlése - Clear - Törlés + Move group to recycle bin? + Legyen a csoport áthelyezve a kukába? - Never - Soha + Do you really want to move the group "%1" to the recycle bin? + Valóban legyen a(z) „%1” csoport áthelyezve a kukába? - [PROTECTED] - [VÉDETT] + Successfully merged the database files. + Az adatbázisfájlok sikeresen egyesítve lettek. - Disabled - Tiltott + Database was not modified by merge operation. + Az adatbázis nem változott az összeolvasztási művelet során. - Enabled - Engedélyezett + 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 @@ -1996,84 +2569,49 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. - HttpPasswordGeneratorWidget + KMessageWidget - Length: - Hosszúság: + &Close + &Bezárás - Character Types - Karaktertípusok + Close message + Bezárási üzenet + + + Kdbx3Reader - Upper Case Letters - Nagybetűk + Unable to calculate master key + Nem lehet kiszámítani a mesterkulcsot - A-Z - A-Z + Unable to issue challenge-response. + Nem lehet kiutalni a kihívás-választ. - 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 + Wrong key or database file is corrupt. + Rossz kulcs vagy sérült adatbázisfájl. - - - KMessageWidget - &Close - &Bezárás + missing database headers + hiányzó adatbázis fejlécek - Close message - Bezárási üzenet + Header doesn't match hash + A fejléc nem egyezik meg a hash értékkel - - - Kdbx3Reader - Unable to calculate master key - Nem lehet kiszámítani a mesterkulcsot + Invalid header id size + Érvénytelen fejléc-azonosító méret - Unable to issue challenge-response. - Nem lehet kiutalni a kihívás-választ. + Invalid header field length + Érvénytelen fejlécmezőhossz - Wrong key or database file is corrupt. - Rossz kulcs vagy sérült adatbázisfájl. + Invalid header data length + Érvénytelen fejlécadathossz @@ -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 + + unable to seek to content position + nem lehet a tartalom pozíciójához lépni + - KeePass2 + KeeShare - AES: 256-bit - AES: 256 bites + Disabled share + Letiltott megosztás - Twofish: 256-bit - Twofish: 256 bites + Import from + Importálás innen - ChaCha20: 256-bit - ChaCha20: 256 bites + Export to + Exportálás ide - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Szinkronizálás ezzel - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – ajánlott) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - 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. + Key Component + Kulcs komponens - 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. + Key Component Description + Kulcs komponens leírása - Another instance of KeePassXC is already running. - A KeePassXC egy másik példánya is fut. + Cancel + Mégse - Fatal error while testing the cryptographic functions. - Végzetes hiba a kriptográfiai funkciók tesztelése közben. + Key Component set, click to change or remove + Kulcs komponens beállítva, kattintson a módosításhoz vagy eltávolításhoz - KeePassXC - Error - KeePassXC – Hiba + 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,226 +3434,394 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Érvénytelen kulcsfájl, egy OpenSSh kulcs az elvált + &Donate + &Támogatás - PEM boundary mismatch - PEM-perem eltérés + Report a &bug + &Hiba jelentése - Base64 decoding failed - Base64-dekódolás sikertelen + 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. - Key file way too small. - A kulcsfájl útja túl kicsi. + &Import + &Importálás - Key file magic header id invalid - Érvénytelen a kulcsfájl mágikus fejlécazonosítója + Copy att&ribute... + Att&ribútum másolása… - Found zero keys - Egyetlen kulcs sem található + TOTP... + TOTP… - Failed to read public key. - Nyilvános kulcs olvasása sikertelen. + &New database... + Ú&j adatbázis… - Corrupted key file, reading private key failed - Sérült kulcsfájl, személyes kulcs olvasása sikertelen + Create a new database + Új adatbázis létrehozása - No private key payload to decrypt - Nincs dekódolható adat a személyes kulcsból + &Merge from database... + &Egyesítés adatbázisból… - Trying to run KDF without cipher - KDF futtatási kísérlet titkosító nélkül + Merge from another KDBX database + Egyesítés egy másik KeePassX adatbázisból - Passphrase is required to decrypt this key - Jelmondat szükséges a kulcsfájl visszafejtéséhez + &New entry + Ú&j bejegyzés - Key derivation failed, key file corrupted? - A kulcsszármaztatási sikertelen, megsérült a kulcsfájl? + Add a new entry + Új bejegyzés hozzáadása - Decryption failed, wrong passphrase? - Visszafejtés sikertelen, rossz a jelmondat? + &Edit entry + Bejegyzés sz&erkesztése - Unexpected EOF while reading public key - Nem várt EOF a nyilvános kulcs olvasása közben + View or edit entry + Bejegyzés megtekintése vagy szerkesztése - Unexpected EOF while reading private key - Nem várt EOF a személyes kulcs olvasása közben + &New group + Ú&j csoport - Can't write public key as it is empty - Nem lehet írni a nyilvános kulcsot, mivel üres + Add a new group + Új csoport hozzáadása - Unexpected EOF when writing public key - Nem várt EOF a nyilvános kulcs írásakor + Change master &key... + &Mesterkulcs módosítása… - Can't write private key as it is empty - Nem lehet írni a személyes kulcs, mivel üres + &Database settings... + &Adatbázis-beállítások… - Unexpected EOF when writing private key - Nem várt EOF a személyes kulcs írásakor + Copy &password + &Jelszó másolása - Unsupported key type: %1 - Nem támogatott kulcstípus: %1 + Perform &Auto-Type + &Automatikus beírás - Unknown cipher: %1 - Ismeretlen titkosító: %1 + Open &URL + &URL megnyitása - Cipher IV is too short for MD5 kdf - A IV titkosító túl rövid a MD5 KDF számára + KeePass 1 database... + KeePass 1 adatbázis… - Unknown KDF: %1 - Ismeretlen KDF: %1 + Import a KeePass 1 database + KeePass 1 adatbázis importálása - Unknown key type: %1 - Ismeretlen kulcstípus: %1 + 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. - OptionDialog + Merger - Dialog - Párbeszédablak + Creating missing %1 [%2] + Hiányzó %1 létrehozása [%2] - 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 + Relocating %1 [%2] + %1 áthelyezése [%2] - Enable KeePassHTTP server - KeePassHTTP kiszolgáló engedélyezése + Overwriting %1 [%2] + %1 felülírása [%2] - General - Általános + older entry merged from database "%1" + régebbi bejegyzés összeolvasztva a(z) „%1” adatbázisból - 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 + Adding backup for older target %1 [%2] + Biztonsági mentés hozzáadása a régebbi %1 célhoz [%2] - 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. + Adding backup for older source %1 [%2] + Biztonsági mentés hozzáadása a régebbi %1 forráshoz [%2] - &Return only best matching entries - Csak a &legjobb találatok visszaadása + 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] - Re&quest to unlock the database if it is locked - Adatbázis feloldási &kérelem, ha zárolva van + 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] - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Csak az azonos sémájú (http://, https://, ftp://, …) bejegyzések visszaadása. + Synchronizing from newer source %1 [%2] + Szinkronizálás az újabb %1 forrásból [%2] - &Match URL schemes - &URL sémákra illeszkedés + Synchronizing from older source %1 [%2] + Szinkronizálás a régebbi %1 forrásból [%2] - Sort matching entries by &username - Találatok rendezése &felhasználónév szerint + Deleting child %1 [%2] + %1 gyermek törlése [%2] - Sort &matching entries by title - Találatok rendezése &cím szerint + Deleting orphan %1 [%2] + %1 elárvult bejegyzés törlése [%2] - 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 + Changed deleted objects + Törölt objektumok módosítva - 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 + Adding missing icon %1 + Hiányzó %1 ikon hozzáadása + + + NewDatabaseWizard - Password Generator - Jelszógenerátor + Create a new KeePassXC database... + Új KeePassXC adatbázis létrehozása… - Advanced - Speciális + Root + Root group + Gyökér + + + NewDatabaseWizardPage - Always allow &access to entries - &Hozzáférés mindenkori engedélyezése a bejegyzésekhez + WizardPage + Varázsló oldal - Always allow &updating entries - Bejegyzések &frissítésének mindenkori engedélyezése + En&cryption Settings + &Titkosítási beállítások - Only the selected database has to be connected with a client. - Csak a kijelölt adatbázishoz kell kapcsolódnia egy klienssel. + 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. - Searc&h in all opened databases for matching entries - &Keresés minden megnyitott adatbázis bejegyzéseiben + Advanced Settings + Speciális beállítások - 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. + Simple Settings + Egyszerű beállítások + + + NewDatabaseWizardPageEncryption - &Return advanced string fields which start with "KPH: " - A „KPH:”-val kezdődő fejlett karakterlánc mezők &visszaadása + Encryption Settings + Titkosítási beállítások - HTTP Port: - HTTP port: + 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 - Default port: 19455 - Alapértelmezett port: 19455 + Database Master Key + Adatbázis mesterkulcs - KeePassXC will listen to this port on 127.0.0.1 - A KeePassXC ezen a porton fog figyelni: 127.0.0.1 + A master key known only to you protects your database. + A csak Ön által ismert mesterkulcs védi az adatbázisát. + + + NewDatabaseWizardPageMetaData - <b>Warning:</b> The following options can be dangerous! - <b>Figyelmeztetés:</b> A következő beállítások veszélyesek lehetnek! + 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 + + Invalid key file, expecting an OpenSSH key + Érvénytelen kulcsfájl, egy OpenSSh kulcs az elvált + + + PEM boundary mismatch + PEM-perem eltérés + + + Base64 decoding failed + Base64-dekódolás sikertelen + + + Key file way too small. + A kulcsfájl útja túl kicsi. + + + Key file magic header id invalid + Érvénytelen a kulcsfájl mágikus fejlécazonosítója + + + Found zero keys + Egyetlen kulcs sem található + + + Failed to read public key. + Nyilvános kulcs olvasása sikertelen. + + + Corrupted key file, reading private key failed + Sérült kulcsfájl, személyes kulcs olvasása sikertelen + + + No private key payload to decrypt + Nincs dekódolható adat a személyes kulcsból + + + Trying to run KDF without cipher + KDF futtatási kísérlet titkosító nélkül + + + Passphrase is required to decrypt this key + Jelmondat szükséges a kulcsfájl visszafejtéséhez + + + Key derivation failed, key file corrupted? + A kulcsszármaztatási sikertelen, megsérült a kulcsfájl? + + + Decryption failed, wrong passphrase? + Visszafejtés sikertelen, rossz a jelmondat? + + + Unexpected EOF while reading public key + Nem várt EOF a nyilvános kulcs olvasása közben + + + Unexpected EOF while reading private key + Nem várt EOF a személyes kulcs olvasása közben - <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> + Can't write public key as it is empty + Nem lehet írni a nyilvános kulcsot, mivel üres + + + Unexpected EOF when writing public key + Nem várt EOF a nyilvános kulcs írásakor + + + Can't write private key as it is empty + Nem lehet írni a személyes kulcs, mivel üres + + + Unexpected EOF when writing private key + Nem várt EOF a személyes kulcs írásakor + + + Unsupported key type: %1 + Nem támogatott kulcstípus: %1 + + + Unknown cipher: %1 + Ismeretlen titkosító: %1 + + + Cipher IV is too short for MD5 kdf + A IV titkosító túl rövid a MD5 KDF számára + + + Unknown KDF: %1 + Ismeretlen KDF: %1 + + + Unknown key type: %1 + Ismeretlen kulcstípus: %1 + + + + PasswordEditWidget + + Enter password: + Jelszó megadása: + + + Confirm password: + Jelszó megerősítése: + + + Password + Jelszó + + + <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> - Cannot bind to privileged ports - Nem lehet privilegizált portokhoz kötődni + Passwords do not match. + A jelszavak nem egyeznek - 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,135 +3935,284 @@ Az alapértelmezett 19455 port lesz használva. Password quality Kiváló - - - QObject - Database not opened - Az adatbázis nem lett megnyitva + ExtendedASCII + Bővített ASCII - Database hash not available - Az adatbázishasító nem elérhető + Switch to advanced mode + Váltás speciális módba - Client public key not received - A kliens nyilvános kulcsa nem érkezett meg + Advanced + Speciális - Cannot decrypt message - Nem lehet visszafejteni az üzenetet + Upper Case Letters A to F + Nagybetűk A-tól F-ig - Timeout or cannot connect to KeePassXC - Időtúllépés vagy nem lehet csatlakozni a KeePassXC-hez + A-Z + A-Z - Action cancelled or denied - A műveletet megszakították vagy visszautasították + Lower Case Letters A to F + Kisbetűk a-tól f-ig - 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? + a-z + a-z - KeePassXC association failed, try again - A KeePassXC társítása sikertelen, próbálja újra + 0-9 + 0-9 - Key change was not successful - A kulcsmódosítás nem volt sikeres + Braces + Zárójelek - Encryption key is not recognized - A titkosítási kulcs nem lett felismerve + {[( + {[( - No saved databases found - Nincs található mentett adatbázis + Punctuation + Központozás - Incorrect action - Helytelen művelet + .,:; + .,:; - Empty message received - Üres üzenet érkezett + Quotes + Idézőjelek - No URL provided - Nincs URL biztosítva + " ' + " ' - No logins found - Belépések nem találhatók + Math + Matematika - Unknown error - Ismeretlen hiba + <*+!?= + <*+!?= - Add a new entry to a database. - Új bejegyzés hozzáadása egy adatbázishoz. + Dashes + Kötőjelek - Path of the database. - Adatbázis útvonala. + \_|-/ + \_|-/ - Key file of the database. - Adatbázis kulcsfájlja. + Logograms + Logogramok - path - útvonal + #$%&&@^`~ + #$%&&@^`~ - Username for the entry. - Bejegyzés felhasználóneve. + Switch to simple mode + Váltás egyszerű módba - username - felhasználónév + Simple + Egyszerű - URL for the entry. - Bejegyzés URL-je. + Character set to exclude from generated password + A jelszó előállításnál kihagyandó karakterkészletek - URL - URL + Do not include: + Ne tartalmazza: - Prompt for the entry's password. - Bejegyzés jelszavának bekérése. + Add non-hex letters to "do not include" list + A nem hexadecimális betűk hozzáadása a „ne tartalmazza” listához - Generate a password for the entry. - Jelszó előállítása a bejegyzés számára. + Hex + Hexadecimális - Length for the generated password. - Előállított jelszó hossza. + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Kihagyott karakterek: „0”, „1”, „l”, „I”, „O”, „|”, „﹒” - length - hosszúság + Word Co&unt: + Szavak szá&ma: - Path of the entry to add. - Hozzáadandó bejegyzés útvonala. + Regenerate + Újra előállítás + + + QApplication - Copy an entry's password to the clipboard. - Egy bejegyzés jelszavának vágólapra való másolása. + KeeShare + KeeShare + + + QFileDialog - Path of the entry to clip. - clip = copy to clipboard - Levágandó bejegyzés útvonala. + 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 + + Database not opened + Az adatbázis nem lett megnyitva + + + Database hash not available + Az adatbázishasító nem elérhető + + + Client public key not received + A kliens nyilvános kulcsa nem érkezett meg + + + Cannot decrypt message + Nem lehet visszafejteni az üzenetet + + + Action cancelled or denied + A műveletet megszakították vagy visszautasították + + + KeePassXC association failed, try again + A KeePassXC társítása sikertelen, próbálja újra + + + Encryption key is not recognized + A titkosítási kulcs nem lett felismerve + + + Incorrect action + Helytelen művelet + + + Empty message received + Üres üzenet érkezett + + + No URL provided + Nincs URL biztosítva + + + No logins found + Belépések nem találhatók + + + Unknown error + Ismeretlen hiba + + + Add a new entry to a database. + Új bejegyzés hozzáadása egy adatbázishoz. + + + Path of the database. + Adatbázis útvonala. + + + Key file of the database. + Adatbázis kulcsfájlja. + + + path + útvonal + + + Username for the entry. + Bejegyzés felhasználóneve. + + + username + felhasználónév + + + URL for the entry. + Bejegyzés URL-je. + + + URL + URL + + + Prompt for the entry's password. + Bejegyzés jelszavának bekérése. + + + Generate a password for the entry. + Jelszó előállítása a bejegyzés számára. + + + Length for the generated password. + Előállított jelszó hossza. + + + length + hosszúság + + + Path of the entry to add. + Hozzáadandó bejegyzés útvonala. + + + Copy an entry's password to the clipboard. + Egy bejegyzés jelszavának vágólapra való másolása. + + + Path of the entry to clip. + clip = copy to clipboard + Levágandó bejegyzés útvonala. + + Timeout in seconds before clearing the clipboard. Késleltetés a vágólap törlése előtt (másodpercben). @@ -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. + + + Could not create entry with path %1. + Nem hozható létre bejegyzés a(z) %1 útvonallal. + + + Enter password for new entry: + Adja meg a jelszót az új bejegyzéshez: + + + Writing the database failed %1. + Az adatbázis kiírása sikertelen: %1. + + + Successfully added entry %1. + A(z) %1 bejegyzés sikeresen hozzáadva. + + + 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… - Use lowercase characters in the generated password. - Kisbetűk alkalmazása az előállított jelszóban. + Clipboard cleared! + Vágólap törölve! - Use uppercase characters in the generated password. - Nagybetűk alkalmazása az előállított jelszóban. + Silence password prompt and other secondary outputs. + Jelszó bekérés és egyéb másodlagos kimenetek némítása. - Use numbers in the generated password. - Számok alkalmazása az előállított jelszóban. + 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. - Use special characters in the generated password. - Speciális karakterek alkalmazása az előállított jelszóban. + Enter new password for entry: + Adja meg a bejegyzés új jelszavát: - Use extended ASCII in the generated password. - Kiterjesztett ASCII karakterek alkalmazása az előállított jelszóban. + 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 + @@ -3626,31 +4870,117 @@ Elérhető parancsok: Hiba az alárendelt eszköz megnyitásakor: - Error reading data from underlying device: - Hiba az alárendelt eszközről történő adatolvasás során: + Error reading data from underlying device: + Hiba az alárendelt eszközről történő adatolvasás során: + + + Internal zlib error when decompressing: + Belső zlib hiba kibontás közben: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + A gzip formátum nem támogatott a zlib ezen verziójában. + + + Internal zlib error: + Belső zlib hiba: + + + + SSHAgent + + 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 - Internal zlib error when decompressing: - Belső zlib hiba kibontás közben: + match one + illeszkedés egyre - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - A gzip formátum nem támogatott a zlib ezen verziójában. + logical OR + logikai VAGY - Internal zlib error: - Belső zlib hiba: + Examples + Példák SearchWidget - - Search... - Keresés… - 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 - - 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. + + Import + Importálás - KeePassXC: No keys found - KeePassXC: Nincs találat a kulcsok között + Export + Exportálás - No shared encryption-keys found in KeePassHttp Settings. - Nem található megosztott titkosítási kulcs a KeePassHTTP beállításokban. + Imported certificates + Importált tanúsítványok - KeePassXC: Settings not available! - KeePassXC: Nincs ilyen beállítás! + Trust + Megbízható - 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. + Ask + Kérdéses - Removing stored permissions... - Tárolt jogosultságok törlése… + Untrust + Megbízhatatlan - Abort - Megszakítás + Remove + Eltávolítás - KeePassXC: Removed permissions - KeePassXC: Jogosultságok eltávolítva + Path + Útvonal - - 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. + + Status + Állapot - KeePassXC: No entry with permissions found! - KeePassXC: Nem található bejegyzés ilyen jogosultsággal! + Fingerprint + Ujjlenyomat - The active database does not contain an entry with permissions. - Az aktív adatbázisban nincs egyetlen jogosultsági bejegyzés sem. + Certificate + Tanúsítvány - - - SettingsWidget - Application Settings - Alkalmazásbeállítások + Trusted + Megbízható - General - Általános + Untrusted + Megbízhatatlan - Security - Biztonság + Unknown + Ismeretlen - Access error for config file %1 - Hozzáférési hiba a beállítási fájlhoz: %1 + key.share + Filetype for KeeShare key + kulcs.share - - - SettingsWidgetGeneral - Basic Settings - Alapvető beállítások + KeeShare key file + KeeShare kulcsfájl - Start only a single instance of KeePassXC - A KeePassXC többszörös indításának tiltása + All files + Minden fájl - Remember last databases - Utolsó adatbázis megjegyzése + Select path + Útvonal kijelölése - Remember last key files and security dongles - Az utolsó kulcsfájlok és biztonsági hardverkulcsok megjegyzése + Exporting changed certificate + Módosult tanúsítványok exportálása - Load previous databases on startup - Előző adatbázisok betöltése indításkor + 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? - Automatically save on exit - Automatikus mentés kilépéskor + Signer: + + + + ShareObserver - Automatically save after every change - Automatikus mentés minden módosítás után + Import from container without signature + Importálás a tárolóból aláírás nélkül - Automatically reload the database when modified externally - Külső módosításkor az adatbázis automatikus újratöltése + 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? - Minimize when copying to clipboard - Kicsinyítés a vágólapra történő másoláskor + Import from container with certificate + Importálás a tárolóból aláírással - Minimize window at application startup - Indításkor az ablak kicsinyítése + Not this time + Most nem - Use group icon on entry creation - A csoport ikonjának használata a bejegyzés létrehozásakor + Never + Soha - 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 + Always + Mindig - Hide the Details view - Részletek nézet elrejtése + Just this time + Csak most - Show a system tray icon - Rendszertálca-ikon megjelenítése + Import from %1 failed (%2) + %1 importálása sikeretlen (%2) - Hide window to system tray when minimized - Az ablak rendszertálcára rejtése kicsinyítéskor + Import from %1 successful (%2) + %1 importálása sikeres (%2) - Hide window to system tray instead of app exit - Kilépés helyett rendszertálcára való rejtés + Imported from %1 + Importálva innen: %1 - Dark system tray icon - Sötét rendszertálca-ikon + Signed share container are not supported - import prevented + Az aláírt tárolók nem támogatottak – az importálás megakadályozva - Language - Nyelv + File is not readable + A fájl nem olvasható - Auto-Type - Automatikus beírás + Invalid sharing container + Érvénytelen megosztási tároló - 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. + Untrusted import prevented + Nem megbízható importálás megakadályozva - 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. + Successful signed import + Sikeres aláírt importálás - Always ask before performing Auto-Type - Mindig kérdezzen az automatikus beírás megkezdése előtt + Unexpected error + Váratlan hiba - Global Auto-Type shortcut - Globális automatikus beírás gyorsbillentyűje + Unsigned share container are not supported - import prevented + A nem aláírt tárolók nem támogatottak – az importálás megakadályozva - Auto-Type delay - Automatikus beírás késleltetése + Successful unsigned import + Sikeres aláíratlan importálás - ms - Milliseconds - ms + File does not exist + A fájl nem létezik - Startup - Indítás + Unknown share container type + Ismeretlen megosztási tárolótípus - File Management - Fájlkezelés + 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 - 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) + Could not write export container (%1) + Nem írható az exportálási tároló (%1) - Backup database file before saving - Készüljön biztonsági mentés az adatbázisról mentés előtt + 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 - Entry Management - Bejegyzéskezelés + Could not write export container + Az exportálási tároló nem írható - General - Általános + Unexpected export error occurred + Váratlan exportálás hiba történt - - - SettingsWidgetSecurity - Timeouts - Időtúllépések + Export to %1 failed (%2) + %1 exportálása sikertelen (%2) - Clear clipboard after - Vágólap törlése ennyi idő után + Export to %1 successful (%2) + Sikeres exportálás: %1 (%2) - sec - Seconds - mp + Export to %1 + Exportálás: %1 - Lock databases after inactivity of - Adatbázis zárolása ennyi inaktivitás után + 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 ?} - Convenience - Kényelem + Multiple import source path to %1 in %2 + - 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 + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Adatbázis zárolása az ablak lekicsinyítésekor + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Jelszóismétlés elkerülése látható jelszó esetén + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Jelszavak megjelenítése alapértelmezetten egyszerű szövegként + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Jelszavak elrejtése az előnézet panelen + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Bejegyzések jegyzeteinek elrejtése alapértelmezetten + Timed Password + Időalapú jelszó - Privacy - Adatvédelem + 000000 + 000000 + + + Copy + Másolás + + + 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 + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - A Google használata tartalékként, a webhelyikonok letöltésére + Copy + Másolás - 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 + 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. + + + There was an error creating the QR code. + Hiba történt a QR-kód létrehozásakor + + + Closing in %1 seconds. + Bezárás %1 másodperc után. - 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ű + sec + Seconds + mp + + + Code size: + Kódméret: 6 digits 6-számjegyű - Code size: - Kódméret: + 7 digits + 7-számjegyű - sec - Seconds - mp + 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. + + + 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. - - - UnlockDatabaseWidget - Unlock database - Adatbázis feloldása + 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 - - Remove an entry from the database. - Egy bejegyzés eltávolítása az adatbázisból. - - - Path of the database. - Adatbázis útvonala. - - - Path of the entry to remove. - Az eltávolítandó bejegyzés útvonala. - + YubiKeyEditWidget - KeePassXC - cross-platform password manager - KeePassXC – keresztplatformos jelszókezelő - - - filenames of the password databases to open (*.kdbx) - megnyitandó jelszóadatbázisok fájlnevei (*.kdbx) + Refresh + Frissítés - path to a custom config file - útvonal az egyéni beállítófájlhoz + YubiKey Challenge-Response + YubiKey kihívás-válasz - key file of the database - adatbázis kulcsfájlja + <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> - read password of the database from stdin - adatbázis jelszó beolvasása az stdin-ről + No YubiKey detected, please ensure it's plugged in. + Nincs YubiKey észlelve, győződjön meg róla, hogy be van-e dugva. - 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 a5135b2c4b..efbc39535c 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 @@ -38,79 +38,290 @@ Salin ke papan klip - Version %1 - - Versi %1 - + Project Maintainers: + Pengelola Proyek: + + + 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. + + + AgentSettingsWidget - Revision: %1 - Revisi: %1 + Enable SSH Agent (requires restart) + Aktifkan SSH Agent (butuh memulai ulang) - Distribution: %1 - Distribusi: %1 + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Libraries: - Pustaka: + Application Settings + Pengaturan Aplikasi - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistem operasi: %1 -Arsitektur CPU: %2 -Kernel: %3 %4 + General + Umum - Enabled extensions: - Ekstensi aktif: + Security + Keamanan - Project Maintainers: - Pengelola Proyek: + Access error for config file %1 + Galat akses untuk berkas konfigurasi %1 - 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. + Icon only + - Build Type: %1 - + Text only + + + + Text beside icon + + + + Text under icon + + + + Follow style - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - Konfirmasi Akses KeePassXC HTTP + Basic Settings + Pengaturan Dasar - Remember this decision - Ingat tindakan ini + Startup + Memulai - Allow - Izinkan + Start only a single instance of KeePassXC + Hanya mulai satu aplikasi KeePassXC - Deny - Tolak + Remember last databases + Ingat basis data terakhir - %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. + 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 + - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Aktifkan SSH Agent (butuh memulai ulang) + 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 @@ -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 @@ -361,20 +584,41 @@ Silakan pilih apakah Anda ingin mengizinkannya. <b>Peringatan:</b> Opsi berikut bisa berbahaya! - Executable Files (*.exe);;All Files (*.*) - Berkas Executable (*.exe);;Semua Berkas (*.*) + Select custom proxy location + Pilih lokasi proksi khusus - Executable Files (*) - Berkas Executable (*) + &Tor Browser + Peramban &Tor - Select custom proxy location - Pilih lokasi proksi khusus + <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 + - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Maaf, KeePassXC-Browser saat ini tidak mendukung rilisan Snap. + 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. - - - 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 + Converting attributes to custom data… + Mengkonversi atribut ke data khusus... - Cha&llenge Response + KeePassXC: Converted KeePassHTTP attributes - Refresh - Segarkan - - - Key files - Berkas kunci - - - All files - Semua berkas - - - Create Key File... - Buat Berkas Kunci... - - - Unable to create Key File : - Tidak bisa membuat Berkas Kunci : - - - Select a key file - Pilih berkas kunci + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - Empty password - Sandi kosong + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - Apakah Anda benar-benar ingin menggunakan lema kosong sebagai sandi? + KeePassXC: No entry with KeePassHTTP attributes found! + - Different passwords supplied. - Sandi berbeda. + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 - Gagal menetapkan %1 sebagai berkas Kunci: -%2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format - Format berkas kunci legacy + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -659,48 +795,88 @@ Harap pertimbangkan membuat berkas kunci baru. Data original: - Error(s) detected in CSV file ! - Terdapat galat di dalam berkas CSV ! + Error + Galat - more messages skipped] - pesan dilewati] + Empty fieldname %1 + - Error - Galat + column %1 + kolom %1 - CSV import: writer has errors: - - Impor CSV: galat penulis: - + Error(s) detected in CSV file! + - - - CsvImportWizard - - Error - Galat + + [%n more message(s) skipped] + - Unable to calculate master key - Tidak bisa mengkalkulasi kunci utama + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - %n byte, + %n column(s) + %n kolom + + + %1, %2, %3 + file info: bytes, rows, columns + - %n row(s), - %n baris, + %n byte(s) + %n byte - %n column(s) - %n kolom + %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 @@ -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,104 +935,173 @@ 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 + Can't open key file: +%1 + Tidak bisa membuka berkas kunci: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Tidak bisa membuka basis data. + Passwords + Sandi + + + + DatabaseSettingsDialog + + Advanced Settings + Pengaturan Lanjutan + + + General + Umum - Database opened fine. Nothing to do. - Basis data terbuka dengan baik. Tidak perlu melakukan apa-apa. + Security + Keamanan - Success - Sukses + Master Key + Kunci Master - The database has been successfully repaired -You can now save it. - Basis data berhasil diperbaiki -Anda bisa menyimpannya sekarang. + Encryption Settings + Pengaturan Enkripsi - Unable to repair the database. - Tidak bisa memperbaiki basis data. + Browser Integration + Integrasi Peramban - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Umum + KeePassXC-Browser settings + Pengaturan KeePassXC-Browser - Encryption - Enkripsi + &Disconnect all browsers + &Putuskan koneksi semua peramban - Number of rounds too high - Key transformation rounds + Forg&et all site-specific settings on entries - 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! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data - Understood, keep number - Mengerti, tetap simpan + Stored keys + Kunci tersimpan - Cancel - Batal + Remove + Buang - Number of rounds too low - Key transformation rounds - + Delete the selected key? + Hapus kunci yang dipilih? - 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! + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. - KDF unchanged - KDF tidak berubah + Key + Kunci - Failed to transform key with new KDF parameters; KDF unchanged. - Gagal mentransformasi kunci menggunakan parameter KDF baru; KDF tidak berubah. + Value + Nilai - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB + + Enable Browser Integration to access these settings. + Aktifkan Integrasi Peramban untuk mengakses pengaturan ini. - - thread(s) - Threads for parallel execution (KDF settings) - + + 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: @@ -898,6 +1135,109 @@ If you keep this number, your database may be too easy to crack! 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 + 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 + Mengerti, tetap simpan + + + Cancel + Batal + + + 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 tidak berubah + + + Failed to transform key with new KDF parameters; KDF unchanged. + Gagal mentransformasi kunci menggunakan parameter KDF baru; KDF tidak berubah. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + %1 md + + + %1 s + seconds + %1 d + DatabaseSettingsWidgetGeneral @@ -947,91 +1287,110 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + - KeePass 2 Database - Basis data KeePass 2 + Breadcrumb + - All files - Semua berkas + Type + - Open database - Buka basis data + Path + - File not found! - Berkas tidak ditemukan! + Last Signer + - Unable to open the database. - Tidak bisa membuka basis data. + Certificates + - File opened in read only mode. - Berkas terbuka dalam mode baca-saja. + > + Breadcrumb separator + + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Buka berkas CSV + Add additional protection... + Tambah proteksi tambahan... - CSV file - Berkas CSV + No encryption key added + - All files (*) - Semua berkas (*) + You must add at least one encryption key to secure your database! + - Merge database - Gabung basis data + No password set + - Open KeePass 1 database - Buka basis data KeePass 1 + 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? + - KeePass 1 database - Basis data KeePass 1 + Unknown error + Galat tidak diketahui - Close? - Tutup? + Failed to change master key + Gagal mengubah kunci master + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" dalam mode penyuntingan. -Tetap buang ubahan dan tutup? + Database Name: + Nama Basis Data: - Save changes? - Simpan perubahan? + Description: + Deskripsi: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" telah dimodifikasi. -Simpan perubahan? + KeePass 2 Database + Basis Data KeePass 2 - Writing the database failed. - Gagal membuat basis data. + All files + Semua Berkas - Passwords - Sandi + Open database + Buka basis data - Save database as - Simpan basis data sebagai + CSV file + Berkas CSV + + + Merge database + Gabung basis data + + + Open KeePass 1 database + Buka basis data KeePass 1 + + + KeePass 1 database + Basis data KeePass 1 Export database to CSV file @@ -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? + - - Close - Tutup + + Delete entry(s)? + Hapus entri? - - General - Umum + + Move entry(s) to recycle bin? + Pindahkan entri ke keranjang sampah? - Password - Sandi + File opened in read only mode. + Berkas terbuka dalam mode baca-saja. - URL - URL + Lock Database? + Kunci Basis Data? - Expiration - Kedaluwarsa + You are editing an entry. Discard changes and lock anyway? + - Username - Nama pengguna + "%1" was modified. +Save changes? + "%1" telah dimodifikasi. +Simpan perubahan? - Autotype - KetikOtomatis + Database was modified. +Save changes? + Basis data telah diubah. +Simpan perubahan? - Searching - Pencarian + Save changes? + Simpan perubahan? - Attributes - Atribut + Could not open the new database file while attempting to autoreload. +Error: %1 + - Attachments - Lampiran + Disable safe saves? + Nonaktifkan penyimpanan aman? - Notes - Catatan + 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? - Window - Jendela + Writing the database failed. +%1 + - Sequence - Urutan + Passwords + Sandi - Search - Cari + Save database as + Simpan basis data sebagai - Clear - Bersihkan + KeePass 2 Database + Basis Data KeePass 2 - Never - Tidak Pernah + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - [PROTECTED] - [DILINDUNGI] + Delete group + Hapus grup - Disabled - Dinonaktifkan + Move group to recycle bin? + - Enabled - Diaktifkan + 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... + @@ -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,109 +2397,159 @@ Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. Attachments Lampiran - - - EntryView - Customize View - Ubahsuai Tampilan + Yes + Ya - Hide Usernames - Sembunyikan Nama Pengguna + TOTP + TOTP + + + EntryPreviewWidget - Hide Passwords - Sembunyikan Sandi + Generate TOTP Token + Buat Token TOTP - Fit to window - Paskan ke jendela + Close + Tutup - Fit to contents - Paskan ke konten + General + Umum - Reset to defaults - Kembalikan ke setelan bawaan + Username + Nama pengguna - Attachments (icon) - Lampiran (ikon) + Password + Sandi - - - Group - Recycle Bin - Tong Sampah + Expiration + Kedaluwarsa - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: Tidak bisa menyimpan berkas! + URL + URL - Cannot save the native messaging script file. - Tidak bisa menyimpan berkas perpesanan native. + Attributes + Atribut - - - HttpPasswordGeneratorWidget - Length: - Panjang: + Attachments + Lampiran - Character Types - Tipe Karakter + Notes + Catatan - Upper Case Letters - Huruf Besar + Autotype + KetikOtomatis - A-Z - A-Z + Window + Jendela - Lower Case Letters - Huruf Kecil + Sequence + Urutan - a-z - a-z + Searching + Pencarian - Numbers - Angka + Search + Cari - 0-9 - 0-9 + Clear + Bersihkan - Special Characters - Karakter Spesial + Never + Tidak Pernah - /*_& ... - /*_& ... + [PROTECTED] + [DILINDUNGI] - Exclude look-alike characters - Kecualikan karakter mirip + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Diaktifkan - Ensure that the password contains characters from every group - Pastikan sandi berisi karakter dari setiap grup + Disabled + Dinonaktifkan - Extended ASCII - ASCII Lanjutan + Share + + + + + EntryView + + Customize View + Ubahsuai Tampilan + + + Hide Usernames + Sembunyikan Nama Pengguna + + + Hide Passwords + Sembunyikan Sandi + + + Fit to window + Paskan ke jendela + + + Fit to contents + Paskan ke konten + + + Reset to defaults + Kembalikan ke setelan bawaan + + + Attachments (icon) + Lampiran (ikon) + + + + Group + + Recycle Bin + Tong Sampah + + + [empty] + group has no children + [kosong] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: Tidak bisa menyimpan berkas! + + + Cannot save the native messaging script file. + Tidak bisa menyimpan berkas perpesanan native. @@ -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 + + 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 – direkomendasikan) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. + Key Component - The lock file could not be created. Single-instance mode disabled. - Berkas penguncian tidak bisa dibuat. Mode aplikasi tunggal dinonaktifkan. + Key Component Description + - Another instance of KeePassXC is already running. - Aplikasi KeePassXC lainnya sudah berjalan. + Cancel + Batal - Fatal error while testing the cryptographic functions. - Galat saat menguji fungsi kriptografi. + Key Component set, click to change or remove + - KeePassXC - Error - KeePassXC - Galat + 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 @@ -2863,36 +3406,277 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa membuka basis data yang diimp Keluar KeePassXC - KeePass 2 Database - Basis Data KeePass 2 + Please touch the button on your YubiKey! + Silakan sentuh tombol pada YubiKey Anda! - All files - Semua Berkas + 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. + PERINGATAN! Anda menggunakan versi tidak stabil dari KeePassXC! +Tinggi kemungkinan terjadi kerusakan, harap kelola salinan basis data anda dengan baik. +Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. - Open database - Buka basis data + &Donate + &Donasi - Save repaired database - Simpan basis data yang sudah diperbaiki + Report a &bug + Laporkan &bug - Writing the database failed. - Gagal menyimpan basis data. + 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. + - Please touch the button on your YubiKey! - Silakan sentuh tombol pada YubiKey Anda! + &Import + &Impor - 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. - PERINGATAN! Anda menggunakan versi tidak stabil dari KeePassXC! -Tinggi kemungkinan terjadi kerusakan, harap kelola salinan basis data anda dengan baik. -Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. + 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: + @@ -2995,125 +3779,30 @@ Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. - OptionDialog - - Dialog - Dialog - - - This is required for accessing your databases from ChromeIPass or PassIFox - Ini dibutuhkan untuk mengakses basis data Anda dari ChromeIPass atau PassIFox - - - Enable KeePassHTTP server - Aktifkan server KeePassHTTP - - - 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: - + PasswordEditWidget - Default port: 19455 - Port bawaan: 19455 + Enter password: + Masukkan sandi: - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC akan mendengarkan port ini pada 127.0.0.1 + Confirm password: + Konfirmasi sandi: - <b>Warning:</b> The following options can be dangerous! - <b>Peringatan:</b> Opsi berikut bisa berbahaya! + Password + Sandi - <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> + <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 - + Passwords do not match. + Sandi tidak sama. - Cannot bind to privileged ports below 1024! -Using default port 19455. - Tidak bisa mengkoneksi ke port dibawah 1024! -Menggunakan port bawaan 19455. + 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,7 +3916,172 @@ 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,387 +4396,904 @@ 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. + - - - QtIOCompressor - Internal zlib error when compressing: - Galat zlib internal ketika memampatkan: + Invalid timeout value %1. + - Error writing to underlying device: - Terjadi kesalahan saat menyimpan ke perangkat: + Entry %1 not found. + - Error opening underlying device: - Terjadi kesalahan saat membuka perangkat: + Entry with path %1 has no TOTP set up. + - Error reading data from underlying device: - Terjadi kesalahan saat membaca data dari perangkat: + Entry's current TOTP copied to the clipboard! + - Internal zlib error when decompressing: - Galat zlib internal ketika dekompres: + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Format gzip tidak didukung pada versi zlib ini. + Clipboard cleared! + - Internal zlib error: - Galat zlib internal: + Silence password prompt and other secondary outputs. + - - - SearchWidget - Search... - Cari... + count + CLI parameter + - Search - Cari + Invalid value for password length: %1 + - Clear - Bersihkan + Could not find entry with path %1. + - Case Sensitive - Sensitif Besar Kecil + Not changing any field for entry %1. + - Limit search to selected group - Batasi pencarian ke grup yang dipilih + Enter new password for entry: + - - - Service - KeePassXC: New key association request - KeePassXC: Permintaan asosiasi kunci baru + Writing the database failed: %1 + - 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. + Successfully edited entry %1. + - KeePassXC: Overwrite existing key? - KeePassXC: Timpa kunci yang ada? + Length %1 + - 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? + Entropy %1 + - KeePassXC: Update Entry - KeePassXC: Perbarui Entri + Log10 %1 + - Do you want to update the information in %1 - %2? - Apakah Anda ingin memperbarui informasi dalam %1 - %2? + Multi-word extra bits %1 + - KeePassXC: Database locked! - KeePassXC: Basis data dikunci! + Type: Bruteforce + - 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. + Type: Dictionary + - KeePassXC: Removed keys from database - KeePassXC: Buang kunci dari basis data + Type: Dict+Leet + - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Berhasil membuang %n kunci terenkripsi dari Pengaturan KeePassXC/Http. + + Type: User Words + - KeePassXC: No keys found - KeePassXC: Tidak ada kunci yang ditemukan + Type: User+Leet + - No shared encryption-keys found in KeePassHttp Settings. - Tidak ada kunci-enkripsi bersama yang ditemukan di dalam Pengaturan KeePassHttp. + Type: Repeated + - KeePassXC: Settings not available! - KeePassXC: Pengaturan tidak tersedia! + Type: Sequence + - The active database does not contain an entry of KeePassHttp Settings. - Basis data aktif tidak berisi entri Pengaturan KeePassHttp. + Type: Spatial + - Removing stored permissions... - Membuang izin yang tersimpan... + Type: Date + - Abort - Batal + Type: Bruteforce(Rep) + - KeePassXC: Removed permissions - KeePassXC: Buang izin + Type: Dictionary(Rep) + - - Successfully removed permissions from %n entries. - Berhasil membuang izin dari %n entri. + + Type: Dict+Leet(Rep) + - KeePassXC: No entry with permissions found! - KeePassXC: Tidak entri dengan izin yang ditemukan! + Type: User Words(Rep) + - The active database does not contain an entry with permissions. - Basis data aktif tidak berisi entri dengan izin. + Type: User+Leet(Rep) + - - - SettingsWidget - Application Settings - Pengaturan Aplikasi + Type: Repeated(Rep) + - General - Umum + Type: Sequence(Rep) + - Security - Keamanan + Type: Spatial(Rep) + - Access error for config file %1 - Galat akses untuk berkas konfigurasi %1 + Type: Date(Rep) + - - - SettingsWidgetGeneral - Basic Settings - Pengaturan Dasar + Type: Unknown%1 + - Start only a single instance of KeePassXC - Hanya mulai satu aplikasi KeePassXC + Entropy %1 (%2) + - Remember last databases - Ingat basis data terakhir + *** Password length (%1) != sum of length of parts (%2) *** + - Remember last key files and security dongles - Ingat berkas kunci dan dongle keamanan terakhir + Failed to load key file %1: %2 + - Load previous databases on startup - Muat basis data sebelumnya saat mulai + 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 + + + + + QtIOCompressor + + Internal zlib error when compressing: + Galat zlib internal ketika memampatkan: + + + Error writing to underlying device: + Terjadi kesalahan saat menyimpan ke perangkat: + + + Error opening underlying device: + Terjadi kesalahan saat membuka perangkat: + + + Error reading data from underlying device: + Terjadi kesalahan saat membaca data dari perangkat: + + + Internal zlib error when decompressing: + Galat zlib internal ketika dekompres: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Format gzip tidak didukung pada versi zlib ini. + + + Internal zlib error: + Galat zlib internal: + + + + 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 + Cari + + + Clear + Bersihkan + + + 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 + + + + SettingsWidgetKeeShare + + Active + + + + Allow export + + + + Allow import + + + + Own certificate + + + + Fingerprint: + + + + Certificate: + + + + Signer + + + + Key: + Kunci: + + + Generate + Buat + + + Import + Impor + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Buang + + + Path + + + + Status + - Automatically save on exit - Otomatis simpan ketika keluar + Fingerprint + Tanda tangan - Automatically save after every change - Otomatis simpan setelah setiap perubahan + Certificate + - Automatically reload the database when modified externally - Muat ulang basis data secara otomatis ketika diubah secara eksternal + Trusted + - Minimize when copying to clipboard - Minimalkan ketika menyalin ke papan klip + Untrusted + - Minimize window at application startup - Minimalkan jendela saat memulai aplikasi + Unknown + - Use group icon on entry creation - Gunakan ikon grup pada pembuatan entri + key.share + Filetype for KeeShare key + - 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) + KeeShare key file + - Hide the Details view - Sembunyikan tampilan Detail + All files + Semua Berkas - Show a system tray icon - Tampilkan ikon baki sistem + Select path + - Hide window to system tray when minimized - Sembunyikan jendela ke baki sistem ketika diminimalkan + Exporting changed certificate + - Hide window to system tray instead of app exit - Daripada keluar, sembunyikan jendela ke baki sistem + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Dark system tray icon - Ikon baki sistem gelap + Signer: + + + + ShareObserver - Language - Bahasa + Import from container without signature + - Auto-Type - Ketik-Otomatis + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Use entry title to match windows for global Auto-Type - Gunakan judul entri untuk mencocokkan jendela untuk Ketik-Otomatis global + Import from container with certificate + - Use entry URL to match windows for global Auto-Type - Gunakan URL entri untuk mencocokkan jendela untuk Ketik-Otomatis global + Not this time + - Always ask before performing Auto-Type - Selalu bertanya sebelum menjalankan Ketik-Otomatis + Never + Tidak Pernah - Global Auto-Type shortcut - Pintasan global Ketik-Otomatis + Always + - Auto-Type delay - Tundaan Ketik-Otomatis + Just this time + - ms - Milliseconds - md + Import from %1 failed (%2) + - Startup - Memulai + Import from %1 successful (%2) + - File Management - Manajemen Berkas + Imported from %1 + - Safely save database files (may be incompatible with Dropbox, etc) - Secara aman menyimpan berkas basis data (mungkin tidak kompatibel dengan Dropbox, dll) + Signed share container are not supported - import prevented + - Backup database file before saving - Cadangkan basis data sebelum disimpan + File is not readable + - Entry Management - Manajemen Entri + Invalid sharing container + - General - Umum + Untrusted import prevented + - - - SettingsWidgetSecurity - Timeouts - Waktu Kedaluwarsa + Successful signed import + - Clear clipboard after - Kosongkan papan klip setelah + Unexpected error + - sec - Seconds - det + Unsigned share container are not supported - import prevented + - Lock databases after inactivity of - Kunci basis data setelah tidak aktif selama + Successful unsigned import + - Convenience - Kenyamanan + File does not exist + - Lock databases when session is locked or lid is closed - Kunci basis data ketika sesi dikunci atau lid ditutup + Unknown share container type + - Lock databases after minimizing the window - Kunci basis data setelah meminimalkan jendela + Overwriting signed share container is not supported - export prevented + - Don't require password repeat when it is visible - Tidak membutuhkan pengulangan sandi ketika ruas bisa dilihat + Could not write export container (%1) + - Show passwords in cleartext by default - Tampilkan teks sandi secara baku + Overwriting unsigned share container is not supported - export prevented + - Hide passwords in the preview panel - Sembunyikan sandi di dalam panel pratinjau + Could not write export container + - Hide entry notes by default - Sembunyikan catatan secara bawaan + Unexpected export error occurred + - Privacy - Privasi + Export to %1 failed (%2) + - Use Google as fallback for downloading website icons - Gunakan Google sebagai cadangan untuk mengunduh ikon situs web + Export to %1 successful (%2) + - Re-lock previously locked database after performing Auto-Type - Kunci ulang basis data yang sebelumnya terkunci setelah menjalankan Ketik-Otomatis + 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 + + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog + + Copy + Salin + + + 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. + - 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 + sec + Seconds + det + + + Code size: + Ukuran kode: 6 digits 6 angka - Code size: - Ukuran kode: + 7 digits + - sec - Seconds - det + 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. + + + + 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! + - - - UnlockDatabaseWidget - Unlock database - Buka kunci basis data + KeePassXC %1 is currently the newest version available + @@ -4077,41 +5427,25 @@ Silakan buka kunci atau pilih yang lainnya yang tidak terkunci. - main - - Remove an entry from the database. - Buang sebuah entri dari basis data. - - - Path of the database. - Jalur ke basis data. - - - Path of the entry to remove. - Jalur entri untuk dibuang. - - - KeePassXC - cross-platform password manager - KeePassXC - pengelola sandi lintas platform - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - nama berkas basis data sandi untuk dibuka (*.kdbx) + Refresh + Segarkan - path to a custom config file - jalur ke berkas konfigurasi khusus + YubiKey Challenge-Response + - key file of the database - berkas kunci basis data + <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> + - read password of the database from stdin - baca sandi basis data dari stdin + No YubiKey detected, please ensure it's plugged in. + - 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 0000000000..eba0192ad8 --- /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 d4efd96325..e5a1558cc0 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: @@ -38,80 +38,290 @@ Copia negli appunti - Version %1 - - Versione %1 - + Project Maintainers: + Responsabili del progetto: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Abilita agente SSH (richiede un riavvio) - Revision: %1 - Revisione: %1 + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Distribution: %1 - Distribuzione: %1 + Application Settings + Impostazioni applicazione - Libraries: - Librerie: + General + Generale - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operativo: %1 -Architettura CPU: %2 -Kernel: %3 %4 + Security + Sicurezza - Enabled extensions: - Estensioni abilitate: + Access error for config file %1 + Errore di accesso per il file di configurazione %1 - Project Maintainers: - Responsabili del progetto: + Icon only + Solo icone - 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. + Text only + Solo icone - Build Type: %1 - - Tipo di compilazione: %1 - + Text beside icon + Testo accanto alle icone + + + Text under icon + Testo sotto le icone + + + Follow style + - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP conferma accesso + Basic Settings + Impostazioni di base - Remember this decision - Ricorda questa decisione + Startup + Avvio - Allow - Consenti + Start only a single instance of KeePassXC + Avvia una sola istanza di KeePassXC - Deny - Nega + Remember last databases + Ricorda ultimo database - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Abilita agente SSH (richiede un riavvio) + 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 @@ -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 @@ -362,32 +584,53 @@ Seleziona se vuoi consentire l'accesso. <b>Avviso:</b> le seguenti opzioni possono essere pericolose. - Executable Files (*.exe);;All Files (*.*) - File eseguibili (*.exe);;Tutti i file (*.*) + Select custom proxy location + Selezionare una posizione personalizzata per il proxy - Executable Files (*) - File eseguibili (*) + &Tor Browser + &Tor Browser - Select custom proxy location - Selezionare una posizione personalizzata per il proxy + <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: + - 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. + Executable Files + File eseguibili - - - BrowserService - KeePassXC: New key association request - KeePassXC: nuova richiesta di associazione chiave + All Files + Tutti i file - You have received an association request for the above key. - -If you would like to allow it access to your KeePassXC database, + 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: nuova richiesta di associazione chiave + + + 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 sopra. @@ -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 - - - 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). - - - 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. - - - - ChangeMasterKeyWidget - - Password - Password - - - Enter password: - Inserisci password: - - - Repeat password: - Ripeti password: - - - &Key file - &File chiave - - - 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... + Converting attributes to custom data… + - Unable to create Key File : - Impossibile creare file chiave: + KeePassXC: Converted KeePassHTTP attributes + - Select a key file - Seleziona un file chiave + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - Empty password - Password vuota + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - Vuoi veramente usare una stringa vuota come password? + KeePassXC: No entry with KeePassHTTP attributes found! + - Different passwords supplied. - Sono state inserite password differenti. + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 - Impossibile impostare %1 come file chiave: -%2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format - Formato di file chiave legacy + KeePassXC: Create a new group + - 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 + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -659,48 +794,88 @@ Considera l'opzione di generarne uno nuovo Dati originali: - Error(s) detected in CSV file ! - Errore/i rilevati nel file CSV! + Error + Errore - more messages skipped] - ulteriori messaggi ignorati] + Empty fieldname %1 + Nome di campo vuoto %1 - Error - Errore + column %1 + colonna %1 - CSV import: writer has errors: - - Importazione CSV: rilevati errori: - + Error(s) detected in CSV file! + Errore(i) rilevati nel file CSV! - - - CsvImportWizard - - Error - Errore + + [%n more message(s) skipped] + [%n altro messaggio saltato][altri %n messaggi saltati] - Unable to calculate master key - Impossibile calcolare la chiave principale + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - %n byte, %n byte, + %n column(s) + %n colonna%n colonne + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n riga, %n righe, + %n byte(s) + %n byte (s)%n byte(s) - %n column(s) - %n colonna%n colonne + %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 @@ -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,140 +934,310 @@ 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 + Can't open key file: +%1 + Impossibile aprire il file chiave: %1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Impossibile aprire il database. + Passwords + Password + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Database aperto correttamente. Nessuna operazione da eseguire. + Advanced Settings + Impostazioni avanzate - Success - Completato + General + Generale - The database has been successfully repaired -You can now save it. - Il database è stato correttamente riparato. -Adesso puoi salvarlo. + Security + Sicurezza - Unable to repair the database. - Impossibile riparare il database. + Master Key + Chiave principale - - - DatabaseSettingsWidget - General - Generale + Encryption Settings + Impostazioni di crittografia - Encryption - Cifratura + Browser Integration + Integrazione con i browser + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Numero di giri troppo elevato + KeePassXC-Browser settings + Impostazioni di KeePassXC-Browser - 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! - Stai utilizzando un numero molto elevato di fasi di trasformazione della chiave con Argon 2 - -Se continui con questo numero, il tuo database si potrebbe aprire in ore o giorni (o anche più a lungo) + &Disconnect all browsers + &Disconnetti tutti i browser - Understood, keep number - D'accordo, mantieni il valore + Forg&et all site-specific settings on entries + - Cancel - Annulla + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Number of rounds too low - Key transformation rounds - Numero di giri troppo basso + Stored keys + Chiavi memorizzate - 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! - Stai utilizzando un numero molto basso di fasi di trasformazione della chiave con AES-KDF - -Se continui con questo numero, il tuo database potrebbe essere decifrato molto facilmente + Remove + Rimuovi - KDF unchanged - KDF invariato + Delete the selected key? + Eliminare la chiave selezionata? - Failed to transform key with new KDF parameters; KDF unchanged. - La trasformazione della chiave con i nuovi parametri KDF e' fallita; KDF immutato - - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB - - - thread(s) - Threads for parallel execution (KDF settings) - iscritto (i) thread(s) + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Algoritmo di cifratura: + Key + Chiave - AES: 256 Bit (default) - AES: 256 Bit (impostazione predefinita) + Value + Valore - Twofish: 256 Bit - Twofish: 256 Bit + Enable Browser Integration to access these settings. + Abilita l'integrazione con i browser per accedere a queste impostazioni. - Key Derivation Function: - Funzione di derivazione di chiave: + Disconnect all browsers + Scollega tutti i browser - Transform rounds: - Arrotondamenti trasformazione: + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + - Benchmark 1-second delay - Ritardo di 1 secondo di benchmark + KeePassXC: No keys found + KeePassXC: nessuna chiave trovata - Memory Usage: - Uso della memoria: + No shared encryption keys found in KeePassXC settings. + - Parallelism: - Parallelismo: + 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 + Key transformation rounds + Numero di giri troppo elevato + + + 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! + Stai utilizzando un numero molto elevato di fasi di trasformazione della chiave con Argon 2 + +Se continui con questo numero, il tuo database si potrebbe aprire in ore o giorni (o anche più a lungo) + + + Understood, keep number + D'accordo, mantieni il valore + + + Cancel + Annulla + + + Number of rounds too low + Key transformation rounds + Numero di giri troppo basso + + + 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! + Stai utilizzando un numero molto basso di fasi di trasformazione della chiave con AES-KDF + +Se continui con questo numero, il tuo database potrebbe essere decifrato molto facilmente + + + KDF unchanged + KDF invariato + + + Failed to transform key with new KDF parameters; KDF unchanged. + La trasformazione della chiave con i nuovi parametri KDF e' fallita; KDF immutato + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + iscritto (i)thread(s) + + + %1 ms + milliseconds + %1 ms%1 ms + + + %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,91 +1288,110 @@ Se continui con questo numero, il tuo database potrebbe essere decifrato molto f - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Radice + Sharing + - KeePass 2 Database - Database KeePass 2 + Breadcrumb + - All files - Tutti i file + Type + Tipo - Open database - Apri database + Path + Percorso - File not found! - File non trovato! + Last Signer + Ultimo firmatario - Unable to open the database. - Impossibile aprire il database. + Certificates + Certificati - File opened in read only mode. - File aperto in modalità di sola lettura. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Apri file CSV + Add additional protection... + Aggiungere ulteriore protezione... - CSV file - File CSV + No encryption key added + Nessuna chiave di crittografia aggiunta - All files (*) - Tutti i file (*) + 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. - Merge database - Unisci database + No password set + Nessuna password impostata - Open KeePass 1 database - Apri database KeePass 1 + 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? + - KeePass 1 database - Database KeePass 1 + Unknown error + Errore sconosciuto - Close? - Vuoi chiudere? + Failed to change master key + Modifica della chiave master fallita + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" è in modalità modifica. -Vuoi annullare le modifiche e chiudere comunque? + Database Name: + Nome del database: - Save changes? - Salvare le modifiche? + Description: + Descrizione: + + + + DatabaseTabWidget + + KeePass 2 Database + Database KeePass 2 - "%1" was modified. -Save changes? - "%1" è stata modificato. -Vuoi salvare le modifiche? + All files + Tutti i file - Writing the database failed. - Scrittura del database non riuscita. + Open database + Apri database - Passwords - Password + CSV file + File CSV - Save database as - Salva database come + Merge database + Unisci database + + + Open KeePass 1 database + Apri database KeePass 1 + + + KeePass 1 database + Database KeePass 1 Export database to CSV file @@ -1043,43 +1399,43 @@ Vuoi salvare le modifiche? 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 + + 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? + - Generate TOTP Token - Generare un token TOTP + File opened in read only mode. + File aperto in modalità di sola lettura. - Close - Chiudi + Lock Database? + Bloccare il database? - General - Generale + You are editing an entry. Discard changes and lock anyway? + - Password - Password + "%1" was modified. +Save changes? + "%1" è stata modificato. +Vuoi salvare le modifiche? - URL - URL + Database was modified. +Save changes? + - Expiration - Scadenza + Save changes? + Salvare le modifiche? - Username - Nome utente + Could not open the new database file while attempting to autoreload. +Error: %1 + - Autotype - Completamento automatico + Disable safe saves? + Disabilita i salvataggi sicuri? - Searching - Ricerca + 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? - Attributes - Attributi + Writing the database failed. +%1 + Scrittura nel database non riuscita. +%1 - Attachments - Allegati + Passwords + Password - Notes - Note + Save database as + Salva database come - Window - Finestra + KeePass 2 Database + Database KeePass 2 - Sequence - Sequenza + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Search - Cerca + Delete group + Elimina gruppo - Clear - Azzera + Move group to recycle bin? + Cestinare il gruppo? - Never - Mai + Do you really want to move the group "%1" to the recycle bin? + Vuoi davvero cestinare il gruppo "%1"? - [PROTECTED] - [PROTETTO] + Successfully merged the database files. + - Disabled - Disabilitato + Database was not modified by merge operation. + Il database non è stato modificato dall'operazione di unione. - 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 @@ -1999,84 +2556,49 @@ Ciò potrebbe causare malfunzionamenti ai plugin interessati. - HttpPasswordGeneratorWidget + KMessageWidget - Length: - Lunghezza: + &Close + &Chiudi - 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 - - - /*_& ... - /*_& ... + Close message + Chiudi messaggio + + + Kdbx3Reader - Exclude look-alike characters - Escludi caratteri simili + Unable to calculate master key + Impossibile calcolare la chiave principale - Ensure that the password contains characters from every group - Verifica che la password contenga caratteri di ogni gruppo + Unable to issue challenge-response. + Non in grado dare la risposta di verifica. - Extended ASCII - ASCII esteso + Wrong key or database file is corrupt. + Chiave errata o file del database danneggiato. - - - KMessageWidget - &Close - &Chiudi + missing database headers + intestazioni del database mancanti - Close message - Chiudi messaggio + Header doesn't match hash + - - - Kdbx3Reader - Unable to calculate master key - Impossibile calcolare la chiave principale + Invalid header id size + Dimensione dell'id dell'intestazione non valida - Unable to issue challenge-response. - Non in grado dare la risposta di verifica. + Invalid header field length + Lunghezza del campo di intestazione non valida - Wrong key or database file is corrupt. - Chiave errata o file del database danneggiato. + Invalid header data length + Lunghezza dei dati di intestazione non valida @@ -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 + + unable to seek to content position + + - KeePass2 + KeeShare - AES: 256-bit - AES: 256 bit + Disabled share + - Twofish: 256-bit - Twofish: 256 bit + Import from + Importa da - ChaCha20: 256-bit - ChaCha20: 256 bit + Export to + Esporta verso - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Sincronizza con - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – raccomandato) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Il file di blocco singola istanza non è valido. Viene eseguita una nuova istanza. + Key Component + Componente chiave - 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. + Key Component Description + Descrizione del componente chiave - Another instance of KeePassXC is already running. - È già in esecuzione un'altra istanza di KeePassXC. + Cancel + Annulla - Fatal error while testing the cryptographic functions. - Errore fatale durante il test delle funzioni di crittografia. + Key Component set, click to change or remove + - KeePassXC - Error - KeePassXC - Errore + 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,226 +3420,393 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - File di chiave non valido, era attesa una chiave OpenSSH + &Donate + &Donare - PEM boundary mismatch - Mancata corrispondenza del marigne PEM + Report a &bug + Segnala un &bug - Base64 decoding failed - Decodifica base64 non riuscita + 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. - Key file way too small. - File chiave decisamente troppo piccolo. + &Import + &Importare - Key file magic header id invalid - Id dell'intestazione magica del file chiave non valido + Copy att&ribute... + Copia att&ributo... - Found zero keys - Trovate zero chiavi + TOTP... + TOTP... - Failed to read public key. - Impossibile leggere la chiave privata. + &New database... + &Nuovo database... - Corrupted key file, reading private key failed - File della chiave rovinato, impossibile leggere la chiave privata + Create a new database + Creare un nuovo database - No private key payload to decrypt - Nessuna chiave privata da decifrare nel contenuto + &Merge from database... + &Unire dal database... - Trying to run KDF without cipher - Tentativo di eseguire KDF senza crittografia + Merge from another KDBX database + Unire da un altro database KDBX - Passphrase is required to decrypt this key - La decifrazione di questa chiave richiede una frase segreta + &New entry + &Nuova voce - Key derivation failed, key file corrupted? - Derivazione della chiave non riuscita, file della chiave rovinato? + Add a new entry + Aggiungere una nuova voce - Decryption failed, wrong passphrase? - Decifrazione non riuscita, frase segreta non corretta? + &Edit entry + &Modificare voce - Unexpected EOF while reading public key - EOF imprevisto durante la lettura della chiave pubblica + View or edit entry + Visualizzare o modificare voce - Unexpected EOF while reading private key - EOF imprevisto durante la lettura della chiave privata + &New group + &Nuovo gruppo - Can't write public key as it is empty - Impossibile scrivere la chiave pubblica perché è vuota + Add a new group + Aggiungere un nuovo gruppo - Unexpected EOF when writing public key - EOF imprevisto durante la scrittura di chiave pubblica + Change master &key... + Cambiare la &chiave principale... - Can't write private key as it is empty - Impossibile scrivere la chiave privata perché è vuota + &Database settings... + Impostazioni del &Database... - Unexpected EOF when writing private key - EOF imprevisto durante la scrittura di una chiave privata + Copy &password + Copia &password - Unsupported key type: %1 - Tipo di chiave non supportato: %1 + Perform &Auto-Type + Eseguire compilazione &automatica - Unknown cipher: %1 - Tipo di cifrario non supportato: %1 + Open &URL + Aprire &URL - Cipher IV is too short for MD5 kdf - Il vettore di inizializzazione del cifrario è troppo corto per la derivazione della chiave crittografica tramite MD5 + KeePass 1 database... + KeePass 1 database... - Unknown KDF: %1 - KDF sconosciuto: %1 + Import a KeePass 1 database + Importare un database KeePass 1 - Unknown key type: %1 - Tipo di chiave sconosciuta: %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. + - OptionDialog + Merger - Dialog - Finestra + Creating missing %1 [%2] + - This is required for accessing your databases from ChromeIPass or PassIFox - Questo è necessario per accedere ai database da ChromeIPass o PassIFox + Relocating %1 [%2] + - Enable KeePassHTTP server - Atttiva il server KeePassHTTP + Overwriting %1 [%2] + - General - Generale + older entry merged from database "%1" + - 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 + Adding backup for older target %1 [%2] + - 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. + Adding backup for older source %1 [%2] + - &Return only best matching entries - &Restituisci solo le corrispondenti migliori + Reapplying older target entry on top of newer source %1 [%2] + - Re&quest to unlock the database if it is locked - Ri&chiedi di sbloccare il database se bloccato + Reapplying older source entry on top of newer target %1 [%2] + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Solo le voci con lo stesso schema (http://, https://, ftp: //, ...) vengono restituite. + Synchronizing from newer source %1 [%2] + - &Match URL schemes - Corrispondenza sche&mi URL + Synchronizing from older source %1 [%2] + - Sort matching entries by &username - Ordina voci trovate per nome &utente + Deleting child %1 [%2] + - Sort &matching entries by title - Ordina le voci per &titolo + Deleting orphan %1 [%2] + - R&emove all shared encryption keys from active database - R&imuovi tutte le chiavi condivise di cifratura dal database attivo + Changed deleted objects + - Re&move all stored permissions from entries in active database - R&imuovi tutti i permessi presenti nelle voci nel database attivo + Adding missing icon %1 + + + + NewDatabaseWizard - Password Generator - Genera password + Create a new KeePassXC database... + - Advanced - Avanzate + Root + Root group + Radice + + + NewDatabaseWizardPage - Always allow &access to entries - Permetti sempre di &accedere alle voci + WizardPage + Pagina della procedura guidata - Always allow &updating entries - Permetti sempre di &aggiornare le voci + En&cryption Settings + Impostazioni di &crittografia - Only the selected database has to be connected with a client. - Solo il database selezionato deve essere collegato con un client. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + - Searc&h in all opened databases for matching entries - Cerc&a in tutti i database aperti le voci corrispondenti + Advanced Settings + Impostazioni avanzate - Automatically creating or updating string fields is not supported. - La creazione o l'aggiornamento automatico dei campi stringa non è supportato. + Simple Settings + Impostazioni semplici + + + NewDatabaseWizardPageEncryption - &Return advanced string fields which start with "KPH: " - &Seleziona i campi stringa avanzati che iniziano con "KPH: " + Encryption Settings + Impostazioni di crittografia - HTTP Port: - Porta HTTP: + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + NewDatabaseWizardPageMasterKey - Default port: 19455 - Porta predefinita: 19455 + Database Master Key + Chiave principale del database - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC rimarrà in ascolto su questa porta su 127.0.0.1 + A master key known only to you protects your database. + + + + NewDatabaseWizardPageMetaData - <b>Warning:</b> The following options can be dangerous! - <b>Avviso:</b> le seguenti opzioni possono essere pericolose. + 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 + + Invalid key file, expecting an OpenSSH key + File di chiave non valido, era attesa una chiave OpenSSH + + + PEM boundary mismatch + Mancata corrispondenza del marigne PEM + + + Base64 decoding failed + Decodifica base64 non riuscita + + + Key file way too small. + File chiave decisamente troppo piccolo. + + + Key file magic header id invalid + Id dell'intestazione magica del file chiave non valido + + + Found zero keys + Trovate zero chiavi + + + Failed to read public key. + Impossibile leggere la chiave privata. + + + Corrupted key file, reading private key failed + File della chiave rovinato, impossibile leggere la chiave privata + + + No private key payload to decrypt + Nessuna chiave privata da decifrare nel contenuto + + + Trying to run KDF without cipher + Sto cercando di eseguire KDF senza cifratura + + + Passphrase is required to decrypt this key + La decifrazione di questa chiave richiede una frase segreta + + + Key derivation failed, key file corrupted? + Derivazione della chiave non riuscita, file della chiave rovinato? + + + Decryption failed, wrong passphrase? + Decifrazione non riuscita, frase segreta non corretta? + + + Unexpected EOF while reading public key + EOF imprevisto durante la lettura della chiave pubblica + + + Unexpected EOF while reading private key + EOF imprevisto durante la lettura della chiave privata + + + Can't write public key as it is empty + Impossibile scrivere la chiave pubblica perché è vuota + + + Unexpected EOF when writing public key + EOF imprevisto durante la scrittura di chiave pubblica + + + Can't write private key as it is empty + Impossibile scrivere la chiave privata perché è vuota + + + Unexpected EOF when writing private key + EOF imprevisto durante la scrittura di una chiave privata + + + Unsupported key type: %1 + Tipo di chiave non supportato: %1 + + + Unknown cipher: %1 + Tipo di cifrario non supportato: %1 + + + Cipher IV is too short for MD5 kdf + Il vettore di inizializzazione del cifrario è troppo corto per la derivazione della chiave crittografica tramite MD5 + + + Unknown KDF: %1 + KDF sconosciuto: %1 + + + Unknown key type: %1 + Tipo di chiave sconosciuta: %1 + + + + PasswordEditWidget + + Enter password: + Inserisci password: + + + Confirm password: + Conferma password: + + + Password + Password - <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> + <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 - Non è stato possibile collegarsi ad una porta privilegiata + Passwords do not match. + Le password non corrispondono. - 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,133 +3920,282 @@ Viene usata la porta predefinita 19455. Password quality Eccellente - - - QObject - Database not opened - Database non aperto + ExtendedASCII + ASCII esteso - Database hash not available - Hash del database non disponibile + Switch to advanced mode + Passare alla modalità avanzata - Client public key not received - Chiave pubblica del client non ricevuta + Advanced + Avanzate - Cannot decrypt message - Impossibile decrittografare il messaggio + Upper Case Letters A to F + Lettere maiuscole dalla A alla F - Timeout or cannot connect to KeePassXC - Tempo scaduto o impossibile collegarsi a KeePassXC + A-Z + A-Z - Action cancelled or denied - Azione annullata o negata + Lower Case Letters A to F + Lettere maiuscole dalla A alla F - 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? + a-z + a-z - KeePassXC association failed, try again - Associazione KeePassXC fallita, riprova + 0-9 + 0-9 - Key change was not successful - Il cambiamento chiave non ha avuto successo + Braces + Parentesi graffe - Encryption key is not recognized - Chiave di crittografia non riconosciuta + {[( + - No saved databases found - Nessun database salvato trovato + Punctuation + Punteggiatura - Incorrect action - Azione non corretta + .,:; + - Empty message received - Ricevuto un messaggio vuoto + Quotes + Citazioni - No URL provided - Nessun URL fornito + " ' + - No logins found - Nessun login trovato + Math + Matematica - Unknown error - Errore sconosciuto + <*+!?= + - Add a new entry to a database. - Aggiungi una nuova voce al database. + Dashes + Trattini - Path of the database. - Percorso del database. + \_|-/ + - Key file of the database. - File chiave del database. + Logograms + Logogrammi - path - percorso + #$%&&@^`~ + - Username for the entry. - Nome utente della voce. + Switch to simple mode + Passare alla modalità semplice - username - nome utente + Simple + Semplice - URL for the entry. - URL della voce. + Character set to exclude from generated password + Set di caratteri da escludere dalla password generata - URL - URL + Do not include: + Non includere: - Prompt for the entry's password. - Richiedi la password della voce. + Add non-hex letters to "do not include" list + - Generate a password for the entry. - Genera una password per questa voce. + Hex + Hex - Length for the generated password. - Lunghezza della password generata. + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Escludere i caratteri: "0", "1", "l", "I", "O", "|", "﹒" - length - lunghezza + Word Co&unt: + Conte&ggio delle parole: - Path of the entry to add. - Percorso della voce da aggiungere. + Regenerate + Rigenerare + + + QApplication - Copy an entry's password to the clipboard. - Copia la password di una voce negli appunti. + KeeShare + + + + QFileDialog - Path of the entry to clip. - clip = copy to clipboard - Percorso della voce da tagliare. + Select + + + + + QMessageBox + + Overwrite + + + + Delete + Elimina + + + Move + + + + Empty + + + + Remove + Rimuovi + + + Skip + + + + Disable + Disabilita + + + Merge + + + + + QObject + + Database not opened + Database non aperto + + + Database hash not available + Hash del database non disponibile + + + Client public key not received + Chiave pubblica del client non ricevuta + + + Cannot decrypt message + Impossibile decrittografare il messaggio + + + Action cancelled or denied + Azione annullata o negata + + + KeePassXC association failed, try again + Associazione KeePassXC fallita, riprova + + + Encryption key is not recognized + Chiave di crittografia non riconosciuta + + + Incorrect action + Azione non corretta + + + Empty message received + Ricevuto un messaggio vuoto + + + No URL provided + Nessun URL fornito + + + No logins found + Nessun login trovato + + + Unknown error + Errore sconosciuto + + + Add a new entry to a database. + Aggiungi una nuova voce al database. + + + Path of the database. + Percorso del database. + + + Key file of the database. + File chiave del database. + + + path + percorso + + + Username for the entry. + Nome utente della voce. + + + username + nome utente + + + URL for the entry. + URL della voce. + + + URL + URL + + + Prompt for the entry's password. + Richiedi la password della voce. + + + Generate a password for the entry. + Genera una password per questa voce. + + + Length for the generated password. + Lunghezza della password generata. + + + length + lunghezza + + + Path of the entry to add. + Percorso della voce da aggiungere. + + + Copy an entry's password to the clipboard. + Copia la password di una voce negli appunti. + + + Path of the entry to clip. + clip = copy to clipboard + Percorso della voce da tagliare. Timeout in seconds before clearing the clipboard. @@ -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,70 +4400,570 @@ Comandi disponibili: Genera una nuova password casuale. - Length of the generated password. - Lunghezza della password generata. + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + Immettere la password per la nuova voce: + + + Writing the database failed %1. + Scrittura del database non riuscita %1. + + + Successfully added entry %1. + Aggiunta con successo la voce %1. + + + 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 + + + + + QtIOCompressor + + Internal zlib error when compressing: + Errore interno di zlib durante la compressione: + + + Error writing to underlying device: + Errore durante la scrittura nel dispositivo: + + + Error opening underlying device: + Errore durante l'apertura del dispositivo: + + + Error reading data from underlying device: + Errore durante la lettura dal dispositivo: + + + Internal zlib error when decompressing: + Errore interno di zlib durante la decompressione: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Formato gzip non supportato da questa versione di zlib. + + + Internal zlib error: + Errore interno di zlib: + + + + SSHAgent + + 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 - Use lowercase characters in the generated password. - Includi lettere minuscole nella password generata. + Search terms are as follows: [modifiers][field:]["]term["] + - Use uppercase characters in the generated password. - Includi lettere maiuscole nella password generata. + Every search term must match (ie, logical AND) + - Use numbers in the generated password. - Includi numeri nella password generata. + Modifiers + Modificatori - Use special characters in the generated password. - Includi caratteri speciali nella password generata. + exclude term from results + Escludere il termine dai risultati - Use extended ASCII in the generated password. - Includi caratteri ASCII estesi nella password generata. + match term exactly + Corrispondenza esatta dei termini - - - QtIOCompressor - Internal zlib error when compressing: - Errore interno di zlib durante la compressione: + use regex in term + utilizzare regex nel termine - Error writing to underlying device: - Errore durante la scrittura nel dispositivo: + Fields + Campi - Error opening underlying device: - Errore durante l'apertura del dispositivo: + Term Wildcards + - Error reading data from underlying device: - Errore durante la lettura dal dispositivo: + match anything + corrispondenza con qualsiasi cosa - Internal zlib error when decompressing: - Errore interno di zlib durante la decompressione: + match one + corrisponde a uno - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Formato gzip non supportato da questa versione di zlib. + logical OR + OR logico - Internal zlib error: - Errore interno di zlib: + Examples + Esempi SearchWidget - - Search... - Ricerca... - 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 - - 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. + + Import + Importazione - KeePassXC: No keys found - KeePassXC: nessuna chiave trovata + Export + - No shared encryption-keys found in KeePassHttp Settings. - Nessun chiave condivisa di cifratura è stata trovata nelle impostazioni di KeePassHttp. + Imported certificates + - KeePassXC: Settings not available! - KeePassXC: impostazioni non disponibili! + Trust + - The active database does not contain an entry of KeePassHttp Settings. - Il database attivo non contiene nessun voce delle impostazioni di KeePassHttp. + Ask + - Removing stored permissions... - Rimozione dei permessi salvati... + Untrust + - Abort - Interrompi + Remove + Rimuovi - KeePassXC: Removed permissions - KeePassXC: permessi rimossi + Path + Percorso - - Successfully removed permissions from %n entries. - Permessi rimossi con successo da %n voce.Permessi rimossi con successo da %n voci. + + Status + - KeePassXC: No entry with permissions found! - KeePassXC: nessuna voce con permessi trovata! + Fingerprint + Impronta digitale - The active database does not contain an entry with permissions. - Il database attivo non contiene una voce con permessi. + Certificate + - - - SettingsWidget - Application Settings - Impostazioni applicazione + Trusted + - General - Generale + Untrusted + - Security - Sicurezza + Unknown + - Access error for config file %1 - Errore di accesso per il file di configurazione %1 + key.share + Filetype for KeeShare key + - - - SettingsWidgetGeneral - Basic Settings - Impostazioni di base + KeeShare key file + - Start only a single instance of KeePassXC - Avvia una sola istanza di KeePassXC + All files + Tutti i file - Remember last databases - Ricorda ultimo database + Select path + - Remember last key files and security dongles - Ricorda gli ultimi file chiave e dongle di sicurezza + Exporting changed certificate + - Load previous databases on startup - Carica i database precedenti all'avvio + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Automatically save on exit - Salva automaticamente all'uscita + Signer: + + + + ShareObserver - Automatically save after every change - Salva automaticamente dopo ogni modifica + Import from container without signature + - Automatically reload the database when modified externally - Ricarica automaticamente il database quando ci sono modifiche esterne + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Minimize when copying to clipboard - Minimizza quando si copia negli appunti + Import from container with certificate + - Minimize window at application startup - Minimizza la finestra all'avvio della applicazione + Not this time + - Use group icon on entry creation - Usa icona del gruppo alla creazione di una voce + Never + Mai - 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) + Always + - Hide the Details view - Nascondere la vista dei dettagli + Just this time + - Show a system tray icon - Visualizza un'icona nell'area di notifica del sistema + Import from %1 failed (%2) + - Hide window to system tray when minimized - Nascondi la finestra nell'area di notifica del sistema quando viene minimizzata + Import from %1 successful (%2) + - Hide window to system tray instead of app exit - Nascondi la finestra nella barra di sistema invece di chiudere l'applicazione + Imported from %1 + - Dark system tray icon - Icona scura per l'area di notifica di sistema + Signed share container are not supported - import prevented + - Language - Lingua + File is not readable + - Auto-Type - Completamento automatico + Invalid sharing container + - 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 + Untrusted import prevented + - 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 + Successful signed import + - Always ask before performing Auto-Type - Chiedi sempre prima di effettuare il completamento automatico + Unexpected error + - Global Auto-Type shortcut - Scorciatoia globale per l'auto-completamento + Unsigned share container are not supported - import prevented + - Auto-Type delay - Ritardo completamento automatico + Successful unsigned import + - ms - Milliseconds - ms + File does not exist + - Startup - Avvio + Unknown share container type + - File Management - Gestione dei file + Overwriting signed share container is not supported - export prevented + - Safely save database files (may be incompatible with Dropbox, etc) - Salvataggio sicuro dei file di database (potrebbe essere incompatibile con Dropbox, ecc) + Could not write export container (%1) + - Backup database file before saving - Effettua una copia di sicurezza del database prima di salvarlo + Overwriting unsigned share container is not supported - export prevented + - Entry Management - Gestione dell'elemento + Could not write export container + - General - Generale + Unexpected export error occurred + - - - SettingsWidgetSecurity - Timeouts - Timeout + Export to %1 failed (%2) + - Clear clipboard after - Svuota gli appunti dopo + Export to %1 successful (%2) + - sec - Seconds - sec + Export to %1 + - Lock databases after inactivity of - Blocca i database dopo un'inattività di + Do you want to trust %1 with the fingerprint of %2 from %3? + - Convenience - Comodità + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Blocca i database quando la sessione è bloccata o il coperchio è chiuso + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Blocca il database dopo la minimizzazione della finestra + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Non richiedere di ripetere la password quando è visibile + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Visualizza la password in chiaro in maniera predefinita + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Nascondere le password nel pannello di anteprima + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Nascondere le note della voce per impostazione predefinita + Timed Password + Password temporizzata - Privacy - Riservatezza + 000000 + 000000 + + + Copy + Copia + + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Usa Google come alternativa per scaricare le icone dal sito web + Copy + Copia - Re-lock previously locked database after performing Auto-Type - Blocca nuovamente un database precedentemente bloccato dopo aver completato l'Auto-Type + 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. + - 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 + sec + Seconds + sec + + + Code size: + Dimensioni codice: 6 digits 6 cifre - Code size: - Dimensioni codice: + 7 digits + 7 cifre - sec - Seconds - sec + 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. + + + + 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. + - - - UnlockDatabaseWidget - Unlock database - Sblocca database + 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 - - Remove an entry from the database. - Rimuovi una voce dal database. - - - Path of the database. - Percorso del database. - - - Path of the entry to remove. - Percorso della voce da rimuovere. - + YubiKeyEditWidget - 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) + Refresh + Aggiorna - path to a custom config file - percorso ad un file di configurazione personalizzato + YubiKey Challenge-Response + - key file of the database - file chiave del 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> + - read password of the database from stdin - leggi la password del database da stdin + No YubiKey detected, please ensure it's plugged in. + - 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 10a27b2b81..025d7ef28e 100644 --- a/share/translations/keepassx_ja.ts +++ b/share/translations/keepassx_ja.ts @@ -38,87 +38,297 @@ クリップボードにコピー - Version %1 - - バージョン %1 - + Project Maintainers: + プロジェクトメンテナ: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + KeePassXC チームはオリジナルの KeePassX を作成した debfx に心から感謝します。 + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + SSH エージェントを有効にする (再起動が必要) - Revision: %1 - リビジョン: %1 + Use OpenSSH for Windows instead of Pageant + Pageant の代わりに OpenSSH for Windows を使用する + + + ApplicationSettingsWidget - Distribution: %1 - 配布形式: %1 + Application Settings + アプリケーション設定 - Libraries: - ライブラリ: + General + 一般 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - オペレーティングシステム: %1 -CPU アーキテクチャー: %2 -カーネル: %3 %4 + Security + セキュリティ - Enabled extensions: - 有効化された拡張機能: + Access error for config file %1 + 設定ファイル %1 へのアクセスエラー - Project Maintainers: - プロジェクトメンテナ: + Icon only + アイコンのみ - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - KeePassXC チームはオリジナルの KeePassX を作成した debfx に心から感謝します。 + Text only + テキストのみ - Build Type: %1 - - ビルド形式: %1 - + Text beside icon + アイコンの横にテキスト + + + Text under icon + アイコンの下にテキスト + + + Follow style + スタイルに準拠 - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP アクセス確認 + Basic Settings + 基本設定 - Remember this decision - この決定を記憶する + Startup + 起動 - Allow - 許可 + Start only a single instance of KeePassXC + KeePassXC のインスタンスを一つだけ起動する - Deny - 拒否 + Remember last databases + 最近使用したデータベースを記憶する - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 が以下の項目のパスワードへのアクセスを要求しました。 -アクセスを許可するかどうかを選択してください。 + 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 + ボタンのスタイル - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - SSH エージェントを有効にする (再起動が必要) + 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. @@ -362,20 +585,41 @@ Please select whether you want to allow access. <b>警告:</b> 以下は危険なオプションです。 - Executable Files (*.exe);;All Files (*.*) - 実行ファイル (*.exe);;全てのファイル (*.*) + Select custom proxy location + カスタムプロキシを選択する + + + &Tor Browser + Tor Browser(&T) - Executable Files (*) - 実行ファイル (*) + <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 />期待されるパス: - Select custom proxy location - カスタムプロキシを選択する + Executable Files + 実行ファイル + + + All Files + 全てのファイル - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - 申し訳ありませんが、今の所 KeePassXC-Browser は Snap リリースではサポートしていません。 + 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 + @@ -417,153 +661,54 @@ Do you want to overwrite it? %1 - %2 の情報を更新しますか? - KeePassXC: Database locked! - KeePassXC: データベースはロックされています + Abort + 中止 - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - アクティブなデータベースがロックされています。 -選択されたデータベースのロックを解除するか、別のロックされていないデータベースを選択してください。 + Converting attributes to custom data… + 属性をカスタムデータに変換しています… - KeePassXC: Settings not available! - KeePassXC: 設定は利用できません + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: KeePassHTTP の属性を変換しました - 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: アクセス許可が削除されました + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1 個のエントリーから属性を正常に変換しました。 +%2 個のキーをカスタムデータに移行しました。 - 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. - アクティブなデータベースにはアクセス許可があるエントリーは含まれていません。 - - - - 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 - 空パスワード + Successfully moved %n keys to custom data. + %n 個のキーを正常にカスタムデータに移行しました。 - Do you really want to use an empty string as password? - 本当にパスワードとして空の文字列を使用しますか? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: KeePassHTTP の属性があるエントリーは見つかりません - Different passwords supplied. - 異なるパスワードが入力されました。 + The active database does not contain an entry with KeePassHTTP attributes. + アクティブなデータベースには KeePassHTTP の属性があるエントリーは含まれていません。 - Failed to set %1 as the Key file: -%2 - %1 をキーファイルとしてセットできませんでした: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: レガシーなブラウザー統合の設定が検出されました - Legacy key file format - レガシーなキーファイル形式 + KeePassXC: Create a new group + - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - レガシーなキーファイル形式は、将来的に、 -サポートされなくなる可能性があります。 - -新しいキーファイルの生成を検討してください。 + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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,65 +788,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 ファイルでエラーが検出されました + Error + エラー - more messages skipped] - 個のメッセージがスキップされました] + Empty fieldname %1 + 空のフィールド名 %1 - Error - エラー + column %1 + 列 %1 - CSV import: writer has errors: - - CSV のインポート: ライターにエラーがあります: - + Error(s) detected in CSV file! + CSV ファイルでエラーが検出されました - - - CsvImportWizard - - Error - エラー + + [%n more message(s) skipped] + [%n 個のメッセージがスキップされました] - Unable to calculate master key - マスターキーを計算できません + CSV import: writer has errors: +%1 + CSV のインポート: ライターにエラーがあります: +%1 CsvParserModel - %n byte(s), - %n バイト、 + %n column(s) + %n 列 + + + %1, %2, %3 + file info: bytes, rows, columns + %1、%2、%3 - %n row(s), - %n 行、 + %n byte(s) + %n バイト - %n column(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 @@ -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,141 +938,317 @@ 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 - キーファイルを開けませんでした + Can't open key file: +%1 + キーファイルを開けません: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - データベースを開けません。 + Passwords + パスワード + + + + DatabaseSettingsDialog + + Advanced Settings + 詳細設定 + + + General + 一般 - Database opened fine. Nothing to do. - データベースは正常に開かれています。行うべきことはありません。 + Security + セキュリティ - Success - 成功 + Master Key + マスターキー - The database has been successfully repaired -You can now save it. - データベースは正常に修復されました -データベースの保存を行ってください。 + Encryption Settings + 暗号化設定 - Unable to repair the database. - データベースを修復できません。 + Browser Integration + ブラウザー統合 - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - 一般 + KeePassXC-Browser settings + KeePassXC-Browser 設定 - Encryption - 暗号化 + &Disconnect all browsers + 全てのブラウザーの接続を断つ(&D) - Number of rounds too high - Key transformation rounds - ラウンド数が大きすぎます + Forg&et all site-specific settings on entries + エントリーのサイト固有の設定を全て消去する(&E) - 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 のキー変換ラウンド数に非常に大きな値を使用しています。 - -この値を維持すると、データベースを開くのに数時間または数日 (もしくはそれ以上) かかる可能性があります。 + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + KeePassHTTP の属性を KeePassXC-Browser のカスタムデータに移行する(&C) - Understood, keep number - 理解した上で値を維持する + Stored keys + 保存されたキー - Cancel - キャンセル + Remove + 削除 - Number of rounds too low - Key transformation rounds - ラウンド数が小さすぎます + Delete the selected key? + 選択したキーを削除しますか? - 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 のキー変換ラウンド数に非常に小さな値を使用しています。 - -この値を維持すると、データベースが簡単にクラックされる可能性があります。 + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + 本当に選択したキーを削除しますか? +ブラウザープラグインへの接続を妨害する可能性があります。 - KDF unchanged - KDF は変更されません + Key + キー - Failed to transform key with new KDF parameters; KDF unchanged. - 新しい KDF のパラメーターでのキー変換に失敗しました。KDF は変更されません。 + Value + - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB + + Enable Browser Integration to access these settings. + これらの設定にアクセスするには、ブラウザー統合を有効にしてください。 - - thread(s) - Threads for parallel execution (KDF settings) - スレッド + + Disconnect all browsers + 全てのブラウザーの接続を断つ - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - 暗号化アルゴリズム: + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + 本当に全てのブラウザーを切断しますか? +ブラウザープラグインへの接続を妨害する可能性があります。 - AES: 256 Bit (default) - AES: 256 ビット (既定) + KeePassXC: No keys found + KeePassXC: キーが見つかりません - Twofish: 256 Bit - Twofish: 256 ビット + No shared encryption keys found in KeePassXC settings. + KeePassXC の設定内に共有暗号化キーは見つかりませんでした。 - Key Derivation Function: - 鍵導出関数: + KeePassXC: Removed keys from database + KeePassXC: データベースからキーが削除されました + + + Successfully removed %n encryption key(s) from KeePassXC settings. + KeePassXC の設定から %n 個の暗号化キーが正常に削除されました。 - Transform rounds: - 変換回数: + Forget all site-specific settings on entries + エントリーのサイト固有の設定を全て消去する - Benchmark 1-second delay - ベンチマーク 1秒遅延 + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + 本当にエントリー毎のサイト固有の設定を全て消去しますか? +エントリーへのアクセス権が取り消されます。 - Memory Usage: - メモリ使用量: + Removing stored permissions… + 保存されたアクセス許可を削除しています… - Parallelism: + 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 + 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) + スレッド + + + %1 ms + milliseconds + %1 ミリ秒 + + + %1 s + seconds + %1 秒 + DatabaseSettingsWidgetGeneral @@ -952,91 +1298,112 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - ルート + Sharing + 共有 - KeePass 2 Database - KeePass 2 データベース + Breadcrumb + 階層リンク - All files - 全てのファイル + Type + 種類 - Open database - データベースを開く + Path + パス - File not found! - ファイルが見つかりません + Last Signer + 最終署名者 - Unable to open the database. - データベースを開けません。 + Certificates + 証明書 - File opened in read only mode. - 読み取り専用でファイルを開きました。 + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - CSV ファイルを開く + Add additional protection... + 保護を追加... - CSV file - CSV ファイル + No encryption key added + 追加された暗号化キーはありません - All files (*) - 全てのファイル (*) + You must add at least one encryption key to secure your database! + データベースをセキュアにするには、暗号化キーを少なくとも1つ追加する必要があります。 - Merge database - データベースをマージする + No password set + パスワードを設定していません - Open KeePass 1 database - KeePass 1 データベースを開く + 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? + [警告] パスワードを設定していません。パスワード無しでのデータベースの使用は極力避けるべきです。 + +パスワード無しで続行してもよろしいですか? - KeePass 1 database - KeePass 1 データベース + Unknown error + 不明なエラーです - Close? - 閉じますか? + Failed to change master key + マスターキーの変更に失敗しました + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" は現在編集モードです。 -変更を破棄して閉じてしまってもよろしいですか? + Database Name: + データベース名: - Save changes? - 変更を保存しますか? + Description: + 概要: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" は編集されています。 -変更を保存しますか? + KeePass 2 Database + KeePass 2 データベース + + + All files + 全てのファイル - Writing the database failed. - データベースの書き込みに失敗しました。 + Open database + データベースを開く - Passwords - パスワード + CSV file + CSV ファイル - Save database as - データベースを別名で保存 + Merge database + データベースをマージする + + + Open KeePass 1 database + KeePass 1 データベースを開く + + + KeePass 1 database + KeePass 1 データベース Export database to CSV file @@ -1047,40 +1414,41 @@ 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. + 作成されたデータベースはキーや KDF が無いため保存しません。 +これは確実にバグなので、開発者への報告をお願いします。 - 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 + CSV ファイルを選択 - 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 + %1 [新しいデータベース] - 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 [ロック] + + + %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 個のエントリーを永久に削除しますか? - - Close - 閉じる + + Delete entry(s)? + エントリーを削除しますか? + + + Move entry(s) to recycle bin? + エントリーをゴミ箱に移動しますか? - General - 一般 + File opened in read only mode. + 読み取り専用でファイルを開きました。 - Password - パスワード + Lock Database? + データベースをロックしますか? - URL - URL + You are editing an entry. Discard changes and lock anyway? + エントリーを編集中です。変更を破棄してロックしてもよろしいですか? - Expiration - 有効期限 + "%1" was modified. +Save changes? + "%1" は更新されています。 +変更を保存しますか? - Username - ユーザー名 + Database was modified. +Save changes? + データベースは更新されています。 +変更を保存しますか? - Autotype - 自動入力 + Save changes? + 変更を保存しますか? - Searching - 検索 + Could not open the new database file while attempting to autoreload. +Error: %1 + 自動再読み込みしようとした際に、新しいデータベースファイルを開くことができませんでした。 +エラー: %1 - Attributes - 属性 + Disable safe saves? + 安全な保存を無効にしますか? - Attachments - 添付ファイル + 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 はデータベースの多段階保存に失敗しました。これは恐らく、保存するファイルをロックしているファイル同期サービスが原因だと思われます。 +安全な保存を無効にして再試行しますか? - Notes - メモ + Writing the database failed. +%1 + データベースの書き込みに失敗しました。 +%1 - Window - ウィンドウ + Passwords + パスワード - Sequence - シーケンス + Save database as + ファイル名をつけてデータベースを保存 - Search - 検索 + KeePass 2 Database + KeePass 2 データベース - Clear - 消去 + 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 個の参照があります。上書き、スキップ、削除のどれを行いますか? - Never - なし + Delete group + グループを削除 - [PROTECTED] - [保護] + Move group to recycle bin? + グループをゴミ箱に移動しますか? - Disabled - 無効 + Do you really want to move the group "%1" to the recycle bin? + 本当にグループ "%1" をゴミ箱に移動しますか? - Enabled - 有効 + Successfully merged the database files. + データベースファイルは正常にマージされました。 + + + Database was not modified by merge operation. + データベースはマージ処理で更新されませんでした。 + + + 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 @@ -2000,84 +2570,49 @@ This may cause the affected plugins to malfunction. - HttpPasswordGeneratorWidget + KMessageWidget - Length: - 文字数: + &Close + 閉じる(&C) - Character Types - 文字種 + Close message + メッセージを閉じる + + + Kdbx3Reader - Upper Case Letters - 大文字 + Unable to calculate master key + マスターキーを計算できません - 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 - 使用する文字種の文字が必ず含まれるようにする + Unable to issue challenge-response. + チャレンジレスポンスを発行することができません。 - Extended ASCII - 拡張 ASCII + Wrong key or database file is corrupt. + キーが間違っているかデータベースファイルが破損しています。 - - - KMessageWidget - &Close - 閉じる(&C) + missing database headers + データベースのヘッダーがありません - Close message - メッセージを閉じる + Header doesn't match hash + ヘッダーがハッシュと一致しません - - - Kdbx3Reader - Unable to calculate master key - マスターキーを計算できません + Invalid header id size + ヘッダー ID サイズが不正です - Unable to issue challenge-response. - チャレンジレスポンスを発行することができません。 + Invalid header field length + ヘッダーフィールド長が不正です - Wrong key or database file is corrupt. - キーが間違っているかデータベースファイルが破損しています。 + Invalid header data length + ヘッダーデータ長が不正です @@ -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 エントリーのフィールドタイプが不正です + + unable to seek to content position + 内容の位置にシークできません + - KeePass2 + KeeShare - AES: 256-bit - AES: 256 ビット + Disabled share + 共有無効 - Twofish: 256-bit - Twofish: 256 ビット + Import from + インポート - ChaCha20: 256-bit - ChaCha20: 256 ビット + 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 – 推奨) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - 既存のシングルインスタンスロックファイルは無効です。新しいインスタンスを起動します。 + Key Component + キーコンポーネント - The lock file could not be created. Single-instance mode disabled. - ロックファイルを作成できませんでした。シングルインスタンスモードは無効です。 + Key Component Description + キーコンポーネントの概要 - Another instance of KeePassXC is already running. - KeePassXC の別インスタンスが既に起動しています。 + Cancel + キャンセル - Fatal error while testing the cryptographic functions. - 暗号化機能のテスト中に致命的なエラーが発生しました。 + Key Component set, click to change or remove + キーコンポーネントの設定 (変更か削除をクリックしてください) - KeePassXC - Error - KeePassXC - エラー + 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,226 +3437,394 @@ This version is not meant for production use. データベース破損の危険性が高いため、バックアップを維持します。 このバージョンは正式版ではありません。 - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - OpenSSH の鍵ファイルではありません + &Donate + 寄付(&D) - PEM boundary mismatch - PEM のバウンダリーが不一致です + Report a &bug + バグを報告(&B) - Base64 decoding failed - Base64 のデコードに失敗しました + 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 をダウンロードして使用することをお勧めします。 - Key file way too small. - キーファイルが小さすぎます。 + &Import + インポート(&I) - Key file magic header id invalid - キーファイルのマジックヘッダー ID が不正です + Copy att&ribute... + 属性をコピー(&R)... - Found zero keys - キーが 0 です + TOTP... + TOTP... - Failed to read public key. - 公開鍵の読み取りに失敗しました。 + &New database... + 新しいデータベース(&N)... - Corrupted key file, reading private key failed - キーファイルが破損しているため私有鍵の読み取りに失敗しました + Create a new database + 新しいデータベースを作成 - No private key payload to decrypt - 復号する私有鍵のペイロードがありません + &Merge from database... + データベースからマージ(&M)... - Trying to run KDF without cipher - 暗号なしで KDF を実行しようとしています + Merge from another KDBX database + 別の KDBX データベースからマージ - Passphrase is required to decrypt this key - この鍵を復号するパスフレーズが必要です + &New entry + 新しいエントリー(&N) - Key derivation failed, key file corrupted? - 鍵の導出に失敗しました。キーファイルが壊れていませんか? + Add a new entry + 新しいエントリーを追加 - Decryption failed, wrong passphrase? - 復号化に失敗しました。パスフレーズが間違っていませんか? + &Edit entry + エントリーを編集(&E) - Unexpected EOF while reading public key - 公開鍵の読み取り中に予期しない EOF がありました + View or edit entry + エントリーを編集または表示 - Unexpected EOF while reading private key - 私有鍵の読み取り中に予期しない EOF がありました + &New group + 新しいグループ(&N) - Can't write public key as it is empty - 公開鍵が空のため書き込めません + Add a new group + 新しいグループを追加 - Unexpected EOF when writing public key - 公開鍵の書き込み中に予期しない EOF がありました + Change master &key... + マスターキーを変更(&K)... - Can't write private key as it is empty - 私有鍵が空のため書き込めません + &Database settings... + データベースの設定(&D)... - Unexpected EOF when writing private key - 私有鍵の書き込み中に予期しない EOF がありました + Copy &password + パスワードをコピー(&P) - Unsupported key type: %1 - サポートしていない鍵の種類です: %1 + Perform &Auto-Type + 自動入力を実行(&A) - Unknown cipher: %1 - 不明な暗号です: %1 + Open &URL + URL を開く(&U) - Cipher IV is too short for MD5 kdf - 暗号初期化ベクトルが MD5 KDF に対して短すぎます + KeePass 1 database... + KeePass 1 データベース... - Unknown KDF: %1 - 不明な KDF です: %1 + Import a KeePass 1 database + KeePass 1 データベースをインポート - Unknown key type: %1 - 不明な鍵の種類です: %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. + 更新の確認はいつでもメニューから手動で実行できます。 - OptionDialog + Merger - Dialog - ダイアログ + Creating missing %1 [%2] + 存在しない %1 [%2] を作成 - This is required for accessing your databases from ChromeIPass or PassIFox - このオプションは ChromeIPass や PassIFox からデータベースにアクセスするために必要です + Relocating %1 [%2] + %1 [%2] を移転 - Enable KeePassHTTP server - KeePassHTTP サーバーを有効にする + Overwriting %1 [%2] + %1 [%2] を上書き - General - 一般 + older entry merged from database "%1" + データベース "%1" からマージされた古いエントリー - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - クレデンシャルを要求された際に通知を表示する(&O) + Adding backup for older target %1 [%2] + 古いターゲット %1 [%2] のバックアップを追加 - Only returns the best matches for a specific URL instead of all entries for the whole domain. - ドメイン全体にマッチする全てのエントリーの代わりに、特定の URL に最もマッチするエントリーのみが返されます。 + Adding backup for older source %1 [%2] + 古いソース %1 [%2] のバックアップを追加 - &Return only best matching entries - 最もマッチするエントリーのみを返す(&R) + Reapplying older target entry on top of newer source %1 [%2] + 古いターゲットのエントリーを新しいソース %1 [%2] のトップに再適用 - Re&quest to unlock the database if it is locked - データベースがロックされている場合はロックの解除を要求する(&Q) + Reapplying older source entry on top of newer target %1 [%2] + 古いソースのエントリーを新しいターゲット %1 [%2] のトップに再適用 + + + Synchronizing from newer source %1 [%2] + 新しいソース %1 [%2] から同期 - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - 同じスキーム (http://, https://, ftp://, ...) を持つエントリーのみが返されます。 + Synchronizing from older source %1 [%2] + 古いソース %1 [%2] から同期 - &Match URL schemes - URL スキームのマッチ(&M) + Deleting child %1 [%2] + 子要素 %1 [%2] を削除 - Sort matching entries by &username - マッチするエントリーをユーザー名で並べ替える(&U) + Deleting orphan %1 [%2] + 親要素が無い %1 [%2] を削除 - Sort &matching entries by title - マッチするエントリーをタイトルで並べ替える(&M) + Changed deleted objects + 削除されたオブジェクトを変更 - R&emove all shared encryption keys from active database - アクティブなデータベースから共有暗号化キーを全て削除する(&E) + Adding missing icon %1 + 存在しないアイコン %1 を追加 + + + NewDatabaseWizard - Re&move all stored permissions from entries in active database - アクティブなデータベースのエントリーに保存されたアクセス許可を全て削除する(&M) + Create a new KeePassXC database... + 新しい KeePassXC データベースを作成... - Password Generator - パスワード生成 + Root + Root group + ルート + + + + NewDatabaseWizardPage + + WizardPage + ウィザードページ - Advanced + 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 詳細設定 - Always allow &access to entries - 常にエントリーへのアクセスを許可する(&A) + Simple Settings + 簡易設定 + + + NewDatabaseWizardPageEncryption - Always allow &updating entries - 常にエントリーの更新を許可する(&U) + Encryption Settings + 暗号化の設定 - Only the selected database has to be connected with a client. - 選択されたデータベースのみがクライアントと接続する必要があります。 + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。 + + + NewDatabaseWizardPageMasterKey - Searc&h in all opened databases for matching entries - 全ての開かれたデータベースからマッチするエントリーを検索する(&H) + Database Master Key + データベースのマスターキー - Automatically creating or updating string fields is not supported. - 文字列フィールドの自動作成や自動更新はサポートされていません。 + A master key known only to you protects your database. + あなただけが知るマスターキーがデータベースを保護します。 + + + NewDatabaseWizardPageMetaData - &Return advanced string fields which start with "KPH: " - "KPH: " から始まる拡張された文字列フィールドを返す(&R) + 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 の鍵ファイルではありません - HTTP Port: - HTTP ポート: + PEM boundary mismatch + PEM のバウンダリーが不一致です - Default port: 19455 - デフォルトのポート: 19455 + Base64 decoding failed + Base64 のデコードに失敗しました - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC は 127.0.0.1 のこのポートをリッスンします + Key file way too small. + キーファイルが小さすぎます。 - <b>Warning:</b> The following options can be dangerous! - <b>警告:</b> 以下は危険なオプションです。 + Key file magic header id invalid + キーファイルのマジックヘッダー ID が不正です + + + Found zero keys + キーが 0 です + + + 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 + 公開鍵の読み取り中に予期しない 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 + + + Unknown cipher: %1 + 不明な暗号です: %1 + + + Cipher IV is too short for MD5 kdf + 暗号初期化ベクトルが MD5 KDF に対して短すぎます + + + Unknown KDF: %1 + 不明な KDF です: %1 + + + Unknown key type: %1 + 不明な鍵の種類です: %1 + + + + PasswordEditWidget + + Enter password: + パスワードを入力: + + + Confirm password: + パスワードを確認: + + + Password + パスワード - <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> + <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> - Cannot bind to privileged ports - 特権ポートにバインドできません + Passwords do not match. + パスワードが一致しません。 - 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,153 +3938,302 @@ Using default port 19455. Password quality すばらしい - - - QObject - Database not opened - データベースが開かれていません + ExtendedASCII + 拡張 ASCII - Database hash not available - データベースハッシュが利用できません + Switch to advanced mode + 詳細モードに切り替え - Client public key not received - クライアントの公開鍵を受信しませんでした + Advanced + 詳細設定 - Cannot decrypt message - メッセージを復号できません + Upper Case Letters A to F + 大文字の A ~ F - Timeout or cannot connect to KeePassXC - KeePassXC に接続できないかタイムアウトしました + A-Z + A-Z - Action cancelled or denied - アクションがキャンセルまたは拒否されました + Lower Case Letters A to F + 小文字の A ~ F - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - メッセージを暗号化できないか、公開鍵が見つかりません。Native Messaging は KeePassXC で有効化されていますか? + a-z + a-z - KeePassXC association failed, try again - KeePassXC のアソシエーションに失敗しました。再試行してください。 + 0-9 + 0-9 - Key change was not successful - キーの変更は成功しませんでした + Braces + 括弧 - Encryption key is not recognized - 暗号化キーが認識されません + {[( + {[( - No saved databases found - 保存されたデータベースが見つかりません + Punctuation + 句読点 - Incorrect action - 不正確なアクションです + .,:; + .,:; - Empty message received - 空のメッセージを受信しました + Quotes + 引用符 - No URL provided - URL がありません + " ' + " ' - No logins found - ログインしません + Math + 数学記号 - Unknown error - 不明なエラーです + <*+!?= + <*+!?= - Add a new entry to a database. - データベースに新しいエントリーを追加する。 + Dashes + ダッシュ - Path of the database. - データベースのパス。 + \_|-/ + \_|-/ - Key file of the database. - データベースのキーファイル。 + Logograms + 表語文字 - path - パス + #$%&&@^`~ + #$%&&@^`~ - Username for the entry. - エントリーのユーザー名。 + Switch to simple mode + 簡易モードに切り替え - username - ユーザー名 + Simple + 簡易設定 - URL for the entry. - エントリーの URL。 + Character set to exclude from generated password + 生成されたパスワードから文字集合を除外する - URL - URL + Do not include: + 次を除外: - Prompt for the entry's password. - エントリーのパスワードを要求する。 + Add non-hex letters to "do not include" list + "除外" リストに非16進数の文字列を追加 - Generate a password for the entry. - エントリーのパスワードを生成する。 + Hex + 16進数 - Length for the generated password. - 生成するパスワードの長さ。 + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + 除外される文字: "0"、"1"、"l"、"I"、"O"、"|"、"﹒" - length - 長さ + Word Co&unt: + 単語数(&U): - Path of the entry to add. - 追加するエントリーのパス。 + Regenerate + 再生成 + + + QApplication - Copy an entry's password to the clipboard. - クリップボードにエントリーのパスワードをコピーする。 + KeeShare + KeeShare + + + QFileDialog - Path of the entry to clip. - clip = copy to clipboard - クリップボードにコピーするエントリーのパス。 + Select + 選択 + + + QMessageBox - Timeout in seconds before clearing the clipboard. - クリップボードを消去するまでの時間 (秒) + Overwrite + 上書き - Edit an entry. - エントリーを編集する。 + Delete + 削除 - Title for the entry. - エントリーのタイトル。 + Move + 移動 - title - タイトル + Empty + 空にする - Path of the entry to edit. - 編集するエントリーのパス。 + 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 + KeePassXC のアソシエーションに失敗しました。再試行してください。 + + + Encryption key is not recognized + 暗号化キーが認識されません + + + Incorrect action + 不正確なアクションです + + + Empty message received + 空のメッセージを受信しました + + + No URL provided + URL がありません + + + 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 + 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. @@ -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,70 +4418,573 @@ Available commands: 新しいランダムなパスワードを生成する。 - Length of the generated password. - 生成されるパスワードの長さ。 + Invalid value for password length %1. + %1 はパスワードの長さとして適正な値ではありません。 + + + Could not create entry with path %1. + パス %1 のエントリーを作成できませんでした。 + + + Enter password for new entry: + 新しいエントリーのパスワードを入力してください: + + + Writing the database failed %1. + データベースへの書き込みはエラー "%1" で失敗しました。 + + + Successfully added entry %1. + エントリー %1 は正常に追加されました。 + + + 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 + + + + + QtIOCompressor + + Internal zlib error when compressing: + 圧縮時に内部 zlib エラーが発生しました: + + + Error writing to underlying device: + 基本デバイスへの書き込み時にエラーが発生しました: + + + Error opening underlying device: + 基本デバイスを開く際にエラーが発生しました: + + + Error reading data from underlying device: + 基本デバイスから読み込み時にエラーが発生しました: + + + Internal zlib error when decompressing: + 展開時に内部 zlib エラーが発生しました: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + zlib の現在のバージョンが gzip 形式をサポートしていません。 + + + Internal zlib error: + 内部 zlib エラー: + + + + SSHAgent + + 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 + 検索のヘルプ - Use lowercase characters in the generated password. - 小文字を使用したパスワードを生成する。 + Search terms are as follows: [modifiers][field:]["]term["] + 検索語は次の通りです: [修飾子][フィールド:]["]用語["] - Use uppercase characters in the generated password. - 大文字を使用したパスワードを生成する。 + Every search term must match (ie, logical AND) + 用語は全て一致する必要があります (つまり論理積) - Use numbers in the generated password. - 数字を使用したパスワードを生成する。 + Modifiers + 修飾子 - Use special characters in the generated password. - 特殊な文字を使用したパスワードを生成する。 + exclude term from results + 結果から用語を除外 - Use extended ASCII in the generated password. - 拡張 ASCII を使用したパスワードを生成する。 + match term exactly + 用語が完全に一致 - - - QtIOCompressor - Internal zlib error when compressing: - 圧縮時に内部 zlib エラーが発生しました: + use regex in term + 用語に正規表現を使用 - Error writing to underlying device: - 基本デバイスへの書き込み時にエラーが発生しました: + Fields + フィールド - Error opening underlying device: - 基本デバイスを開く時にエラーが発生しました: + Term Wildcards + 用語のワイルドカード - Error reading data from underlying device: - 基本デバイスから読み込み時にエラーが発生しました: + match anything + 何れかが一致 - Internal zlib error when decompressing: - 展開時に内部 zlib エラーが発生しました: + match one + 一文字一致 - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - zlib の現在のバージョンが gzip 形式をサポートしていません。 + logical OR + 論理和 - Internal zlib error: - 内部 zlib エラー: + Examples + SearchWidget - - Search... - 検索... - 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 + 生成 - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - KeePassX/Http の設定から %n 個の暗号化キーが正常に削除されました。 + + Import + インポート - KeePassXC: No keys found - KeePassXC: キーが見つかりません + Export + エクスポート - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp の設定内に共有暗号化キーは見つかりませんでした。 + Imported certificates + インポートされた証明書 - KeePassXC: Settings not available! - KeePassXC: 設定は利用できません + Trust + 信用 - The active database does not contain an entry of KeePassHttp Settings. - アクティブなデータベースに KeePassHttp の設定のエントリーが含まれていません。 + Ask + 確認 - Removing stored permissions... - 保存されたアクセス許可を削除しています… + Untrust + 不信 - Abort - 中止 + Remove + 削除 - KeePassXC: Removed permissions - KeePassXC: アクセス許可が削除されました + Path + パス - - Successfully removed permissions from %n entries. - %n 個のエントリーからアクセス許可が正常に削除されました。 + + Status + ステータス - KeePassXC: No entry with permissions found! - KeePassXC: アクセス許可があるエントリーは見つかりません + Fingerprint + フィンガープリント - The active database does not contain an entry with permissions. - アクティブなデータベースにはアクセス許可があるエントリーは含まれていません。 + Certificate + 証明書 - - - SettingsWidget - Application Settings - アプリケーション設定 + Trusted + 信用 - General - 一般 + Untrusted + 不信 - Security - セキュリティ + Unknown + 不明 - Access error for config file %1 - 設定ファイル %1 へのアクセスエラー + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - 基本設定 + KeeShare key file + KeeShare キーファイル - Start only a single instance of KeePassXC - KeePassXC のインスタンスを一つだけ起動する + All files + 全てのファイル - Remember last databases - 最近使用したデータベースを記憶する + Select path + パスを選択 - Remember last key files and security dongles - 最近使用したキーファイルとセキュリティードングルを記憶する + Exporting changed certificate + 変更された証明書をエクスポートしています - Load previous databases on startup - 起動時に前回のデータベースを読み込む + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + エクスポートされる証明書は使用中の証明書と同一ではありません。現在の証明書をエクスポートしますか? - Automatically save on exit - 終了時に自動的に保存する + Signer: + + + + ShareObserver - Automatically save after every change - 変更するたびに自動的に保存する + Import from container without signature + 署名なしコンテナからのインポート - Automatically reload the database when modified externally - 編集された際に自動でデータベースを再読み込みする + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + 共有コンテナは署名されていないため、ソースを確認できません。本当に %1 からインポートしますか? - Minimize when copying to clipboard - クリップボードにコピーしたら最小化する + Import from container with certificate + 署名付きコンテナからのインポート - Minimize window at application startup - アプリケーション起動時にウィンドウを最小化する + Not this time + 今回はしない - Use group icon on entry creation - エントリー作成時にグループのアイコンを使用する + Never + 常にしない - Don't mark database as modified for non-data changes (e.g., expanding groups) - データ以外の変更 (例えばグループの展開) に対して、データベースを修正済みとしてマークしないようにする + Always + 常にする - Hide the Details view - 詳細ビューを非表示にする + Just this time + 今回はする - Show a system tray icon - システムトレイアイコンを表示する + Import from %1 failed (%2) + %1 からのインポートに失敗しました (%2) - Hide window to system tray when minimized - 最小化された際にシステムトレイへ格納する + Import from %1 successful (%2) + %1 からのインポートに成功しました (%2) - Hide window to system tray instead of app exit - アプリケーション終了ではなくシステムトレイへ格納する + Imported from %1 + %1 からインポートされました - Dark system tray icon - ダークシステムトレイアイコン + Signed share container are not supported - import prevented + 署名共有コンテナはサポートされていません - インポートは阻害されました - Language - 言語 + File is not readable + ファイルが読み取り可能ではありません - Auto-Type - 自動入力 + Invalid sharing container + 共有コンテナが不正です - Use entry title to match windows for global Auto-Type - グローバル自動入力のウィンドウの照合にエントリーのタイトルを使用する + Untrusted import prevented + 不信なインポートが阻害されました - Use entry URL to match windows for global Auto-Type - グローバル自動入力のウィンドウの照合にエントリーの URL を使用する + Successful signed import + 署名付きのもののインポートに成功しました - Always ask before performing Auto-Type - 自動入力を行う前に毎回確認する + Unexpected error + 予期しないエラーです - Global Auto-Type shortcut - グローバル自動入力のショートカット + Unsigned share container are not supported - import prevented + 未署名共有コンテナはサポートされていません - インポートは阻害されました - Auto-Type delay - 自動入力の遅延 + Successful unsigned import + 未署名のもののインポートに成功しました - ms - Milliseconds - ミリ秒 + File does not exist + ファイルが存在しません - Startup - 起動 + Unknown share container type + 不明な共有コンテナ形式です - File Management - ファイル管理 + Overwriting signed share container is not supported - export prevented + 署名共有コンテナの上書きはサポートされていません - エクスポートは阻害されました - Safely save database files (may be incompatible with Dropbox, etc) - 安全にデータベースファイルを保存する (Dropbox などのサービスでは動作しない可能性があります) + Could not write export container (%1) + コンテナを書き込めませんでした (%1) - Backup database file before saving - 保存する前にデータベースファイルをバックアップする + Overwriting unsigned share container is not supported - export prevented + 未署名共有コンテナの上書きはサポートされていません - エクスポートは阻害されました - Entry Management - エントリー管理 + Could not write export container + コンテナを書き込めませんでした - General - 一般 + Unexpected export error occurred + 予期しないエクスポートエラーが発生しました - - - SettingsWidgetSecurity - Timeouts - タイムアウト + Export to %1 failed (%2) + %1 へのエクスポートに失敗しました (%2) - Clear clipboard after - 次の時間が過ぎたらクリップボードを消去 + Export to %1 successful (%2) + %1 へのエクスポートに成功しました (%2) - sec - Seconds - + Export to %1 + %1 にエクスポート - Lock databases after inactivity of - 未操作の時間が続いたらデータベースをロック + Do you want to trust %1 with the fingerprint of %2 from %3? + %3 の %1 (フィンガープリント %2) を信用しますか?{1 ?} {2 ?} - Convenience - 利便性 + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - セッションがロックされたりラップトップが閉じられた際にデータベースをロックする + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - ウィンドウを最小化したらデータベースをロックする + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - パスワードが表示されている場合は、パスワードの再入力を必要としないようにする + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - パスワードはデフォルトで平文表示にする + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - プレビューパネルのパスワードを非表示にする + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - エントリーのメモをデフォルトで非表示にする + Timed Password + 時限パスワード - Privacy - プライバシー + 000000 + 000000 + + + Copy + コピー + + Expires in <b>%n</b> second(s) + 期限切れまで <b>%n</b> 秒 + + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - ウェブサイトのアイコンをダウンロードするためのフォールバックとして Google を使用する + Copy + コピー - Re-lock previously locked database after performing Auto-Type - 自動入力実行後に以前ロックされたデータベースを再ロックする + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + メモ: これらの TOTP 設定は他の Authenticator では動作しない可能性があります。 + + + There was an error creating the QR code. + QR コードの作成中にエラーが発生しました。 + + + Closing in %1 seconds. + %1 秒後に閉じます。 - 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桁 + sec + Seconds + + + + Code size: + コードサイズ: 6 digits 6桁 - Code size: - コードサイズ: + 7 digits + 7桁 - sec - Seconds - + 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. + 更新情報の確認中にエラーが発生しました。 + + + 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)。 - - - UnlockDatabaseWidget - Unlock database - データベースのロックを解除 + 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 - - Remove an entry from the database. - データベースからエントリーを削除する。 - - - Path of the database. - データベースのパス。 - - - Path of the entry to remove. - 削除するエントリーのパス。 - + YubiKeyEditWidget - KeePassXC - cross-platform password manager - KeePassXC - クロスプラットフォームのパスワードマネージャー - - - filenames of the password databases to open (*.kdbx) - 開くパスワードデータベースのファイル名 (*.kdbx) + Refresh + 再読み込み - path to a custom config file - カスタム設定ファイルへのパス + YubiKey Challenge-Response + YubiKey のチャレンジレスポンス - key file 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> + <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> - read password of the database from stdin - 標準入力からデータベースのパスワードを読み込む + No YubiKey detected, please ensure it's plugged in. + YubiKey が検出されませんでした。挿入されているかどうか確認してください。 - 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 4531122bf1..059c683da4 100644 --- a/share/translations/keepassx_kk.ts +++ b/share/translations/keepassx_kk.ts @@ -9,27 +9,42 @@ 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 - Copy to clipboard + Include the following information whenever you report a bug: - Version %1 - + Copy to clipboard Revision: %1 + + Distribution: %1 + + Libraries: @@ -45,2346 +60,5364 @@ Kernel: %3 %4 - Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Project Maintainers: - KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Project Maintainers: + Version %1 - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + Build Type: %1 - Include the following information whenever you report a bug: - + Auto-Type + Автотеру - Distribution: %1 + Browser Integration - - - AccessControlDialog - Remember this decision + SSH Agent - Allow + YubiKey - Deny + TouchID - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + None - KeePassXC HTTP Confirm Access + KeeShare (signed and unsigned sharing) - - - AutoType - Couldn't find an entry that matches the window title: - Терезе атауына сай келетін жазбаны табу мүмкін емес: + KeeShare (only signed sharing) + - Auto-Type - KeePassXC + KeeShare (only unsigned sharing) - AutoTypeAssociationsModel - - Window - Терезе - + AgentSettingsWidget - Sequence - Тізбек + Enable SSH Agent (requires restart) + - Default sequence - Үнсіз келісім тізбегі + Use OpenSSH for Windows instead of Pageant + - AutoTypeSelectDialog + ApplicationSettingsWidget - Select entry to Auto-Type: - Автотеру үшін жазбаны таңдаңыз: + Application Settings + Қолданба баптаулары - Auto-Type - KeePassXC - + General + Жалпы - - - ChangeMasterKeyWidget - Password - Пароль + Security + Қауіпсіздік - Enter password: - Парольді енгізіңіз: + Access error for config file %1 + - Repeat password: - Парольді қайталаңыз: + Icon only + - Browse - Шолу + Text only + - Create - Жасау + Text beside icon + - Key files - Кілттер файлдары + Text under icon + - All files - Барлық файлдар + Follow style + + + + ApplicationSettingsWidgetGeneral - Create Key File... - Кілттер файлын жасау... + Basic Settings + - Unable to create Key File : - Кілттер файлын жасау мүмкін емес: + Startup + - Select a key file - Кілттер файлын таңдаңыз + Start only a single instance of KeePassXC + - Do you really want to use an empty string as password? - Пароль ретінде бос жолды қолдануды шынымен қалайсыз ба? + Remember last databases + Соңғы дерекқорларды есте сақтау: - Different passwords supplied. - Әр түрлі парольдер көрсетілді. + Remember last key files and security dongles + - Failed to set %1 as the Key file: -%2 - %1 файлын кілттер файлы ретінде орнату қатесі: -%2 + Load previous databases on startup + - &Key file + Minimize window at application startup - Cha&llenge Response + File Management - Refresh + Safely save database files (may be incompatible with Dropbox, etc) - Empty password + Backup database file before saving - Changing master key failed: no YubiKey inserted. - + Automatically save after every change + Әр өзгерістен кейін автосақтау - - - CloneDialog - Clone Options - + Automatically save on exit + Шығу кезінде автосақтау - Replace username and password with references + Don't mark database as modified for non-data changes (e.g., expanding groups) - Copy history + Automatically reload the database when modified externally - Append ' - Clone' to title + Entry Management - - - CsvImportWidget - Import CSV fields - + Use group icon on entry creation + Жазбаны жасау кезінде топ таңбашасын қолдану - filename - + Minimize when copying to clipboard + Алмасу буферіне көшіру кезінде қолданбаны қайыру - size, rows, columns + Hide the entry preview panel - Encoding - + General + Жалпы - Codec + Hide toolbar (icons) - Text is qualified by + Minimize instead of app exit - Fields are separated by - + Show a system tray icon + Жүйелік трей таңбашасын қолдану - Comments start with + Dark system tray icon - First record has field names - + Hide window to system tray when minimized + Қолданба қайырылған кезде терезені жүйелік трейге жасыру - Number of headers line to discard - + Language + Тіл - Consider '\' an escape character - + Auto-Type + Автотеру - Preview + Use entry title to match windows for global Auto-Type - Column layout + Use entry URL to match windows for global Auto-Type - Not present in CSV file + Always ask before performing Auto-Type - Empty fieldname - + Global Auto-Type shortcut + Глобалды автотеру жарлығы - column + Auto-Type typing delay - Imported from CSV file + ms + Milliseconds - Original data: + Auto-Type start delay - Error(s) detected in CSV file ! + Check for updates at application startup - more messages skipped] + Include pre-releases when checking for updates - Error - Қате + Movable toolbar + - CSV import: writer has errors: - + Button style - CsvImportWizard + ApplicationSettingsWidgetSecurity - Import CSV file + Timeouts - Error - Қате + Clear clipboard after + Алмасу буферін тазалау алдындағы кідіріс - Unable to calculate master key - Басты парольді есептеу мүмкін емес + sec + Seconds + сек - - - CsvParserModel - byte, + Lock databases after inactivity of + Дерекқорларды белсенділік жоқ кезде блоктау алдындағы кідіріс + + + min - rows, + Forget TouchID after inactivity of - columns + Convenience - - - DatabaseOpenWidget - Enter master key - Басты парольді енгізіңіз: + Lock databases when session is locked or lid is closed + - Key File: - Кілттер файлы: + Forget TouchID when session is locked or lid is closed + - Password: - Пароль: + Lock databases after minimizing the window + - Browse - Шолу + Re-lock previously locked database after performing Auto-Type + - Unable to open the database. - Дерекқорды ашу мүмкін емес. + Don't require password repeat when it is visible + - Can't open key file - Кілттер файлын ашу мүмкін емес + Don't hide passwords when editing them + - All files - Барлық файлдар + Don't use placeholder for empty password fields + - Key files - Кілттер файлдары + Hide passwords in the entry preview panel + - Select key file - Кілттер файлын таңдаңыз + Hide entry notes by default + - Refresh + Privacy - Challenge Response: + Use DuckDuckGo as fallback for downloading website icons - DatabaseRepairWidget - - Repair database - Дерекқорды жөндеу - + AutoType - Error - Қате + Couldn't find an entry that matches the window title: + Терезе атауына сай келетін жазбаны табу мүмкін емес: - Can't open key file - Кілттер файлын ашу мүмкін емес + Auto-Type - KeePassXC + - Database opened fine. Nothing to do. - Дерекқор сәтті ашылды. Басқа орындайтын әрекеттер жоқ. + Auto-Type + Автотеру - Unable to open the database. - Дерекқорды ашу мүмкін емес. + The Syntax of your Auto-Type statement is incorrect! + - Success - Сәтті + This Auto-Type command contains a very long delay. Do you really want to proceed? + - The database has been successfully repaired -You can now save it. - Дерекқор қалпына сәтті келтірілді. -Енді оны сақтауыңызға болады. + This Auto-Type command contains very slow key presses. Do you really want to proceed? + - Unable to repair the database. - Дерекқорды жөндеу мүмкін емес. + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + - DatabaseSettingsWidget + AutoTypeAssociationsModel - Database name: - Дерекқор аты: + Window + Терезе - Database description: - Дерекқор сипаттамасы: + Sequence + Тізбек - Transform rounds: - Түрлендірулер саны: + Default sequence + Үнсіз келісім тізбегі + + + AutoTypeMatchModel - Default username: - Үнсіз келісім пайдаланушы аты: + Group + Топ - MiB - МиБ + Title + Атауы - Benchmark - Сынау + Username + Пайдаланушы аты - Max. history items: - Макс. тарих саны: + Sequence + Тізбек + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + - Max. history size: - Макс. тарих өлшемі: + Select entry to Auto-Type: + Автотеру үшін жазбаны таңдаңыз: + + + BrowserAccessControlDialog - Use recycle bin + KeePassXC-Browser Confirm Access - AES: 256 Bit (default) + Remember this decision - Twofish: 256 Bit + Allow + + + + Deny - Algorithm: + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. - DatabaseTabWidget + BrowserEntrySaveDialog - Root - Түбір + KeePassXC-Browser Save Entry + - KeePass 2 Database - KeePass 2 дерекқоры + Ok + - All files - Барлық файлдар + Cancel + - Open database - Дерекқорды ашу + You have multiple databases open. +Please select the correct database for saving credentials. + + + + BrowserOptionDialog - File not found! - Файл табылмады! + Dialog + - Open KeePass 1 database - KeePass 1 дерекқорын ашу + This is required for accessing your databases with KeePassXC-Browser + - KeePass 1 database - KeePass 1 дерекқоры + Enable KeepassXC browser integration + - All files (*) - Барлық файлдар (*) + General + Жалпы - Close? - Жабу керек пе? + Enable integration for these browsers: + - Save changes? - Өзгерістерді сақтау керек пе? + &Google Chrome + - "%1" was modified. -Save changes? - "%1" өзгертілген. -Өзгерістерді сақтау керек пе? + &Firefox + - Writing the database failed. - Дерекқорға жазу сәтсіз аяқталды. + &Chromium + - Save database as - Дерекқорды қалайша сақтау + &Vivaldi + - New database - Жаңа дерекқор + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + - locked - блокталған + Re&quest to unlock the database if it is locked + - Lock database - Дерекқорды блоктау + Only entries with the same scheme (http://, https://, ...) are returned. + - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Дерекқорды блоктау мүмкін емес, өйткені сіз оны қазір түзетудесіз. -Өзгерістерді аяқтау үшін бас тартуды басыңыз, немесе оларды елемеңіз. + &Match URL scheme (e.g., https://...) + - This database has never been saved. -You can save the database or stop locking it. - Дерекқор ешқашан сақталмаған. -Сіз дерекқорды сақтай аласыз, немесе оның блокауын алып тастай аласыз. + Only returns the best matches for a specific URL instead of all entries for the whole domain. + - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Дерекқор өзгертілген. -Оны блоктау алдында өзгерістерді сақтау керек пе? -Сақтамасаңыз, өзгерістер жоғалады. + &Return only best-matching credentials + - "%1" is in edit mode. -Discard changes and close anyway? - "%1" қазір түзету режимінде. -Оған қарамастан, өзгерістерді елемей, оны жабу керек пе? + Sort &matching credentials by title + Credentials mean login data requested via browser extension + - Export database to CSV file - Дерекқорды CSV файлына экспорттау + Sort matching credentials by &username + Credentials mean login data requested via browser extension + - CSV file - CSV файлы + Advanced + Кеңейтілген - Writing the CSV file failed. - CSV файлына жазу сәтсіз аяқталды. + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + - Unable to open the database. - Дерекқорды ашу мүмкін емес. + Never ask before &updating credentials + Credentials mean login data requested via browser extension + - Merge database + Only the selected database has to be connected with a client. - The database you are trying to save as is locked by another instance of KeePassXC. -Do you want to save it anyway? + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension - Passwords + Automatically creating or updating string fields is not supported. - Database already opened + &Return advanced string fields which start with "KPH: " - The database you are trying to open is locked by another instance of KeePassXC. - -Do you want to open it anyway? + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Open read-only + Update &native messaging manifest files at startup - File opened in read only mode. + Support a proxy application between KeePassXC and browser extension. - Open CSV file + Use a &proxy application between KeePassXC and browser extension - - - DatabaseWidget - Change master key - Басты парольді өзгерту + Use a custom proxy location if you installed a proxy manually. + - Delete entry? - Жазбаны өшіру керек пе? + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + - Do you really want to delete the entry "%1" for good? - "%1" жазбасын өшіруді шынымен қалайсыз ба? + Browse... + Button for opening file dialog + - Delete entries? - Жазбаларды өшіру керек пе? + <b>Warning:</b> The following options can be dangerous! + - Do you really want to delete %1 entries for good? - %1 жазбаны өшіруді шынымен қалайсыз ба? + Select custom proxy location + - Move entries to recycle bin? - Жазбаларды қоқыс шелегіне тастау керек пе? + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + - - Do you really want to move %n entry(s) to the recycle bin? - %n жазбаны қоқыс шелегіне тастауды шынымен қалайсыз ба? + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. + - Delete group? - Топты өшіру керек пе? + &Tor Browser + - Do you really want to delete the group "%1" for good? - "%1" тобын өшіруді шынымен қалайсыз ба? + <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: + - Unable to calculate master key - Басты парольді есептеу мүмкін емес + Executable Files + - Move entry to recycle bin? - Жазбаны қоқыс шелегіне тастау керек пе? + All Files + - Do you really want to move entry "%1" to the recycle bin? - "%1" жазбасын қоқыс шелегіне тастауды шынымен қалайсыз ба? + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + BrowserService - Searching... + KeePassXC: New key association request - No current database. + 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. - No source database, nothing to do. + Save and allow access - Search Results (%1) + KeePassXC: Overwrite existing key? - No Results + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? - Execute command? + KeePassXC: Update Entry - Do you really want to execute the following command?<br><br>%1<br> + Do you want to update the information in %1 - %2? - Remember my choice + Abort - Autoreload Request + Converting attributes to custom data… - The database file has changed. Do you want to load the changes? + KeePassXC: Converted KeePassHTTP attributes - Merge Request + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + Successfully moved %n keys to custom data. + + - The database file has changed and you have unsaved changes.Do you want to merge your changes? + KeePassXC: No entry with KeePassHTTP attributes found! - Could not open the new database file while attempting to autoreload this database. + The active database does not contain an entry with KeePassHTTP attributes. - Empty recycle bin? + KeePassXC: Legacy browser integration settings detected - Are you sure you want to permanently delete everything from your recycle bin? + 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. - EditEntryWidget - - Entry - Жазба - + CloneDialog - Advanced - Кеңейтілген + Clone Options + - Icon - Таңбаша + Append ' - Clone' to title + - Auto-Type - Автотеру + Replace username and password with references + - Properties - Қасиеттері + Copy history + + + + CsvImportWidget - History - Тарихы + Import CSV fields + - Entry history - Жазба тарихы + filename + - Add entry - Жазбаны қосу + size, rows, columns + - Edit entry - Жазбаны түзету + Encoding + - Different passwords supplied. - Әр түрлі парольдер көрсетілді. + Codec + - New attribute - Жаңа атрибут + Text is qualified by + - Select file - Файлды таңдау + Fields are separated by + - Unable to open file - Файлды ашу мүмкін емес + Comments start with + - Save attachment - Салынымды сақтау + First record has field names + - Unable to save the attachment: - - Салынымды сақтау мүмкін емес: - + Number of headers line to discard + - Tomorrow - Ертең - - - %n week(s) - %n апта - - - %n month(s) - %n ай + Consider '\' an escape character + - 1 year - 1 жыл + Preview + - Confirm Remove + Column layout - Are you sure you want to remove this attribute? + Not present in CSV file - [PROTECTED] Press reveal to view or edit + Imported from CSV file - Are you sure you want to remove this attachment? + Original data: - - - EditEntryWidgetAdvanced - Additional attributes - Қосымша атрибуттар + Error + Қате - Add - Қосу + Empty fieldname %1 + - Remove - Өшіру + column %1 + - Attachments - Салынымдар + Error(s) detected in CSV file! + - - Save - Сақтау + + [%n more message(s) skipped] + - Open - Ашу + 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 + KeePass 2 дерекқоры + + + All files + Барлық файлдар + + + Open database + Дерекқорды ашу + + + CSV file + CSV файлы + + + Merge database + + + + Open KeePass 1 database + KeePass 1 дерекқорын ашу + + + KeePass 1 database + KeePass 1 дерекқоры + + + Export database to CSV file + Дерекқорды CSV файлына экспорттау + + + Writing the CSV file failed. + CSV файлына жазу сәтсіз аяқталды. + + + 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? + "%1" жазбасын өшіруді шынымен қалайсыз ба? + + + 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? + + + + 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" тобын өшіруді шынымен қалайсыз ба? + + + 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? + "%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 + + 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 + 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: + 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) + Аталық топтан мұралау (%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: + 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 + URL + + + + EntryModel + + Ref: + Reference abbreviation + + + + Group + Топ + + + Title + Атауы + + + Username + Пайдаланушы аты + + + URL + URL + + + 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) + + + + + 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. + 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 + + Import KeePass1 database + KeePass1 дерекқорын импорттау + + + Unable to open the database. + Дерекқорды ашу мүмкін емес. + + + + KeePass1Reader + + Unable to read keyfile. + Кілттер файлын оқу мүмкін емес. + + + Not a KeePass database. + KeePass дерекқоры емес. + + + Unsupported encryption algorithm. + Шифрлеу алгоритміне қолдау жоқ. + + + 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 + Түбір + + + 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 - Reveal + Switch to advanced mode - - - EditEntryWidgetAutoType - Enable Auto-Type for this entry - Бұл жазба үшін автотеруді іске қосу + Advanced + Кеңейтілген - + - + + Upper Case Letters A to F + - - - - + A-Z + - Window title: - Терезе атауы: + Lower Case Letters A to F + - Inherit default Auto-Type sequence from the &group + a-z - &Use custom Auto-Type sequence: + 0-9 - Use default se&quence + Braces - Set custo&m sequence: + {[( - Window Associations + Punctuation - - - EditEntryWidgetHistory - Show - Көрсету + .,:; + - Restore - Қалпына келтіру + Quotes + - Delete - Өшіру + " ' + - Delete all - Барлығын өшіру + Math + - - - EditEntryWidgetMain - Title: - Атауы: + <*+!?= + - Username: - Пайдаланушы аты: + Dashes + - Password: - Пароль: + \_|-/ + - Repeat: - Қайталау: + Logograms + - URL: - URL: + #$%&&@^`~ + - Expires - Мерзімі аяқталады + Switch to simple mode + - Presets - Сақталған баптаулар + 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", "|", "﹒" + - Notes: - Естеліктер: + Word Co&unt: + + + + Regenerate + - EditGroupWidget + QApplication - Group - Топ + KeeShare + + + + QFileDialog - Icon - Таңбаша + Select + + + + QMessageBox - Properties - Қасиеттері + Overwrite + - Add group - Топты қосу + Delete + Өшіру - Edit group - Топты түзету + Move + - Enable - Іске қосу + Empty + + + + Remove + Өшіру + + + Skip + Disable Сөндіру - Inherit from parent group (%1) - Аталық топтан мұралау (%1) + Merge + - EditGroupWidgetMain + QObject - Name - Аты + Database not opened + - Notes - Естеліктер + Database hash not available + - Expires - Мерзімі аяқталады + Client public key not received + - Search - Іздеу + Cannot decrypt message + - Auto-Type - Автотеру + Action cancelled or denied + - &Use default Auto-Type sequence of parent group + KeePassXC association failed, try again - Set default Auto-Type se&quence + Encryption key is not recognized - - - EditWidgetIcons - Add custom icon - Таңдауыңызша таңбашаны қосу + Incorrect action + - Delete custom icon - Таңдауыңызша таңбашаны өшіру + Empty message received + - Images - Суреттер + No URL provided + - All files - Барлық файлдар + No logins found + - Select Image - Суретті таңдау + Unknown error + - Download favicon + Add a new entry to a database. - Unable to fetch favicon. + Path of the database. - Can't read icon + Key file of the database. - &Use default icon + path - Use custo&m icon + Username for the entry. - Confirm Delete + username - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + URL for the entry. - Hint: You can enable Google as a fallback under Tools>Settings>Security + URL + URL + + + Prompt for the entry's password. - Custom icon already exists + Generate a password for the entry. - - - EditWidgetProperties - Created: - Жасалған: + Length for the generated password. + - Modified: - Өзгертілген: + length + - Accessed: - Қатынаған: + Path of the entry to add. + - Uuid: - Uuid: + Copy an entry's password to the clipboard. + - - - Entry - - Clone + Path of the entry to clip. + clip = copy to clipboard - - - EntryAttributesModel - Name - Аты + Timeout in seconds before clearing the clipboard. + - - - EntryHistoryModel - Last modified - Соңғы өзгертілген + Edit an entry. + - Title - Атауы + Title for the entry. + - Username - Пайдаланушы аты + title + - URL - URL + Path of the entry to edit. + - - - EntryModel - Group - Топ + Estimate the entropy of a password. + - Title - Атауы + Password for which to estimate the entropy. + - Username - Пайдаланушы аты + Perform advanced analysis on the password. + - URL - URL + Extract and print the content of a database. + - Ref: - Reference abbreviation + Path of the database to extract. - - - Group - Recycle Bin - Қоқыс шелегі + Insert password to unlock %1: + - - - HttpPasswordGeneratorWidget - Length: + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - Character Types - Таңбалар түрлері + + +Available commands: + + - Upper Case Letters - Бас әріптер + Name of the command to execute. + - A-Z + List database entries. - Lower Case Letters - Кіші әріптер + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + - a-z + Path of the database to merge into. - Numbers - Сандар + Path of the database to merge from. + - 0-9 + Use the same credentials for both database files. - Special Characters - Арнайы таңбалар + Key file of the database to merge from. + - /*_& ... + Show an entry's information. - Exclude look-alike characters - Ұқсайтын таңбаларға жол бермеу + 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. + - Ensure that the password contains characters from every group + attribute - - - KMessageWidget - &Close + Name of the entry to show. - Close message + NULL device - - - KeePass1OpenWidget - Import KeePass1 database - KeePass1 дерекқорын импорттау + error reading from device + - Unable to open the database. - Дерекқорды ашу мүмкін емес. + malformed string + - - - KeePass1Reader - Unable to read keyfile. - Кілттер файлын оқу мүмкін емес. + missing closing quote + - Not a KeePass database. - KeePass дерекқоры емес. + Group + Топ - Unsupported encryption algorithm. - Шифрлеу алгоритміне қолдау жоқ. + Title + Атауы - Unsupported KeePass database version. - KeePass дерекқоры нұсқасына қолдау жоқ. + Username + Пайдаланушы аты - Root - Түбір + Password + Пароль - Unable to calculate master key - Басты парольді есептеу мүмкін емес + Notes + Естеліктер - Wrong key or database file is corrupt. - Пароль қате, немесе дерекқор файлы зақымдалған. + Last Modified + - - - KeePass2Reader - Not a KeePass database. - KeePass дерекқоры емес. + Created + - Unsupported KeePass database version. - KeePass дерекқоры нұсқасына қолдау жоқ. + Browser Integration + - Wrong key or database file is corrupt. - Пароль қате, немесе дерекқор файлы зақымдалған. + YubiKey[%1] Challenge Response - Slot %2 - %3 + - Unable to calculate master key - Басты парольді есептеу мүмкін емес + Press + - Unable to issue challenge-response. + Passive - 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. + SSH Agent - - - KeePass2Writer - Unable to issue challenge-response. + Generate a new random diceware passphrase. - Unable to calculate master key - Басты парольді есептеу мүмкін емес + Word count for the diceware passphrase. + - - - Main - Fatal error while testing the cryptographic functions. - Криптографиялық функцияларды сынау кезіндегі қатаң қате орын алды. + Wordlist for the diceware generator. +[Default: EFF English] + - KeePassXC - Error + Generate a new random password. - The lock file could not be created. Single-instance mode disabled. + Invalid value for password length %1. - Another instance of KeePassXC is already running. + Could not create entry with path %1. - Existing single-instance lock file is invalid. Launching new instance. + Enter password for new entry: - - - MainWindow - Open database - Дерекқорды ашу + Writing the database failed %1. + - Database settings - Дерекқор баптаулары + Successfully added entry %1. + - Copy username to clipboard - Пайдаланушы атын алмасу буферіне көшіріп алу + Copy the current TOTP to the clipboard. + - Copy password to clipboard - Парольді алмасу буферіне көшіріп алу + Invalid timeout value %1. + - Settings - Баптаулар + Entry %1 not found. + - Show toolbar - Саймандар панелін көрсету + Entry with path %1 has no TOTP set up. + - read-only - тек оқу + Entry's current TOTP copied to the clipboard! + - Toggle window - Терезені көрсету/жасыру + Entry's password copied to the clipboard! + - - KeePass 2 Database - KeePass 2 дерекқоры + + Clearing the clipboard in %1 second(s)... + - All files - Барлық файлдар + Clipboard cleared! + - Save repaired database - Жөнделген дерекқорды сақтау + Silence password prompt and other secondary outputs. + - Writing the database failed. - Дерекқорды жазу сәтсіз аяқталды. + count + CLI parameter + - &Recent databases + Invalid value for password length: %1 - E&ntries + Could not find entry with path %1. - Copy att&ribute to clipboard + Not changing any field for entry %1. - &Groups + Enter new password for entry: - &View + Writing the database failed: %1 - &Quit + Successfully edited entry %1. - &About + Length %1 - &Save database + Entropy %1 - &Close database + Log10 %1 - &New database + Multi-word extra bits %1 - Merge from KeePassX database + Type: Bruteforce - &Add new entry + Type: Dictionary - &View/Edit entry + Type: Dict+Leet - &Delete entry + Type: User Words - &Add new group + Type: User+Leet - &Edit group + Type: Repeated - &Delete group + Type: Sequence - &Database settings + Type: Spatial - &Clone entry + Type: Date - Timed one-time password + Type: Bruteforce(Rep) - Copy &TOTP + Type: Dictionary(Rep) - Show TOTP + Type: Dict+Leet(Rep) - &Find + Type: User Words(Rep) - Copy &username + Type: User+Leet(Rep) - Cop&y password + Type: Repeated(Rep) - &Settings + Type: Sequence(Rep) - &Perform Auto-Type + Type: Spatial(Rep) - &Open URL + Type: Date(Rep) - &Lock databases + Type: Unknown%1 - &Title + Entropy %1 (%2) - &URL + *** Password length (%1) != sum of length of parts (%2) *** - &Notes + Failed to load key file %1: %2 - Password Generator + File %1 does not exist. - Clear history + Unable to open file %1. - &Database + Error while reading the database: +%1 - Import + Error while parsing the database: +%1 - &Tools + Length of the generated password - Empty recycle bin + Use lowercase characters - Access error for config file %1 + Use uppercase characters - Quit KeePassXC + Use numbers. - Please touch the button on your YubiKey! + Use special characters - &Help + Use extended ASCII - &Open database... + Exclude character set - Sa&ve database as... + chars - Change &master key... + Exclude similar looking characters - &Export to CSV file... + Include characters from every selected group - Import KeePass 1 database... + Recursively list the elements of the group. - Import CSV file... + Cannot find group %1. - Re&pair database... + Error reading merge file: +%1 - Set up TOTP... + Unable to save database to file : %1 - - - OptionDialog - Dialog + Unable to save database to file: %1 - General - Жалпы + Successfully recycled entry %1. + - Sh&ow a notification when credentials are requested + Successfully deleted entry %1. - Sort matching entries by &username + Show the entry's current TOTP. - Re&move all stored permissions from entries in active database + ERROR: unknown attribute %1. - Advanced - Кеңейтілген + No program defined for clipboard manipulation + - Always allow &access to entries + Unable to start program %1 - Always allow &updating entries + file empty - Searc&h in all opened databases for matching entries + %1: (row, col) %2,%3 - HTTP Port: + AES: 256-bit - Default port: 19455 + Twofish: 256-bit - Re&quest to unlock the database if it is locked + ChaCha20: 256-bit - Sort &matching entries by title + Argon2 (KDBX 4 – recommended) - KeePassXC will listen to this port on 127.0.0.1 + AES-KDF (KDBX 4) - Cannot bind to privileged ports + AES-KDF (KDBX 3.1) - Cannot bind to privileged ports below 1024! -Using default port 19455. + Invalid Settings + TOTP - R&emove all shared encryption keys from active database + Invalid Key + TOTP - &Return advanced string fields which start with "KPH: " + Message encryption failed. - Automatically creating or updating string fields is not supported. + No groups found - This is required for accessing your databases from ChromeIPass or PassIFox + Create a new database. - Enable KeePassHTTP server + File %1 already exists. - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Loading the key file failed - &Return only best matching entries + No key is set. Aborting database creation. - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + Failed to save the database: %1. - &Match URL schemes + Successfully created new database. - Password Generator + Insert password to encrypt database (Press enter to leave blank): - Only the selected database has to be connected with a client. + Creating KeyFile %1 failed: %2 - The following options can be dangerous! -Change them only if you know what you are doing. + Loading KeyFile %1 failed: %2 - - - PasswordGeneratorWidget - Password: - Пароль: + Remove an entry from the database. + - Character Types - Таңбалар түрлері + Path of the entry to remove. + - Upper Case Letters - Бас әріптер + Existing single-instance lock file is invalid. Launching new instance. + - Lower Case Letters - Кіші әріптер + The lock file could not be created. Single-instance mode disabled. + - Numbers - Сандар + KeePassXC - cross-platform password manager + - Special Characters - Арнайы таңбалар + filenames of the password databases to open (*.kdbx) + - Exclude look-alike characters - Ұқсайтын таңбаларға жол бермеу + path to a custom config file + таңдауыңызша баптаулар файлына дейінгі жол - Accept - Қабылдау + key file of the database + дерекқордың кілттер файлы - %p% + read password of the database from stdin - strength + Parent window handle - entropy + Another instance of KeePassXC is already running. - &Length: - + Fatal error while testing the cryptographic functions. + Криптографиялық функцияларды сынау кезіндегі қатаң қате орын алды. - Pick characters from every group + KeePassXC - Error - Generate + Database password: + + + QtIOCompressor - Close - + Internal zlib error when compressing: + Сығу кезінде zlib ішкі қатесі орын алған: - Apply - + Error writing to underlying device: + Астындағы құрылғыға жазу қатесі: - Entropy: %1 bit - + Error opening underlying device: + Астындағы құрылғыны ашу қатесі: - Password Quality: %1 - + Error reading data from underlying device: + Астындағы құрылғыдан деректерді оқу қатесі: - Poor - + Internal zlib error when decompressing: + Тарқату кезінде zlib ішкі қатесі орын алған: + + + QtIOCompressor::open - Weak - + The gzip format not supported in this version of zlib. + zlib-тің бұл нұсқасы gzip пішімін қолдамайды. - Good - + Internal zlib error: + Ішкі zlib қатесі: + + + SSHAgent - Excellent + Agent connection failed. - Password - Пароль + Agent protocol error. + - Extended ASCII + No agent running, cannot add identity. - Passphrase + No agent running, cannot remove identity. - Wordlist: + Agent refused this identity. Possible reasons include: - Word Count: + The key has already been added. - Word Separator: + Restricted lifetime is not supported by the agent (check options). - Copy + A confirmation request is not supported by the agent (check options). - QObject + SearchHelpWidget - NULL device + Search Help - error reading from device + Search terms are as follows: [modifiers][field:]["]term["] - file empty ! - + Every search term must match (ie, logical AND) - malformed string + Modifiers - missing closing quote + exclude term from results - INTERNAL - unget lower bound exceeded + match term exactly - Group - Топ - - - Title - Атауы - - - Username - Пайдаланушы аты - - - Password - Пароль + use regex in term + - URL - URL + Fields + - Notes - Естеліктер + Term Wildcards + - Browser Integration + match anything - YubiKey[%1] Challenge Response - Slot %2 - %3 + match one - Press + logical OR - Passive + Examples - QtIOCompressor - - Internal zlib error when compressing: - Сығу кезінде zlib ішкі қатесі орын алған: - + SearchWidget - Error writing to underlying device: - Астындағы құрылғыға жазу қатесі: + Search + Іздеу - Error opening underlying device: - Астындағы құрылғыны ашу қатесі: + Clear + - Error reading data from underlying device: - Астындағы құрылғыдан деректерді оқу қатесі: + Limit search to selected group + - Internal zlib error when decompressing: - Тарқату кезінде zlib ішкі қатесі орын алған: + Search Help + - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - zlib-тің бұл нұсқасы gzip пішімін қолдамайды. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + - Internal zlib error: - Ішкі zlib қатесі: + Case sensitive + - SearchWidget + SettingsWidgetKeeShare - Case Sensitive + Active - Search - Іздеу - - - Clear + Allow export - Search... + Allow import - Limit search to selected group + Own certificate - - - Service - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Fingerprint: - Do you want to update the information in %1 - %2? + Certificate: - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Signer - Successfully removed %1 encryption-%2 from KeePassX/Http Settings. + Key: - No shared encryption-keys found in KeePassHttp Settings. + Generate - The active database does not contain an entry of KeePassHttp Settings. + Import - Removing stored permissions... + Export - Abort + Imported certificates - Successfully removed permissions from %1 %2. + Trust - The active database does not contain an entry with permissions. + Ask - KeePassXC: New key association request + Untrust - 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. - + Remove + Өшіру - KeePassXC: Overwrite existing key? + Path - KeePassXC: Update Entry + Status - KeePassXC: Database locked! + Fingerprint - KeePassXC: Removed keys from database + Certificate - KeePassXC: No keys found + Trusted - KeePassXC: Settings not available! + Untrusted - KeePassXC: Removed permissions + Unknown - KeePassXC: No entry with permissions found! + key.share + Filetype for KeeShare key - - - SettingsWidget - Application Settings - Қолданба баптаулары + KeeShare key file + - General - Жалпы + All files + Барлық файлдар - Security - Қауіпсіздік + Select path + - Access error for config file %1 + Exporting changed certificate - - - SettingsWidgetGeneral - Remember last databases - Соңғы дерекқорларды есте сақтау: + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Automatically save on exit - Шығу кезінде автосақтау + %1.%2 + Template for KeeShare key file + + + + ShareObserver - Automatically save after every change - Әр өзгерістен кейін автосақтау + Import from container without signature + - Minimize when copying to clipboard - Алмасу буферіне көшіру кезінде қолданбаны қайыру + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Use group icon on entry creation - Жазбаны жасау кезінде топ таңбашасын қолдану + Import from container with certificate + - Global Auto-Type shortcut - Глобалды автотеру жарлығы + Do you want to trust %1 with the fingerprint of %2 from %3 + - Language - Тіл + Not this time + - Show a system tray icon - Жүйелік трей таңбашасын қолдану + Never + - Hide window to system tray when minimized - Қолданба қайырылған кезде терезені жүйелік трейге жасыру + Always + - Load previous databases on startup + Just this time - Automatically reload the database when modified externally + Import from %1 failed (%2) - Hide window to system tray instead of app exit + Import from %1 successful (%2) - Minimize window at application startup + Imported from %1 - Basic Settings + Signed share container are not supported - import prevented - Remember last key files and security dongles + File is not readable - Don't mark database as modified for non-data changes (e.g., expanding groups) + Invalid sharing container - Auto-Type - Автотеру + Untrusted import prevented + - Use entry title and URL to match windows for global Auto-Type + Successful signed import - Always ask before performing Auto-Type + Unexpected error - Auto-Type delay + Unsigned share container are not supported - import prevented - ms + Successful unsigned import - Start only a single instance of KeePassXC + File does not exist - - - SettingsWidgetSecurity - Clear clipboard after - Алмасу буферін тазалау алдындағы кідіріс + Unknown share container type + - sec - сек + Overwriting signed share container is not supported - export prevented + - Lock databases after inactivity of - Дерекқорларды белсенділік жоқ кезде блоктау алдындағы кідіріс + Could not write export container (%1) + - Show passwords in cleartext by default - Парольдерді үнсіз келісім бойынша ашық мәтінмен көрсету + Could not embed signature (%1) + - Lock databases after minimizing the window + Could not embed database (%1) - Don't require password repeat when it is visible + Overwriting unsigned share container is not supported - export prevented - Timeouts + Could not write export container - Convenience + Unexpected export error occurred - Lock databases when session is locked or lid is closed + Export to %1 failed (%2) - Privacy + Export to %1 successful (%2) - Use Google as fallback for downloading website icons + Export to %1 - SetupTotpDialog + TotpDialog - Setup TOTP + Timed Password - Key: + 000000 - Use custom settings + Copy + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog - Note: Change these settings only if you know what you are doing. + Copy - Time step: + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - 8 digits + There was an error creating the QR code. - 6 digits + Closing in %1 seconds. + + + TotpSetupDialog - Code size: + Setup TOTP - sec - сек + Key: + - - - TotpDialog - Timed Password + Default RFC 6238 token settings - 000000 + Steam token settings - Copy + Use custom settings - Expires in + Custom Settings - seconds + Time step: - - - UnlockDatabaseWidget - Unlock database - Дерекқорды блоктаудан босату + sec + Seconds + сек - - - WelcomeWidget - Welcome to KeePassXC + Code size: - Start storing your passwords securely in a KeePassXC database + 6 digits - Create new database + 7 digits - Open existing database + 8 digits + + + UpdateCheckDialog - Import from KeePass 1 + Checking for updates - Import from CSV + Checking for updates... - Recent databases + Close - - - main - path to a custom config file - таңдауыңызша баптаулар файлына дейінгі жол + Update Error! + - key file of the database - дерекқордың кілттер файлы + An error occurred in retrieving update information. + - KeePassXC - cross-platform password manager + Please try again later. - read password of the database from stdin + Software Update - filenames of the password databases to open (*.kdbx) + A new version of KeePassXC is available! - Copy a password to the clipboard + KeePassXC %1 is now available — you have %2. - Path of the database. + Download it at keepassxc.org - Use a GUI prompt unlocking the database. + You're up-to-date! - Name of the entry to clip. + KeePassXC %1 is currently the newest version available + + + WelcomeWidget - Extract and print the content of a database. + Start storing your passwords securely in a KeePassXC database - Path of the database to extract. + Create new database - Name of the command to execute. + Open existing database - List database entries. + Import from KeePass 1 - Path of the group to list. Default is / + Import from CSV - Print the UUIDs of the entries and groups. + Recent databases - Merge two databases. + Welcome to KeePassXC %1 + + + YubiKeyEditWidget - Path of the database to merge into. + Refresh - Path of the database to merge from. + YubiKey Challenge-Response - Use the same password for both database files. + <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> - Show a password. + No YubiKey detected, please ensure it's plugged in. - Name of the entry to show. + No YubiKey inserted. diff --git a/share/translations/keepassx_ko.ts b/share/translations/keepassx_ko.ts index e7522e5723..240fbaed21 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. @@ -38,79 +38,290 @@ 클립보드에 복사 - Version %1 - - 버전 %1 - + Project Maintainers: + 프로젝트 관리자: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + SSH 에이전트 사용(다시 시작 필요) - Revision: %1 - 리비전: %1 + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Distribution: %1 - 배포판: %1 + Application Settings + 프로그램 설정 - Libraries: - 라이브러리: + General + 일반 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - 운영 체제: %1 -CPU 아키텍처: %2 -커널: %3 %4 + Security + 보안 - Enabled extensions: - 활성화된 확장 기능: + Access error for config file %1 + 설정 파일 %1에 접근할 수 없음 - Project Maintainers: - 프로젝트 관리자: + Icon only + - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Text only - Build Type: %1 - + Text beside icon + + + + Text under icon + + + + Follow style - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP 접근 확인 + Basic Settings + 기본 설정 - Remember this decision - 이 선택 기억하기 + Startup + 시작 - Allow - 허용 + Start only a single instance of KeePassXC + KeePassXC 단일 인스턴스만 사용 - Deny - 거부 + Remember last databases + 마지막 데이터베이스 기억 - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1에서 다음 항목의 암호를 요청했습니다. -접근을 허용할 지 여부를 선택하십시오. + 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 + - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - SSH 에이전트 사용(다시 시작 필요) + 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 + @@ -215,21 +426,41 @@ Please select whether you want to allow access. - BrowserOptionDialog + BrowserEntrySaveDialog - Dialog - 대화 상자 + KeePassXC-Browser Save Entry + - This is required for accessing your databases with KeePassXC-Browser - KeePassXC-브라우저에서 데이터베이스에 접근하려면 필요합니다 + Ok + - Enable KeepassXC browser integration - KeePassXC 브라우저 통합 사용 + Cancel + 취소 - General + 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 + KeePassXC-브라우저에서 데이터베이스에 접근하려면 필요합니다 + + + Enable KeepassXC browser integration + KeePassXC 브라우저 통합 사용 + + + General 일반 @@ -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 고급 @@ -361,19 +584,40 @@ Please select whether you want to allow access. <b>경고:</b> 다음 옵션은 신중하게 사용하십시오! - Executable Files (*.exe);;All Files (*.*) - 실행 파일 (*.exe);;모든 파일(*.*) + Select custom proxy location + 사용자 정의 프록시 위치 지정 - Executable Files (*) - 실행 파일 (*) + &Tor Browser + - Select custom proxy location - 사용자 정의 프록시 위치 지정 + <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 + - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + 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: 권한 삭제됨 - - - Successfully removed permissions from %n entry(s). - - - - 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 - 키 파일(&K) - - - Browse - 찾아보기 - - - Create - 만들기 - - - Cha&llenge Response - 질의 응답(&L) - - - Refresh - 새로 고침 - - - Key files - 키 파일 - - - All files - 모든 파일 - - - Create Key File... - 키 파일 만들기... + Converting attributes to custom data… + - Unable to create Key File : - 키 파일을 만들 수 없습니다: + KeePassXC: Converted KeePassHTTP attributes + - Select a key file - 키 파일 선택 + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - Empty password - 빈 암호 + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - 빈 문자열을 암호로 사용하시겠습니까? + KeePassXC: No entry with KeePassHTTP attributes found! + - Different passwords supplied. - 다른 암호를 입력하였습니다. + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 - %1을(를) 키 파일로 설정할 수 없습니다: %2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format - 레거시 키 파일 형식 + KeePassXC: Create a new group + - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - 차후 버전에서 지원이 중단될 예정인 레거시 키 파일 -형식을 사용하고 있습니다. - -새 키 파일을 생성하는 것을 추천합니다. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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,65 +786,97 @@ 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 파일에 오류가 있습니다! + Error + 오류 - more messages skipped] - 개 메시지 더 건너뜀] + Empty fieldname %1 + - Error - 오류 + column %1 + - CSV import: writer has errors: - - CSV 가져오기: 기록 중 오류 발생: - + Error(s) detected in CSV file! + - - - CsvImportWizard - - Error - 오류 + + [%n more message(s) skipped] + - Unable to calculate master key - 마스터 키를 계산할 수 없습니다 + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - %n 바이트, + %n column(s) + %n칸 + + + %1, %2, %3 + file info: bytes, rows, columns + - %n row(s), - %n줄, + %n byte(s) + - %n column(s) - %n칸 + %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 + @@ -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,106 +935,169 @@ 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 - 키 파일을 열 수 없음 + Can't open key file: +%1 + + + + DatabaseSettingWidgetMetaData - Unable to open the database. - 데이터베이스를 열 수 없습니다. + Passwords + 암호 + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - 데이터베이스를 열었습니다. 할 일이 없습니다. + Advanced Settings + - Success - 성공 + General + 일반 - The database has been successfully repaired -You can now save it. - 데이터베이스를 복구했습니다 -이제 저장할 수 있습니다. + Security + 보안 - Unable to repair the database. - 데이터베이스를 복구할 수 없습니다. + Master Key + - - - DatabaseSettingsWidget - General - 일반 + Encryption Settings + - Encryption - 암호화 + Browser Integration + 브라우저 통합 + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - 라운드 수가 너무 높음 + KeePassXC-Browser settings + - 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 키 변형 라운드 수가 너무 높습니다. - -해당 수치를 사용하면 데이터베이스를 열 때 수 시간이나 수 일 이상 소요될 수 있습니다! + &Disconnect all browsers + 모든 브라우저 연결 해제(&D) - Understood, keep number - 이해함, 숫자 유지 + Forg&et all site-specific settings on entries + - Cancel - 취소 + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Number of rounds too low - Key transformation rounds - 라운드 수가 너무 낮음 + Stored keys + - 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 키 변형 라운드 수가 너무 낮습니다. - -해당 수치를 계속 사용하면 데이터베이스의 보안을 쉽게 해제할 수 있습니다! + Remove + 삭제 - KDF unchanged - 키 유도 함수 변경되지 않음 + Delete the selected key? + - Failed to transform key with new KDF parameters; KDF unchanged. - 새로운 키 유도 함수 인자로 키를 변경할 수 없어서 키 유도 함수를 변경하지 않았습니다. + 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 @@ -901,6 +1133,113 @@ 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 + 키 유도 함수 변경되지 않음 + + + 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 @@ -950,93 +1289,113 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - 루트 + Sharing + - KeePass 2 Database - KeePass 2 데이터베이스 + Breadcrumb + - All files - 모든 파일 + Type + - Open database - 데이터베이스 열기 + Path + - File not found! - 파일을 찾을 수 없습니다! + Last Signer + - Unable to open the database. - 데이터베이스를 열 수 없습니다. + Certificates + - File opened in read only mode. - 파일을 읽기 전용 모드로 열었습니다. + > + Breadcrumb separator + + + + DatabaseSettingsWidgetMasterKey - Open CSV file - CSV 파일 열기 + Add additional protection... + - CSV file - CSV 파일 + No encryption key added + - All files (*) - 모든 파일 (*) + You must add at least one encryption key to secure your database! + - Merge database - 데이터베이스 합치기 + No password set + - Open KeePass 1 database - KeePass 1 데이터베이스 열기 + 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? + - KeePass 1 database - KeePass 1 데이터베이스 + Unknown error + 알 수 없는 오류 - Close? - 닫기 확인? + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1"이(가) 현재 편집 모드입니다. -변경 사항을 무시하고 닫으시겠습니까? + Database Name: + - Save changes? - 변경 사항 저장 확인? + Description: + + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1"이(가) 변경되었습니다. 저장하시겠습니까? + KeePass 2 Database + KeePass 2 데이터베이스 - Writing the database failed. - 데이터베이스에 쓸 수 없습니다. + All files + 모든 파일 - Passwords - 암호 + Open database + 데이터베이스 열기 - Save database as - 다른 이름으로 데이터베이스 저장 + CSV file + CSV 파일 - Export database to CSV file + Merge database + 데이터베이스 합치기 + + + Open KeePass 1 database + KeePass 1 데이터베이스 열기 + + + KeePass 1 database + KeePass 1 데이터베이스 + + + Export database to CSV file 데이터베이스를 CSV 파일로 내보내기 @@ -1044,40 +1403,40 @@ 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. + - locked - 잠김 + The database file does not exist or is not accessible. + - Lock database - 데이터베이스 잠금 + Select CSV file + - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - 데이터베이스를 편집하고 있어서 잠글 수 없습니다. -취소를 눌러서 변경 사항을 저장하거나 무시하십시오. + New Database + - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - 데이터베이스가 수정되었습니다. -잠그기 전에 데이터베이스를 저장하시겠습니까? -저장하지 않은 변경 사항은 손실됩니다. + %1 [New Database] + Database tab name modifier + - Disable safe saves? - 안전 저장을 비활성화 하시겠습니까? + %1 [Locked] + 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 [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 + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + - Generate TOTP Token - TOTP 토큰 생성 + File opened in read only mode. + 파일을 읽기 전용 모드로 열었습니다. - Close - 닫기 + Lock Database? + - General - 일반 + You are editing an entry. Discard changes and lock anyway? + - Password - 암호 + "%1" was modified. +Save changes? + "%1"이(가) 변경되었습니다. 저장하시겠습니까? - URL - URL + Database was modified. +Save changes? + - Expiration - 만료 + Save changes? + 변경 사항 저장 확인? - Username - 사용자 이름 + Could not open the new database file while attempting to autoreload. +Error: %1 + - Autotype - 자동 입력 + Disable safe saves? + 안전 저장을 비활성화 하시겠습니까? - Searching - 찾기 + 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에서 데이터베이스를 여러 번 저장하려고 시도했으나 실패했습니다. 파일 동기화 서비스에서 데이터베이스 파일을 잠근 것 같습니다. +안전 저장을 비활성화 한 다음 다시 시도하시겠습니까? - Attributes - 속성 + Writing the database failed. +%1 + - Attachments - 첨부 + Passwords + 암호 - Notes - 메모 + Save database as + 다른 이름으로 데이터베이스 저장 - Window - + KeePass 2 Database + KeePass 2 데이터베이스 - Sequence - 시퀀스 + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Search - 찾기 + Delete group + 그룹 삭제 - Clear - 비우기 + Move group to recycle bin? + - Never - 하지 않음 + Do you really want to move the group "%1" to the recycle bin? + - [PROTECTED] - [보호됨] + Successfully merged the database files. + - Disabled - 사용 안함 + Database was not modified by merge operation. + - 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,30 +2145,58 @@ 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개에서 사용하고 있으며, 삭제 시 기본 아이콘으로 대체됩니다. 그래도 삭제하시겠습니까? - - - - EditWidgetProperties - - Created: - 만든 날짜: + Custom icon successfully downloaded + - Modified: - 수정한 날짜: + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security + - Accessed: - 접근한 날짜: + Select Image(s) + - - Uuid: - UUID: + + Successfully loaded %1 of %n icon(s) + - Plugin Data + 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: + UUID: + + + Plugin Data @@ -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 잘못된 항목 필드 크기 + + unable to seek to content position + + - KeePass2 + KeeShare - AES: 256-bit - AES: 256비트 + Disabled share + - Twofish: 256-bit - Twofish: 256비트 + Import from + - ChaCha20: 256-bit - ChaCha20: 256비트 + 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 – 추천) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - 존재하는 단일 인스턴스 잠금 파일이 잘못되었습니다. 새 인스턴스를 실행합니다. + Key Component + - The lock file could not be created. Single-instance mode disabled. - 잠금 파일을 만들 수 없습니다. 단일 인스턴스 모드가 비활성화되었습니다. + Key Component Description + - Another instance of KeePassXC is already running. - 다른 KeePassXC 인스턴스가 이미 실행 중입니다. + Cancel + 취소 - Fatal error while testing the cryptographic functions. - 암호화 함수를 시험하는 중 오류가 발생하였습니다. + Key Component set, click to change or remove + - KeePassXC - Error - KeePassXC - 오류 + 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 설정 @@ -2864,1111 +3402,1893 @@ This is a one-way migration. You won't be able to open the imported databas KeePassXC 끝내기 - KeePass 2 Database - KeePass 2 데이터베이스 + Please touch the button on your YubiKey! + YubiKey의 단추를 누르십시오! - All files - 모든 파일 + 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 불안정 빌드를 사용하고 있습니다! +데이터베이스 파일이 잘못될 가능성이 높으므로 항상 데이터베이스를 백업하십시오. +이 버전은 실제 환경에서 사용을 가정하지 않습니다. - Open database - 데이터베이스 열기 + &Donate + + + + Report a &bug + - Save repaired database - 복구한 데이터베이스 저장 + 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. + - Writing the database failed. - 데이터베이스에 쓸 수 없습니다. + &Import + - Please touch the button on your YubiKey! - YubiKey의 단추를 누르십시오! + Copy att&ribute... + - 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 불안정 빌드를 사용하고 있습니다! -데이터베이스 파일이 잘못될 가능성이 높으므로 항상 데이터베이스를 백업하십시오. -이 버전은 실제 환경에서 사용을 가정하지 않습니다. + TOTP... + - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - 잘못된 키 파일, OpenSSH 키가 필요함 + &New database... + - PEM boundary mismatch - PEM 경계가 일치하지 않음 + Create a new database + - Base64 decoding failed - Base64 디코드 실패 + &Merge from database... + - Key file way too small. - 키 파일이 너무 작습니다. + Merge from another KDBX database + - Key file magic header id invalid - 키 파일 매직 헤더 ID가 잘못됨 + &New entry + - Found zero keys - 키를 찾을 수 없음 + Add a new entry + - Failed to read public key. - 공개 키를 읽을 수 없습니다. + &Edit entry + - Corrupted key file, reading private key failed - 키 파일이 잘못됨, 비밀 키를 읽을 수 없음 + View or edit entry + - No private key payload to decrypt - 암호화 해제할 비밀 키 페이로드가 없음 + &New group + - Trying to run KDF without cipher - 키 유도 함수를 암호화 없이 실행하려고 함 + Add a new group + - Passphrase is required to decrypt this key - 이 키를 복호화하려면 암호가 필요함 + Change master &key... + - Key derivation failed, key file corrupted? - 키 유도 실패, 키 파일이 유효합니까? + &Database settings... + - Decryption failed, wrong passphrase? - 복호화 실패, 암호가 올바릅니까? + Copy &password + - Unexpected EOF while reading public key - 공개 키를 읽는 중 예상하지 못한 곳에서 파일이 끝남 + Perform &Auto-Type + - Unexpected EOF while reading private key - 비밀 키를 읽는 중 예상하지 못한 곳에서 파일이 끝남 + Open &URL + - Can't write public key as it is empty - 공개 키가 비어 있어서 기록할 수 없음 + KeePass 1 database... + - Unexpected EOF when writing public key - 공개 키를 기록하는 중 예상하지 못한 곳에서 파일이 끝남 + Import a KeePass 1 database + - Can't write private key as it is empty - 비밀 키가 비어 있어서 기록할 수 없음 + CSV file... + - Unexpected EOF when writing private key - 비밀 키를 기록하는 중 예상하지 못한 곳에서 파일이 끝남 + Import a CSV file + - Unsupported key type: %1 + Show TOTP... - Unknown cipher: %1 + Show TOTP QR Code... - Cipher IV is too short for MD5 kdf + Check for Updates... - Unknown KDF: %1 + Share entry - Unknown key type: %1 + 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] + + + + 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 + 잘못된 키 파일, 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 + 키 유도 함수를 암호화 없이 실행하려고 함 + + + 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> + + + + Passwords do not match. + + + + Generate master password + + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + 암호: + + + strength + Password strength + 강도 + + + entropy + 엔트로피 + + + Password + 암호 + + + Character Types + 문자 종류 + + + Upper Case Letters + 대문자 + + + Lower Case Letters + 소문자 + + + Numbers + 숫자 + + + Special Characters + 특수 문자 + + + Extended ASCII + 확장 ASCII + + + Exclude look-alike characters + 비슷하게 생긴 문자 제외 + + + Pick characters from every group + 모든 그룹에서 글자 선택 + + + &Length: + 길이(&L): + + + Passphrase + 암구호 + + + Wordlist: + 단어 목록: + + + Word Separator: + 단어 구분자: + + + Copy + 복사 + + + Accept + 사용 + + + Close + 닫기 + + + Entropy: %1 bit + 엔트로피: %1비트 + + + Password Quality: %1 + 암호 강도: %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 + 삭제 + + + 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 + KeePassXC 연결 실패, 다시 시도하십시오 + + + Encryption key is not recognized + 암호화 키를 인식할 수 없음 + + + Incorrect action + 잘못된 동작 + + + Empty message received + 빈 메시지 받음 + + + No URL provided + URL이 지정되지 않음 + + + 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 + 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: + %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 + NULL 장치 + + + error reading from device + 장치에서 읽는 중 오류 발생 + + + malformed string + 잘못된 문자열 + + + missing closing quote + 닫는 따옴표 없음 + + + Group + 그룹 + + + Title + 제목 + + + Username + 사용자 이름 + + + Password + 암호 + + + Notes + 메모 + + + Last Modified + 마지막 수정 - This is required for accessing your databases from ChromeIPass or PassIFox - ChromeIPass나 PassIFox에서 데이터베이스에 접근하려면 필요합니다 + Created + 생성 - Enable KeePassHTTP server - KeePassHTTP 서버 사용 + Browser Integration + 브라우저 통합 - General - 일반 + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey[%1] 질의 응답 - 슬롯 %2 - %3 - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - 인증 정보가 필요할 때 알림 표시(&O) + Press + 누르기 - Only returns the best matches for a specific URL instead of all entries for the whole domain. - 도메인이 일치하는 모든 항목 대신 지정한 URL과 일치하는 항목만 반환합니다. + Passive + 수동적 - &Return only best matching entries - URL과 일치하는 항목만 반환(&R) + SSH Agent + SSH 에이전트 - Re&quest to unlock the database if it is locked - 데이터베이스가 잠겼을 때 잠금 해제 요청(&Q) + Generate a new random diceware passphrase. + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - 같은 스키마(http://, https://, ftp://)를 사용하는 항목만 반환합니다. + Word count for the diceware passphrase. + - &Match URL schemes - URL 스키마 일치(&M) + Wordlist for the diceware generator. +[Default: EFF English] + - Sort matching entries by &username - 사용자 이름 순으로 일치하는 항목 정렬(&U) + Generate a new random password. + - Sort &matching entries by title - 제목 순으로 일치하는 항목 정렬(&M) + Invalid value for password length %1. + - R&emove all shared encryption keys from active database - 활성 데이터베이스에 있는 모든 공유된 암호화 키 삭제(&E) + Could not create entry with path %1. + - Re&move all stored permissions from entries in active database - 활성 데이터베이스에 있는 항목에서 모든 저장된 권한 삭제(&M) + Enter password for new entry: + - Password Generator - 암호 생성기 + Writing the database failed %1. + - Advanced - 고급 + Successfully added entry %1. + - Always allow &access to entries - 항상 항목 접근 허용(&A) + Copy the current TOTP to the clipboard. + - Always allow &updating entries - 항상 항목 업데이트 허용(&U) + Invalid timeout value %1. + - Only the selected database has to be connected with a client. - 선택한 데이터베이스만 클라이언트와 연결할 수 있습니다. + Entry %1 not found. + - Searc&h in all opened databases for matching entries - 모든 열린 데이터베이스에서 일치하는 항목 검색(&H) + Entry with path %1 has no TOTP set up. + - Automatically creating or updating string fields is not supported. - 문자열 필드를 자동으로 만들거나 업데이트하는 것은 지원되지 않습니다. + Entry's current TOTP copied to the clipboard! + - &Return advanced string fields which start with "KPH: " - "KPH: "로 시작하는 고급 문자열 필드 반환(&R) + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - HTTP Port: - HTTP 포트: + Clipboard cleared! + - Default port: 19455 - 기본 포트: 19455 + Silence password prompt and other secondary outputs. + - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC는 127.0.0.1의 다음 포트에서 응답을 기다립니다 + count + CLI parameter + - <b>Warning:</b> The following options can be dangerous! - <b>경고:</b> 다음 옵션은 신중하게 사용하십시오! + Invalid value for password length: %1 + - <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> + Could not find entry with path %1. + - Cannot bind to privileged ports - 권한 있는 포트에 바인드할 수 없음 + Not changing any field for entry %1. + - Cannot bind to privileged ports below 1024! -Using default port 19455. - 1024 이하의 권한이 필요한 포트에 바인드할 수 없습니다! -기본 포트 19455를 사용합니다. + Enter new password for entry: + - - - PasswordGeneratorWidget - %p% - %p% + Writing the database failed: %1 + - Password: - 암호: + Successfully edited entry %1. + - strength - Password strength - 강도 + Length %1 + - entropy - 엔트로피 + Entropy %1 + - Password - 암호 + Log10 %1 + - Character Types - 문자 종류 + Multi-word extra bits %1 + - Upper Case Letters - 대문자 + Type: Bruteforce + - Lower Case Letters - 소문자 + Type: Dictionary + - Numbers - 숫자 + Type: Dict+Leet + - Special Characters - 특수 문자 + Type: User Words + - Extended ASCII - 확장 ASCII + Type: User+Leet + - Exclude look-alike characters - 비슷하게 생긴 문자 제외 + Type: Repeated + - Pick characters from every group - 모든 그룹에서 글자 선택 + Type: Sequence + - &Length: - 길이(&L): + Type: Spatial + - Passphrase - 암구호 + Type: Date + - Wordlist: - 단어 목록: + Type: Bruteforce(Rep) + - Word Count: - 단어 개수: + Type: Dictionary(Rep) + - Word Separator: - 단어 구분자: + Type: Dict+Leet(Rep) + - Generate - 생성 + Type: User Words(Rep) + - Copy - 복사 + Type: User+Leet(Rep) + - Accept - 사용 + Type: Repeated(Rep) + - Close - 닫기 + Type: Sequence(Rep) + - Apply - 적용 + Type: Spatial(Rep) + - Entropy: %1 bit - 엔트로피: %1비트 + Type: Date(Rep) + - Password Quality: %1 - 암호 강도: %1 + Type: Unknown%1 + - Poor - Password quality - 매우 약함 + Entropy %1 (%2) + - Weak - Password quality - 약함 + *** Password length (%1) != sum of length of parts (%2) *** + - Good - Password quality - 좋음 + Failed to load key file %1: %2 + - Excellent - Password quality - 매우 좋음 + File %1 does not exist. + - - - QObject - Database not opened - 데이터베이스를 열지 않았음 + Unable to open file %1. + - Database hash not available - 데이터베이스 해시를 사용할 수 없음 + Error while reading the database: +%1 + - Client public key not received - 클라이언트 공개 키를 받지 않았음 + Error while parsing the database: +%1 + - Cannot decrypt message - 메시지를 복호화할 수 없음 + Length of the generated password + - Timeout or cannot connect to KeePassXC - KeePassXC에 연결할 수 없거나 시간 초과됨 + Use lowercase characters + - Action cancelled or denied - 접근이 취소되었거나 거부됨 + Use uppercase characters + - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - 메시지를 암호화할 수 없거나 비밀 키를 찾을 수 없습니다. KeePassXC 네이티브 메시징이 활성화되어 있습니까? + Use numbers. + - KeePassXC association failed, try again - KeePassXC 연결 실패, 다시 시도하십시오 + Use special characters + - Key change was not successful - 키 교환 실패 + Use extended ASCII + - Encryption key is not recognized - 암호화 키를 인식할 수 없음 + Exclude character set + - No saved databases found - 저장된 데이터베이스를 찾을 수 없음 + chars + - Incorrect action - 잘못된 동작 + Exclude similar looking characters + - Empty message received - 빈 메시지 받음 + Include characters from every selected group + - No URL provided - URL이 지정되지 않음 + Recursively list the elements of the group. + - No logins found - 로그인을 찾을 수 없음 + Cannot find group %1. + - Unknown error - 알 수 없는 오류 + Error reading merge file: +%1 + - Add a new entry to a database. - 데이터베이스에 새 항목을 추가합니다. + Unable to save database to file : %1 + - Path of the database. - 데이터베이스의 경로입니다. + Unable to save database to file: %1 + - Key file of the database. - 데이터베이스의 키 파일입니다. + Successfully recycled entry %1. + - path - 경로 + Successfully deleted entry %1. + - Username for the entry. - 항목의 사용자 이름입니다. + Show the entry's current TOTP. + - username - 사용자 이름 + ERROR: unknown attribute %1. + - URL for the entry. - 항목의 URL입니다. + No program defined for clipboard manipulation + - URL - URL + Unable to start program %1 + - Prompt for the entry's password. - 항목 암호의 프롬프트입니다. + file empty + - Generate a password for the entry. - 항목 암호를 생성합니다. + %1: (row, col) %2,%3 + - Length for the generated password. - 생성된 암호의 길이입니다. + AES: 256-bit + AES: 256비트 - length - 길이 + Twofish: 256-bit + Twofish: 256비트 - Path of the entry to add. - 추가할 항목의 경로입니다. + ChaCha20: 256-bit + ChaCha20: 256비트 - Copy an entry's password to the clipboard. - 항목 암호를 클립보드에 복사합니다. + Argon2 (KDBX 4 – recommended) + Argon2(KDBX 4 – 추천) - Path of the entry to clip. - clip = copy to clipboard - 클립보드에 복사할 항목의 경로입니다. + AES-KDF (KDBX 4) + AES-KDF(KDBX 4) - Timeout in seconds before clearing the clipboard. - 클립보드를 지우기 전 대기할 초 단위 시간입니다. + AES-KDF (KDBX 3.1) + AES-KDF(KDBX 3.1) - Edit an entry. - 항목을 편집합니다. + Invalid Settings + TOTP + - Title for the entry. - 항목의 제목입니다. + Invalid Key + TOTP + - title - 제목 + Message encryption failed. + - Path of the entry to edit. - 편집할 항목의 경로입니다. + No groups found + - Estimate the entropy of a password. - 암호의 예상 엔트로피를 계산합니다. + Create a new database. + - Password for which to estimate the entropy. - 엔트로피를 예상할 암호입니다. + File %1 already exists. + - Perform advanced analysis on the password. - 암호에 고급 분석을 시행합니다. + Loading the key file failed + - Extract and print the content of a database. - 데이터베이스의 내용을 추출하고 표시합니다. + No key is set. Aborting database creation. + - Path of the database to extract. - 표시할 데이터베이스 경로입니다. + Failed to save the database: %1. + - Insert password to unlock %1: - %1의 잠금 해제 암호 입력: + Successfully created new database. + - Failed to load key file %1 : %2 - 키 파일 %1을(를) 불러올 수 없음: %2 + Insert password to encrypt database (Press enter to leave blank): + - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - 경고: 차후 버전에서 지원이 중단될 예정인 레거시 키 파일 -형식을 사용하고 있습니다. - -새 키 파일을 생성하는 것을 추천합니다. + Creating KeyFile %1 failed: %2 + - - -Available commands: - - - -사용 가능한 명령: - + Loading KeyFile %1 failed: %2 + - Name of the command to execute. - 실행할 명령 이름입니다. + Remove an entry from the database. + 데이터베이스에서 항목을 삭제합니다. - List database entries. - 데이터베이스 항목을 표시합니다. + Path of the entry to remove. + 삭제할 항목의 경로입니다. - Path of the group to list. Default is / - 표시할 그룹의 경로입니다. 기본값은 /입니다 + Existing single-instance lock file is invalid. Launching new instance. + 존재하는 단일 인스턴스 잠금 파일이 잘못되었습니다. 새 인스턴스를 실행합니다. - Find entries quickly. - 빠르게 항목을 찾습니다. + The lock file could not be created. Single-instance mode disabled. + 잠금 파일을 만들 수 없습니다. 단일 인스턴스 모드가 비활성화되었습니다. - Search term. - 항목을 검색합니다. + KeePassXC - cross-platform password manager + KeePassXC - 크로스 플랫폼 암호 관리자 - Merge two databases. - 두 데이터베이스를 합칩니다. + filenames of the password databases to open (*.kdbx) + 열 암호 데이터베이스 파일 이름(*.kdbx) - Path of the database to merge into. - 합칠 대상 데이터베이스 경로입니다. + path to a custom config file + 사용자 정의 설정 파일 경로 - Path of the database to merge from. - 합칠 원본 데이터베이스 경로입니다. + key file of the database + 데이터베이스 키 파일 - Use the same credentials for both database files. - 두 데이터베이스 파일에 같은 인증 정보를 사용합니다. + read password of the database from stdin + 표준 입력에서 데이터베이스 암호 읽기 - Key file of the database to merge from. - 합칠 데이터베이스 파일의 키 파일입니다. + Parent window handle + 부모 창 핸들 - Show an entry's information. - 항목 정보를 표시합니다. + Another instance of KeePassXC is already running. + 다른 KeePassXC 인스턴스가 이미 실행 중입니다. - 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. - 표시할 속성 이름입니다. 이 옵션은 한 번 이상 사용할 수 있으며, 주어진 순서대로 각각 속성을 한 줄에 하나씩 표시합니다. 속성을 지정하지 않으면 기본 속성의 요약을 표시합니다. + Fatal error while testing the cryptographic functions. + 암호화 함수를 시험하는 중 오류가 발생하였습니다. - attribute - 속성 + KeePassXC - Error + KeePassXC - 오류 - Name of the entry to show. - 표시할 항목 이름입니다. + Database password: + - NULL device - NULL 장치 + Cannot create new group + + + + QtIOCompressor - error reading from device - 장치에서 읽는 중 오류 발생 + Internal zlib error when compressing: + 압축 중 내부 zlib 오류 발생: - file empty ! - - 파일이 비어 있습니다! - + Error writing to underlying device: + 장치에 기록하는 중 오류 발생: - malformed string - 잘못된 문자열 + Error opening underlying device: + 장치를 여는 중 오류 발생: - missing closing quote - 닫는 따옴표 없음 + Error reading data from underlying device: + 장치에서 읽는 중 오류 발생: - Group - 그룹 + Internal zlib error when decompressing: + 압축 푸는 중 내부 zlib 오류 발생: + + + QtIOCompressor::open - Title - 제목 + The gzip format not supported in this version of zlib. + 이 버전의 zlib에서 gzip 형식을 지원하지 않습니다. - Username - 사용자 이름 + Internal zlib error: + 내부 zlib 오류: + + + SSHAgent - Password - 암호 + Agent connection failed. + - Notes - 메모 + Agent protocol error. + - Last Modified - 마지막 수정 + No agent running, cannot add identity. + - Created - 생성 + No agent running, cannot remove identity. + - Legacy Browser Integration - 레거시 브라우저 통합 + Agent refused this identity. Possible reasons include: + - Browser Integration - 브라우저 통합 + The key has already been added. + - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] 질의 응답 - 슬롯 %2 - %3 + Restricted lifetime is not supported by the agent (check options). + - Press - 누르기 + A confirmation request is not supported by the agent (check options). + + + + SearchHelpWidget - Passive - 수동적 + Search Help + - SSH Agent - SSH 에이전트 + Search terms are as follows: [modifiers][field:]["]term["] + - Generate a new random diceware passphrase. + Every search term must match (ie, logical AND) - Word count for the diceware passphrase. + Modifiers - count + exclude term from results - Wordlist for the diceware generator. -[Default: EFF English] + match term exactly - Generate a new random password. + use regex in term - Length of the generated password. + Fields - Use lowercase characters in the generated password. + Term Wildcards - Use uppercase characters in the generated password. + match anything - Use numbers in the generated password. + match one - Use special characters in the generated password. + logical OR - Use extended ASCII in the generated password. + Examples - QtIOCompressor + SearchWidget - Internal zlib error when compressing: - 압축 중 내부 zlib 오류 발생: + Search + 찾기 - Error writing to underlying device: - 장치에 기록하는 중 오류 발생: + Clear + 비우기 - Error opening underlying device: - 장치를 여는 중 오류 발생: + Limit search to selected group + 지정한 그룹에서만 찾기 - Error reading data from underlying device: - 장치에서 읽는 중 오류 발생: + Search Help + - Internal zlib error when decompressing: - 압축 푸는 중 내부 zlib 오류 발생: + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + 대소문자 구분 - QtIOCompressor::open + SettingsWidgetKeeShare - The gzip format not supported in this version of zlib. - 이 버전의 zlib에서 gzip 형식을 지원하지 않습니다. + Active + - Internal zlib error: - 내부 zlib 오류: + Allow export + - - - SearchWidget - Search... - 찾기... + Allow import + - Search - 찾기 + Own certificate + - Clear - 비우기 + Fingerprint: + - Case Sensitive - 대소문자 구분 + Certificate: + - Limit search to selected group - 지정한 그룹에서만 찾기 + Signer + - - - Service - 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. - 위에 있는 키의 연결 요청을 받았습니다. -해딩 키에서 KeePassXC 데이터베이스 접근을 허용하려면 -식별할 수 있는 이름을 부여한 후 수락하십시오. + Generate + 생성 - KeePassXC: Overwrite existing key? - KeePassXC: 기존 키를 덮어쓰시겠습니까? + Import + 가져오기 - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - 이름이 "%1"인 공유 암호화 키가 이미 있습니다. -덮어쓰시겠습니까? + Export + - KeePassXC: Update Entry - KeePassXC: 항목 업데이트 + Imported certificates + - Do you want to update the information in %1 - %2? - %1 - %2의 정보를 업데이트하시겠습니까? + Trust + - KeePassXC: Database locked! - KeePassXC: 데이터베이스 잠김! + Ask + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 활성 데이터베이스가 잠겨 있습니다! -선택한 데이터베이스의 잠금을 풀거나 잠금이 풀린 데이터베이스를 선택하십시오. + Untrust + - KeePassXC: Removed keys from database - KeePassXC: 데이터베이스에서 키 삭제됨 + Remove + 삭제 - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - KeePassX/HTTP 설정에서 암호화 키 %n개를 삭제했습니다. + + Path + - KeePassXC: No keys found - KeePassXC: 키를 찾을 수 없음 + Status + - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp 설정에서 공유 암호화 키를 찾을 수 없습니다. + Fingerprint + 지문 - KeePassXC: Settings not available! - KeePassXC: 설정을 사용할 수 없음! + Certificate + - The active database does not contain an entry of KeePassHttp Settings. - 활성 데이터베이스에 KeePassHttp 설정 항목이 없습니다. + Trusted + - Removing stored permissions... - 저장된 권한 삭제 중... + Untrusted + - Abort - 중지 + Unknown + - KeePassXC: Removed permissions - KeePassXC: 권한 삭제됨 - - - Successfully removed permissions from %n entries. - 항목 %n개에 저장된 권한을 삭제했습니다. + key.share + Filetype for KeeShare key + - KeePassXC: No entry with permissions found! - KeePassXC: 권한이 있는 항목을 찾을 수 없음! + KeeShare key file + - The active database does not contain an entry with permissions. - 활성 데이터베이스에 권한이 부여된 항목이 없습니다. + All files + 모든 파일 - - - SettingsWidget - Application Settings - 프로그램 설정 + Select path + - General - 일반 + Exporting changed certificate + - Security - 보안 + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Access error for config file %1 - 설정 파일 %1에 접근할 수 없음 + Signer: + - SettingsWidgetGeneral + ShareObserver - Basic Settings - 기본 설정 - - - Start only a single instance of KeePassXC - KeePassXC 단일 인스턴스만 사용 - - - Remember last databases - 마지막 데이터베이스 기억 + Import from container without signature + - Remember last key files and security dongles - 마지막 키 파일과 보안 동글 기억 + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Load previous databases on startup - 시작할 때 이전 데이터베이스 불러오기 + Import from container with certificate + - Automatically save on exit - 끝낼 때 자동 저장 + Not this time + - Automatically save after every change - 항목을 변경할 때 자동 저장 + Never + 하지 않음 - Automatically reload the database when modified externally - 외부에서 데이터베이스를 수정했을 때 자동으로 새로 고침 + Always + - Minimize when copying to clipboard - 클립보드에 복사할 때 최소화 + Just this time + - Minimize window at application startup - 프로그램 시작 시 창 최소화 + Import from %1 failed (%2) + - Use group icon on entry creation - 항목을 만들 때 그룹 아이콘 사용 + Import from %1 successful (%2) + - Don't mark database as modified for non-data changes (e.g., expanding groups) - 데이터가 변경되지 않았을 때 데이터베이스를 수정된 것으로 표시하지 않음(예: 그룹 확장) + Imported from %1 + - Hide the Details view - 자세히 보기 숨기기 + Signed share container are not supported - import prevented + - Show a system tray icon - 시스템 트레이 아이콘 표시 + File is not readable + - Hide window to system tray when minimized - 시스템 트레이로 최소화 + Invalid sharing container + - Hide window to system tray instead of app exit - 프로그램을 끝내지 않고 시스템 트레이로 창 숨기기 + Untrusted import prevented + - Dark system tray icon - 어두운 시스템 트레이 아이콘 + Successful signed import + - Language - 언어 + Unexpected error + - Auto-Type - 자동 입력 + Unsigned share container are not supported - import prevented + - Use entry title to match windows for global Auto-Type - 전역 자동 입력 시 창 제목을 항목 제목에서 검색 + Successful unsigned import + - Use entry URL to match windows for global Auto-Type - 전역 자동 입력 시 창 제목을 항목 URL에서 검색 + File does not exist + - Always ask before performing Auto-Type - 자동 입력 시 항상 묻기 + Unknown share container type + - Global Auto-Type shortcut - 전역 자동 입력 단축키 + Overwriting signed share container is not supported - export prevented + - Auto-Type delay - 자동 입력 지연 시간 + Could not write export container (%1) + - ms - Milliseconds - ms + Overwriting unsigned share container is not supported - export prevented + - Startup - 시작 + Could not write export container + - File Management - 파일 관리 + Unexpected export error occurred + - Safely save database files (may be incompatible with Dropbox, etc) - 데이터베이스 파일 안전 저장(Dropbox 등과 호환되지 않을 수 있음) + Export to %1 failed (%2) + - Backup database file before saving - 저장하기 전에 데이터베이스 파일 백업 + Export to %1 successful (%2) + - Entry Management - 항목 관리 + Export to %1 + - General - 일반 + Do you want to trust %1 with the fingerprint of %2 from %3? + - - - SettingsWidgetSecurity - Timeouts - 시간 제한 + Multiple import source path to %1 in %2 + - Clear clipboard after - 다음 시간 이후 클립보드 비우기 + Conflicting export target path %1 in %2 + - sec - Seconds - + Could not embed signature: Could not open file to write (%1) + - Lock databases after inactivity of - 다음 시간 동안 활동이 없을 때 데이터베이스 잠금 + Could not embed signature: Could not write file (%1) + - Convenience - 편의성 + Could not embed database: Could not open file to write (%1) + - Lock databases when session is locked or lid is closed - 세션이 잠겼을 때나 덮개를 닫았을 때 데이터베이스 잠금 + Could not embed database: Could not write file (%1) + + + + TotpDialog - Lock databases after minimizing the window - 창을 최소화할 때 데이터베이스 잠금 + Timed Password + 시간 제한된 암호 - Don't require password repeat when it is visible - 암호가 보일 때 반복하지 않음 + 000000 + 000000 - Show passwords in cleartext by default - 기본값으로 암호를 평문으로 표시 + Copy + 복사 - - Hide passwords in the preview panel - 미리 보기 패널에서 암호 숨기기 + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Hide entry notes by default - 기본값으로 암호 숨기기 + Copy + 복사 - Privacy - 개인 정보 + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Use Google as fallback for downloading website icons - 웹 사이트 아이콘의 대체 아이콘으로 Google 사용 + There was an error creating the QR code. + - Re-lock previously locked database after performing Auto-Type + Closing in %1 seconds. - SetupTotpDialog + 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자리 + sec + Seconds + + + + Code size: + 코드 크기: 6 digits 6자리 - Code size: - 코드 크기: + 7 digits + - sec - Seconds - + 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. + + + + Please try again later. + - - - UnlockDatabaseWidget - Unlock database - 데이터베이스 잠금 해제 + 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. - 데이터베이스에서 항목을 삭제합니다. - - - 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) + Refresh + 새로 고침 - path to a custom config file - 사용자 정의 설정 파일 경로 + YubiKey Challenge-Response + - key file 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> + - read password of the database from stdin - 표준 입력에서 데이터베이스 암호 읽기 + No YubiKey detected, please ensure it's plugged in. + - 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 0000000000..cf9c711bb6 --- /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 03be1edb5b..bf5f5cf225 100644 --- a/share/translations/keepassx_lt.ts +++ b/share/translations/keepassx_lt.ts @@ -38,80 +38,290 @@ Kopijuoti į iškarpinę - Version %1 - - Versija %1 - + Project Maintainers: + Projektą prižiūri: + + + 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ą. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Įjungti SSH agentą (reikalauja paleidimo iš naujo) - Revision: %1 - Revizija: %1 + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Distribution: %1 - Platinimas: %1 + Application Settings + Programos nustatymai - Libraries: - Bibliotekos: + General + Bendra - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operacinė sistema: %1 -Procesoriaus architektūra: %2 -Branduolys: %3 %4 + Security + Saugumas - Enabled extensions: - Įjungti plėtiniai: + Access error for config file %1 + Konfigūracijos failo %1 prieigos klaida - Project Maintainers: - Projektą prižiūri: + Icon only + Tik piktograma - 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ą. + Text only + Tik tekstas - Build Type: %1 - - Darinio tipas: %1 - + Text beside icon + Tekstas šalia piktogramos + + + Text under icon + Tekstas po piktograma + + + Follow style + Sekti stiliumi - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP prieigos patvirtinimas + Basic Settings + Pagrindiniai nustatymai - Remember this decision - Prisiminti šį sprendimą + Startup + Įjungimo - Allow - Leisti + Start only a single instance of KeePassXC + Paleisti tik vieną KeePassXC egzempliorių - Deny - Atmesti + Remember last databases + Prisiminti paskutines duomenų bazes - %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ą. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Įjungti SSH agentą (reikalauja paleidimo iš naujo) + 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 + @@ -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. @@ -362,19 +585,40 @@ Pasirinkite, ar norite leisti prieigą. <b>Įspėjimas:</b> Šie parametrai gali būti pavojingi! - Executable Files (*.exe);;All Files (*.*) - Vykdomieji failai (*.exe);;Visi failai (*.*) - + Select custom proxy location + + - Executable Files (*) - Vykdomieji failai (*) + &Tor Browser + &Tor Browser - Select custom proxy location + <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 - 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. %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 - - - 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. - - - - ChangeMasterKeyWidget - - Password - Slaptažodis - - - 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ą... + Converting attributes to custom data… + Konvertuojami požymiai į tinkintus duomenis… - Unable to create Key File : - Nepavyko sukurti rakto failo : + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konvertuoti KeePassHTTP požymiai - Select a key file - Pasirinkite rakto failą + 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. - - Empty password - Tuščias slaptažodis + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - Ar tikrai norite naudoti tuščią eilutę kaip slaptažodį? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nerasta jokio įrašo su KeePassHTTP požymiais! - Different passwords supplied. - Pateikti skirtingi slaptažodžiai. + The active database does not contain an entry with KeePassHTTP attributes. + Aktyvioje duomenų bazėje nėra įrašo su KeePassHTTP požymiais. - Failed to set %1 as the Key file: -%2 - Nepavyko nustatyti %1 kaip rakto failą: -%2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format + KeePassXC: Create a new group - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + A request for creating a new group "%1" has been received. +Do you want to create this group? + - Changing master key failed: no YubiKey inserted. - Pagrindinio rakto pakeitimas nepavyko: neįterpta jokio 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? + @@ -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 @@ -654,48 +794,88 @@ Please consider generating a new key file. Pradiniai duomenys: - Error(s) detected in CSV file ! - CSV faile yra aptikta klaida(-os)! + Error + Klaida - more messages skipped] - dar žinutės praleistos] + Empty fieldname %1 + Tuščias lauko pavadinimas %1 - Error - Klaida + column %1 + stulpelis %1 - CSV import: writer has errors: - - CSV importavimas: tekstų rengyklėje yra klaidų: - + Error(s) detected in CSV file! + CSV faile aptikta klaida(-os)! - - - CsvImportWizard - - Error - Klaida + + [%n more message(s) skipped] + - Unable to calculate master key - Nepavyko apskaičiuoti pagrindinio rakto + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - %n baitas, %n baitai, %n baitų, %n baitų, + %n column(s) + %n stulpelis%n stulpeliai%n stulpelių%n stulpelių + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n eilutė, %n eilutės, %n eilučių, %n eilučių, + %n byte(s) + - %n column(s) - %n stulpelis%n stulpeliai%n stulpelių%n stulpelių + %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 @@ -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,137 +931,309 @@ 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 + Can't open key file: +%1 + Nepavyksta atverti rakto failo: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Nepavyko atverti duomenų bazės. + Passwords + Slaptažodžiai + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Duomenų bazė atsivėrė tvarkingai. Nėra ką atlikti. + Advanced Settings + Išplėstiniai nustatymai - Success - Pavyko + General + Bendra - The database has been successfully repaired -You can now save it. - Duomenų bazė buvo sėkmingai pataisyta -Dabar galite ją įrašyti. + Security + Saugumas - Unable to repair the database. - Duomenų bazės pataisyti nepavyko. + Master Key + Pagrindinis raktas - - - DatabaseSettingsWidget - General - Bendra + Encryption Settings + Šifravimo nustatymai - Encryption - Šifravimas + Browser Integration + Naršyklės integracija + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds + KeePassXC-Browser settings - 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! - + &Disconnect all browsers + &Atjungti visas naršykles - Understood, keep number + Forg&et all site-specific settings on entries - Cancel - Atsisakyti + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Perkelti KeePassHTTP požymius į KeePassXC-Browser &tinkintus duomenis - Number of rounds too low - Key transformation rounds + Stored keys - 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! - + Remove + Šalinti - KDF unchanged - + Delete the selected key? + Ištrinti pasirinktą raktą? - Failed to transform key with new KDF parameters; KDF unchanged. + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. - - MiB - Abbreviation for Mebibytes (KDF settings) - - - - thread(s) - Threads for parallel execution (KDF settings) - + + Key + Raktas - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Šifravimo algoritmas: + Value + Reikšmė - AES: 256 Bit (default) - AES: 256 Bitų (numatytasis) + Enable Browser Integration to access these settings. + - Twofish: 256 Bit - Twofish: 256 Bitų + Disconnect all browsers + Atjungti visas naršykles - Key Derivation Function: - Rakto išvedimo funkcija: + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + - Transform rounds: - Pasikeitimo ciklų: + KeePassXC: No keys found + KeePassXC: Raktų nerasta - Benchmark 1-second delay + No shared encryption keys found in KeePassXC settings. - Memory Usage: - Atminties naudojimas: + 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 + 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 + Atsisakyti + + + 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) + MiB MiB MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + gija gijos gijų gija + + + %1 ms + milliseconds + %1 ms%1 ms%1 ms%1 ms + + + %1 s + seconds + %1 s%1 s%1 s%1 s + DatabaseSettingsWidgetGeneral @@ -939,91 +1283,110 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Šaknis + Sharing + - KeePass 2 Database - KeePass 2 duomenų bazė + Breadcrumb + - All files - Visi failai + Type + Tipas - Open database - Atverti duomenų bazę + Path + Kelias - File not found! - Failas nerastas! + Last Signer + - Unable to open the database. - Nepavyko atverti duomenų bazės. + Certificates + Liudijimai - File opened in read only mode. - Failas atvertas tik skaitymo veiksenoje. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Atverti CSV failą + Add additional protection... + Pridėti papildomą apsaugą... - CSV file - CSV failas + No encryption key added + Nepridėtas joks šifravimo raktas - All files (*) - Visi failai (*) + 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ą! - Merge database - Sulieti duomenų bazę + No password set + Nenustatytas joks slaptažodis - Open KeePass 1 database - Atverti KeePass 1 duomenų bazę + 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? + - KeePass 1 database - KeePass 1 duomenų bazė + Unknown error + Nežinoma klaida - Close? - Uždaryti? + Failed to change master key + Nepavyko pakeisti pagrindinio rakto + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" yra taisymo veiksenoje. -Vis tiek atmesti pakeitimus ir užverti? + Database Name: + Duomenų bazės pavadinimas: - Save changes? - Įrašyti pakeitimus? + Description: + Aprašas: + + + + DatabaseTabWidget + + KeePass 2 Database + KeePass 2 duomenų bazė - "%1" was modified. -Save changes? - "%1" buvo pakeista. -Įrašyti pakeitimus? + All files + Visi failai - Writing the database failed. - Duomenų bazės rašymas nepavyko. + Open database + Atverti duomenų bazę - Passwords - Slaptažodžiai + CSV file + CSV failas - Save database as - Įrašyti duomenų bazę kaip + Merge database + Sulieti duomenų bazę + + + Open KeePass 1 database + Atverkite KeePass 1 duomenų bazę + + + KeePass 1 database + KeePass 1 duomenų bazė Export database to CSV file @@ -1034,39 +1397,40 @@ Save changes? CSV failo įrašymas nepavyko. - New database - Nauja duomenų bazė + Database creation error + Duomenų bazės sukūrimo klaida - locked - užrakinta + 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 - Užrakinti duomenų bazę + The database file does not exist or is not accessible. + Duomenų failo nėra arba jis nepasiekiamas. - 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. + Select CSV file + - 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. + New Database + Nauja duomenų bazė - Disable safe saves? - + %1 [New Database] + Database tab name modifier + %1 [Nauja duomenų bazė] - 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 [Užrakinta] + + + %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? + - - Close - Užverti + + Delete entry(s)? + - - General - Bendra + + Move entry(s) to recycle bin? + - Password - Slaptažodis + File opened in read only mode. + Failas atvertas tik skaitymo veiksenoje. - URL - URL + Lock Database? + Užrakinti duomenų bazę? - Expiration - Galiojimas + You are editing an entry. Discard changes and lock anyway? + - Username - Naudotojo vardas + "%1" was modified. +Save changes? + "%1" buvo pakeista. +Įrašyti pakeitimus? - Autotype - Automatinis rinkimas + Database was modified. +Save changes? + - Searching - Paieška + Save changes? + Įrašyti pakeitimus? - Attributes - Požymiai + Could not open the new database file while attempting to autoreload. +Error: %1 + - Attachments - Priedai + Disable safe saves? + - Notes - Pastabos + 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? + - Window - Langas + Writing the database failed. +%1 + Rašymas į duomenų bazę patyrė nesėkmę. +%1 - Sequence - Seka + Passwords + Slaptažodžiai - Search - Paieška + Save database as + Įrašyti duomenų bazę kaip - Clear - Išvalyti + KeePass 2 Database + KeePass 2 duomenų bazė - Never - Niekada + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - [PROTECTED] - [APSAUGOTA] + Delete group + Ištrinti grupę - Disabled - Išjungta + Move group to recycle bin? + Perkelti grupę į šiukšlinę? - Enabled - Įjungta + Do you really want to move the group "%1" to the recycle bin? + Ar tikrai norite perkelti grupę "%1" į šiukšlinę? + + + Successfully merged the database files. + Duomenų bazės failai sėkmingai sulieti. + + + 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,109 +2391,159 @@ This may cause the affected plugins to malfunction. Attachments Priedai - - - EntryView - Customize View + Yes + Taip + + + TOTP + + + EntryPreviewWidget - Hide Usernames - Slėpti naudotojo vardus + Generate TOTP Token + Generuoti NTVS prieigos raktą - Hide Passwords - Slėpti slaptažodžius + Close + Užverti - Fit to window - Priderinti prie lango + General + Bendra - Fit to contents - Priderinti prie turinio + Username + Naudotojo vardas - Reset to defaults - Atstatyti į numatytuosius + Password + Slaptažodis - Attachments (icon) - Priedai (piktograma) + Expiration + Galiojimas - - - Group - Recycle Bin - Šiukšlinė + URL + URL - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: Nepavyksta įrašyti failo! + Attributes + Požymiai - Cannot save the native messaging script file. - + Attachments + Priedai - - - HttpPasswordGeneratorWidget - Length: - Ilgis: + Notes + Pastabos - Character Types - Simbolių tipai + Autotype + Automatinis rinkimas - Upper Case Letters - Viršutinio registro raidės + Window + Langas - A-Z - A-Z + Sequence + Seka - Lower Case Letters - Apatinio registro raidės + Searching + Paieška - a-z - a-z + Search + Paieška - Numbers - Skaičiai + Clear + Išvalyti - 0-9 - 0-9 + Never + Niekada - Special Characters - Specialūs simboliai + [PROTECTED] + [APSAUGOTA] - /*_& ... - /*_& ... + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 - Exclude look-alike characters - Pašalinti panašiai atrodančius simbolius + Enabled + Įjungta - Ensure that the password contains characters from every group - Užtikrinti, kad slaptažodyje būtų simboliai iš kiekvienos grupės + Disabled + Išjungta - Extended ASCII - Papildomi ASCII + Share + + + + + EntryView + + Customize View + + + + Hide Usernames + Slėpti naudotojo vardus + + + Hide Passwords + Slėpti slaptažodžius + + + Fit to window + Priderinti prie lango + + + Fit to contents + Priderinti prie turinio + + + Reset to defaults + Atstatyti į numatytuosius + + + Attachments (icon) + Priedai (piktograma) + + + + Group + + Recycle Bin + Šiukšlinė + + + [empty] + group has no children + [tuščia] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: Nepavyksta įrašyti failo! + + + Cannot save the native messaging script file. + @@ -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 + + unable to seek to content position + + - KeePass2 + KeeShare - AES: 256-bit - AES: 256 bitų + Disabled share + - Twofish: 256-bit - Twofish: 256 bitų + Import from + Importuoti iš - ChaCha20: 256-bit - ChaCha20: 256 bitų + Export to + Eksportuoti į - 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 – rekomenduojama) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Esamas vieno egzemplioriaus užrakto failas yra neteisingas. Paleidžiamas naujas egzempliorius. + Key Component + - The lock file could not be created. Single-instance mode disabled. - Nepavyko sukurti užrakto. Vieno egzemplioriaus veiksena išjungta. + Key Component Description + - Another instance of KeePassXC is already running. - Jau yra paleistas kitas KeePassXC egzempliorius. + Cancel + Atsisakyti - Fatal error while testing the cryptographic functions. - Lemtingoji klaida, testuojant šifravimo funkcijas. + Key Component set, click to change or remove + - KeePassXC - Error - KeePassXC - Klaida + 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 @@ -2853,33 +3399,274 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų Išeiti iš KeePassXC - KeePass 2 Database - KeePass 2 duomenų bazė + Please touch the button on your YubiKey! + Prašome priliesti mygtuką ant savo YubiKey! - All files - Visi failai + 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 - Atverti duomenų bazę + &Donate + &Paaukoti + + + Report a &bug + Pranešti apie &klaidą - Save repaired database - Įrašyti pataisytą duomenų bazę + 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. + - Writing the database failed. - Duomenų bazės rašymas nepavyko. + &Import + &Importuoti - Please touch the button on your YubiKey! - Prašome priliesti mygtuką ant savo YubiKey! + Copy att&ribute... + - 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. + 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: @@ -2983,125 +3770,30 @@ This version is not meant for production use. - OptionDialog - - Dialog - Dialogas - - - 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: - + PasswordEditWidget - Default port: 19455 - Numatytasis prievadas: 19455 + Enter password: + Įrašykite slaptažodį: - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC klausysis šio prievado ties 127.0.0.1 + Confirm password: + - <b>Warning:</b> The following options can be dangerous! - <b>Įspėjimas:</b> Šie parametrai gali būti pavojingi! + Password + Slaptažodis - <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 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 - Nepavyksta susieti su privilegijuotais prievadais + Passwords do not match. + Slaptažodžiai nesutampa. - Cannot bind to privileged ports below 1024! -Using default port 19455. - Nepavyksta susieti su privilegijuotais prievadais žemiau 1024! -Naudojamas numatytasis prievadas 19455. + 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,7 +3907,172 @@ 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,388 +4383,905 @@ Prieinamos komandos: Generuoti naują atsitiktinį slaptažodį. - Length of the generated password. - Generuoto slaptažodžio ilgis. + 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. + 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 special characters in the generated password. + Invalid timeout value %1. - Use extended ASCII in the generated password. + Entry %1 not found. + Įrašas %1 nerastas. + + + Entry with path %1 has no TOTP set up. - - - QtIOCompressor - Internal zlib error when compressing: - Vidinė zlib klaida, glaudinant: + Entry's current TOTP copied to the clipboard! + - Error writing to underlying device: - Klaida, įrašant į bazinį įrenginį: + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - Error opening underlying device: - Klaida, atveriant bazinį įrenginį: + Clipboard cleared! + Iškarpinė išvalyta! - Error reading data from underlying device: - Klaida, skaitant iš bazinio įrenginio: + Silence password prompt and other secondary outputs. + - Internal zlib error when decompressing: - Vidinė zlib klaida, išskleidžiant: + count + CLI parameter + kiekis - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Šioje zlib versijoje gzip formatas yra nepalaikomas. + Invalid value for password length: %1 + - Internal zlib error: - Vidinė zlib klaida: + Could not find entry with path %1. + - - - SearchWidget - Search... - Ieškoti... + Not changing any field for entry %1. + - Search - Paieška + Enter new password for entry: + - Clear - Išvalyti + Writing the database failed: %1 + - Case Sensitive - Skirti raidžių dydį + Successfully edited entry %1. + - Limit search to selected group - Riboti paiešką iki pasirinktos grupės + Length %1 + Ilgis %1 - - - Service - KeePassXC: New key association request - KeePassXC: Naujo rakto susiejimo užklausa + Entropy %1 + - 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į. + Log10 %1 + - KeePassXC: Overwrite existing key? - KeePassXC: Perrašyti esamą raktą? + Multi-word extra bits %1 + - 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? + 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 + + + + + QtIOCompressor + + Internal zlib error when compressing: + Vidinė zlib klaida, glaudinant: + + + Error writing to underlying device: + Klaida, įrašant į bazinį įrenginį: + + + Error opening underlying device: + Klaida, atveriant bazinį įrenginį: + + + Error reading data from underlying device: + Klaida, skaitant iš bazinio įrenginio: + + + Internal zlib error when decompressing: + Vidinė zlib klaida, išskleidžiant: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Šioje zlib versijoje gzip formatas yra nepalaikomas. + + + Internal zlib error: + Vidinė zlib klaida: + + + + SSHAgent + + 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 + + + Clear + Išvalyti + + + Limit search to selected group + Riboti paiešką iki pasirinktos grupės + + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + Skiriant raidžių registrą + + + + SettingsWidgetKeeShare + + Active + + + + Allow export + + + + Allow import + + + + Own certificate + + + + Fingerprint: + Kontrolinis kodas: + + + Certificate: + Liudijimas: - KeePassXC: Update Entry - KeePassXC: Atnaujinti įrašą + Signer + - Do you want to update the information in %1 - %2? - Ar norite atnaujinti informaciją ties %1 - %2? + Key: + Raktas: - KeePassXC: Database locked! - KeePassXC: Duomenų bazė užrakinta! + Generate + Generuoti - 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. + Import + Importuoti - KeePassXC: Removed keys from database - KeePassXC: Pašalinti raktai iš duomenų bazės + Export + - - 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ų. + + Imported certificates + Importuoti liudijimai - KeePassXC: No keys found - KeePassXC: Raktų nerasta + Trust + - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp nustatymuose nerasta jokių bendrinamų šifravimo raktų. + Ask + - KeePassXC: Settings not available! - KeePassXC: Nustatymai neprieinami! + Untrust + - The active database does not contain an entry of KeePassHttp Settings. - Aktyvioje duomenų bazėje nėra KeePassHttp nustatymų įrašo. + Remove + Šalinti - Removing stored permissions... - Šalinami saugomi leidimai... + Path + Kelias - Abort - Nutraukti + Status + Būsena - KeePassXC: Removed permissions - KeePassXC: Pašalinti leidimai + Fingerprint + Kontrolinis kodas - - 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šų. + + Certificate + Liudijimas - KeePassXC: No entry with permissions found! - KeePassXC: Nerasta jokių įrašų su leidimais! + Trusted + - The active database does not contain an entry with permissions. - Aktyvioje duomenų bazėje nėra įrašo su leidimais. + Untrusted + - - - SettingsWidget - Application Settings - Programos nustatymai + Unknown + Nežinoma - General - Bendra + key.share + Filetype for KeeShare key + - Security - Saugumas + KeeShare key file + - Access error for config file %1 - Konfigūracijos failo %1 prieigos klaida + All files + Visi failai - - - SettingsWidgetGeneral - Basic Settings - Pagrindiniai nustatymai + Select path + - Start only a single instance of KeePassXC - Paleisti tik vieną KeePassXC egzempliorių + Exporting changed certificate + - Remember last databases - Prisiminti paskutines duomenų bazes + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Remember last key files and security dongles - Prisiminti paskutinius rakto failus ir saugumo saugiklius + Signer: + + + + ShareObserver - Load previous databases on startup - Paleidžiant programą, įkelti ankstesnes duomenų bazes + Import from container without signature + - Automatically save on exit - Išeinant, automatiškai įrašyti + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Automatically save after every change - Automatiškai įrašyti po kiekvieno pakeitimo + Import from container with certificate + - Automatically reload the database when modified externally - Išoriškai modifikavus duomenų bazę, automatiškai įkelti ją iš naujo + Not this time + Ne šį kartą - Minimize when copying to clipboard - Kopijuojant į iškarpinę, suskleisti langą + Never + Niekada - Minimize window at application startup - Paleidus programą, suskleisti langą + Always + Visada - Use group icon on entry creation - Kuriant įrašus, naudoti grupės piktogramą + Just this time + Tik šį kartą - 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) + Import from %1 failed (%2) + Importavimas iš %1 nepavyko (%2) - Hide the Details view - Slėpti išsamų rodinį + Import from %1 successful (%2) + Importavimas iš %1 sėkmingas (%2) - Show a system tray icon - Rodyti sistemos dėklo piktogramą + Imported from %1 + Importuota iš %1 - Hide window to system tray when minimized - Suskleidus langą, slėpti jį į sistemos dėklą + Signed share container are not supported - import prevented + - Hide window to system tray instead of app exit - Neužverti lango, bet vietoj to, suskleisti jį į sistemos dėklą + File is not readable + - Dark system tray icon - Tamsi sistemos dėklo piktograma + Invalid sharing container + - Language - Kalba + Untrusted import prevented + - Auto-Type - Automatinis rinkimas + Successful signed import + - Use entry title to match windows for global Auto-Type - Naudoti įrašo antraštę, norint sutapatinti langus visuotiniam Automatiniam rinkimui + Unexpected error + Netikėta klaida - Use entry URL to match windows for global Auto-Type - Naudoti įrašo URL, norint sutapatinti langus visuotiniam Automatiniam rinkimui + Unsigned share container are not supported - import prevented + - Always ask before performing Auto-Type - Visada klausti prieš atliekant automatinį rinkimą + Successful unsigned import + - Global Auto-Type shortcut - Visuotinis automatinio rinkimo spartusis klavišas + File does not exist + Failo nėra - Auto-Type delay - Automatinio rinkimo delsa + Unknown share container type + - ms - Milliseconds - ms + Overwriting signed share container is not supported - export prevented + - Startup - Įjungimo + Could not write export container (%1) + - File Management - Failų tvarkymas + Overwriting unsigned share container is not supported - export prevented + - 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.) + Could not write export container + - Backup database file before saving - Išsaugoti duomenų bazę prieš išsaugant + Unexpected export error occurred + Įvyko netikėta eksportavimo klaida - Entry Management - Įrašų tvarkymas + Export to %1 failed (%2) + Eksportavimas į %1 nepavyko (%2) - General - Bendra + Export to %1 successful (%2) + Eksportavimas į %1 sėkmingas (%2) - - - SettingsWidgetSecurity - Timeouts - Laiko limitai + Export to %1 + - Clear clipboard after - Išvalyti iškarpinę po + Do you want to trust %1 with the fingerprint of %2 from %3? + - sec - Seconds - sek. + Multiple import source path to %1 in %2 + - Lock databases after inactivity of - Užrakinti duomenų bazes, kai kompiuteris neaktyvus + Conflicting export target path %1 in %2 + - Convenience - Patogumas + Could not embed signature: Could not open file to write (%1) + - 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 + Could not embed signature: Could not write file (%1) + - Lock databases after minimizing the window - Suskleidus langą, užrakinti duomenų bazes + Could not embed database: Could not open file to write (%1) + - Don't require password repeat when it is visible - Nereikalauti pakartoti slaptažodį, kai šis yra matomas + Could not embed database: Could not write file (%1) + + + + TotpDialog - Show passwords in cleartext by default - Pagal numatymą, rodyti slaptažodžius atviruoju tekstu + Timed Password + Numatytosios trukmės slaptažodis - Hide passwords in the preview panel - Slėpti slaptažodžius peržiūros skydelyje + 000000 + 000000 - Hide entry notes by default - Pagal numatymą, slėpti įrašo pastabas + Copy + Kopijuoti + + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Privacy - Privatumas + Copy + Kopijuoti - Use Google as fallback for downloading website icons - Naudoti Google kaip surogatą svetainių piktogramų atsiuntimui + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Re-lock previously locked database after performing Auto-Type + There was an error creating the QR code. + + Closing in %1 seconds. + Užveriama po %1 sekundžių. + - SetupTotpDialog + 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 + sec + Seconds + sek. + + + Code size: + Kodo dydis: 6 digits 6 skaitmenys - Code size: - Kodo dydis: + 7 digits + - sec - Seconds - sek. + 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. + + + 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 - - - UnlockDatabaseWidget - Unlock database - Atrakinti duomenų bazę + 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 - - Remove an entry from the database. - Šalinti įrašą iš duomenų bazės. - - - Path of the database. - Duomenų bazės kelias. - - - Path of the entry to remove. - Įrašo, kurį šalinti, kelias. - - - KeePassXC - cross-platform password manager - KeePassXC - daugiaplatformė slaptažodžių tvarkytuvė - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - norimų atverti slaptažodžių duomenų bazių failų pavadinimai (*.kdbx) + Refresh + Įkelti iš naujo - path to a custom config file - kelias į tinkintą konfigūracijos failą + YubiKey Challenge-Response + - key file of the database - duomenų bazės rakto failas + <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> + - read password of the database from stdin - nuskaityti duomenų bazės slaptažodį iš stdin + No YubiKey detected, please ensure it's plugged in. + - 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 0000000000..8e3cdadffc --- /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 854ad820b0..58a820a426 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,90 +35,300 @@ Copy to clipboard - Kopier til utklippstavla + Kopier til utklippstavle - Version %1 - - Versjon %1 - + Project Maintainers: + Prosjektets vedlikeholdere: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Slå på SSH-agenten (krever omstart) + + + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Revision: %1 - Revisjon: %1 + Application Settings + Applikasjonsinnstillinger - Distribution: %1 - Distribusjon: %1 + General + Generelt - Libraries: - Biblioteker: + Security + Sikkerhet - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operativsystem: %1 -CPU-arkitektur: %2 -Kjerne: %3 %4 + Access error for config file %1 + Feil ved tilgang til konfigurasjonsfilen %1 - Enabled extensions: - Aktive utvidelser: + Icon only + Kun ikon - Project Maintainers: - Prosjektets vedlikeholdere: + Text only + Kun tekst - 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. + Text beside icon + Tekst ved siden av ikon - Build Type: %1 - - Bygge-type: %1 - + Text under icon + Tekst under ikon + + + Follow style + Følg stil - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP: Bekreft tilgang + Basic Settings + Grunnleggende - Remember this decision - Husk dette valget + Startup + Oppstart - Allow - Tillat + Start only a single instance of KeePassXC + Kjør kun én instans av KeePassXC om gangen - Deny - Avvis + Remember last databases + Husk de sist brukte databasene - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Slå på SSH-agenten (krever programomstart) + 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 @@ -362,20 +584,41 @@ Velg om du vil gi tilgang eller ikke. <b>Advarsel:</b> Disse innstillingene kan medføre risiko. - Executable Files (*.exe);;All Files (*.*) - Programfiler (*.exe);;Alle filer (*.*) + Select custom proxy location + Oppgi en selvvalgt mellomtjerneradresse - Executable Files (*) - Kørbare filer (*) + &Tor Browser + &Tor nettleser - Select custom proxy location - Oppgi en selvvalgt mellomtjerneradresse + <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 + - 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. + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -416,152 +659,53 @@ Vil du overskrive den? Vil du oppdatere informasjonen i %1 - %2? - KeePassXC: Database locked! - KeePassXC: Database låst! + Abort + Avbryt - 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. + Converting attributes to custom data… + - KeePassXC: Settings not available! - KeePassXC: Innstillinger ikke tilgjengelig! + KeePassXC: Converted KeePassHTTP attributes + - The active database does not contain a settings entry. - Den aktive databasen inneholder ikke noen konfigurasjons-innstilling. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + - KeePassXC: No keys found - KeePassXC: Ingen nøkler funnet + KeePassXC: No entry with KeePassHTTP attributes found! + - No shared encryption keys found in KeePassXC Settings. - Ingen delte krypteringsnøkler funnet i oppsettet i KeePassXC. + The active database does not contain an entry with KeePassHTTP attributes. + - 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 - - - Successfully removed permissions from %n entry(s). - Fjernet tillatelser fra %n oppføring(er).Fjernet tillatelser fra %n oppføring(er). - - - 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. - - - - ChangeMasterKeyWidget - - Password - Passord - - - Enter password: - Angi passord: - - - Repeat password: - Gjenta passord: - - - &Key file - &Nøkkelfil - - - 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 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format - Eldre nøkkelfilformat + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -658,47 +794,88 @@ Vurder å opprette en ny nøkkelfil. Originale data: - Error(s) detected in CSV file ! - Feil oppdaget i CSV filen ! + Error + Feil - more messages skipped] - hoppet over flere meldinger] + Empty fieldname %1 + - Error - Feil + column %1 + - CSV import: writer has errors: - - CSV import: skriver har feil: + Error(s) detected in CSV file! + - - - CsvImportWizard - - Error - Feil + + [%n more message(s) skipped] + - Unable to calculate master key - Kan ikke kalkulere hovednøkkel + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - %n byte(s), %n byte(s), + %n column(s) + %n kolonne(r)%n kolonne(r) + + + %1, %2, %3 + file info: bytes, rows, columns + - %n row(s), - %n rad(er), %n rad(er), + %n byte(s) + - %n column(s) - %n kolonne(r)%n kolonne(r) + %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 @@ -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,112 +933,175 @@ 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. + Can't open key file: +%1 + + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Klarte ikke åpne databasen. + Passwords + Passord + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + Generelt - Database opened fine. Nothing to do. - Databasen ble åpnet uten feil. Ikke mer å gjøre. + Security + Sikkerhet - Success - Vellykket + Master Key + Hovednøkkel - The database has been successfully repaired -You can now save it. - Databasen er reparert. -Du kan nå lagre den. + Encryption Settings + Krypteringsinnstillinger - Unable to repair the database. - Klarte ikke reparere databasen. + Browser Integration + Nettlesertillegg - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Generelt + KeePassXC-Browser settings + KeePassXC nettleser-innstillinger - Encryption - Kryptering + &Disconnect all browsers + Kople &fra alle nettleserne - Number of rounds too high - Key transformation rounds - Antall runder er for høyt + Forg&et all site-specific settings on entries + - 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! - 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! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Understood, keep number - Forstått; behold antallet + Stored keys + Lagrede nøkler - Cancel - Avbryt + Remove + Fjern - Number of rounds too low - Key transformation rounds - Antall runder er for lavt + Delete the selected key? + Slette den valgte nøkkelen? - 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! - Du bruker et svært lavt antall nøkkeltransformasjons-runder med AES-KDF. - -Dersom du beholder dette antallet så kan databasen være for lett å knekke! + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + - KDF unchanged - KDF uendret + Key + Nøkkel - Failed to transform key with new KDF parameters; KDF unchanged. - Kunne ikke omskape nøkkel med nye KDF-parametere; KDF uendret. + 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 - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB + 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 - thread(s) - Threads for parallel execution (KDF settings) - tråd(er)tråd(er) + 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 + Krypteringsalgoritme: AES: 256 Bit (default) @@ -899,6 +1131,113 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!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 + Key transformation rounds + Antall runder er for høyt + + + 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! + Du bruker et svært høyt antall nøkkeltransformasjons-runder med Argon2. + +Dersom du beholder dette antallet så vil det ta timer eller dager (og kanskje lengre) å åpne databasen! + + + Understood, keep number + Forstått; behold antallet + + + Cancel + Avbryt + + + Number of rounds too low + Key transformation rounds + Antall runder er for lavt + + + 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! + Du bruker et svært lavt antall nøkkeltransformasjons-runder med AES-KDF. + +Dersom du beholder dette antallet så kan databasen være for lett å knekke! + + + KDF unchanged + KDF uendret + + + Failed to transform key with new KDF parameters; KDF unchanged. + Kunne ikke omskape nøkkel med nye KDF-parametere; KDF uendret. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiBMiB + + + thread(s) + Threads for parallel execution (KDF settings) + tråd(er)tråd(er) + + + %1 ms + milliseconds + %1 s%1 ms + + + %1 s + seconds + %1 s%1 s + DatabaseSettingsWidgetGeneral @@ -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,91 +1287,110 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Rot + Sharing + Deling - KeePass 2 Database - KeePass 2 Database + Breadcrumb + - All files - Alle filer + Type + Type - Open database - Åpne database + Path + Sti - File not found! - Finner ikke filen! + Last Signer + - Unable to open the database. - Kunne ikke åpne databasen. + Certificates + Sertifikat - File opened in read only mode. - Fil åpnet i skrivebeskyttet modus. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Åpne CSV fil + Add additional protection... + Legg til ekstra beskyttelse - CSV file - CSV fil + No encryption key added + Ingen krypteringsnøkkel lagt til - All files (*) - Alle filer (*) + You must add at least one encryption key to secure your database! + Du må legge til minst en krypteringsnøkkel for å sikre databasen! - Merge database - Slå sammen database + No password set + Passord ikke satt - Open KeePass 1 database - Åpne KeePass 1 database + 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? + - KeePass 1 database - KeePass 1 database + Unknown error + Ukjent feil - Close? - Lukk? + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" blir redigert. -Vil du likevel avvise endringene? + Database Name: + - Save changes? - Lagre endringer? + Description: + + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" er endet. -Lagre endringer? + KeePass 2 Database + KeePass2-database + + + All files + Alle filer - Writing the database failed. - Skriving av databasen feilet. + Open database + Åpne database - Passwords - Passord + CSV file + CSV fil - Save database as - Lagre database som + Merge database + Slå sammen database + + + Open KeePass 1 database + Åpne KeePass1-database + + + KeePass 1 database + KeePass1-database Export database to CSV file @@ -1043,40 +1401,40 @@ Lagre endringer? Skriving av CSV fil feilet. - 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 database fordi du redigerer den. -Klikk avbryt for å fullføre endringene eller forkaste dem. + Select CSV file + Velg CSV fil - 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. + New Database + Ny database - Disable safe saves? - Deaktivere sikker lagring? + %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 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 [Locked] + Database tab name modifier + + + + %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 + + Do you really want to delete %n entry(s) for good? + + + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + + - Generate TOTP Token - Opprett TOTP Token + File opened in read only mode. + Fil åpnet i skrivebeskyttet modus. - Close - Lukk + Lock Database? + Låse database? - General - Generell + You are editing an entry. Discard changes and lock anyway? + - Password - Passord + "%1" was modified. +Save changes? + "%1" er endet. +Lagre endringer? - URL - Adresse + Database was modified. +Save changes? + - Expiration - Utløp + Save changes? + Lagre endringer? - Username - Brukernavn + Could not open the new database file while attempting to autoreload. +Error: %1 + - Autotype - Autoskriv + Disable safe saves? + Deaktivere sikker lagring? - Searching - Søking + 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? - Attributes - Attributter + Writing the database failed. +%1 + - Attachments - Vedlegg + Passwords + Passord - Notes - Notater + Save database as + Lagre database som - Window - Vindu + KeePass 2 Database + KeePass2-database - Sequence - Rekkefølge + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Search - Søk + Delete group + Slett gruppe - Clear - Tøm + Move group to recycle bin? + - Never - Aldri + Do you really want to move the group "%1" to the recycle bin? + - [PROTECTED] - [BESKYTTET] + Successfully merged the database files. + - Disabled - Deaktivert + Database was not modified by merge operation. + - 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 @@ -1634,10 +1980,101 @@ Vil du slå sammen fila med endringene dine? - EditGroupWidgetMain + EditGroupWidgetKeeShare - Name - Navn + 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 + + Name + Navn Notes @@ -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,109 +2396,159 @@ Dette kan føre til feil for de berørte programtilleggene. Attachments Vedlegg + + Yes + + + + TOTP + + - EntryView + EntryPreviewWidget - Customize View - Tilpass visning + Generate TOTP Token + Opprett TOTP Token - Hide Usernames - Skjul brukernavn + Close + Lukk - Hide Passwords - Skjul passord + General + Generelt - Fit to window - Tilpass til vindu + Username + Brukernavn - Fit to contents - Tilpass til innhold + Password + Passord - Reset to defaults - Tilbakestill til standardinnstillinger + Expiration + Utløp - Attachments (icon) - Vedlegg (ikon) + URL + Adresse - - - Group - Recycle Bin - Papirkurv + Attributes + Attributter - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: Kan ikke lagre fil! + Attachments + Vedlegg - Cannot save the native messaging script file. - Kan ikke lagre den lokale meldings-skriptfilen. + Notes + Notater - - - HttpPasswordGeneratorWidget - Length: - Lengde: + Autotype + Autoskriv - Character Types - Tegntyper + Window + Vindu - Upper Case Letters - Store bokstaver + Sequence + Rekkefølge - A-Z - A-Z + Searching + Søking - Lower Case Letters - Små bokstaver + Search + Søk - a-z - a-z + Clear + Tøm - Numbers - Tall + Never + Aldri - 0-9 - 0-9 + [PROTECTED] + [BESKYTTET] - Special Characters - Spesialtegn + <b>%1</b>: %2 + attributes line + - /*_& ... - /*_& ... + Enabled + Aktivert - Exclude look-alike characters - Ekskluder tegn som er nesten makne + Disabled + Deaktivert - Ensure that the password contains characters from every group - Pass på at passordet inneholder tegn fra hver gruppe + Share + + + + EntryView - Extended ASCII - Utvida ASCII + Customize View + Tilpass visning + + + Hide Usernames + Masker brukernavn + + + Hide Passwords + Masker passord + + + Fit to window + Tilpass til vindu + + + Fit to contents + Tilpass til innhold + + + Reset to defaults + Resette til standard + + + Attachments (icon) + Vedlegg (ikon) + + + + Group + + Recycle Bin + Papirkurv + + + [empty] + group has no children + + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: Kan ikke lagre fil! + + + Cannot save the native messaging script file. + Kan ikke lagre den lokale meldings-skriptfilen. @@ -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,763 +3413,1549 @@ 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ø. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Ugyldig nøkkelfil. Forventer OpenSSH-nøkkel + &Donate + &Donér - PEM boundary mismatch - ‘PEM boundary’ samsvarer ikke + Report a &bug + Meld inn en &feil - Base64 decoding failed - Base64 dekryptering feila + 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. - Key file way too small. - Nøkkelfil er alt for liten. + &Import + - Key file magic header id invalid - ’Magic header id’ i nøkkelfil er ugyldig + Copy att&ribute... + - Found zero keys - Fant null nøkler + TOTP... + - Failed to read public key. - Lesing av offentlig nøkkel feilet. + &New database... + - Corrupted key file, reading private key failed - Skadet nøkkelfil. Lesing av privat nøkkel feilet + Create a new database + - No private key payload to decrypt - Ingen private nøkkeldata å dekryptere + &Merge from database... + - Trying to run KDF without cipher - Prøver å kjøre KDF uten kryptering + Merge from another KDBX database + - Passphrase is required to decrypt this key - Passordfrase er nødvendig for å dekryptere denne nøkkelen + &New entry + - Key derivation failed, key file corrupted? - Nøkkelavledning mislyktes. Nøkkelfil skadet? + Add a new entry + - Decryption failed, wrong passphrase? - Dekryptering feilet. Feil passordfrase? + &Edit entry + - Unexpected EOF while reading public key - Uventet EOF ved lesing av offentlig nøkkel + View or edit entry + - Unexpected EOF while reading private key - Uventet EOF ved lesing av privat nøkkel + &New group + - Can't write public key as it is empty - Kan ikke skrive offentlig nøkkel fordi den er tom + Add a new group + - Unexpected EOF when writing public key - Uventet EOF ved skriving av offentlig nøkkel + Change master &key... + - Can't write private key as it is empty - Kan ikke skrive privat nøkkel fordi den er tom + &Database settings... + - Unexpected EOF when writing private key - Uventet EOF ved skriving av privat nøkkel + Copy &password + - Unsupported key type: %1 - Ikke støttet nøkkeltype: %1 + Perform &Auto-Type + - Unknown cipher: %1 - Ukjent kryptering: %1 + Open &URL + - Cipher IV is too short for MD5 kdf - Cipher IV er for kort for MD5 kdf + KeePass 1 database... + - Unknown KDF: %1 - Ukjent KDF: %1 + Import a KeePass 1 database + - Unknown key type: %1 - Ukjent nøkkeltype: %1 + CSV file... + - - - OptionDialog - Dialog - Vindu + Import a CSV file + - This is required for accessing your databases from ChromeIPass or PassIFox - Dette kreves for å få tilgang til databasene dine fra ChromeIPass eller PassIFox + Show TOTP... + - Enable KeePassHTTP server - Aktiver KeePassHTTP-server + Show TOTP QR Code... + - General - Generell + Check for Updates... + - 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 + Share entry + - 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. + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + - &Return only best matching entries - &Returner bare de beste matchende oppføringene + Check for updates on startup? + - Re&quest to unlock the database if it is locked - Spør om å låse opp dersom databasen er låst + Would you like KeePassXC to check for updates on startup? + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Bare oppføringer med samme protokoll (http://, https://,, ftp://, ...) er returnert. + You can always check for updates manually from the application menu. + + + + Merger - &Match URL schemes - &Match URL-skjema + Creating missing %1 [%2] + - Sort matching entries by &username - Sorter matchende oppføringer etter &brukernavn + Relocating %1 [%2] + - Sort &matching entries by title - Sorter &matchende oppføringer etter tittel + Overwriting %1 [%2] + - R&emove all shared encryption keys from active database - Fj&ern alle delte krypteringsnøkler fra aktiv database + older entry merged from database "%1" + - Re&move all stored permissions from entries in active database - Fjer&n alle lagrede tillatelser fra oppføringer i aktiv database + Adding backup for older target %1 [%2] + - Password Generator - Passordgenerator + Adding backup for older source %1 [%2] + - Advanced - Avansert + Reapplying older target entry on top of newer source %1 [%2] + - Always allow &access to entries - Tillat alltid tilg&ang til oppføringer + Reapplying older source entry on top of newer target %1 [%2] + - Always allow &updating entries - Alltid tillat å oppdatere oppføringer + Synchronizing from newer source %1 [%2] + - Only the selected database has to be connected with a client. - Kun den valgte databasen behøver å kobles til en klient. + Synchronizing from older source %1 [%2] + - Searc&h in all opened databases for matching entries - Sø&k i alle åpne databaser etter matchende oppføringer + Deleting child %1 [%2] + - Automatically creating or updating string fields is not supported. - Automatisk registrering eller endring av tekstfelt er ikke støttet. + Deleting orphan %1 [%2] + - &Return advanced string fields which start with "KPH: " - &Returner avanserte tekstfelt som begynner med "KPH: " + Changed deleted objects + - HTTP Port: - HTTP-port: + Adding missing icon %1 + + + + NewDatabaseWizard - Default port: 19455 - Standard port: 19455 + Create a new KeePassXC database... + - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC vil lytte på denne porten på 127.0.0.1 + Root + Root group + Rot + + + NewDatabaseWizardPage - <b>Warning:</b> The following options can be dangerous! - <b>Advarsel:</b> Disse innstillingene kan medføre risiko. + WizardPage + + + + En&cryption Settings + - <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> + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + - Cannot bind to privileged ports - Kan ikke bruke privilegerte porter + Advanced Settings + - Cannot bind to privileged ports below 1024! -Using default port 19455. - Kan ikke bruke privilegerte porter under 1024! -Bruker standard port 19455. + Simple Settings + - PasswordGeneratorWidget + NewDatabaseWizardPageEncryption - %p% - %p% + Encryption Settings + Krypteringsinnstillinger - Password: - Passord: + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + NewDatabaseWizardPageMasterKey - strength - Password strength - styrke + Database Master Key + - entropy - entropi + A master key known only to you protects your database. + + + + NewDatabaseWizardPageMetaData - Password - Passord + General Database Information + - Character Types - Tegntyper + Please fill in the display name and an optional description for your new database: + + + + OpenSSHKey - Upper Case Letters - Store bokstaver + Invalid key file, expecting an OpenSSH key + Ugyldig nøkkelfil. Forventer OpenSSH-nøkkel - Lower Case Letters - Små bokstaver + PEM boundary mismatch + ‘PEM boundary’ samsvarer ikke - Numbers - Tall + Base64 decoding failed + Base64 dekryptering feila - Special Characters - Spesialtegn + Key file way too small. + Nøkkelfil er alt for liten. - Extended ASCII - Utvida ASCII + Key file magic header id invalid + ’Magic header id’ i nøkkelfil er ugyldig - Exclude look-alike characters - Ekskluder tegn som er nesten makne + Found zero keys + Fant null nøkler - Pick characters from every group - Bruk tegn fra hver gruppe - + Failed to read public key. + Lesing av offentlig nøkkel feilet. + + + Corrupted key file, reading private key failed + Skadet nøkkelfil. Lesing av privat nøkkel feilet + + + No private key payload to decrypt + Ingen private nøkkeldata å dekryptere + + + Trying to run KDF without cipher + Prøver å kjøre KDF uten kryptering + + + Passphrase is required to decrypt this key + Passordfrase er nødvendig for å dekryptere denne nøkkelen + + + Key derivation failed, key file corrupted? + Nøkkelavledning mislyktes. Nøkkelfil skadet? + + + Decryption failed, wrong passphrase? + Dekryptering feilet. Feil passordfrase? + + + Unexpected EOF while reading public key + Uventet EOF ved lesing av offentlig nøkkel + + + Unexpected EOF while reading private key + Uventet EOF ved lesing av privat nøkkel + + + Can't write public key as it is empty + Kan ikke skrive offentlig nøkkel fordi den er tom + + + Unexpected EOF when writing public key + Uventet EOF ved skriving av offentlig nøkkel + + + Can't write private key as it is empty + Kan ikke skrive privat nøkkel fordi den er tom + + + Unexpected EOF when writing private key + Uventet EOF ved skriving av privat nøkkel + + + Unsupported key type: %1 + Ikke støttet nøkkeltype: %1 + + + Unknown cipher: %1 + Ukjent kryptering: %1 + + + Cipher IV is too short for MD5 kdf + Krypterings-IV er for kort for MD5 kdf + + + Unknown KDF: %1 + Ukjent KDF: %1 + + + Unknown key type: %1 + Ukjent nøkkeltype: %1 + + + + PasswordEditWidget + + Enter password: + Angi passord: + + + Confirm password: + + + + Password + Passord + + + <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 + + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + Passord: + + + strength + Password strength + styrke + + + entropy + entropi + + + Password + Passord + + + Character Types + Tegntyper + + + Upper Case Letters + Store bokstaver + + + Lower Case Letters + Små bokstaver + + + Numbers + Tall + + + Special Characters + Spesialtegn + + + Extended ASCII + Utvida ASCII + + + Exclude look-alike characters + Ekskluder tegn som er nesten makne + + + Pick characters from every group + Velg tegn fra hver gruppe + + + &Length: + &Lengde + + + Passphrase + Passordfrase + + + Wordlist: + Ordliste: + + + Word Separator: + Ord-skilletegn: + + + Copy + Kopier + + + Accept + Godta + + + Close + Lukk + + + Entropy: %1 bit + Entropi: %1 bit + + + Password Quality: %1 + Passordkvalitet: %1 + + + Poor + Password quality + Dårlig + + + Weak + Password quality + Svak + + + Good + Password quality + 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 + + Database not opened + Database ikke åpnet + + + Database hash not available + Database-hash er ikke tilgjengelig + + + Client public key not received + Klients offentlige nøkkel ikke mottatt + + + Cannot decrypt message + Kan ikke dekryptere melding + + + Action cancelled or denied + Handlingen er kansellert eller avvist + + + KeePassXC association failed, try again + Assosiering av KeePassXC mislyktes, prøv igjen + + + Encryption key is not recognized + Krypteringsnøkkel er ikke gjenkjent + + + Incorrect action + Feil handling + + + Empty message received + Tom melding mottatt + + + No URL provided + Ingen URL oppgitt + + + No logins found + Ingen innlogginger funnet + + + Unknown error + Ukjent feil + + + Add a new entry to a database. + Legg til en ny oppføring til en database. + + + Path of the database. + Database-sti. + + + Key file of the database. + Nøkkelfil til databasen. + + + path + sti + + + Username for the entry. + Brukernavn for oppføringen. + + + username + brukernavn + + + URL for the entry. + URL for oppføringa. + + + URL + URL + + + Prompt for the entry's password. + Spør etter oppføringens passord. + + + Generate a password for the entry. + Generer et passord til oppføringa. + + + Length for the generated password. + Lengde på det genererte passordet. + + + length + lengde + + + Path of the entry to add. + Sti til oppføringa som skal legges til. + + + Copy an entry's password to the clipboard. + Kopier passordet i oppføringa til utklippstavlen. + + + Path of the entry to clip. + clip = copy to clipboard + Sti til oppføring som skal klippes ut. + + + Timeout in seconds before clearing the clipboard. + Forsinkelse i sekund før tømming av utklippstavlen. + + + Edit an entry. + Rediger oppføring. + + + Title for the entry. + Tittel for oppføringa. + + + title + tittel + + + Path of the entry to edit. + Sti til oppføringa som skal redigeres. + + + Estimate the entropy of a password. + Beregn entropien til et passord. + + + Password for which to estimate the entropy. + Passord for beregning av entropi. + + + Perform advanced analysis on the password. + Utfør avansert analyse på passordet. + + + Extract and print the content of a database. + Pakk ut og print innholdet av en database. + + + Path of the database to extract. + Sti til databasen som skal pakkes ut. + + + Insert password to unlock %1: + Sett inn passord for å låse opp %1: + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + ADVARSEL: Nøkkelfilen du bruker er av et eldre filformat som kan miste støtten i framtidige programversjoner. + +Vurder å opprette en ny nøkkelfil. + + + + +Available commands: + + + +Tilgjengelige kommandoer: + + + + Name of the command to execute. + Navn på kommandoen som skal utføres. + + + List database entries. + Liste databaseoppføringer. + + + Path of the group to list. Default is / + Sti til gruppen som skal listes. Standard er / + + + Find entries quickly. + Finn oppføring fort. + + + Search term. + Søkeord. + + + Merge two databases. + Slå sammen to databaser. + + + Path of the database to merge into. + Sti til databasen det skal kombineres til. + + + Path of the database to merge from. + Sti til databasen det skal slås sammen fra. + + + Use the same credentials for both database files. + Bruk samme identifikasjon for begge databasefilene. + + + Key file of the database to merge from. + Nøkkelfil til databasen det skal slås sammen fra. + + + Show an entry's information. + Vis informasjon i oppføringen. + + + 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, blir det gitt en oppsummering av standardattributtene. + + + attribute + attributt + + + Name of the entry to show. + Navn på oppføring som skal vises + + + NULL device + NULL-enhet + + + error reading from device + Feil ved lesing fra enhet + + + malformed string + Ugyldig streng + + + missing closing quote + Manglende avsluttende anførselstegn + + + Group + Gruppe + + + Title + Tittel + + + Username + Brukernavn + + + Password + Passord + + + Notes + Notater + + + Last Modified + Sist endra + + + Created + Oppretta + + + Browser Integration + Nettlesertillegg + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey[%1] utfordrings-respons - slot %2 - %3 + + + Press + Trykk + + + Passive + Passiv + + + SSH Agent + SSH-agent + + + Generate a new random diceware passphrase. + Generer en ny tilfeldig diceware passordfrase. + + + Word count for the diceware passphrase. + Antall ord i diceware-passordfrasen. + + + Wordlist for the diceware generator. +[Default: EFF English] + Ordliste for diceware-generatoren. +[Standard: EFF engelsk] + + + Generate a new random password. + Generer et nytt tilfeldig passord. + + + 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 + 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: + + - &Length: - &Lengde + Writing the database failed: %1 + - Passphrase - Adgangsfrase + Successfully edited entry %1. + - Wordlist: - Ordliste: + Length %1 + - Word Count: - Antall ord: + Entropy %1 + - Word Separator: - Skilleord: + Log10 %1 + - Generate - Generer + Multi-word extra bits %1 + - Copy - Kopier + Type: Bruteforce + - Accept - Godta + Type: Dictionary + - Close - Lukk + Type: Dict+Leet + - Apply - Bruk + Type: User Words + - Entropy: %1 bit - Entropi: %1 bit + Type: User+Leet + - Password Quality: %1 - Passordkvalitet: %1 + Type: Repeated + - Poor - Password quality - Dårlig + Type: Sequence + - Weak - Password quality - Svak + Type: Spatial + - Good - Password quality - God + Type: Date + - Excellent - Password quality - Utmerket + Type: Bruteforce(Rep) + - - - QObject - Database not opened - Database ikke åpnet + Type: Dictionary(Rep) + - Database hash not available - Database-hash er ikke tilgjengelig + Type: Dict+Leet(Rep) + - Client public key not received - Klients offentlige nøkkel ikke mottatt + Type: User Words(Rep) + - Cannot decrypt message - Kan ikke dekryptere melding + Type: User+Leet(Rep) + - Timeout or cannot connect to KeePassXC - Tidsavbrudd eller kan ikke koble til KeePassXC + Type: Repeated(Rep) + - Action cancelled or denied - Handlingen er kansellert eller avvist + Type: Sequence(Rep) + - 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? + Type: Spatial(Rep) + - KeePassXC association failed, try again - Assosiering av KeePassXC mislyktes, prøv igjen + Type: Date(Rep) + - Key change was not successful - Endring av nøkkel var ikke vellykket + Type: Unknown%1 + - Encryption key is not recognized - Krypteringsnøkkel er ikke gjenkjent + Entropy %1 (%2) + - No saved databases found - Ingen lagrede databaser funnet + *** Password length (%1) != sum of length of parts (%2) *** + - Incorrect action - Feil handling + Failed to load key file %1: %2 + - Empty message received - Tom melding mottatt + File %1 does not exist. + - No URL provided - Ingen URL oppgitt + Unable to open file %1. + - No logins found - Ingen innlogginger funnet + Error while reading the database: +%1 + - Unknown error - Ukjent feil + Error while parsing the database: +%1 + - Add a new entry to a database. - Legg til en ny oppføring til en database. + Length of the generated password + - Path of the database. - Database-sti. + Use lowercase characters + - Key file of the database. - Nøkkelfil til databasen. + Use uppercase characters + - path - sti + Use numbers. + - Username for the entry. - Brukernavn for oppføringen. + Use special characters + - username - brukernamn + Use extended ASCII + - URL for the entry. - URL for oppføringa. + Exclude character set + - URL - URL + chars + - Prompt for the entry's password. - Spør etter oppføringens passord. + Exclude similar looking characters + - Generate a password for the entry. - Generer et passord til oppføringen. + Include characters from every selected group + - Length for the generated password. - Lengde for det genererte passordet. + Recursively list the elements of the group. + - length - lengde + Cannot find group %1. + - Path of the entry to add. - Sti til oppføringa som skal legges til. + Error reading merge file: +%1 + - Copy an entry's password to the clipboard. - Kopier passordet i oppføringa til utklippstavlen. + Unable to save database to file : %1 + - Path of the entry to clip. - clip = copy to clipboard - Sti til oppføring som skal klippes ut. + Unable to save database to file: %1 + - Timeout in seconds before clearing the clipboard. - Forsinkelse i sekund før tømming av utklippstavlen. + Successfully recycled entry %1. + - Edit an entry. - Rediger oppføring. + Successfully deleted entry %1. + - Title for the entry. - Tittel for oppføringa. + Show the entry's current TOTP. + - title - tittel + ERROR: unknown attribute %1. + - Path of the entry to edit. - Sti til oppføringa som skal redigeres. + No program defined for clipboard manipulation + - Estimate the entropy of a password. - Beregn entropien til pasordet. + Unable to start program %1 + - Password for which to estimate the entropy. - Passord for beregning av entropi. + file empty + - Perform advanced analysis on the password. - Utfør avansert analyse på passordet. + %1: (row, col) %2,%3 + - Extract and print the content of a database. - Pakk ut og print innholdet av en database. + AES: 256-bit + AES: 256-bit - Path of the database to extract. - Sti til databasen som skal pakkes ut. + Twofish: 256-bit + Twofish: 256-bit - Insert password to unlock %1: - Sett inn passord for å låse opp %1: + ChaCha20: 256-bit + ChaCha20: 256-bit - Failed to load key file %1 : %2 - Klarte ikke å laste nøkkelfil %1 : %2 + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – anbefalt) - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - ADVARSEL: Nøkkelfilen du bruker er av et eldre filformat som kan miste støtten i framtidige programversjoner. - -Vurder å opprette en ny nøkkelfil. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - - -Available commands: - - - -Tilgjengelige kommandoer: - + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Name of the command to execute. - Navn på kommandoen som skal utføres. + Invalid Settings + TOTP + - List database entries. - Liste databaseoppføringer. + Invalid Key + TOTP + - Path of the group to list. Default is / - Sti til gruppen som skal listes. Standard er / + Message encryption failed. + - Find entries quickly. - Finn oppføring fort. + No groups found + - Search term. - Søkeord. + Create a new database. + - Merge two databases. - Slå sammen to databaser. + File %1 already exists. + - Path of the database to merge into. - Sti til databasen det skal kombineres til. + Loading the key file failed + - Path of the database to merge from. - Sti til databasen det skal slås sammen fra. + No key is set. Aborting database creation. + - Use the same credentials for both database files. - Bruk samme identifikasjon for begge databasefilene. + Failed to save the database: %1. + - Key file of the database to merge from. - Nøkkelfil til databasen det skal slås sammen fra. + Successfully created new database. + - Show an entry's information. - Vis informasjon i oppføringen. + Insert password to encrypt database (Press enter to leave blank): + - 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. + Creating KeyFile %1 failed: %2 + - attribute - attributt + Loading KeyFile %1 failed: %2 + - Name of the entry to show. - Navn på oppføring som skal vises + Remove an entry from the database. + Fjern oppføring fra databasen. - NULL device - NULL-enhet + Path of the entry to remove. + Sti til oppføring som skal fjernes. - error reading from device - Feil ved lesing fra enhet + Existing single-instance lock file is invalid. Launching new instance. + Eksisterende enbrukermodus lock-fil er ugyldig. Starter ny instans. - file empty ! - - Tom fil ! - + The lock file could not be created. Single-instance mode disabled. + Lock-filen kunne ikke opprettes. Enbrukermodus deaktivert. - malformed string - Ugyldig streng + KeePassXC - cross-platform password manager + KeePassXC - en multiplattforms passordhåndterer - missing closing quote - Manglende avsluttende anførselstegn + filenames of the password databases to open (*.kdbx) + Filnavn på passord-databasene som skal åpnes (*.kdbx) - Group - Gruppe + path to a custom config file + Sti til tilpasset konfigurasjonsfil - Title - Tittel + key file of the database + Database-nøkkelfil - Username - Brukernavn + read password of the database from stdin + Les database-passord fra standard input - Password - Passord + Parent window handle + Foreldre-vindu handle - Notes - Notater + Another instance of KeePassXC is already running. + En annen instans av KeePassXC kjører allerede. - Last Modified - Sist endret + Fatal error while testing the cryptographic functions. + Alvorlig feil ved testing av de kryptografiske funksjonene. - Created - Oppretta + KeePassXC - Error + KeePassXC - Feil - Legacy Browser Integration - Eldre nettlesertillegg + Database password: + Databasepassord: - Browser Integration - Nettlesertillegg + Cannot create new group + + + + QtIOCompressor - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] challenge-respons - slot %2 - %3 + Internal zlib error when compressing: + Intern zlib-feil under pakking: - Press - Trykk + Error writing to underlying device: + Feil ved skriving til underliggende enhet: - Passive - Passiv + Error opening underlying device: + Feil ved åpning av underliggende enhet: - SSH Agent - SSH-agent + Error reading data from underlying device: + Feil ved lesing av data fra underliggende enhet: - Generate a new random diceware passphrase. - Generer en ny tilfeldig diceware passordfrase. + Internal zlib error when decompressing: + Intern zlib-feil under utpakking: + + + QtIOCompressor::open - Word count for the diceware passphrase. - Antall ord i diceware-passordfrasen. + The gzip format not supported in this version of zlib. + Gzip-formatet er ikke støttet i denne versjonen av zlib. + + + Internal zlib error: + Intern zlib-feil: + + + + SSHAgent + + 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: - count - Antall + The key has already been added. + Nøkkelen er alt blitt lagt til. - Wordlist for the diceware generator. -[Default: EFF English] - Ordliste for diceware-generatoren. -[Standard: EFF engelsk] + Restricted lifetime is not supported by the agent (check options). + Begrenset levetid støttes ikke av agenten (sjekk alternativene). - Generate a new random password. - Lag et nytt tilfeldig passord. + A confirmation request is not supported by the agent (check options). + En bekreftelsesforespørsel støttes ikke av agenten (sjekk alternativene). + + + SearchHelpWidget - Length of the generated password. - Lengde på det genererte passordet. + Search Help + - Use lowercase characters in the generated password. - Bruk små bokstaver i det genererte passordet. + Search terms are as follows: [modifiers][field:]["]term["] + - Use uppercase characters in the generated password. - Bruk store bokstaver i det genererte passordet. + Every search term must match (ie, logical AND) + - Use numbers in the generated password. - Bruk tall i det genererte passordet. + Modifiers + - Use special characters in the generated password. - Bruk spesialtegn i det genererte passordet. + exclude term from results + - Use extended ASCII in the generated password. - Bruk utvida ASCII i det genererte passordet. + match term exactly + - - - QtIOCompressor - Internal zlib error when compressing: - Intern zlib-feil under pakking: + use regex in term + - Error writing to underlying device: - Feil ved skriving til underliggende enhet: + Fields + - Error opening underlying device: - Feil ved åpning av underliggende enhet: + Term Wildcards + - Error reading data from underlying device: - Feil ved lesing av data fra underliggende enhet: + match anything + - Internal zlib error when decompressing: - Intern zlib-feil under utpakking: + match one + - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Gzip-formatet er ikke støttet i denne versjonen av zlib. + logical OR + - Internal zlib error: - Intern zlib-feil: + Examples + SearchWidget - - Search... - Søk... - Search Søk @@ -3660,314 +4964,332 @@ Tilgjengelige kommandoer: Clear Tøm - - Case Sensitive - Versalsensitiv - Limit search to selected group Avgrens søket til valgt gruppe + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Tilknytningsforespørsel for ny nøkkel. + 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 mottatt en tilknytningsforespørsel for den ovennevnte nøkkelen. -Gi den et unikt navn dersom du vil gi den tilgang til KeePassXC-databasen. + Allow export + - KeePassXC: Overwrite existing key? - KeePassXC: Overskrive eksisterende nøkkel? + Allow import + - 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? + Own certificate + - KeePassXC: Update Entry - KeePassXC: Oppdater oppføring. + Fingerprint: + - Do you want to update the information in %1 - %2? - Vil du oppdatere informasjonen 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 databasen er låst! -Lås opp valgt database eller velg en annen som er åpen. + Key: + Nøkkel: - KeePassXC: Removed keys from database - KeePassXC: Fjernet nøkler fra database + Generate + Lag passord - - 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. + + Import + Importer - KeePassXC: No keys found - KeePassXC: Ingen nøkler funnet + Export + Eksporter - No shared encryption-keys found in KeePassHttp Settings. - Ingen delte krypteringsnøkler funnet i KeePassHttp-innstillinger + Imported certificates + Importerte sertikikat - KeePassXC: Settings not available! - KeePassXC: Innstillinger ikke tilgjengelig! + Trust + - The active database does not contain an entry of KeePassHttp Settings. - Den aktive databasen mangler oppføring for KeePassHttp-innstillinger. + Ask + Spør - Removing stored permissions... - Fjerner lagrede tillatelser... + Untrust + - Abort - Avbryt + Remove + Fjern - KeePassXC: Removed permissions - KeePassXC: Fjernet tillatelser + Path + Sti - - Successfully removed permissions from %n entries. - Fjernet tillatelser fra %n oppføringer.Fjernet tillatelser fra %n oppføringer. + + Status + Status - KeePassXC: No entry with permissions found! - KeePassXC: Ingen oppføring med tillatelser funnet! + Fingerprint + Fingeravtrykk - The active database does not contain an entry with permissions. - Den aktive databasen inneholder ikke et oppsett med tillatelser. + Certificate + Sertifikat - - - SettingsWidget - Application Settings - Applikasjonsinnstillinger + Trusted + Klarert - General - Generelt + Untrusted + Uklarert - Security - Sikkerhet + Unknown + Ukjent - Access error for config file %1 - Feil ved tilgang for filen %1 + key.share + Filetype for KeeShare key + - - - SettingsWidgetGeneral - Basic Settings - Grunnleggende + KeeShare key file + - Start only a single instance of KeePassXC - Kjør kun én instans av KeePassXC om gangen + All files + Alle filer - Remember last databases - Husk de sist brukte databasene + Select path + Velg sti - Remember last key files and security dongles - Husk de sist brukte nøkkelfilene og kopibeskyttelsesnøklene + Exporting changed certificate + Eksporterer endret sertifikat - Load previous databases on startup - Åpne sist brukte databaser ved oppstart + 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? - Automatically save on exit - Lagre automatisk ved avslutning + Signer: + + + + ShareObserver - Automatically save after every change - Lagre automatisk etter enhver endring + Import from container without signature + - Automatically reload the database when modified externally - Last databasen automatisk på nytt hvis den blir endret eksternt + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Minimize when copying to clipboard - Minimer ved kopiering til utklippstavla + Import from container with certificate + - Minimize window at application startup - Minimer ved programstart + Not this time + - Use group icon on entry creation - Bruk gruppeikon ved ny oppføring + Never + Aldri - 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) + Always + - Hide the Details view - Skjul detaljvisninga + Just this time + - Show a system tray icon - Vis et ikon i systemkurven + Import from %1 failed (%2) + - Hide window to system tray when minimized - Skjul vindu til systemstatusfelt når minimert + Import from %1 successful (%2) + - Hide window to system tray instead of app exit - Skjul vindu til systemstatusfelt i stedet for app-avslutning + Imported from %1 + - Dark system tray icon - Mørkt ikon i systemkurven + Signed share container are not supported - import prevented + - Language - Språk + File is not readable + - Auto-Type - Autoskriv + Invalid sharing container + - Use entry title to match windows for global Auto-Type - Bruk tittel i oppføringa for å matche vindu ved global Autoskriv + Untrusted import prevented + - Use entry URL to match windows for global Auto-Type - Bruk URL i oppføringa for å matche vindu ved global Autoskriv + Successful signed import + - Always ask before performing Auto-Type - Alltid spør før utførelse av Autoskriv + Unexpected error + - Global Auto-Type shortcut - Global Autoskriv-hurtigtast + Unsigned share container are not supported - import prevented + - Auto-Type delay - Autoskriv tidsforsinkelse + Successful unsigned import + - ms - Milliseconds - ms + File does not exist + - Startup - Oppstart + Unknown share container type + - File Management - Filhåndtering + Overwriting signed share container is not supported - export prevented + - Safely save database files (may be incompatible with Dropbox, etc) - Sikker lagring av database-filer (kan være uforenelig med Dropbox, etc.) + Could not write export container (%1) + - Backup database file before saving - Sikkerhetskopier database-filen før lagring + Overwriting unsigned share container is not supported - export prevented + - Entry Management - Oppførings-administrasjon + Could not write export container + Kunne ikke skrive eksport-container - General - Generell + Unexpected export error occurred + Uventet feil oppstått - - - SettingsWidgetSecurity - Timeouts - Tidsavbrudd + Export to %1 failed (%2) + Eksport til %1 feilet (%2) - Clear clipboard after - Slett utklippstavlen etter + Export to %1 successful (%2) + Eksport til %1 vellykket (%2) - sec - Seconds - sek + Export to %1 + Eksporter til %1 - Lock databases after inactivity of - Lås databaser etter inaktivitet i + Do you want to trust %1 with the fingerprint of %2 from %3? + - Convenience - Bekvemmelighet + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Lås databaser når økta låses eller lokket lukkes + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Lås databaser når vinduet minimeres + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Ikke krev gjentakelse av passord ved klartekst-visning + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Vis passord i klartekst som standard + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Skjul passord i forhåndsvisnings-panelet + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Skjul notater i oppføringa som standard + Timed Password + Tidsbasert passord - Privacy - Personvern + 000000 + 000000 + + + Copy + Kopier + + + Expires in <b>%n</b> second(s) + Utløper om %n sekundUtløper om <b>%n</b> sekunder + + + + TotpExportSettingsDialog + + Copy + Kopier - Use Google as fallback for downloading website icons - Bruk Google som reserve ved nedlasting av nettsted-ikon + 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. - Re-lock previously locked database after performing Auto-Type - Lås tidligere låst database etter utført Autoskriv + There was an error creating the QR code. + Feil ved opprettelse av QR-koden. + + + Closing in %1 seconds. + Lukker om %1 sekunder. - SetupTotpDialog + TotpSetupDialog Setup TOTP Oppsett TOTP @@ -3978,7 +5300,7 @@ Lås opp valgt database eller velg en annen som er åpen. Default RFC 6238 token settings - Standard RFC 6238 token innstillinger + Standard RFC 6238 token-innstillinger Steam token settings @@ -3986,62 +5308,87 @@ Lås opp valgt database eller velg en annen som er åpen. Use custom settings - Bruk selvvalgt oppsett + Bruk egendefinerte innstillinger - Note: Change these settings only if you know what you are doing. - Merk: Endre disse innstillingene bare dersom du vet hva du gjør. + Custom Settings + Egendefinerte innstillinger Time step: Tidsintervall: - 8 digits - 8 siffer + sec + Seconds + sek + + + Code size: + Kodestørrelse: 6 digits 6 siffer - Code size: - Kodestørrelse: + 7 digits + 7 siffer - sec - Seconds - sek + 8 digits + 8 siffer - TotpDialog + UpdateCheckDialog - Timed Password - Tidsbasert passord + Checking for updates + Sjekker for oppdateringer - 000000 - 000000 + Checking for updates... + Sjekker for oppdateringer... - Copy - Kopier + Close + Lukk - Expires in - Utløper om + Update Error! + Feil ved oppdatering! - seconds - sekunder + 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! - - - UnlockDatabaseWidget - Unlock database - Lås opp databasen + 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 - - Remove an entry from the database. - Fjern oppføring fra databasen. - - - Path of the database. - Database-sti. - - - Path of the entry to remove. - Sti til oppføring som skal fjernes. - - - KeePassXC - cross-platform password manager - KeePassXC - en multiplattforms passordhåndterer - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - Filnavn på passord-databasene som skal åpnes (*.kdbx) + Refresh + Last på ny - path to a custom config file - Sti til tilpasset konfigurasjonsfil + YubiKey Challenge-Response + YubiKey utfordrings-respons - key file of the database - Database-nøkkelfil + <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> - read password of the database from stdin - Les database-passord fra stdin + No YubiKey detected, please ensure it's plugged in. + Ingen YubiKey oppdaga. Sjekk om den er satt inn. - 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 15bd21554a..6b25466e60 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 @@ -38,80 +38,290 @@ Naar klembord kopiëren - Version %1 - - Versie %1 - + Project Maintainers: + Projectbeheerders: - Revision: %1 - Revisie: %1 + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Een extra dank-je-wel van het KeePassXC-team gaat naar debfx voor het creëren van het oorspronkelijke KeePassX. + + + AgentSettingsWidget - Distribution: %1 - Distributie: %1 + Enable SSH Agent (requires restart) + SSH-agent activeren (vereist herstart) - Libraries: - Bibliotheken: + Use OpenSSH for Windows instead of Pageant + Gebruik OpenSSH voor Windows in plaats van Pageant + + + ApplicationSettingsWidget - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Besturingssysteem: %1 -CPU-architectuur: %2 -Kernelversie: %3 %4 + Application Settings + Programma-instellingen - Enabled extensions: - Geactiveerde extensies: + General + Algemeen - Project Maintainers: - Projectbeheerders: + Security + Beveiliging - 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. + Access error for config file %1 + Geen toegang tot configuratiebestand %1 - Build Type: %1 - - Bouwtype: %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 - AccessControlDialog + ApplicationSettingsWidgetGeneral + + Basic Settings + Basisinstellingen + - KeePassXC HTTP Confirm Access - KeePassXC HTTP-toegang bevestigen + Startup + Opstarten - Remember this decision - Deze keuze onthouden + Start only a single instance of KeePassXC + Start niet meer dan één instantie van KeePassXC - Allow - Toestaan + Remember last databases + Laatstgebruikte databases onthouden - Deny - Weigeren + Remember last key files and security dongles + Laatstgebruikte sleutelbestanden en beveiligingsdongles onthouden - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - SSH-agent activeren (vereist herstart) + 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 @@ -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 @@ -362,20 +585,41 @@ Geef aan of je toegang wilt verlenen of niet. <b>Waarschuwing:</b> De volgende opties kunnen gevaarlijk zijn! - Executable Files (*.exe);;All Files (*.*) - Uitvoerbare bestanden (*.exe);; Alle bestanden (*.*) + Select custom proxy location + Selecteer aangepaste proxy-locatie - Executable Files (*) - Uitvoerbare bestanden (*) + &Tor Browser + &Tor browser - Select custom proxy location - Selecteer aangepaste proxy-locatie + <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 + - 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. + 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,152 +661,54 @@ Wil je deze overschrijven? Wil je de gegevens in %1 - %2 bijwerken? - KeePassXC: Database locked! - KeePassXC: Database vergrendeld! + Abort + Afbreken - 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. + Converting attributes to custom data… + Kenmerken worden omgezet in speciala data... - KeePassXC: Settings not available! - KeePassXC: Instellingen niet beschikbaar! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Geconverteerde KeePassHTTP kenmerken - The active database does not contain a settings entry. - De actieve database bevat geen instellingen. + 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 moved %n keys to custom data. + Sleutel is verplaats naar speciale data.Sleutels zijn verplaats naar speciale data. - KeePassXC: No keys found - KeePassXC: Geen sleutels gevonden + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Geen item met KeePassHTTP kenmerken gevonden! - No shared encryption keys found in KeePassXC Settings. - Geen gedeelde encryptiesleutels gevonden in KeePassXC-instellingen. + The active database does not contain an entry with KeePassHTTP attributes. + De actieve database bevat geen item met KeePassHTTP attributen. - 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 - - - Successfully removed permissions from %n entry(s). - Permissies zijn verwijderd uit %n item.Permissies zijn 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. - - - - ChangeMasterKeyWidget - - Password - Wachtwoord - - - Enter password: - Wachtwoord invoeren: - - - Repeat password: - Wachtwoord herhalen: - - - &Key file - &Sleutelbestand - - - 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: + KeePassXC: Legacy browser integration settings detected + KeePassXC: instellingen voor oudere browserintegratie gedetecteerd - 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 + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -659,48 +797,89 @@ Overweeg a.u.b. een nieuw sleutelbestand te genereren. Originele gegevens: - Error(s) detected in CSV file ! - Fout(en) gedetecteerd in CSV-bestand! + Error + Fout - more messages skipped] - meer berichten overgeslagen] + Empty fieldname %1 + Lege fieldname %1 - Error - Fout + column %1 + kolom %1 - CSV import: writer has errors: - - CSV-import - fouten opgetreden: - + Error(s) detected in CSV file! + Fout(en) gevonden in CSV-bestand! - - - CsvImportWizard - - Error - Fout + + [%n more message(s) skipped] + [%n meer bericht(en) overgeslagen][%n meer bericht(en) overgeslagen] - Unable to calculate master key - Niet mogelijk om hoofdsleutel te berekenen + CSV import: writer has errors: +%1 + CSV importeren: schrijver heeft fouten: +%1 CsvParserModel - %n byte(s), - 1 byte,%n byte(s), + %n column(s) + 1 kolom%n kolom(men) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - 1 rij,%n rij(en), + %n byte(s) + %n byte (s)%n byte(s) - %n column(s) - 1 kolom%n kolom(men) + %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 @@ -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: +%1 + Kan sleutelbestand niet openen: +%1 + + + DatabaseSettingWidgetMetaData - Can't open key file - Niet mogelijk om het sleutelbestand te openen + Passwords + Wachtwoorden + + + DatabaseSettingsDialog - Unable to open the database. - Niet mogelijk om de database te openen. + Advanced Settings + Geavanceerde instellingen - Database opened fine. Nothing to do. - Database zonder problemen geopend. Niets te doen. + General + Algemeen + + + Security + Beveiliging - Success - Gelukt + Master Key + Hoofdsleutel - The database has been successfully repaired -You can now save it. - De database is met succes gerepareerd -Je kunt deze nu opslaan. + Encryption Settings + Versleuteling instellingen - Unable to repair the database. - De database is niet te repareren. + Browser Integration + Browserintegratie - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Algemeen + KeePassXC-Browser settings + KeePassXC-browser instellingen - Encryption - Versleuteling + &Disconnect all browsers + &Verbreek verbinding met alle browsers - Number of rounds too high - Key transformation rounds - Aantal iteraties te hoog + Forg&et all site-specific settings on entries + Vergeet alle site-specifieke instellingen bij items - 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! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Verplaats KeePassHTTP kenmerken naar KeePassXC-browser &speciale data - Understood, keep number - Begrepen, aantal aanhouden + Stored keys + Opgeslagen sleutels - Cancel - Annuleren + Remove + Verwijderen - Number of rounds too low - Key transformation rounds - Aantal iteraties te laag + Delete the selected key? + De geselecteerde sleutel verwijderen? - 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! + 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. - KDF unchanged - KDF ongewijzigd + Key + Sleutel - 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. + 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,16 +1140,123 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr Parallelism: Parallelliteit: - - - DatabaseSettingsWidgetGeneral - Database Meta Data - Database meta-gegevens + Decryption Time: + Decoderingstijd: - Database name: - Naam van de database: + ?? 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 + + Database Meta Data + Database meta-gegevens + + + Database name: + Naam van de database: Database description: @@ -950,91 +1296,112 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Alles + Sharing + Delen - KeePass 2 Database - KeePass 2-database + Breadcrumb + Broodkruimel - All files - Alle bestanden + Type + Type - Open database - Database openen + Path + Pad - File not found! - Bestand niet gevonden! + Last Signer + Laatste Ondertekenaar - Unable to open the database. - Het is niet mogelijk om de database te openen. + Certificates + Certificaten - File opened in read only mode. - Bestand geopend in lees-modus. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - CSV-bestand openen + Add additional protection... + Extra beveiliging toevoegen... - CSV file - CSV-bestand + No encryption key added + Geen coderingssleutel toegevoegd - All files (*) - Alle bestanden (*) + 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! - Merge database - Database samenvoegen + No password set + Geen wachtwoord ingesteld - Open KeePass 1 database - KeePass 1-database openen + 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? - KeePass 1 database - KeePass 1-database + Unknown error + Onbekende fout - Close? - Sluiten? + Failed to change master key + Hoofdsleutel wijzigen is niet gelukt + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" is gewijzigd. -Wijzigingen ongedaan maken en doorgaan met sluiten? + Database Name: + Database naam: - Save changes? - Wijzigingen opslaan? + Description: + Beschrijving: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" is gewijzigd. -Wijzigingen opslaan? + KeePass 2 Database + KeePass 2-database - Writing the database failed. - Het opslaan van de database is mislukt. + All files + Alle bestanden - Passwords - Wachtwoorden + Open database + Database openen - Save database as - Database Opslaan Als + CSV file + CSV-bestand + + + Merge database + Database samenvoegen + + + Open KeePass 1 database + KeePass 1-database openen + + + KeePass 1 database + KeePass 1-database Export database to CSV file @@ -1045,40 +1412,41 @@ Wijzigingen opslaan? Schrijven van het CSV-bestand mislukt. - New database - Nieuwe database + Database creation error + Fout bij creëren van de database: - locked - vergrendeld + 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. - Lock database - Database vergrendelen + The database file does not exist or is not accessible. + Het databasebestand bestaat niet of is niet toegankelijk. - 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. + Select CSV file + Selecteer CSV-bestand - 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. + New Database + Nieuwe database - Disable safe saves? - Veilig opslaan uitschakelen? + %1 [New Database] + Database tab name modifier + %1 [nieuwe 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 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 [Locked] + Database tab name modifier + %1 [vergrendeld] + + + %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 + + 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? + - Generate TOTP Token - TOTP-token genereren + File opened in read only mode. + Bestand geopend in lees-modus. - Close - Sluiten + Lock Database? + Database vergrendelen? - General - Algemeen + You are editing an entry. Discard changes and lock anyway? + Je bewerkt een item. De wijzigingen verwerpen en toch vergrendelen? - Password - Wachtwoord + "%1" was modified. +Save changes? + "%1" is gewijzigd. +Wijzigingen opslaan? - URL - URL + Database was modified. +Save changes? + Database is gewijzigd. +Wijzigingen opslaan? - Expiration - Vervaldatum + Save changes? + Wijzigingen opslaan? - Username - Gebruikersnaam + 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 - Autotype - Auto-type + Disable safe saves? + Veilig opslaan uitschakelen? - Searching - Zoeken + 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? - Attributes - Kenmerken + Writing the database failed. +%1 + Het schrijven van de database is mislukt. +%1 - Attachments - Bijlagen + Passwords + Wachtwoorden - Notes - Notities + Save database as + Database opslaan als - Window - Venster + KeePass 2 Database + KeePass 2-database - Sequence - Tekenreeks + 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 ? - Search - Zoeken + Delete group + Verwijder groep - Clear - Wissen + Move group to recycle bin? + Groep naar prullenbak verplaatsen? - Never - Nooit + Do you really want to move the group "%1" to the recycle bin? + Wilt u echt de groep '%1' naar de prullenbak verplaatsen? - [PROTECTED] - [BEVEILIGD] + Successfully merged the database files. + De databasebestanden zijn samengevoegd. - Disabled - Uitgeschakeld + Database was not modified by merge operation. + Database werd niet gewijzigd door het samenvoegen. - Enabled - Geactiveerd + 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 @@ -1705,24 +2151,44 @@ Wil je de wijzigingen samenvoegen? Alle bestanden - Select Image - Kies afbeelding + Custom icon already exists + Icoon bestaat al - Can't read icon - Kan icoon niet lezen + Confirm Delete + Verwijdering bevestigen - Custom icon already exists - Aangepast icoon bestaat al + Custom icon successfully downloaded + Pictogram is gedownload - Confirm Delete - Verwijdering bevestigen + 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 - 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? + 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 + + unable to seek to content position + niet in staat om naar positie te springen + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + Delen uitgeschakeld - Twofish: 256-bit - Twofish: 256-bit + Import from + Importeren uit - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + Exporteren naar - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Synchroniseren met - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 - aanbevolen) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Het bestaande single-instance vergrendelingsbestand is niet geldig. Een nieuwe instantie wordt gestart. + Key Component + Sleutelcomponent - The lock file could not be created. Single-instance mode disabled. - Het vergrendelingsbestand kon niet worden aangemaakt. Single-instance mode uitgeschakeld. + Key Component Description + Sleutelcomponent beschrijving - Another instance of KeePassXC is already running. - Een andere instantie van KeePassXC is reeds gestart. + Cancel + Annuleren - Fatal error while testing the cryptographic functions. - Fatale fout bij het testen van de cryptografische functies. + Key Component set, click to change or remove + Sleutelcomponent verzameling, klik om te wijzigen of verwijderen - KeePassXC - Error - KeePassXC - Fout + 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,282 +3433,450 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Ongeldig sleutelbestand, er werd een OpenSSH-sleutel verwacht + &Donate + & Doneren - PEM boundary mismatch - PEM-grens komt niet overeen + Report a &bug + Rapporteer een &bug - Base64 decoding failed - Base64-decodering mislukt + 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. - Key file way too small. - Sleutelbestand veel te klein. + &Import + &Importeer - Key file magic header id invalid - Ongeldig magic header-id in sleutelbestand + Copy att&ribute... + Kopieer &kenmerk... - Found zero keys - Geen sleutels gevonden + TOTP... + TOTP... - Failed to read public key. - Lezen publieke sleutel mislukt. + &New database... + &Nieuwe database... - Corrupted key file, reading private key failed - Beschadigd sleutelbestand, lezen persoonlijke sleutel mislukt + Create a new database + Een nieuwe database maken - No private key payload to decrypt - Geen inhoud persoonlijke sleutel om te decoderen + &Merge from database... + & Samenvoegen uit database... - Trying to run KDF without cipher - Probeer KDF uit te voeren zonder versleutelingsalgoritme + Merge from another KDBX database + Samenvoegen uit een andere KDBX database - Passphrase is required to decrypt this key - Wachtwoord(-zin) nodig om deze sleutel te ontcijferen + &New entry + &Nieuw item - Key derivation failed, key file corrupted? - Sleutelafleiding mislukt, beschadigd sleutelbestand? + Add a new entry + Een nieuw item toevoegen - Decryption failed, wrong passphrase? - Decodering mislukt, verkeerd wachtwoord(-zin)? + &Edit entry + &Edit item - Unexpected EOF while reading public key - Onverwacht bestandseinde publieke sleutel + View or edit entry + Bekijk/bewerk item - Unexpected EOF while reading private key - Onverwacht bestandseinde persoonlijke sleutel + &New group + & Nieuwe groep - Can't write public key as it is empty - Kan publieke sleutel niet opslaan, aangezien deze leeg is + Add a new group + Een nieuwe groep toevoegen - Unexpected EOF when writing public key - Onverwacht bestandseinde bij schrijven publieke sleutel + Change master &key... + &Hoofdsleutel veranderen - Can't write private key as it is empty - Kan persoonlijke sleutel niet opslaan, aangezien deze leeg is + &Database settings... + & Database instellingen... - Unexpected EOF when writing private key - Onverwacht bestandseinde bij schrijven persoonlijke sleutel + Copy &password + &Wachtwoord kopiëren - Unsupported key type: %1 - Niet ondersteund sleuteltype: %1 + Perform &Auto-Type + Uitvoeren & Auto-Type - Unknown cipher: %1 - Onbekende versleuteling: %1 + Open &URL + Open & URL - Cipher IV is too short for MD5 kdf - Codering IV is te kort om MD5-sleutel te verkrijgen. + KeePass 1 database... + KeePass 1 database... - Unknown KDF: %1 - Onbekende sleutelafleidings-functie: %1 + Import a KeePass 1 database + Een KeePass 1-database importeren - Unknown key type: %1 - Onbekend sleuteltype: %1 + CSV file... + CSV-bestand... - - - OptionDialog - Dialog - Dialoog + Import a CSV file + Importeren een CSV-bestand - 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 + Show TOTP... + Toon TOTP… - Enable KeePassHTTP server - KeePassHTTP-server activeren + Show TOTP QR Code... + Toon TOTP QR code... - General - Algemeen + Check for Updates... + Controleren op Updates... - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Toon een melding wanneer inloggegevens worden aangevraagd + Share entry + Deel item - 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. + 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. - &Return only best matching entries - Lever alleen de best ove&reenkomende items + Check for updates on startup? + Controleren op updates bij het opstarten? - Re&quest to unlock the database if it is locked - Verzoek om database te ontgrendelen + Would you like KeePassXC to check for updates on startup? + Wil je dat KeePassXC controleert op updates bij het opstarten? - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Lever alleen items van hetzelfde schema (http://, https://, ftp://, …). + You can always check for updates manually from the application menu. + U kunt altijd handmatig controleren op updates vanuit het programmamenu. + + + Merger - &Match URL schemes - &Vergelijk URL sche&ma's + Creating missing %1 [%2] + Creëren van ontbrekende %1 [%2] - Sort matching entries by &username - Sorteer items op $gebruikersnaam + Relocating %1 [%2] + Verhuizen van %1 [%2] - Sort &matching entries by title - Sorteer items op &naam + Overwriting %1 [%2] + Overschrijven van %1 [%2] - R&emove all shared encryption keys from active database - Verwijder alle gedeelde encryptiesleutels uit de actieve database + older entry merged from database "%1" + ouder item samengevoegd uit database '%1' - Re&move all stored permissions from entries in active database - Verwijder alle opgeslagen permissies van items uit de actieve database + Adding backup for older target %1 [%2] + Voeg back-up toe voor ouder doel %1 [%2] - Password Generator - Wachtwoordgenerator + Adding backup for older source %1 [%2] + Voeg back-up toe voor oudere bron %1 [%2] - Advanced - Geavanceerd + Reapplying older target entry on top of newer source %1 [%2] + Ouder doel item is opnieuw toegepast over nieuwer bron item %1 [%2] - Always allow &access to entries - Altijd &toegang verlenen tot items + Reapplying older source entry on top of newer target %1 [%2] + Ouder bron item is opnieuw toegepast over nieuwer doel item %1 [%2] - Always allow &updating entries - Altijd &bewerken toestaan op items + Synchronizing from newer source %1 [%2] + Synchroniseren van nieuwere bron %1 [%2] - Only the selected database has to be connected with a client. - Alleen de geselecteerde database hoeft verbonden te zijn. + Synchronizing from older source %1 [%2] + Synchroniseren van oudere bron %1 [%2] - Searc&h in all opened databases for matching entries - Zoek in alle geopende databases naar overeenkomende items + Deleting child %1 [%2] + Verwijderen van kind %1 [%2] - Automatically creating or updating string fields is not supported. - Het automatisch aanmaken of wijzigen van tekenreeks-velden wordt niet ondersteund. + Deleting orphan %1 [%2] + Verwijderen wees %1 [%2] - &Return advanced string fields which start with "KPH: " - Lever &geavanceerde tekenreeks-velden die met "KPH: " beginnen. + Changed deleted objects + Verwijderde objecten gewijzigd + + + Adding missing icon %1 + Toevoegen van ontbrekend pictogram %1 + + + NewDatabaseWizard - HTTP Port: - HTTP-poort: + Create a new KeePassXC database... + Nieuwe KeePassXC database aanmaken... - Default port: 19455 - Standaard poort: 19455 + Root + Root group + Alles + + + NewDatabaseWizardPage - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC zal deze poort op 127.0.0.1 beluisteren + WizardPage + Wizard pagina - <b>Warning:</b> The following options can be dangerous! - <b>Waarschuwing:</b> De volgende opties kunnen gevaarlijk zijn! + En&cryption Settings + En&cryptie-instellingen - <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> + 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. - Cannot bind to privileged ports - Kan niet koppelen op bevoorrechte poorten + Advanced Settings + Geavanceerde instellingen - Cannot bind to privileged ports below 1024! -Using default port 19455. - Kan niet koppelen naar bevoorrechte poorten onder 1024! -Standaardpoort 19455 wordt gebruikt. + Simple Settings + Eenvoudige instellingen - PasswordGeneratorWidget + NewDatabaseWizardPageEncryption - %p% - %p% + Encryption Settings + Versleuteling instellingen - Password: - Wachtwoord: + 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 - strength - Password strength - sterkte + Database Master Key + Database hoofdsleutel - entropy - entropie + A master key known only to you protects your database. + Een hoofdsleutel die alleen aan jou bekend is beschermt de database. + + + NewDatabaseWizardPageMetaData - Password - Wachtwoord + General Database Information + Algemene database-informatie - Character Types - Tekens + 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 - Upper Case Letters - Hoofdletters + Invalid key file, expecting an OpenSSH key + Ongeldig sleutelbestand, er werd een OpenSSH-sleutel verwacht - Lower Case Letters - Kleine letters + PEM boundary mismatch + PEM-grens komt niet overeen - Numbers - Cijfers + Base64 decoding failed + Base64-decodering mislukt - Special Characters - Speciale tekens + Key file way too small. + Sleutelbestand veel te klein. - Extended ASCII + Key file magic header id invalid + Ongeldig 'magic header id' in sleutelbestand + + + Found zero keys + Geen sleutels gevonden + + + Failed to read public key. + Lezen publieke sleutel mislukt. + + + Corrupted key file, reading private key failed + Beschadigd sleutelbestand, lezen persoonlijke sleutel mislukt + + + No private key payload to decrypt + Geen inhoud persoonlijke sleutel om te decoderen + + + Trying to run KDF without cipher + Probeer KDF uit te voeren zonder versleutelingsalgoritme + + + Passphrase is required to decrypt this key + Wachtwoord(-zin) nodig om deze sleutel te ontcijferen + + + Key derivation failed, key file corrupted? + Sleutelafleiding mislukt, beschadigd sleutelbestand? + + + Decryption failed, wrong passphrase? + Decodering mislukt, verkeerd wachtwoord(-zin)? + + + Unexpected EOF while reading public key + Onverwacht bestandseinde publieke sleutel + + + Unexpected EOF while reading private key + Onverwacht bestandseinde persoonlijke sleutel + + + Can't write public key as it is empty + Kan publieke sleutel niet opslaan, aangezien deze leeg is + + + Unexpected EOF when writing public key + Onverwacht bestandseinde bij schrijven publieke sleutel + + + Can't write private key as it is empty + Kan persoonlijke sleutel niet opslaan, aangezien deze leeg is + + + Unexpected EOF when writing private key + Onverwacht bestandseinde bij schrijven persoonlijke sleutel + + + Unsupported key type: %1 + Niet ondersteund sleuteltype: %1 + + + Unknown cipher: %1 + Onbekende versleuteling: %1 + + + Cipher IV is too short for MD5 kdf + Codering IV is te kort om MD5-sleutel te verkrijgen. + + + Unknown KDF: %1 + Onbekende sleutelafleidings-functie: %1 + + + Unknown key type: %1 + Onbekend sleuteltype: %1 + + + + PasswordEditWidget + + Enter password: + Wachtwoord invoeren: + + + Confirm password: + Bevestig wachtwoord: + + + Password + Wachtwoord + + + <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> + + + Passwords do not match. + Wachtwoorden komen niet overeen. + + + Generate master password + Genereer een hoofdwachtwoord + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + Wachtwoord: + + + strength + Password strength + sterkte + + + entropy + entropie + + + Password + Wachtwoord + + + Character Types + Tekens + + + Upper Case Letters + Hoofdletters + + + Lower Case Letters + Kleine letters + + + Numbers + Cijfers + + + Special Characters + Speciale tekens + + + Extended ASCII Uitgebreide ASCII 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: @@ -3187,473 +3891,1095 @@ Standaardpoort 19455 wordt gebruikt. Woordenlijst: - Word Count: + Word Separator: + Scheidingsteken: + + + Copy + Kopiëren + + + Accept + Accepteren + + + Close + Sluiten + + + Entropy: %1 bit + Entropie: %1 bit + + + Password Quality: %1 + Wachtwoordkwaliteit: %1 + + + Poor + Password quality + Slecht + + + Weak + Password quality + Zwak + + + Good + Password quality + Goed + + + Excellent + 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: - Word Separator: - Scheidingsteken: + 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 + + Database not opened + Database niet geopend + + + Database hash not available + Database controlecijfer is niet beschikbaar + + + Client public key not received + Openbare sleutel niet ontvangen + + + Cannot decrypt message + Kan het bericht niet ontcijferen + + + Action cancelled or denied + Actie afgebroken of geweigerd + + + KeePassXC association failed, try again + KeePassXC-koppeling is mislukt, probeer het opnieuw + + + Encryption key is not recognized + De versleutelingssleutel is niet herkend + + + Incorrect action + Onjuiste actie + + + Empty message received + Leeg bericht ontvangen + + + No URL provided + Geen URL opgegeven + + + No logins found + Geen aanmeldingen gevonden + + + Unknown error + Onbekende fout + + + Add a new entry to a database. + Nieuw item toevoegen aan een database. + + + Path of the database. + Pad naar de database. + + + Key file of the database. + Sleutelbestand van de database. + + + path + pad + + + Username for the entry. + Gebruikersnaam voor het item. + + + username + gebruikersnaam + + + URL for the entry. + URL voor het item. + + + URL + URL + + + Prompt for the entry's password. + Vraag voor het item's wachtwoord. + + + Generate a password for the entry. + Genereer een wachtwoord voor het item. + + + Length for the generated password. + Lengte van het gegenereerde wachtwoord. + + + length + lengte + + + Path of the entry to add. + Pad van toe te voegen item. + + + Copy an entry's password to the clipboard. + Item's wachtwoord naar het klembord kopiëren. + + + Path of the entry to clip. + clip = copy to clipboard + Pad van het te kopiëren item. + + + Timeout in seconds before clearing the clipboard. + Wachttijd (sec) voor het leegmaken klembord. + + + Edit an entry. + Een item bewerken. + + + Title for the entry. + Naam voor deze entry. + + + title + naam + + + Path of the entry to edit. + Pad van het te wijzigen item. + + + Estimate the entropy of a password. + De entropie van een wachtwoord inschatten. + + + Password for which to estimate the entropy. + Wachtwoord waarvoor de entropie geschat moet worden. + + + Perform advanced analysis on the password. + Geavanceerde analyse op het wachtwoord uitvoeren. + + + Extract and print the content of a database. + De inhoud van de database uitpakken en afdrukken. + + + Path of the database to extract. + Pad naar de database. + + + Insert password to unlock %1: + Geef het wachtwoord voor %1: + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + WAARSCHUWING: Je gebruikt een verouderd sleutelbestandsformaat dat in de toekomst mogelijk niet ondersteund zal worden. + +Overweeg a.u.b. een nieuw sleutelbestand te genereren. + + + + +Available commands: + + + +Beschikbare opdrachten: +: + + + Name of the command to execute. + Naam van het uit te voeren commando. + + + List database entries. + Lijst van database-items. + + + Path of the group to list. Default is / + Pad naar de groepslijst. Standaard is / + + + Find entries quickly. + Items snel zoeken. + + + Search term. + Zoekterm. + + + Merge two databases. + Twee databases samenvoegen. + + + Path of the database to merge into. + Pad naar de doeldatabase. + + + Path of the database to merge from. + Pad naar de samen te voegen brondatabase. + + + Use the same credentials for both database files. + Gebruik dezelfde gegevens voor beide gegevensbestanden. + + + Key file of the database to merge from. + Sleutelbestand van gegevensbestand om samen te voegen. + + + Show an entry's information. + Toon de informatie die hoort bij een item. + + + 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 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 + kenmerk + + + Name of the entry to show. + Naam van het item dat getoond moet worden. + + + NULL device + NULL-apparaat + + + error reading from device + fout bij het lezen van apparaat + + + malformed string + beschadigde tekst + + + missing closing quote + afsluitend aanhalingsteken ontbreekt + + + Group + Groep + + + Title + Naam + + + Username + Gebruikersnaam + + + Password + Wachtwoord + + + Notes + Notities + + + Last Modified + Laatst bewerkt + + + Created + Aangemaakt + + + Browser Integration + Browserintegratie + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey[%1] challenge/response - slot %2 - %3 + + + Press + Druk + + + Passive + Passief + + + SSH Agent + SSH-agent + + + Generate a new random diceware passphrase. + Genereer een nieuwe willekeurige Diceware wachtwoordzin + + + Word count for the diceware passphrase. + Aantal woorden voor de Diceware wachtwoordzin. + + + Wordlist for the diceware generator. +[Default: EFF English] + Woordenlijst voor de Diceware-generator. +[Standaard: EFF Engels] + + + Generate a new random password. + Genereer een willekeurig wachtwoord + + + Invalid value for password length %1. + Ongeldige waarde voor wachtwoordlengte %1. + + + Could not create entry with path %1. + Kan geen item maken met pad %1. + + + Enter password for new entry: + Voer wachtwoord in voor nieuw item: + + + Writing the database failed %1. + Het schrijven van de database is mislukt %1. + + + Successfully added entry %1. + Item %1 toegevoegd. + + + 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 - Generate - Genereren + Type: Repeated + Type: Herhaald - Copy - Kopiëren + Type: Sequence + Type: Reeks - Accept - Accepteren + Type: Spatial + Type: Ruimtelijk - Close - Sluiten + Type: Date + Type: Datum - Apply - Toepassen + Type: Bruteforce(Rep) + Type: bruut geweld (herhalend) - Entropy: %1 bit - Entropie: %1 bit + Type: Dictionary(Rep) + Type: woordenboek (herhalend) - Password Quality: %1 - Wachtwoordkwaliteit: %1 + Type: Dict+Leet(Rep) + Type: woordenboek+Leet (herhalend) - Poor - Password quality - Slecht + Type: User Words(Rep) + Type: Gebruikerwoorden (herhalend) - Weak - Password quality - Zwak + Type: User+Leet(Rep) + Type: Gebruikerwoorden + Leet (herhalend) - Good - Password quality - Goed + Type: Repeated(Rep) + Type: herhaald (herhalend) - Excellent - Password quality - Uitstekend + Type: Sequence(Rep) + Type: Reeks (herhalend) - - - QObject - Database not opened - Database niet geopend + Type: Spatial(Rep) + Type: Ruimtelijk (herhalend) - Database hash not available - Database controlecijfer is niet beschikbaar + Type: Date(Rep) + Type: Datum (herhalend) - Client public key not received - Openbare sleutel niet ontvangen + Type: Unknown%1 + Type: Onbekend %1 - Cannot decrypt message - Kan het bericht niet ontcijferen + Entropy %1 (%2) + Entropie %1 (2 %) - Timeout or cannot connect to KeePassXC - Timeout of geen verbinding met KeePassXC + *** Password length (%1) != sum of length of parts (%2) *** + *** Wachtwoordlengte (%1) ! = som van de lengte van de onderdelen (%2) *** - Action cancelled or denied - Actie afgebroken of geweigerd + Failed to load key file %1: %2 + Er ging iets fout bij het laden van sleutelbestand %1: %2 - 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? + File %1 does not exist. + Bestand %1 bestaat niet. - KeePassXC association failed, try again - KeePassXC-koppeling is mislukt, probeer het opnieuw + Unable to open file %1. + Kan bestand %1 niet openen. - Key change was not successful - Sleuteluitwisseling is mislukt + Error while reading the database: +%1 + Fout bij het lezen van de database: +%1 - Encryption key is not recognized - De versleutelingssleutel is niet herkend + Error while parsing the database: +%1 + Fout bij het ontleden van de database: +%1 - No saved databases found - Geen opgeslagen databases gevonden + Length of the generated password + Lengte van het gegenereerde wachtwoord - Incorrect action - Onjuiste actie + Use lowercase characters + Gebruik kleine letters - Empty message received - Leeg bericht ontvangen + Use uppercase characters + Gebruik hoofdletters - No URL provided - Geen URL opgegeven + Use numbers. + Getallen gebruiken. - No logins found - Geen aanmeldingen gevonden + Use special characters + Speciale tekens gebruiken - Unknown error - Onbekende fout + Use extended ASCII + Uitgebreide ASCII tekens gebruikt - Add a new entry to a database. - Nieuw item toevoegen aan een database. + Exclude character set + Niet te gebruiken karakterset - Path of the database. - Pad naar de database. + chars + karakters - Key file of the database. - Sleutelbestand van de database. + Exclude similar looking characters + Op elkaar lijkende tekens niet gebruiken - path - pad + Include characters from every selected group + Neem tekens uit iedere geslecteerde groep - Username for the entry. - Gebruikersnaam voor het item. + Recursively list the elements of the group. + Recursief de elementen van de groep opsommen - username - gebruikersnaam + Cannot find group %1. + Kan groep %1 niet vinden. - URL for the entry. - URL voor het item. + Error reading merge file: +%1 + Er ging iets fout bij het lezen van het samenvoegbestand: +%1 - URL - URL + Unable to save database to file : %1 + Kan de database niet bewaren naar bestand: %1 - Prompt for the entry's password. - Vraag voor het item's wachtwoord. + Unable to save database to file: %1 + Kan de database niet bewaren naar bestand: %1 - Generate a password for the entry. - Genereer een wachtwoord voor het item. + Successfully recycled entry %1. + Item %1 is hergebruikt. - Length for the generated password. - Lengte van het gegenereerde wachtwoord. + Successfully deleted entry %1. + Item %1 is verwijderd. - length - lengte + Show the entry's current TOTP. + Toon de huidige TOTP van het item. - Path of the entry to add. - Pad van toe te voegen item. + ERROR: unknown attribute %1. + FOUT: onbekend kenmerk %1. - Copy an entry's password to the clipboard. - Gebruikerswachtwoord naar het klembord kopiëren. + No program defined for clipboard manipulation + Geen programma ingesteld voor klembord manipulatie - Path of the entry to clip. - clip = copy to clipboard - Pad van het te kopiëren item. + Unable to start program %1 + Kon programma niet starten %1 - Timeout in seconds before clearing the clipboard. - Wachttijd (sec) voor het leegmaken klembord. + file empty + leeg bestand - Edit an entry. - Een item bewerken. + %1: (row, col) %2,%3 + %1: (rij, col) 2%,3% - Title for the entry. - Naam voor deze invoer. + AES: 256-bit + AES: 256-bits - title - naam + Twofish: 256-bit + Twofish: 256-bits - Path of the entry to edit. - Pad van het te wijzigen item. + ChaCha20: 256-bit + ChaCha20: 256-bits - Estimate the entropy of a password. - De entropie van een wachtwoord inschatten. + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – aanbevolen) - Password for which to estimate the entropy. - Wachtwoord waarvoor de entropie geschat moet worden. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Perform advanced analysis on the password. - Geavanceerde analyse op het wachtwoord uitvoeren. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Extract and print the content of a database. - De inhoud van de database uitpakken en afdrukken. + Invalid Settings + TOTP + Ongeldige instellingen - Path of the database to extract. - Pad naar de database. + Invalid Key + TOTP + Ongeldige sleutel - Insert password to unlock %1: - Geef het wachtwoord voor %1: + Message encryption failed. + Berichtcodering is mislukt. - Failed to load key file %1 : %2 - Laden sleutelbestand mislukt %1: %2 + No groups found + Geen groepen gevonden - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - WAARSCHUWING: Je gebruikt een verouderd sleutelbestandsformaat dat in de toekomst mogelijk niet ondersteund zal worden. - -Overweeg a.u.b. een nieuw sleutelbestand te genereren. + Create a new database. + Nieuwe database aanmaken - - -Available commands: - - - -Beschikbare opdrachten: -: + File %1 already exists. + Bestand %1 bestaat al. - Name of the command to execute. - Naam van het uit te voeren commando. + Loading the key file failed + Er ging iets fout bij het laden van het sleutelbestand - List database entries. - Lijst van database-items. + No key is set. Aborting database creation. + Geen sleutel ingesteld. Aanmaken van de database is gestopt. - Path of the group to list. Default is / - Pad naar de groepslijst. Standaard is / + Failed to save the database: %1. + Opslaan van de database is mislukt: %1 - Find entries quickly. - Items snel zoeken. + Successfully created new database. + Nieuwe database is gemaakt - Search term. - Zoekterm. + 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): - Merge two databases. - Twee databases samenvoegen. + Creating KeyFile %1 failed: %2 + Creëren van sleutelbestand %1 is mislukt: %2 - Path of the database to merge into. - Pad naar de doeldatabase. + Loading KeyFile %1 failed: %2 + Laden van sleutelbestand %1 is mislukt: %2 - Path of the database to merge from. - Pad naar de samen te voegen brondatabase. + Remove an entry from the database. + Een item uit de database verwijderen. - Use the same credentials for both database files. - Gebruik dezelfde gegevens voor beide gegevensbestanden. + Path of the entry to remove. + Pad van het te verwijderen item. - Key file of the database to merge from. - Sleutelbestand van gegevensbestand om samen te voegen. + Existing single-instance lock file is invalid. Launching new instance. + Het bestaande single-instance vergrendelingsbestand is niet geldig. Een nieuwe instantie wordt gestart. - Show an entry's information. - Toon de informatie die hoort bij een item. + The lock file could not be created. Single-instance mode disabled. + Het vergrendelingsbestand kon niet worden aangemaakt. Single-instance mode uitgeschakeld. - 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. + KeePassXC - cross-platform password manager + KeepassXC - multi-platform wachtwoordbeheerder - attribute - kenmerk + filenames of the password databases to open (*.kdbx) + bestandsnamen van de te openen wachtwoorddatabases (*.kdbx) - Name of the entry to show. - Naam van het item dat getoond moet worden. + path to a custom config file + pad naar een configuratiebestand - NULL device - NULL-apparaat + key file of the database + sleutelbestand van de database - error reading from device - fout bij het lezen van apparaat + read password of the database from stdin + lees wachtwoord van de database uit stdin - file empty ! - - leeg bestand! - + Parent window handle + Parent window handle - malformed string - beschadigde tekst + Another instance of KeePassXC is already running. + Een andere instantie van KeePassXC is reeds gestart. - missing closing quote - afsluitend aanhalingsteken ontbreekt + Fatal error while testing the cryptographic functions. + Fatale fout bij het testen van de cryptografische functies. - Group - Groep + KeePassXC - Error + KeePassXC - Fout - Title - Naam + Database password: + Databasewachtwoord: - Username - Gebruikersnaam + Cannot create new group + + + + QtIOCompressor - Password - Wachtwoord + Internal zlib error when compressing: + Interne fout in zlib bij inpakken: - Notes - Notities + Error writing to underlying device: + Fout bij schrijven naar onderliggend apparaat: - Last Modified - Laatst bewerkt + Error opening underlying device: + Fout bij openen van onderliggend apparaat: - Created - Aangemaakt + Error reading data from underlying device: + Fout bij lezen van gegevens van onderliggend apparaat: - Legacy Browser Integration - Verouderde browserintegratie + Internal zlib error when decompressing: + Interne fout in zlib bij uitpakken: + + + QtIOCompressor::open - Browser Integration - Browserintegratie + The gzip format not supported in this version of zlib. + Gzip wordt niet ondersteund in deze versie van zlib. - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] Test - Resultaat - Slot %2 - %3 + Internal zlib error: + Interne fout in zlib: + + + SSHAgent - Press - Druk + Agent connection failed. + Agent verbinding mislukt. - Passive - Passief + Agent protocol error. + Agent-protocolfout. - SSH Agent - SSH-agent + No agent running, cannot add identity. + Geen agent wordt uitgevoerd, kan geen identiteit toevoegen. - Generate a new random diceware passphrase. - Genereer een nieuwe willekeurige Diceware wachtwoordzin + No agent running, cannot remove identity. + Geen agent wordt uitgevoerd, niet het verwijderen van identiteit. - Word count for the diceware passphrase. - Aantal woorden voor de Diceware wachtwoordzin. + Agent refused this identity. Possible reasons include: + Agent weigerde deze identiteit. Mogelijke redenen zijn onder andere: - count - aantal + The key has already been added. + De sleutel was al toegevoegd. - Wordlist for the diceware generator. -[Default: EFF English] - Woordenlijst voor de Diceware-generator. -[Standaard: EFF Engels] + Restricted lifetime is not supported by the agent (check options). + Beperkte levensduur wordt niet ondersteund door de agent (selectievakje opties). - Generate a new random password. - Genereer een willekeurig wachtwoord + A confirmation request is not supported by the agent (check options). + Een aanvraag voor transactiebevestiging wordt niet ondersteund door de agent (selectievakje opties). + + + SearchHelpWidget - Length of the generated password. - Lengte van het gegenereerde wachtwoord. + Search Help + Zoek hulp - Use lowercase characters in the generated password. - Gebruik kleine letters in het gegenereerde wachtwoord + Search terms are as follows: [modifiers][field:]["]term["] + Zoektermen zijn als volgt: [parameters][veld:]["]term["] - Use uppercase characters in the generated password. - Gebruik hoofdletters in het gegenereerde wachtwoord + Every search term must match (ie, logical AND) + Elke zoekterm moet overeenkomen (een logisch EN) - Use numbers in the generated password. - Gebruik cijfers in het gegenereerde wachtwoord + Modifiers + Modifiers - Use special characters in the generated password. - Gebruik speciale karakters in het gegenereerde wachtwoord. + exclude term from results + zoekterm uit resultaten weglaten - Use extended ASCII in the generated password. - Gebruik uitgebreide ASCII tekens in het gegenereerde wachtwoord. + match term exactly + zoekterm moet exact overeenkomen - - - QtIOCompressor - Internal zlib error when compressing: - Interne fout in zlib bij inpakken: + use regex in term + regex gebruiken in zoekopdracht - Error writing to underlying device: - Fout bij schrijven naar onderliggend apparaat: + Fields + Velden - Error opening underlying device: - Fout bij openen van onderliggend apparaat: + Term Wildcards + Zoekterm jokertekens - Error reading data from underlying device: - Fout bij lezen van gegevens van onderliggend apparaat: + match anything + elke overeenkomst - Internal zlib error when decompressing: - Interne fout in zlib bij uitpakken: + match one + één overeenkomst - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Gzip wordt niet ondersteund in deze versie van zlib. + logical OR + logische OF - Internal zlib error: - Interne fout in zlib: + Examples + Voorbeelden SearchWidget - - Search... - Zoeken… - 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 - - 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. + + Import + Importeren - KeePassXC: No keys found - KeePassXC: Geen sleutels gevonden + Export + Exporteren - No shared encryption-keys found in KeePassHttp Settings. - Geen gedeelde encryptiesleutels gevonden in de KeePassHttp-instellingen. + Imported certificates + Geïmporteerde certificaten - KeePassXC: Settings not available! - KeePassXC: Instellingen niet beschikbaar! + Trust + Vertrouwen - The active database does not contain an entry of KeePassHttp Settings. - De actieve database bevat geen KeePassHttp-instellingen. + Ask + Vraag - Removing stored permissions... - Opgeslagen permissies verwijderen… + Untrust + Niet vertrouwen - Abort - Afbreken + Remove + Verwijderen - KeePassXC: Removed permissions - KeePassXC: Permissies verwijderd + Path + Pad - - Successfully removed permissions from %n entries. - Permissies verwijderd uit %n item.Permissies verwijderd uit %n items. + + Status + Status - KeePassXC: No entry with permissions found! - KeePassXC: Geen item met permissies gevonden! + Fingerprint + Vingerafdruk - The active database does not contain an entry with permissions. - De actieve database bevat geen items met permissies. + Certificate + Certificaat - - - SettingsWidget - Application Settings - Programma-instellingen + Trusted + Vertrouwd - General - Algemeen + Untrusted + Niet-vertrouwd - Security - Beveiliging + Unknown + Onbekend - Access error for config file %1 - Geen toegang tot configuratiebestand %1 + key.share + Filetype for KeeShare key + Key.share - - - SettingsWidgetGeneral - Basic Settings - Basisinstellingen + KeeShare key file + KeeShare sleutelbestand - Start only a single instance of KeePassXC - Hoogstens een enkele instantie van KeePassXC starten + All files + Alle bestanden - Remember last databases - Laatstgebruikte databases onthouden + Select path + Pad selecteren - Remember last key files and security dongles - Laatstgebruikte sleutelbestanden en beveiligingsdongles onthouden + Exporting changed certificate + Gewijzigd certificaat exporteren - Load previous databases on startup - Laatstgebruikte databases openen bij het opstarten + 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? - Automatically save on exit - Automatisch opslaan bij afsluiten + Signer: + + + + ShareObserver - Automatically save after every change - Automatisch opslaan na iedere wijziging + Import from container without signature + Importeren vanuit de container zonder handtekening - Automatically reload the database when modified externally - Database automatisch opnieuw laden als deze van buitenaf is gewijzigd + 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? - Minimize when copying to clipboard - Minimaliseer bij kopiëren naar klembord + Import from container with certificate + Importeren uit de container met certificaat - Minimize window at application startup - Scherm minimaliseren bij het opstarten + Not this time + Deze keer niet - Use group icon on entry creation - Gebruik groepsicoon voor nieuwe items + Never + Nooit - 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) + Always + Altijd - Hide the Details view - Detailweergave verbergen + Just this time + Alleen deze keer - Show a system tray icon - Icoon in het systeemvak weergeven + Import from %1 failed (%2) + Importeren van %1 is mislukt (%2) - Hide window to system tray when minimized - Minimaliseren naar systeemvak + Import from %1 successful (%2) + Importeren van %1 is gelukt (%2) - Hide window to system tray instead of app exit - Sluiten naar systeemvak in plaats van volledig afsluiten + Imported from %1 + Geïmporteerd van %1 - Dark system tray icon - Donker systeemvak-icoon + Signed share container are not supported - import prevented + Ondertekende deel-containers worden niet ondersteund - import is voorkomen - Language - Taal + File is not readable + Bestand is niet leesbaar - Auto-Type - Auto-type + Invalid sharing container + Ongeldige deel-container - Use entry title to match windows for global Auto-Type - Gebruik naam van item als vensternaam voor Auto-type + Untrusted import prevented + Niet vertrouwde import voorkomen - Use entry URL to match windows for global Auto-Type - Laat URL overeenkomen met item bij Auto-type + Successful signed import + Ondertekende import is voltooid - Always ask before performing Auto-Type - Altijd vragen voor toepassen Auto-type + Unexpected error + Onverwachte fout - Global Auto-Type shortcut - Globale sneltoets voor Auto-type + Unsigned share container are not supported - import prevented + Niet ondertekende deel-container worden niet ondersteund - import is voorkomen - Auto-Type delay - Auto-typevertraging + Successful unsigned import + Niet ondertekende import voltooid - ms - Milliseconds - ms + File does not exist + Bestand bestaat niet - Startup - Opstarten + Unknown share container type + Type van deel-container is onbekend - File Management - Bestandsbeheer + Overwriting signed share container is not supported - export prevented + Het overschrijven van een ondertekende deel-container wordt niet ondersteund - export is voorkomen - Safely save database files (may be incompatible with Dropbox, etc) - Veilig opslaan van databasebestanden (mogelijk incompatibel met Dropbox, etc.) + Could not write export container (%1) + Kan geen export container schrijven (%1) - Backup database file before saving - Back-up databasebestand voor het opslaan + Overwriting unsigned share container is not supported - export prevented + Overschrijven van een niet-ondertekende deel-container wordt niet ondersteund - export is voorkomen - Entry Management - Itembeheer + Could not write export container + Kan niet schrijven naar export container - General - Algemeen + Unexpected export error occurred + Onverwachte fout bij het exporteren - - - SettingsWidgetSecurity - Timeouts - Time-outs + Export to %1 failed (%2) + Exporteren naar %1 is mislukt (%2) - Clear clipboard after - Klembord leegmaken na + Export to %1 successful (%2) + Exporteren naar %1 gelukt (%2) - sec - Seconds - sec + Export to %1 + Exporteer naar %1 - Lock databases after inactivity of - Databases vergrendelen na inactiviteit van + 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 ?}  - Convenience - Gemak + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Databases vergrendelen als de gebruikerssessie wordt vergrendeld of bij het sluiten van de deksel + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Databases vergrendelen bij het minimaliseren van het venster + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Geen herhaling van wachtwoord vragen als deze zichtbaar is + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Wachtwoorden standaard weergeven + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Wachtwoorden verbergen in het informatiepaneel + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Notities standaard verbergen + Timed Password + Tijdgebonden wachtwoord - Privacy - Privacy + 000000 + 000000 + + + Copy + Kopiëren + + + Expires in <b>%n</b> second(s) + Verloopt in <b>%n</b> seconde(n)Verloopt in <b>%n</b> seconde(n) + + + + TotpExportSettingsDialog + + Copy + Kopiëren - Use Google as fallback for downloading website icons - Gebruik Google om eventueel website-iconen te downloaden + 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. - Re-lock previously locked database after performing Auto-Type - Vergrendelde database na Auto-type weer vergrendelen. + There was an error creating the QR code. + Er was een fout bij het maken van de QR-code. + + + Closing in %1 seconds. + Sluiten in %1 seconden. - 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 + sec + Seconds + sec + + + Code size: + Grootte van de code: 6 digits 6 cijfers - Code size: - Grootte van de code: + 7 digits + 7 cijfers - sec - Seconds - sec + 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. + + + 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. - - - UnlockDatabaseWidget - Unlock database - Database ontgrendelen + 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 - - Remove an entry from the database. - Een item uit de database verwijderen. - - - Path of the database. - Pad naar de database. - - - Path of the entry to remove. - Pad van het te verwijderen item. - + YubiKeyEditWidget - KeePassXC - cross-platform password manager - KeepassXC - multi-platform wachtwoordbeheerder - - - filenames of the password databases to open (*.kdbx) - bestandsnamen van de te openen wachtwoorddatabases (*.kdbx) + Refresh + Vernieuwen - path to a custom config file - pad naar een configuratiebestand + YubiKey Challenge-Response + YubiKey challenge/response: - key file of the database - sleutelbestand van de 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> + <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> - read password of the database from stdin - lees wachtwoord van de database uit stdin + No YubiKey detected, please ensure it's plugged in. + Geen YubiKey gedetecteerd, plug deze a.u.b. in. - 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 49a1e633b2..ed32eff415 100644 --- a/share/translations/keepassx_pl.ts +++ b/share/translations/keepassx_pl.ts @@ -31,118 +31,328 @@ 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 - + Project Maintainers: + Opiekunowie projektu: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Włącz agenta SSH (wymaga ponownego uruchomienia) - Revision: %1 - Rewizja: %1 + Use OpenSSH for Windows instead of Pageant + Użyj OpenSSH dla Windows zamiast Pageanta + + + ApplicationSettingsWidget - Distribution: %1 - Dystrybucja: %1 + Application Settings + Ustawienia aplikacji - Libraries: - Biblioteki: + General + Ogólne - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - System operacyjny: %1 -Architektura CPU: %2 -Jądro: %3 %4 + Security + Bezpieczeństwo - Enabled extensions: - Włączone rozszerzenia: + Access error for config file %1 + Błąd dostępu pliku konfiguracyjnego %1 - Project Maintainers: - Opiekunowie projektu: + Icon only + Tylko ikona - 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. + Text only + Tylko tekst - Build Type: %1 - - Typ kompilacji: %1 - + Text beside icon + Tekst obok ikony + + + Text under icon + Tekst pod ikoną + + + Follow style + Utrzymaj styl - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - Potwierdź dostęp KeePassXC HTTP + Basic Settings + Ustawienia podstawowe - Remember this decision - Zapamiętaj tę decyzję + Startup + Uruchamianie - Allow - Zezwól + Start only a single instance of KeePassXC + Uruchom tylko jedną instancję KeePassXC - Deny - Odmów + Remember last databases + Pamiętaj ostatnią bazę danych - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Włącz agenta SSH (wymaga ponownego uruchomienia) + 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 @@ -362,20 +585,41 @@ Wybierz, czy chcesz zezwolić na dostęp. <b>Ostrzeżenie:</b> Poniższe opcje mogą być niebezpieczne! - Executable Files (*.exe);;All Files (*.*) - Pliki wykonywalne (*.exe);;Wszystkie pliki (*.*) + Select custom proxy location + Wybierz niestandardową lokalizację proxy + + + &Tor Browser + &Tor Browser - Executable Files (*) - Pliki wykonywalne (*) + <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: - Select custom proxy location - Wybierz niestandardową lokalizację proxy + 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 + - 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. + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3 + @@ -417,153 +661,54 @@ Czy chcesz go nadpisać? Czy chcesz uaktualnić informację w %1 - %2? - KeePassXC: Database locked! - KeePassXC: Baza danych zablokowana! + Abort + Zaniechaj - 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. + Converting attributes to custom data… + Konwertowanie atrybutów na niestandardowe dane... - KeePassXC: Settings not available! - KeePassXC: Ustawienia niedostępne! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Przekonwertowane atrybuty KeePassHTTP - 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 + 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. - - - 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. - - - - ChangeMasterKeyWidget - - Password - Hasło - - - Enter password: - Wprowadź hasło: - - - Repeat password: - Wprowadź ponownie hasło: - - - &Key file - &Plik klucza - - - 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 + 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. - Do you really want to use an empty string as password? - Czy na pewno chcesz używać pustego ciągu jako hasła? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nie znaleziono wpisu z atrybutami KeePassHTTP! - Different passwords supplied. - Podano różne hasła. + The active database does not contain an entry with KeePassHTTP attributes. + Aktywna baza danych nie zawiera wpisu z atrybutami KeePassHTTP. - Failed to set %1 as the Key file: -%2 - Błąd w ustawieniu %1 jako plik klucza: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: Wykryto ustawienia przestarzałej integracji z przeglądarką - Legacy key file format - Przestarzały format pliku klucza + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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: + Oryginalne dane: - Error(s) detected in CSV file ! - Wykryto błąd lub błędy w pliku CSV ! + Error + Błąd - more messages skipped] - więcej komunikatów pominięto] + Empty fieldname %1 + Pusta nazwa pola %1 - Error - Błąd + column %1 + kolumna %1 - CSV import: writer has errors: - - Import CSV: zapisywanie z błędami: - + Error(s) detected in CSV file! + Wykryto błąd lub błędy w pliku CSV! - - - CsvImportWizard - - Error - Błąd + + [%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] - Unable to calculate master key - Nie mogę wyliczyć głównego klucza + CSV import: writer has errors: +%1 + Import CSV: zapisywanie z błędami: +%1 CsvParserModel - %n byte(s), - %n bajt, %n bajty, %n bajtów, %n bajt, + %n column(s) + %n kolumna%n kolumny%n kolumn%n kolumn + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n rząd, %n rzędy, %n rzędów, %n rząd, + %n byte(s) + %n bajt%n bajty%n bajtów%n bajtów - %n column(s) - %n kolumna%n kolumny%n kolumn%n kolumna + %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,153 +936,329 @@ Proszę rozważyć wygenerowanie nowego pliku klucza. Select key file - Wybierz plik z kluczem + Wybierz plik klucza - - - DatabaseRepairWidget - Repair database - Napraw bazę danych + TouchID for quick unlock + TouchID do szybkiego odblokowania - Error - Błąd + Unable to open the database: +%1 + Nie można otworzyć bazy danych: +%1 - Can't open key file - Nie mogę otworzyć pliku z kluczem + Can't open key file: +%1 + Nie można otworzyć pliku klucza: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Nie można otworzyć bazy danych. + Passwords + Hasła + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Pomyślnie otworzono bazę danych. Nic do zrobienia. + Advanced Settings + Ustawienia zaawansowane - Success - Sukces + General + Ogólne - The database has been successfully repaired -You can now save it. - Baza danych została naprawiona -Możesz teraz ją już zapisać. + Security + Bezpieczeństwo - Unable to repair the database. - Nie mogę naprawić bazy danych. + Master Key + Klucz główny - - - DatabaseSettingsWidget - General - Ogólne + Encryption Settings + Ustawienia szyfrowania - Encryption - Szyfrowanie + Browser Integration + Integracja z przeglądarką + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Liczba rund zbyt duża + KeePassXC-Browser settings + Ustawienia KeePassXC-Browser - 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)! + &Disconnect all browsers + &Odłącz wszystkie przeglądarki - Understood, keep number - Zrozumiano, zachowaj numer + Forg&et all site-specific settings on entries + Za&pomnij wszystkie ustawienia witryn dla wpisów - Cancel - Anuluj + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Przenieś atrybuty KeePassHTTP do &niestandardowych danych KeePassXC-Browser - Number of rounds too low - Key transformation rounds - Liczba rund zbyt mała + Stored keys + Przechowywane klucze - 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! + Remove + Usuń - KDF unchanged - KDF niezmieniona + Delete the selected key? + Usunąć wybrany klucz? - 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 + 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. - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Algorytm szyfrowania: + Key + Klucz - AES: 256 Bit (default) - AES: 256-bitowy (domyślny) + Value + Wartość - Twofish: 256 Bit - Twofish: 256-bitowy + Enable Browser Integration to access these settings. + Włącz integrację z przeglądarką, aby uzyskać dostęp do tych ustawień. - Key Derivation Function: - Funkcja derywacji klucza: + Disconnect all browsers + Odłącz wszystkie przeglądarki - Transform rounds: - Liczba rund szyfrowania: + 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. - Benchmark 1-second delay - Przetestuj 1-sekundowe opóźnienie + KeePassXC: No keys found + KeePassXC: Nie znaleziono kluczy - Memory Usage: - Zużycie pamięci: + No shared encryption keys found in KeePassXC settings. + Nie znaleziono współdzielonych kluczy szyfrujących w ustawieniach KeePassXC. - Parallelism: - Paralelizm: + 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. - - - DatabaseSettingsWidgetGeneral - Database Meta Data - Metadane bazy danych + Forget all site-specific settings on entries + Zapomnij wszystkie ustawienia witryn dla wpisów - Database name: - Nazwa bazy danych: + 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 + + + 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. + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Algorytm szyfrowania: + + + AES: 256 Bit (default) + AES: 256-bitowy (domyślny) + + + Twofish: 256 Bit + Twofish: 256-bitowy + + + Key Derivation Function: + Funkcja derywacji klucza: + + + Transform rounds: + Liczba rund szyfrowania: + + + Benchmark 1-second delay + Przetestuj 1-sekundowe opóźnienie + + + Memory Usage: + Zużycie pamięci: + + + 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 + + Database Meta Data + Metadane bazy danych + + + Database name: + Nazwa bazy danych: Database description: @@ -952,135 +1298,157 @@ 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 - KeePass 2 Database - Baza danych KeePass 2 + Breadcrumb + Nawigacja okruszkowa - All files - Wszystkie pliki + Type + Typ - Open database - Otwieranie bazy danych + Path + Ścieżka - File not found! - Nie znaleziono pliku! + Last Signer + Ostatni podpisujący - Unable to open the database. - Nie można otworzyć bazy danych. + Certificates + Certyfikaty - File opened in read only mode. - Plik otwarty w trybie tylko do odczytu. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Otwieranie pliku CSV + Add additional protection... + Dodaj dodatkową ochronę... - CSV file - plik CSV + No encryption key added + Nie dodano klucza szyfrowania - All files (*) - Wszystkie pliki (*) + You must add at least one encryption key to secure your database! + Musisz dodać co najmniej jeden klucz szyfrowania, aby zabezpieczyć bazę danych! - Merge database - Połączenie baz danych + No password set + Brak hasła - Open KeePass 1 database - Otwieranie bazy danych KeePass 1 + 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? - KeePass 1 database - Baza danych KeePass 1 + Unknown error + Nieznany błąd - Close? - Zamknąć? + Failed to change master key + Nie udało się zmienić klucza głównego + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" jest w trybie edytowania. -Odrzucić zmiany i zamknąć? + Database Name: + Nazwa bazy danych: - Save changes? - Zapisać zmiany? + Description: + Opis: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" został zmieniony. -Zapisać zmiany? + KeePass 2 Database + Baza danych KeePass 2 - Writing the database failed. - Błąd w zapisywaniu bazy danych. + All files + Wszystkie pliki - Passwords - Hasła + Open database + Otwórz bazę danych - Save database as - Zapisz bazę danych jako + CSV file + plik CSV + + + Merge database + Scal bazę danych + + + Open KeePass 1 database + Otwórz bazę danych KeePass 1 + + + KeePass 1 database + Baza danych KeePass 1 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 - Nowa baza danych + Database creation error + Błąd tworzenia bazy danych - locked - zablokowana + 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. - Lock database - Zablokuj bazę danych + The database file does not exist or is not accessible. + Plik bazy danych nie istnieje lub nie jest dostępny. - 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. + Select CSV file + Wybierz plik CSV - 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. + New Database + Nowa baza danych - Disable safe saves? - Wyłączyć bezpieczne zapisywanie? + %1 [New Database] + Database tab name modifier + %1 [Nowa baza danych] - 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 [Locked] + Database tab name modifier + %1 [Zablokowana] + + + %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 @@ -2000,65 +2573,10 @@ Może to spowodować nieprawidłowe działanie wtyczek. - HttpPasswordGeneratorWidget + KMessageWidget - 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 - - &Close - &Zamknij + &Close + &Zamknij Close message @@ -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 + + unable to seek to content position + niezdolny do szukania pozycji treści + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bitowy + Disabled share + Wyłączony udział - Twofish: 256-bit - Twofish: 256-bitowy + Import from + Importuj z - ChaCha20: 256-bit - ChaCha20: 256-bitowy + Export to + Eksportuj do - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Synchronizuj z - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – zalecany) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Istniejący plik blokady pojedynczego wystąpienia jest nieprawidłowy. Uruchamianie nowego wystąpienia. + Key Component + Składnik klucza - The lock file could not be created. Single-instance mode disabled. - Nie można utworzyć pliku blokady. Tryb pojedynczej instancji jest wyłączony. + Key Component Description + Opis składnika klucza - Another instance of KeePassXC is already running. - Inna instancja KeePassXC jest już uruchomiona. + Cancel + Anuluj - Fatal error while testing the cryptographic functions. - Błąd krytyczny podczas testowania funkcji kryptograficznych. + Key Component set, click to change or remove + Ustawiono składnik klucza, kliknij, aby zmienić lub usunąć - KeePassXC - Error - KeePassXC - Błąd + 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,226 +3440,393 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Nieprawidłowy plik klucza, oczekiwany klucz OpenSSH + &Donate + &Wspomóż - PEM boundary mismatch - Niedopasowanie w granicy PEM + Report a &bug + Zgłoś &błąd - Base64 decoding failed - Dekodowanie Base64 nie powiodło się + 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. - Key file way too small. - Plik klucza jest zbyt mały. + &Import + &Importuj - Key file magic header id invalid - Nieprawidłowy identyfikator nagłówka magicznego pliku klucza + Copy att&ribute... + Skopiuj atry&but... - Found zero keys - Znaleziono zero kluczy + TOTP... + TOTP... - Failed to read public key. - Nie udało się odczytać klucza publicznego. + &New database... + &Nowa baza danych... - Corrupted key file, reading private key failed - Uszkodzony plik klucza, odczytu klucza prywatnego nie powiodło się + Create a new database + Stwórz nową bazę danych - No private key payload to decrypt - Brak zawrtości prywatnego klucza do odszyfrowania + &Merge from database... + &Scal z bazą danych... - Trying to run KDF without cipher - Próbuję uruchomić KDF bez szyfru + Merge from another KDBX database + Scal z inną bazą KDBX - Passphrase is required to decrypt this key - Do odszyfrowania tego klucza wymagane jest hasło + &New entry + &Nowy wpis - Key derivation failed, key file corrupted? - Derywacja klucza nie powiodła się, plik klucza uszkodzony? + Add a new entry + Dodaj nowy wpis - Decryption failed, wrong passphrase? - Odszyfrowanie nie powiodło się, błędne hasło? + &Edit entry + &Edytuj wpis - Unexpected EOF while reading public key - Nieoczekiwany koniec pliku (EOF) podczas odczytu klucza publicznego + View or edit entry + Podgląd lub edycja wpisu - Unexpected EOF while reading private key - Nieoczekiwany koniec pliku (EOF) podczas odczytu klucza prywatnego + &New group + &Nowa grupa - Can't write public key as it is empty - Nie można zapisać klucza publicznego, ponieważ jest pusty + Add a new group + Dodaj nową grupę - Unexpected EOF when writing public key - Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza publicznego + Change master &key... + Zmień &klucz główny... - Can't write private key as it is empty - Nie można zapisać klucza prywatnego, ponieważ jest pusty + &Database settings... + Ustawienia bazy &danych... - Unexpected EOF when writing private key - Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza prywatnego + Copy &password + Skopiuj &hasło - Unsupported key type: %1 - Nieobsługiwany typ klucza: %1 + Perform &Auto-Type + Wykonaj &autowpisywanie - Unknown cipher: %1 - Nieznany szyfr: %1 + Open &URL + Otwórz &URL - Cipher IV is too short for MD5 kdf - Szyfr IV jest za krótki dla kdf MD5 + KeePass 1 database... + Baza danych KeePass 1... - Unknown KDF: %1 - Nieznana KDF: %1 + Import a KeePass 1 database + Importuj bazę danych KeePass 1 - Unknown key type: %1 - Nieznany typ klucza: %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. - OptionDialog + Merger - Dialog - Dialog + Creating missing %1 [%2] + Tworzenie brakującego %1 [%2] - 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 + Relocating %1 [%2] + Przemieszczanie %1 [%2] - Enable KeePassHTTP server - Włącz serwer KeePassHTTP + Overwriting %1 [%2] + Nadpisywanie %1 [%2] - General - Ogólne + older entry merged from database "%1" + starszy wpis scalony z bazy danych "%1" - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - P&okaż powiadomienie, gdy wymagane są poświadczenia + Adding backup for older target %1 [%2] + Dodawanie kopii zapasowej dla starszego celu %1 [%2] - 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. + Adding backup for older source %1 [%2] + Dodawanie kopii zapasowej dla starszego źródła %1 [%2] - &Return only best matching entries - Z&wróć tylko najlepiej pasujące wpisy + Reapplying older target entry on top of newer source %1 [%2] + Ponowne stosowanie starszego wpisu docelowego na nowszym źródle %1 [%2] - Re&quest to unlock the database if it is locked - Żąda&j odblokowania bazy danych, jeżeli jest zablokowana + Reapplying older source entry on top of newer target %1 [%2] + Ponowne stosowanie starszego wpisu źródłowego na nowszym celu %1 [%2] - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Tylko wpisy z tym samym schematem (http://, https://, ftp://, ...) są zwracane. + Synchronizing from newer source %1 [%2] + Synchronizacja z nowszego źródła %1 [%2] - &Match URL schemes - &Dopasuj schematy adresów URL + Synchronizing from older source %1 [%2] + Synchronizacja ze starszego źródła %1 [%2] - Sort matching entries by &username - Sortuj dopasowane wpisy według &użytkownika + Deleting child %1 [%2] + Usuwanie dziecka %1 [%2] - Sort &matching entries by title - Sortuj dopasowane wpisy według &tytułu + Deleting orphan %1 [%2] + Usuwanie sieroty %1 [%2] - R&emove all shared encryption keys from active database - U&suń wszystkie współdzielone klucze szyfrujące z aktywnej bazy danych + Changed deleted objects + Zmieniono usunięte obiekty - Re&move all stored permissions from entries in active database - U&suń wszystkie przechowywane uprawnienia z wpisów w aktywnej bazie danych + Adding missing icon %1 + Dodawanie brakującej ikony %1 + + + NewDatabaseWizard - Password Generator - Generator hasła + Create a new KeePassXC database... + Stwórz nową bazę danych KeePassXC... - Advanced - Zaawansowane + Root + Root group + Główna + + + NewDatabaseWizardPage - Always allow &access to entries - Zawsze zezwalaj na d&ostęp do wpisów + WizardPage + WizardPage - Always allow &updating entries - Zawsze zezwalaj na a&ktualizowanie wpisów + En&cryption Settings + Ustawienia &szyfrowania - Only the selected database has to be connected with a client. - Tylko wybrana baza danych musi być podłączona do klienta. + 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. - Searc&h in all opened databases for matching entries - Szuk&aj we wszystkich otwartych bazach danych dopasowanych wpisów + Advanced Settings + Ustawienia zaawansowane - Automatically creating or updating string fields is not supported. - Automatyczne tworzenie albo aktualizowanie pól ciągów znaków nie jest obsługiwane. + Simple Settings + Ustawienia proste + + + NewDatabaseWizardPageEncryption - &Return advanced string fields which start with "KPH: " - &Zwracaj zaawansowane pola ciągów znaków, które zaczynają się od "KPH: " + Encryption Settings + Ustawienia szyfrowania - HTTP Port: - Port HTTP: + 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 - Default port: 19455 - Port domyślny: 19455 + Database Master Key + Klucz główny bazy danych - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC będzie nasłuchiwać ten port na 127.0.0.1 + A master key known only to you protects your database. + Klucz główny znany tylko tobie chroni twoją bazę danych. + + + NewDatabaseWizardPageMetaData - <b>Warning:</b> The following options can be dangerous! - <b>Ostrzeżenie:</b> Poniższe opcje mogą być niebezpieczne! + 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 + + Invalid key file, expecting an OpenSSH key + Nieprawidłowy plik klucza, oczekiwany klucz OpenSSH + + + PEM boundary mismatch + Niedopasowanie w granicy PEM + + + Base64 decoding failed + Dekodowanie Base64 nie powiodło się + + + Key file way too small. + Plik klucza jest zbyt mały. + + + Key file magic header id invalid + Nieprawidłowy identyfikator nagłówka magicznego pliku klucza + + + Found zero keys + Znaleziono zero kluczy + + + Failed to read public key. + Nie udało się odczytać klucza publicznego. + + + Corrupted key file, reading private key failed + Uszkodzony plik klucza, odczytu klucza prywatnego nie powiodło się + + + No private key payload to decrypt + Brak zawrtości prywatnego klucza do odszyfrowania + + + Trying to run KDF without cipher + Próbuję uruchomić KDF bez szyfru + + + Passphrase is required to decrypt this key + Do odszyfrowania tego klucza wymagane jest hasło + + + Key derivation failed, key file corrupted? + Derywacja klucza nie powiodła się, plik klucza uszkodzony? + + + Decryption failed, wrong passphrase? + Odszyfrowanie nie powiodło się, błędne hasło? + + + Unexpected EOF while reading public key + Nieoczekiwany koniec pliku (EOF) podczas odczytu klucza publicznego + + + Unexpected EOF while reading private key + Nieoczekiwany koniec pliku (EOF) podczas odczytu klucza prywatnego + + + Can't write public key as it is empty + Nie można zapisać klucza publicznego, ponieważ jest pusty + + + Unexpected EOF when writing public key + Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza publicznego + + + Can't write private key as it is empty + Nie można zapisać klucza prywatnego, ponieważ jest pusty + + + Unexpected EOF when writing private key + Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza prywatnego + + + Unsupported key type: %1 + Nieobsługiwany typ klucza: %1 + + + Unknown cipher: %1 + Nieznany szyfr: %1 + + + Cipher IV is too short for MD5 kdf + Szyfr IV jest za krótki dla kdf MD5 + + + Unknown KDF: %1 + Nieznana KDF: %1 + + + Unknown key type: %1 + Nieznany typ klucza: %1 + + + + PasswordEditWidget + + Enter password: + Wprowadź hasło: + + + Confirm password: + Potwierdź hasło: + + + Password + Hasło - <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> + <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> - Cannot bind to privileged ports - Nie można powiązać do uprzywilejowanych portów + Passwords do not match. + Hasła nie pasują do siebie. - 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 @@ -3185,478 +3893,1100 @@ Używam domyślnego portu 19455. Tekst szyfrujący - Wordlist: - Lista słów: + Wordlist: + Lista słów: + + + Word Separator: + Separator słów: + + + Copy + Skopiuj + + + Accept + Zaakceptuj + + + Close + Zamknij + + + Entropy: %1 bit + Entropia: %1 bity + + + Password Quality: %1 + Jakość hasła: %1 + + + Poor + Password quality + Kiepska + + + Weak + Password quality + Słaba + + + Good + Password quality + Dobra + + + Excellent + 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 + + Database not opened + Baza danych nie została otwarta + + + Database hash not available + Hash bazy danych jest niedostępny + + + Client public key not received + Klucz publiczny klienta nie został odebrany + + + Cannot decrypt message + Nie można odszyfrować wiadomości + + + Action cancelled or denied + Działanie anulowane lub odrzucone + + + KeePassXC association failed, try again + Skojarzenie KeePassXC nie powiodło się, spróbuj ponownie + + + Encryption key is not recognized + Klucz szyfrowania nie jest rozpoznawany + + + Incorrect action + Nieprawidłowe działanie + + + Empty message received + Otrzymano pustą wiadomość + + + No URL provided + Nie podano URL + + + No logins found + Nie znaleziono danych do logowania + + + Unknown error + Nieznany błąd + + + Add a new entry to a database. + Dodaj nowy wpis do bazy danych. + + + Path of the database. + Ścieżka bazy danych. + + + Key file of the database. + Plik z kluczem bazy danych. + + + path + ścieżka + + + Username for the entry. + Nazwa użytkownika dla wpisu. + + + username + użytkownik + + + URL for the entry. + Adres URL wpisu. + + + URL + URL + + + Prompt for the entry's password. + Pytaj o hasło do wpisu. + + + Generate a password for the entry. + Wygeneruj hasło dla wpisu. + + + Length for the generated password. + Długość wygenerowanego hasła. + + + length + długość + + + Path of the entry to add. + Ścieżka wpisu do dodania. + + + Copy an entry's password to the clipboard. + Skopiuj hasło wpisu do schowka. + + + Path of the entry to clip. + clip = copy to clipboard + Ścieżka wpisu do zapamiętania. + + + Timeout in seconds before clearing the clipboard. + Limit czasu w sekundach przed wyczyszczeniem Schowka. + + + Edit an entry. + Edycja wpisu. + + + Title for the entry. + Tytuł dla wpisu. + + + title + tytuł + + + Path of the entry to edit. + Ścieżka wpisu do edycji. + + + Estimate the entropy of a password. + Oszacuj złożoność hasła. + + + Password for which to estimate the entropy. + Hasło dla którego chcesz oszacować złożoność. + + + Perform advanced analysis on the password. + Wykonaj zaawansowaną analizę hasła. + + + Extract and print the content of a database. + Wyodrębnij i drukuj zawartość bazy danych. + + + Path of the database to extract. + Ścieżka bazy danych do wyodrębnienia. + + + Insert password to unlock %1: + Wprowadź hasło by odblokować %1: + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + OSTRZEŻENIE: 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. + + + + +Available commands: + + + +Dostępne polecenia: + + + + Name of the command to execute. + Nazwa polecenia do wykonania. + + + List database entries. + Wypisz wpisy bazy danych. + + + Path of the group to list. Default is / + Ścieżka grupy do wymienienia. Domyślna to / + + + Find entries quickly. + Szybkie wyszukiwanie wpisów. + + + Search term. + Zapytanie wyszukiwania. + + + Merge two databases. + Scal dwie bazy danych. + + + Path of the database to merge into. + Ścieżka bazy danych, do której scalić. + + + Path of the database to merge from. + Ścieżka bazy danych, z której scalić. + + + Use the same credentials for both database files. + Użyj tych samych poświadczeń dla obu plików bazy danych. + + + Key file of the database to merge from. + Plik klucza bazy danych, z której scalić. + + + Show an entry's information. + Pokaż informacje o wpisie. + + + 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. + Nazwy atrybutów do wyświetlenia. Tą opcję można zastosować więcej niż jeden raz, podając każdy atrybut w osobnym wierszu w określonej kolejności. Jeśli atrybuty nie są określone, wyświetla się podsumowanie domyślnych atrybutów. + + + attribute + atrybut + + + Name of the entry to show. + Nazwa wpisu do pokazania. + + + NULL device + Urządzenie NULL + + + error reading from device + błąd odczytu z urządzenia + + + malformed string + nieprawidłowy ciąg + + + missing closing quote + brak cytatu zamknięcia + + + Group + Grupa + + + Title + Tytuł + + + Username + Użytkownik + + + Password + Hasło + + + Notes + Notatki + + + Last Modified + Ostatnia modyfikacja + + + Created + Stworzone + + + Browser Integration + Integracja z przeglądarką + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + Wyzwanie-odpowiedź YubiKey[%1] - slot %2 - %3 + + + Press + Naciśnij + + + Passive + Pasywny + + + SSH Agent + Agent SSH + + + Generate a new random diceware passphrase. + Wygeneruj nowe hasło losowe diceware. + + + Word count for the diceware passphrase. + Liczba słów dla hasła diceware. + + + Wordlist for the diceware generator. +[Default: EFF English] + Lista słów dla generatora diceware. +[Domyślna: EFF English] + + + Generate a new random password. + Wygeneruj nowe hasło losowe. + + + Invalid value for password length %1. + Niepoprawna wartość długości hasła %1. + + + Could not create entry with path %1. + Nie można utworzyć wpisu ze ścieżką %1. + + + Enter password for new entry: + Wprowadź hasło dla nowego wpisu: + + + Writing the database failed %1. + Błąd przy zapisie bazy danych %1. + + + Successfully added entry %1. + Pomyślnie dodano wpis %1. + + + 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 - Word Count: - Liczba słów: + Type: Dict+Leet + Typ: Słownikowy+Leet - Word Separator: - Separator słów: + Type: User Words + Typ: Słowa użytkownika - Generate - Wygeneruj + Type: User+Leet + Typ: Użytkownika+Leet - Copy - Skopiuj + Type: Repeated + Typ: Powtarzany - Accept - Zaakceptuj + Type: Sequence + Typ: Sekwencja - Close - Zamknij + Type: Spatial + Typ: Przestrzenny - Apply - Zastosuj + Type: Date + Typ: Data - Entropy: %1 bit - Entropia: %1 bity + Type: Bruteforce(Rep) + Typ: Bruteforce(Powt.) - Password Quality: %1 - Jakość hasła: %1 + Type: Dictionary(Rep) + Typ: Słownikowy(Powt.) - Poor - Password quality - Kiepska + Type: Dict+Leet(Rep) + Typ: Słownikowy+Leet(Powt.) - Weak - Password quality - Słaba + Type: User Words(Rep) + Typ: Słowa użytkownika(Powt.) - Good - Password quality - Dobra + Type: User+Leet(Rep) + Typ: Użytkownika+Leet(Powt.) - Excellent - Password quality - Znakomita + Type: Repeated(Rep) + Typ: Powtarzany(Powt.) - - - QObject - Database not opened - Baza danych nie została otwarta + Type: Sequence(Rep) + Typ: Sekwencja(Powt.) - Database hash not available - Hash bazy danych jest niedostępny + Type: Spatial(Rep) + Typ: Przestrzenny(Powt.) - Client public key not received - Klucz publiczny klienta nie został odebrany + Type: Date(Rep) + Typ: Data(Powt.) - Cannot decrypt message - Nie można odszyfrować wiadomości + Type: Unknown%1 + Typ: Nieznany%1 - Timeout or cannot connect to KeePassXC - Przekroczony limit czasu lub nie można podłączyć się do KeePassXC + Entropy %1 (%2) + Entropia %1 (%2) - Action cancelled or denied - Działanie anulowane lub odrzucone + *** Password length (%1) != sum of length of parts (%2) *** + *** Długość hasła (%1) != suma długości części (%2) *** - 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? + Failed to load key file %1: %2 + Nie udało się załadować pliku klucza %1: %2 - KeePassXC association failed, try again - Skojarzenie KeePassXC nie powiodło się, spróbuj ponownie + File %1 does not exist. + Plik %1 nie istnieje. - Key change was not successful - Zmiana klucza nie powiodła się + Unable to open file %1. + Nie można otworzyć pliku %1. - Encryption key is not recognized - Klucz szyfrowania nie jest rozpoznawany + Error while reading the database: +%1 + Błąd podczas odczytu bazy danych: +%1 - No saved databases found - Nie znaleziono zapisanych baz danych + Error while parsing the database: +%1 + Błąd podczas parsowania bazy danych: +%1 - Incorrect action - Nieprawidłowe działanie + Length of the generated password + Długość wygenerowanego hasła - Empty message received - Otrzymano pustą wiadomość + Use lowercase characters + Użyj małych liter - No URL provided - Nie podano URL + Use uppercase characters + Użyj dużych liter - No logins found - Nie znaleziono danych do logowania + Use numbers. + Użyj liczb. - Unknown error - Nieznany błąd + Use special characters + Użyj znaków specjalnych - Add a new entry to a database. - Dodaj nowy wpis do bazy danych. + Use extended ASCII + Użyj rozszerzonego ASCII - Path of the database. - Ścieżka bazy danych. + Exclude character set + Wyklucz zestaw znaków - Key file of the database. - Plik z kluczem bazy danych. + chars + znaki - path - ścieżka + Exclude similar looking characters + Wyklucz podobnie wyglądające znaki - Username for the entry. - Nazwa użytkownika dla wpisu. + Include characters from every selected group + Uwzględnij znaki z każdej wybranej grupy - username - użytkownik + Recursively list the elements of the group. + Rekurencyjnie wylistuj elementy grupy. - URL for the entry. - Adres URL wpisu. + Cannot find group %1. + Nie można znaleźć grupy %1. - URL - URL + Error reading merge file: +%1 + Błąd odczytu pliku scalania: +%1 - Prompt for the entry's password. - Pytaj o hasło do wpisu. + Unable to save database to file : %1 + Nie można zapisać bazy danych do pliku : %1 - Generate a password for the entry. - Wygeneruj hasło dla wpisu. + Unable to save database to file: %1 + Nie można zapisać bazy danych do pliku: %1 - Length for the generated password. - Długość wygenerowanego hasła + Successfully recycled entry %1. + Pomyślnie przeniesiono do kosza wpis %1. - length - długość + Successfully deleted entry %1. + Pomyślnie usunięto wpis %1. - Path of the entry to add. - Ścieżka wpisu do dodania. + Show the entry's current TOTP. + Pokaż bieżące TOTP wpisu. - Copy an entry's password to the clipboard. - Skopiuj hasło wpisu do schowka. + ERROR: unknown attribute %1. + BŁĄD: nieznany atrybut %1. - Path of the entry to clip. - clip = copy to clipboard - Ścieżka wpisu do zapamiętania. + No program defined for clipboard manipulation + Nie zdefiniowano żadnego programu do manipulacji schowkiem - Timeout in seconds before clearing the clipboard. - Limit czasu w sekundach przed wyczyszczeniem Schowka. + Unable to start program %1 + Nie można uruchomić programu %1 - Edit an entry. - Edycja wpisu. + file empty + plik pusty - Title for the entry. - Tytuł dla wpisu. + %1: (row, col) %2,%3 + %1: (rząd, kolumna) %2,%3 - title - tytuł + AES: 256-bit + AES: 256-bitowy - Path of the entry to edit. - Ścieżka wpisu do edycji. + Twofish: 256-bit + Twofish: 256-bitowy - Estimate the entropy of a password. - Oszacuj złożoność hasła. + ChaCha20: 256-bit + ChaCha20: 256-bitowy - Password for which to estimate the entropy. - Hasło dla którego chcesz oszacować złożoność. + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – zalecany) - Perform advanced analysis on the password. - Wykonaj zaawansowaną analizę hasła. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Extract and print the content of a database. - Wyodrębnij i drukuj zawartość bazy danych. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Path of the database to extract. - Ścieżka bazy danych do wyodrębnienia. + Invalid Settings + TOTP + Ustawienia nieprawidłowe - Insert password to unlock %1: - Wprowadź hasło by odblokować %1: + Invalid Key + TOTP + Nieprawidłowy klucz - Failed to load key file %1 : %2 - Nieudane ładowanie pliku z kluczem %1 : %2 + Message encryption failed. + Szyfrowanie wiadomości nie powiodło się. - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - OSTRZEŻENIE: 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. + No groups found + Nie znaleziono grup - - -Available commands: - - - -Dostępne polecenia: - + Create a new database. + Stwórz nową bazę danych. - Name of the command to execute. - Nazwa polecenia do wykonania. + File %1 already exists. + Plik %1 już istnieje. - List database entries. - Wypisz wpisy bazy danych. + Loading the key file failed + Ładowanie pliku klucza nie powiodło się - Path of the group to list. Default is / - Ścieżka grupy do wymienienia. Domyślna to / + No key is set. Aborting database creation. + Żaden klawisz nie jest ustawiony. Przerwanie tworzenia bazy danych. - Find entries quickly. - Szybkie wyszukiwanie wpisów. + Failed to save the database: %1. + Nie udało się zapisać bazy danych: %1. - Search term. - Zapytanie wyszukiwania. + Successfully created new database. + Pomyślnie utworzono nową bazę danych. - Merge two databases. - Połącz dwie bazy danych. + Insert password to encrypt database (Press enter to leave blank): + Wstaw hasło, aby zaszyfrować bazę danych (naciśnij Enter, aby pozostawić puste): - Path of the database to merge into. - Ścieżka bazy danych, do której scalić. + Creating KeyFile %1 failed: %2 + Tworzenie pliku klucza %1 nie powiodło się: %2 - Path of the database to merge from. - Ścieżka bazy danych, z której scalić. + Loading KeyFile %1 failed: %2 + Ładowanie pliku klucza %1 nie powiodło się: %2 - Use the same credentials for both database files. - Użyj tych samych poświadczeń dla obu plików bazy danych. + Remove an entry from the database. + Usuń wpis z bazy danych. - Key file of the database to merge from. - Plik klucza bazy danych, z której scalić. + Path of the entry to remove. + Ścieżka wpisu do usunięcia. - Show an entry's information. - Pokaż informacje o wpisie. + Existing single-instance lock file is invalid. Launching new instance. + Istniejący plik blokady pojedynczego wystąpienia jest nieprawidłowy. Uruchamianie nowego wystąpienia. - 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. - Nazwy atrybutów do wyświetlenia. Tą opcję można zastosować więcej niż jeden raz, podając każdy atrybut w osobnym wierszu w określonej kolejności. Jeśli atrybuty nie są określone, wyświetla się podsumowanie domyślnych atrybutów. + The lock file could not be created. Single-instance mode disabled. + Nie można utworzyć pliku blokady. Tryb pojedynczej instancji jest wyłączony. - attribute - atrybut + KeePassXC - cross-platform password manager + KeePassXC - wieloplatformowy menedżer haseł - Name of the entry to show. - Nazwa wpisu do pokazania. + filenames of the password databases to open (*.kdbx) + nazwy plików baz danych haseł do otwarcia (*.kdbx) - NULL device - Urządzenie NULL + path to a custom config file + ścieżka do pliku z ustawieniami - error reading from device - błąd odczytu z urządzenia + key file of the database + plik klucza bazy danych - file empty ! - - plik pusty ! - + read password of the database from stdin + odczytaj hasło bazy danych z stdin - malformed string - nieprawidłowy ciąg + Parent window handle + Uchwyt okna nadrzędnego - missing closing quote - brak cytatu zamknięcia + Another instance of KeePassXC is already running. + Inna instancja KeePassXC jest już uruchomiona. - Group - Grupa + Fatal error while testing the cryptographic functions. + Błąd krytyczny podczas testowania funkcji kryptograficznych. - Title - Tytuł + KeePassXC - Error + KeePassXC - Błąd - Username - Użytkownik + Database password: + Hasło bazy danych: - Password - Hasło + Cannot create new group + + + + QtIOCompressor - Notes - Notatki + Internal zlib error when compressing: + Błąd wewnętrzny zlib podczas kompresowania: - Last Modified - Ostatnia modyfikacja + Error writing to underlying device: + Błąd w zapisie na urządzenie: - Created - Stworzone + Error opening underlying device: + Błąd w otwieraniu z urządzenia: - Legacy Browser Integration - Przestarzała integracja z przeglądarką + Error reading data from underlying device: + Błąd w odczycie danych z urządzenia: - Browser Integration - Integracja z przeglądarką + Internal zlib error when decompressing: + Błąd wewnętrzny zlib podczas dekompresowania: + + + QtIOCompressor::open - YubiKey[%1] Challenge Response - Slot %2 - %3 - Wyzwanie-odpowiedź YubiKey[%1] - slot %2 - %3 + The gzip format not supported in this version of zlib. + Format gzip nie wspierany przez tę wersję zlib. - Press - Naciśnij + Internal zlib error: + Błąd wewnętrzny zlib: + + + SSHAgent - Passive - Pasywny + Agent connection failed. + Połączenie agenta nie powiodło się. - SSH Agent - Agent SSH + Agent protocol error. + Błąd protokołu agenta. - Generate a new random diceware passphrase. - Wygeneruj nowe hasło losowe diceware. + No agent running, cannot add identity. + Żaden agent nie działa, nie można dodać tożsamości. - Word count for the diceware passphrase. - Liczba słów dla hasła diceware. + No agent running, cannot remove identity. + Żaden agent nie działa, nie można usunąć tożsamości. - count - liczba + Agent refused this identity. Possible reasons include: + Agent odmówił tej tożsamości. Możliwe przyczyny to: - Wordlist for the diceware generator. -[Default: EFF English] - Lista słów dla generatora diceware. -[Domyślna: EFF English] + 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). - Generate a new random password. - Wygeneruj nowe hasło losowe. + A confirmation request is not supported by the agent (check options). + Żądanie potwierdzenia nie jest obsługiwane przez agenta (sprawdź opcje). + + + SearchHelpWidget - Length of the generated password. - Długość wygenerowanego hasła. + Search Help + Przeszukaj pomoc - Use lowercase characters in the generated password. - Użyj małych liter w wygenerowanym haśle. + Search terms are as follows: [modifiers][field:]["]term["] + Zapytania wyszukiwania są następujące: [modyfikatory][pole:]["]zapytanie["] - Use uppercase characters in the generated password. - Użyj dużych liter w wygenerowanym haśle. + Every search term must match (ie, logical AND) + Każde zapytanie wyszukiwania musi pasować (tj. logiczny AND) - Use numbers in the generated password. - Użyj liczb w wygenerowanym haśle. + Modifiers + Modyfikatory - Use special characters in the generated password. - Użyj znaków specjalnych w wygenerowanym haśle. + exclude term from results + wyklucz zapytanie z wyników - Use extended ASCII in the generated password. - Użyj rozszerzone ASCII w wygenerowanym haśle. + match term exactly + dopasuj dokładnie zapytanie - - - QtIOCompressor - Internal zlib error when compressing: - Błąd wewnętrzny zlib podczas kompresowania: + use regex in term + użyj wyrażenia regularnego w zapytaniu - Error writing to underlying device: - Błąd w zapisie na urządzenie: + Fields + Pola - Error opening underlying device: - Błąd w otwieraniu z urządzenia: + Term Wildcards + Wieloznacznik zapytania - Error reading data from underlying device: - Błąd w odczycie danych z urządzenia: + match anything + dopasuj cokolwiek - Internal zlib error when decompressing: - Błąd wewnętrzny zlib podczas dekompresowania: + match one + dopasuj jeden - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Format gzip nie wspierany przez tą wersję zlib. + logical OR + logiczny OR - Internal zlib error: - Błąd wewnętrzny zlib: + 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 - - 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. + + Import + Importuj - KeePassXC: No keys found - KeePassXC: Nie znaleziono kluczy + Export + Eksportuj - No shared encryption-keys found in KeePassHttp Settings. - Nie znaleziono współdzielonych kluczy szyfrujących w ustawieniach KeePassHTTP. + Imported certificates + Importowane certyfikaty - KeePassXC: Settings not available! - KeePassXC: Ustawienia niedostępne! + Trust + Zaufaj - The active database does not contain an entry of KeePassHttp Settings. - Aktywna baza danych nie zawiera wpisu z ustawieniami KeePassHTTP. + Ask + Zapytaj - Removing stored permissions... - Usuwanie przechowywanych uprawnień... + Untrust + Nie ufaj - Abort - Zaniechaj + Remove + Usuń - KeePassXC: Removed permissions - KeePassXC: Usunięto uprawnienia + Path + Ścieżka - - 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. + + Status + Status - KeePassXC: No entry with permissions found! - KeePassXC: Nie znaleziono wpisu z uprawnieniami! + Fingerprint + Odcisk palca - The active database does not contain an entry with permissions. - Aktywna baza danych nie zawiera wpisu z uprawnieniami. + Certificate + Certyfikat - - - SettingsWidget - Application Settings - Ustawienia aplikacji + Trusted + Zaufany - General - Główne + Untrusted + Niezaufany - Security - Bezpieczeństwo + Unknown + Nieznany - Access error for config file %1 - Błąd dostępu pliku konfiguracyjnego %1 + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - Ustawienia podstawowe + KeeShare key file + Plik klucza KeeShare - Start only a single instance of KeePassXC - Uruchom tylko jedną instancję KeePassXC + All files + Wszystkie pliki - Remember last databases - Pamiętaj ostatnią bazę danych + Select path + Wybierz ścieżkę - Remember last key files and security dongles - Zapamiętaj ostatnie pliki klucze i klucze sprzętowe + Exporting changed certificate + Eksportowanie zmienionego certyfikatu - Load previous databases on startup - Załaduj poprzednie bazy danych podczas uruchomienia + 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? - Automatically save on exit - Automatycznie zapisz przy wyjściu + Signer: + + + + ShareObserver - Automatically save after every change - Automatycznie zapisz po każdej zmianie + Import from container without signature + Importuj z kontenera bez podpisu - Automatically reload the database when modified externally - Automatycznie przeładuj bazę danych, gdy zostanie zmodyfikowana zewnętrznie + 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? - Minimize when copying to clipboard - Zminimalizuj po skopiowaniu do schowka + Import from container with certificate + Importuj z kontenera z certyfikatem - Minimize window at application startup - Minimalizuj okno podczas uruchomienia aplikacji + Not this time + Nie tym razem - Use group icon on entry creation - Użyj ikony grupy podczas tworzenia wpisu + Never + Nigdy - 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) + Always + Zawsze - Hide the Details view - Ukryj widok Szczegóły + Just this time + Tylko tym razem - Show a system tray icon - Pokaż ikonę w zasobniku systemowym + Import from %1 failed (%2) + Import z %1 zakończył się niepomyślnie (%2) - Hide window to system tray when minimized - Schowaj okno do zasobnika podczas minimalizacji + Import from %1 successful (%2) + Import z %1 zakończył się pomyślnie (%2) - Hide window to system tray instead of app exit - Schowaj okno do zasobnika zamiast wyłączenia aplikacji + Imported from %1 + Importowane z %1 - Dark system tray icon - Ciemna ikona w zasobniku systemowym + Signed share container are not supported - import prevented + Podpisany kontener udostępniania nie jest obsługiwany - import został zablokowany - Language - Język + File is not readable + Plik nie jest czytelny - Auto-Type - Auto-uzupełnianie + Invalid sharing container + Nieprawidłowy kontener udostępniania - Use entry title to match windows for global Auto-Type - Użyj tytułu wpisy, aby dopasować okna dla globalnego auto-uzupełniania + Untrusted import prevented + Uniemożliwiono niezaufany import - Use entry URL to match windows for global Auto-Type - Użyj adresu URL wpisy, aby dopasować okna dla globalnego auto-uzupełniania + Successful signed import + Pomyślnie podpisany import - Always ask before performing Auto-Type - Zawsze pytaj przed wykonaniem auto-uzupełninia + Unexpected error + Niespodziewany błąd - Global Auto-Type shortcut - Globalny skrót auto-uzupełnianie + Unsigned share container are not supported - import prevented + Niepodpisany kontener udostępniania nie jest obsługiwany - import został zablokowany - Auto-Type delay - Opóźnienie auto-uzupełniania + Successful unsigned import + Pomyślnie niepodpisany import - ms - Milliseconds - ms + File does not exist + Plik nie istnieje - Startup - Uruchamianie + Unknown share container type + Nieznany typ kontenera udostępniania - File Management - Zarządzanie plikami + Overwriting signed share container is not supported - export prevented + Zastąpienie podpisanego kontenera udostępniania nie jest obsługiwane - eksport został zablokowany - Safely save database files (may be incompatible with Dropbox, etc) - Bezpiecznie zapisuj pliki bazy danych (może być niezgodne z Dropbox itp.) + Could not write export container (%1) + Nie można zapisać kontenera eksportu (%1) - Backup database file before saving - Utwórz kopię zapasową pliku bazy danych przed zapisaniem + Overwriting unsigned share container is not supported - export prevented + Zastąpienie niepodpisanego kontenera udostępniania nie jest obsługiwane - eksport został zablokowany - Entry Management - Zarządzanie wpisami + Could not write export container + Nie można zapisać kontenera eksportu - General - Ogólne + Unexpected export error occurred + Wystąpił nieoczekiwany błąd eksportu - - - SettingsWidgetSecurity - Timeouts - Limity czasowe + Export to %1 failed (%2) + Eksport do %1 zakończył się niepomyślnie (%2) - Clear clipboard after - Wyczyść schowek po + Export to %1 successful (%2) + Eksport do %1 zakończył się pomyślnie (%2) - sec - Seconds - s + Export to %1 + Eksportuj do %1 - Lock databases after inactivity of - Zablokuj bazę danych po nieaktywności + 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 ?} - Convenience - Poręczność + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Zablokuj bazy danych, gdy sesja jest zablokowana albo pokrywa jest zamknięta + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Zablokuj bazę danych po zminimalizowaniu okna + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Nie wymagaj powtarzania hasła, gdy jest widoczne + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Domyślnie pokazuj hasła + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Ukryj hasła w panelu podglądu + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Domyślnie ukrywaj wpisy notatek + Timed Password + Hasło zależne od czasu - Privacy - Prywatność + 000000 + 000000 + + + Copy + Skopiuj + + + 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 + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Użyj Google jako zastępstwa dla pobierania ikon witryn internetowych + Copy + Skopiuj - Re-lock previously locked database after performing Auto-Type - Ponownie zablokuj poprzednio zablokowaną bazę danych po wykonaniu auto-uzupełninia - + 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. + + + There was an error creating the QR code. + Wystąpił błąd podczas tworzenia kodu QR. + + + Closing in %1 seconds. + Zamykanie za %1 sekund. - 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 + sec + Seconds + s + + + Code size: + Rozmiar kodu: 6 digits 6 cyfr - Code size: - Rozmiar kodu: + 7 digits + 7 cyfr - sec - Seconds - s + 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. + + + 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. - - - UnlockDatabaseWidget - Unlock database - Odblokuj bazę danych + 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 - - Remove an entry from the database. - Usuń wpis z bazy danych. - - - Path of the database. - Ścieżka bazy danych. - - - Path of the entry to remove. - Ścieżka wpisu do usunięcia. - + YubiKeyEditWidget - 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) + Refresh + Odśwież - path to a custom config file - ścieżka do pliku z ustawieniami + YubiKey Challenge-Response + Wyzwanie-odpowiedź YubiKey - key file of the database - plik klucza bazy danych + <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> - read password of the database from stdin - odczytaj hasło bazy danych z stdin + No YubiKey detected, please ensure it's plugged in. + Nie wykryto YubiKey, upewnij się, że jest włożony. - 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 0000000000..71df82a7b7 --- /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 1295e117d2..3199b21e0a 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: @@ -38,80 +38,290 @@ Copiar para a área de transferência - Version %1 - - Versão %1 - + Project Maintainers: + Mantedores do Projeto: - Revision: %1 - Revisão: %1 + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + A equipe KeePassXC agradece especialmente a debfx pela criação do KeePassX original. + + + AgentSettingsWidget - Distribution: %1 - Distribuição: %1 + Enable SSH Agent (requires restart) + Habilitar Agente SSH (requer reinicialização) - Libraries: - Bibliotecas: + Use OpenSSH for Windows instead of Pageant + Usar o OpenSSH para Windows em vez de Pageant + + + ApplicationSettingsWidget - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operacional: %1 -Arquitetura da CPU: %2 -Kernel: %3 %4 + Application Settings + Configurações do Aplicativo - Enabled extensions: - Extensões habilitadas: + General + Geral - Project Maintainers: - Mantedores do projeto: + Security + Segurança - 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. + Access error for config file %1 + Erro de acesso para o arquivo de configuração %1 - Build Type: %1 - - Tipo de compilaçã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 - AccessControlDialog + ApplicationSettingsWidgetGeneral + + Basic Settings + Configurações Básicas + - KeePassXC HTTP Confirm Access - KeePassXC HTTP Confirmar Acesso + Startup + Inicialização - Remember this decision - Lembrar esta escolha + Start only a single instance of KeePassXC + Iniciar apenas uma única instância do KeePassXC - Allow - Permitir + Remember last databases + Lembrar dos últimos bancos de dados - Deny - Negar + Remember last key files and security dongles + Lembre-se de arquivos de chave passados e dongles de segurança - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Habilitar agente SSH (requer reinicialização) + 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. @@ -362,20 +585,41 @@ Selecione se deseja permitir o acesso. <b>AVISO:</b> As seguintes opções podem ser perigosas! - Executable Files (*.exe);;All Files (*.*) - Arquivos Executáveis (*.exe);;Todos os Arquivos (*.*) + Select custom proxy location + Selecione localização para o proxy - Executable Files (*) - Arquivos Executáveis (*) + &Tor Browser + &Navegador Tor - Select custom proxy location - Selecione localização para o proxy + <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 + - 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. + 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 - - - 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). - - - 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. - - - - ChangeMasterKeyWidget - - Password - Senha - - - Enter password: - Insira senha: - - - Repeat password: - Repita senha: - - - &Key file - &Arquivo-Chave - - - 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... + Converting attributes to custom data… + Convertendo atributos para dados personalizados... - Unable to create Key File : - Não foi possível criar o Arquivo-Chave : + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Convertido KeePassHTTP atributos - Select a key file - Escolha um arquivo-chave + 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. - - Empty password - Senha vazia + + Successfully moved %n keys to custom data. + Movido com sucesso %n chaves para dados personalizados.Movido com sucesso %n chaves para dados personalizados. - Do you really want to use an empty string as password? - Você realmente quer usar uma sequência vazia como senha? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nenhuma entrada com os atributos KeePassHTTP encontrados! - Different passwords supplied. - Senhas diferentes fornecidas. + 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. - Failed to set %1 as the Key file: -%2 - Falha ao definir %1 como o Arquivo-Chave: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: Configurações de integração do navegador herdado detectadas - Legacy key file format - Formato de chave antigo + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -658,48 +796,89 @@ Por favor, considere gerar um novo arquivo de chave. Dados originais: - Error(s) detected in CSV file ! - Erro(s) detectado(s) no arquivo CSV! + Error + Erro - more messages skipped] - mais mensagens puladas] + Empty fieldname %1 + Nome de campo vazio %1 - Error - Erro + column %1 + coluna %1 - CSV import: writer has errors: - - Importar CSV: escritor tem erros: - + Error(s) detected in CSV file! + Erro(s) detectado(s) no arquivo CSV! - - - CsvImportWizard - - Error - Erro + + [%n more message(s) skipped] + - Unable to calculate master key - Não foi possível calcular a chave mestre + CSV import: writer has errors: +%1 + Importação de CSV: o gravador tem erros: +%1 CsvParserModel - %n byte(s), - %n bytes(s),%n bytes(s), + %n column(s) + %n coluna(s)%n coluna(s) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n linha(s), %n row(s), + %n byte(s) + %n byte%n bytes - %n column(s) - coluna (s) %n%n coluna(s) + %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,155 +936,329 @@ 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 + Can't open key file: +%1 + Não é possível abrir o arquivo de chaves: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Não foi possível abrir o banco de dados. + Passwords + Senhas + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Banco de dados aberto com sucesso. Nada para fazer. + Advanced Settings + Definições avançadas - Success - Sucesso + General + Geral - The database has been successfully repaired -You can now save it. - O banco de dados foi reparado com sucesso -Você pode salvá-lo agora. + Security + Segurança - Unable to repair the database. - Não foi possível reparar o banco de dados. + Master Key + Chave-mestre - - - DatabaseSettingsWidget - General - Geral + Encryption Settings + Definições de cifra - Encryption - Encriptação + Browser Integration + Integração com o Navegador + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Número de voltas muito alto + KeePassXC-Browser settings + Configurações do KeePassXC-Browser - 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! - Você está usando um número muito elevado de transformação chave rodadas com Argon2. - -Se você mantiver este número, seu banco de dados pode levar horas ou dias (ou até mais) para abrir! + &Disconnect all browsers + &Desconectar todos os navegadores - Understood, keep number - Entendido, manter o número + Forg&et all site-specific settings on entries + - Cancel - Cancelar + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Number of rounds too low - Key transformation rounds - Número de voltas muito baixo + Stored keys + Chaves guardadas - 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! - Você está usando um número muito baixo de transformação chave rodadas com KDF-AES. - -Se você manter este número, seu banco de dados pode ser facilmente crackeado! + Remove + Remover - KDF unchanged - KDF não modificado + Delete the selected key? + Apagar chave selecionada? - Failed to transform key with new KDF parameters; KDF unchanged. - Não foi possível transformar a chave com novos parâmetros KDF; KDF inalterado. - - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB - - - thread(s) - Threads for parallel execution (KDF settings) - thread(s) thread(s) + 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. - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Algoritmo de Encriptação: + Key + Chave - AES: 256 Bit (default) - AES: 256 Bit (padrão) + Value + Valor - Twofish: 256 Bit - Twofish: 256 Bit + Enable Browser Integration to access these settings. + Ative a integração do navegador para acessar essas configurações. - Key Derivation Function: - Função de Derivação de Chave: + Disconnect all browsers + Desconectar todos os navegadores - Transform rounds: - Rodadas de transformação: + 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. - Benchmark 1-second delay - Testar atraso de 1 segundo + KeePassXC: No keys found + KeePassXC: Nenhuma chave localizada - Memory Usage: - Uso de Memória: + No shared encryption keys found in KeePassXC settings. + Nenhuma chave de criptografia compartilhada encontrada nas configurações do KeePassXC. - Parallelism: - Paralelismo: + KeePassXC: Removed keys from database + KeePassXC: Chaves removidas do banco de dados + + + Successfully removed %n encryption key(s) from KeePassXC settings. + - - - DatabaseSettingsWidgetGeneral - Database Meta Data - Metadados do Banco de Dados + Forget all site-specific settings on entries + Esqueça todas as configurações específicas do site nas entradas - Database name: - Nome do banco de dados: + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + - Database description: - Descrição do banco de dados: + 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 + Key transformation rounds + Número de voltas 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! + Você está usando um número muito elevado de transformação chave rodadas com Argon2. + +Se você mantiver este número, seu banco de dados pode levar horas ou dias (ou até mais) para abrir! + + + Understood, keep number + Entendido, manter o número + + + Cancel + Cancelar + + + Number of rounds too low + Key transformation rounds + Número de voltas 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! + Você está usando um número muito baixo de transformação chave rodadas com KDF-AES. + +Se você manter este número, seu banco de dados pode ser facilmente crackeado! + + + KDF unchanged + KDF não modificado + + + Failed to transform key with new KDF parameters; KDF unchanged. + Não foi possível transformar a chave com novos parâmetros KDF; KDF inalterado. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + Metadados do Banco de Dados + + + Database name: + Nome do banco de dados: + + + Database description: + Descrição do banco de dados: Default username: @@ -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,95 +1290,116 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!< Enable &compression (recommended) - Ativar &compressão (recomendado) + Ativar &compressão - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Raíz + Sharing + Compartilhando - KeePass 2 Database - Banco de Dados KeePass 2 + Breadcrumb + - All files - Todos os arquivos + Type + Tipo - Open database - Abrir banco de dados + Path + Caminho - File not found! - Arquivo não localizado! + Last Signer + - Unable to open the database. - Não foi possível abrir o banco de dados. + Certificates + Certificados - File opened in read only mode. - Arquivo aberto no modo somente leitura. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Abrir arquivo CSV + Add additional protection... + Adicionar proteção adicional... - CSV file - Arquivo CSV + No encryption key added + Chave de cifra não adicionada - All files (*) - Todos os arquivos (*) + 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! - Merge database - Juntar banco de dados + No password set + Nenhuma senha definida - Open KeePass 1 database - Abrir banco de dados KeePass 1 + 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? - KeePass 1 database - Banco de dados KeePass 1 + Unknown error + Erro desconhecido - Close? - Fechar? + Failed to change master key + Não foi possível alterar a chave mestra + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" está em modo de edição. -Descartar alterações e fechar mesmo assim? + Database Name: + Nome do banco de dados: - Save changes? - Salvar alterações? + Description: + Descrição: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" foi modificado. -Salvar alterações? + KeePass 2 Database + Banco de dados Keepass 2 + + + All files + Todos arquivos - Writing the database failed. - Escrever no banco de dados falhou. + Open database + Abrir banco de dados - Passwords - Senhas + CSV file + Arquivo CSV - Save database as - Salvar banco de dados como + Merge database + Juntar banco de dados + + + Open KeePass 1 database + Abrir banco de dados KeePass 1 + + + KeePass 1 database + Banco de dados KeePass 1 Export database to CSV file @@ -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 + + 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? + - Generate TOTP Token - Gerar Token TOTP + File opened in read only mode. + Arquivo aberto no modo somente leitura. - Close - Fechar + Lock Database? + Travar banco de dados? - General - Geral + You are editing an entry. Discard changes and lock anyway? + Você está editando uma entrada. Descartar as mudanças e travar de qualquer maneira? - Password - Senha + "%1" was modified. +Save changes? + "%1" foi modificado. +Salvar alterações? - URL - URL + Database was modified. +Save changes? + Banco de dados foi modificado. +Salvar alterações? - Expiration - Expiração + Save changes? + Salvar alterações? - Username - Nome de usuário + Could not open the new database file while attempting to autoreload. +Error: %1 + - Autotype - Auto-Digitação + Disable safe saves? + Desativar armazenamento seguro? - Searching - Busca + 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? - Attributes - Atributos + Writing the database failed. +%1 + - Attachments - Anexos + Passwords + Senhas - Notes - Notas + Save database as + Salvar banco de dados como - Window - Janela + KeePass 2 Database + Banco de dados Keepass 2 - Sequence - Sequência + 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? + - Search - Pesquisar + Delete group + Excluir grupo - Clear - Limpar + Move group to recycle bin? + Mover o grupo para a lixeira? - Never - Nunca + Do you really want to move the group "%1" to the recycle bin? + Você realmente quer mover o grupo "%1" para a Lixeira? - [PROTECTED] - [PROTEGIDO] + Successfully merged the database files. + Fundiu com sucesso os arquivos do banco de dados. - Disabled - Desabilitado + Database was not modified by merge operation. + Banco de dados não foi modificado pela operação de mesclagem. - Enabled - Habilitado + 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 @@ -1997,65 +2563,10 @@ Isto pode causar mal funcionamento dos plugins afetados. - HttpPasswordGeneratorWidget + KMessageWidget - 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 - - &Close - Fe&char + &Close + Fe&char Close message @@ -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 + + unable to seek to content position + + - KeePass2 + KeeShare - AES: 256-bit - AES: 256 bits + Disabled share + Compartilhamento desativado - Twofish: 256-bit - Twofish: 256 bits + Import from + Importar de - ChaCha20: 256-bit - ChaCha20: 256 bits + Export to + Exportar para - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Sincronizar com - 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. - O arquivo cadeado de instância única existente é inválido. Iniciando nova instância. + Key Component + Componente chave - 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. + Key Component Description + Descrição do Componente Chave - Another instance of KeePassXC is already running. - Outra instância do KeePassXC já está rodando. + Cancel + Cancelar - Fatal error while testing the cryptographic functions. - Erro fatal enquanto testava as funções criptográficas. + Key Component set, click to change or remove + - KeePassXC - Error - KeePassXC - Erro + 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,226 +3426,394 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Arquivo chave inválido, é esperado uma chave OpenSSH + &Donate + &Doar - PEM boundary mismatch - Incompatibilidade de limite do PEM + Report a &bug + Relatar um &bug - Base64 decoding failed - Decodificação Base64 falhou + 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. - Key file way too small. - O modo do arquivo chave é muito pequeno. + &Import + &Importar - Key file magic header id invalid - O id do cabeçalho mágico do arquivo chave é invalido + Copy att&ribute... + Copiar at&ributo... - Found zero keys - Nenhuma chave encontrada + TOTP... + TOTP... - Failed to read public key. - Falha ao ler chave pública. + &New database... + &Novo banco de dados... - Corrupted key file, reading private key failed - Arquivo chave corrompido, leitura da chave privada falhou + Create a new database + Criar um banco de dados - No private key payload to decrypt - Chave privada não carregada para decriptar + &Merge from database... + &Mesclar do banco de dados... - Trying to run KDF without cipher - Tentando rodar KDF sem cifra + Merge from another KDBX database + Mesclar de outro banco de dados KDBX - Passphrase is required to decrypt this key - Senha é necessária para decriptar esta chave + &New entry + &Nova entrada - Key derivation failed, key file corrupted? - A derivação da chave falhou, o arquivo chave esta corrompido? + Add a new entry + Adicionar uma nova entrada - Decryption failed, wrong passphrase? - Decriptação falhou, senha errada? + &Edit entry + &Editar entrada - Unexpected EOF while reading public key - EOF inesperado enquanto lendo a chave pública + View or edit entry + Exibir ou editar entrada - Unexpected EOF while reading private key - EOF inesperado enquanto lendo a chave privada + &New group + &Novo Grupo - Can't write public key as it is empty - Não é possível escrever a chave pública enquanto estiver vazio + Add a new group + Adicionar a um novo grupo - Unexpected EOF when writing public key - EOF inesperado enquanto escrevendo a chave pública + Change master &key... + Mudar &chave mestra - Can't write private key as it is empty - Não é possível escrever a chave privada enquanto estiver vazio + &Database settings... + &Configurações do banco de dados... - Unexpected EOF when writing private key - EOF inesperado enquanto escrevendp a chave privada + Copy &password + Copiar &senha - Unsupported key type: %1 - Tipo de chave não suportada: %1 + Perform &Auto-Type + Executar &Auto Digitação - Unknown cipher: %1 - Cifra desconhecida: %1 + Open &URL + Abrir &URL - Cipher IV is too short for MD5 kdf - Cifra de IV é muito curta para MD5 kdf + KeePass 1 database... + Banco de dados do KeePass 1... - Unknown KDF: %1 - KDF desconhecido: %1 + Import a KeePass 1 database + Importar banco de dados do KeePass 1 - Unknown key type: %1 - Tipo de chave desconhecida: %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. - OptionDialog + Merger - Dialog - Diálogo + Creating missing %1 [%2] + Criando %1 [%2] - 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 + Relocating %1 [%2] + Realocando %1 [%2] - Enable KeePassHTTP server - Habilitar servidor KeePassHTTP + Overwriting %1 [%2] + Substituindo %1 [%2] - General - Geral + older entry merged from database "%1" + entrada mais antiga mesclada do banco de dados "%1" - 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 + Adding backup for older target %1 [%2] + - 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. + Adding backup for older source %1 [%2] + - &Return only best matching entries - &Retorna apenas as melhores entradas encontradas + Reapplying older target entry on top of newer source %1 [%2] + - Re&quest to unlock the database if it is locked - Pe&dir para desbloquear a base de dados se estiver bloqueada + Reapplying older source entry on top of newer target %1 [%2] + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Apenas entradas com o mesmo esquema (http://, https://, ftp://, ...) são retornadas. + Synchronizing from newer source %1 [%2] + - &Match URL schemes - &Combinar esquemas de URL + Synchronizing from older source %1 [%2] + Sincronizando a partir da fonte antiga %1 [%2] - Sort matching entries by &username - Ordenar entradas coincidentes por nome de &usuário + Deleting child %1 [%2] + - Sort &matching entries by title - Ordenar &entradas por título + Deleting orphan %1 [%2] + - R&emove all shared encryption keys from active database - R&emover todas as chaves criptografadas compartilhadas da base de dados ativa + Changed deleted objects + - Re&move all stored permissions from entries in active database - R&emover todas as permissões armazenadas de entradas na base de dados ativa + Adding missing icon %1 + + + + NewDatabaseWizard - Password Generator - Gerador de Senha + Create a new KeePassXC database... + Criar um novo banco de dados KeePassXC... - Advanced - Avançado + Root + Root group + Raíz + + + + NewDatabaseWizardPage + + WizardPage + Assistente - Always allow &access to entries - Permitir sempre &acesso as entradas + En&cryption Settings + Definições de &cifra - Always allow &updating entries - Permitir sempre &atualizar as entradas + 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. - Only the selected database has to be connected with a client. - Somente o banco de dados selecionado deve estar conectado com um cliente. + Advanced Settings + Definições avançadas - Searc&h in all opened databases for matching entries - Procurar em todas as base de dados abertas por entradas semel&hantes + Simple Settings + Definições básicas + + + NewDatabaseWizardPageEncryption - 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. + Encryption Settings + Definições de cifra - &Return advanced string fields which start with "KPH: " - &Mostrar também campos avançados que começam com "KPH: " + 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 - HTTP Port: - Porta HTTP: + Database Master Key + Chave mestra do banco de dados - Default port: 19455 - Porta padrão: 19455 + A master key known only to you protects your database. + Uma chave mestra conhecida apenas por você protege seu banco de dados. + + + NewDatabaseWizardPageMetaData - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC irá escutar esta porta em 127.0.0.1 + General Database Information + Informações Gerais Sobre o Banco de Dados - <b>Warning:</b> The following options can be dangerous! - <b>AVISO:</b> As seguintes opções podem ser perigosas! + 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 + + Invalid key file, expecting an OpenSSH key + Arquivo chave inválido, é esperado uma chave OpenSSH + + + PEM boundary mismatch + Incompatibilidade de limite do PEM + + + Base64 decoding failed + Decodificação Base64 falhou + + + Key file way too small. + O modo do arquivo chave é muito pequeno. + + + Key file magic header id invalid + O id do cabeçalho mágico do arquivo chave é invalido + + + Found zero keys + Nenhuma chave encontrada + + + Failed to read public key. + Falha ao ler chave pública + + + Corrupted key file, reading private key failed + Arquivo chave corrompido, leitura da chave privada falhou + + + No private key payload to decrypt + Chave privada não carregada para decriptar + + + Trying to run KDF without cipher + Tentando rodar KDF sem cifra + + + Passphrase is required to decrypt this key + Senha é necessária para decriptar esta chave + + + Key derivation failed, key file corrupted? + A derivação da chave falhou, o arquivo chave esta corrompido? + + + Decryption failed, wrong passphrase? + Decriptação falhou, senha errada? + + + Unexpected EOF while reading public key + EOF inesperado enquanto lendo a chave pública. + + + Unexpected EOF while reading private key + 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. + + + Unexpected EOF when writing public key + EOF inesperado enquanto escrevendo a chave pública. + + + Can't write private key as it is empty + EOF inesperado enquanto escrevendo a chave privada. + + + Unexpected EOF when writing private key + EOF inesperado enquanto escrevendp a chave privada. + + + Unsupported key type: %1 + Tipo de chave não suportada: %1 + + + Unknown cipher: %1 + Cifra desconhecida: %1 + + + Cipher IV is too short for MD5 kdf + Cifra de IV é muito curta para MD5 kdf + + + Unknown KDF: %1 + KDF desconhecido: %1 + + + Unknown key type: %1 + Tipo de chave desconhecida: %1 + + + + PasswordEditWidget + + Enter password: + Insira senha: + + + Confirm password: + Confirmar senha: + + + Password + Senha - <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> + <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 - Não é possível ligar a portas privilegiadas + Passwords do not match. + Senha não corresponde. - 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,474 +3883,1093 @@ Usando porta padrão 19455. Wordlist: Lista de palavras: - - Word Count: - Número de Palavras: - Word Separator: Separador de Palavras: - Generate - Gerar + Copy + Copiar + + + Accept + Aceitar + + + Close + Fechar + + + Entropy: %1 bit + Entropia: %1 bit + + + Password Quality: %1 + Qualidade da senha: %1 + + + Poor + Password quality + Pobre + + + Weak + Password quality + Fraco + + + Good + Password quality + Bom + + + Excellent + 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 + + Database not opened + Banco de dados não foi aberto + + + Database hash not available + Hash de banco de dados não disponível + + + Client public key not received + Chave pública do cliente não recebida + + + Cannot decrypt message + Não é possível descriptografar a mensagem + + + Action cancelled or denied + Ação cancelada ou negada + + + KeePassXC association failed, try again + KeePassXC associação falhou, tente novamente + + + Encryption key is not recognized + Chave criptográfica não é reconhecida + + + Incorrect action + Ação incorreta + + + Empty message received + Mensagem vazia recebida + + + No URL provided + Nenhuma URL informada + + + No logins found + Nenhum login encontrado + + + Unknown error + Erro desconhecido + + + Add a new entry to a database. + Adicionar uma nova entrada ao banco de dados. + + + Path of the database. + Caminho do banco de dados + + + Key file of the database. + Arquivo-chave do banco de dados. + + + path + caminho + + + Username for the entry. + Usuário para a entrada. + + + username + usuário + + + URL for the entry. + URL para a entrada. + + + URL + URL + + + Prompt for the entry's password. + Solicitar senha da entrada. + + + Generate a password for the entry. + Gerar uma senha para a entrada. + + + Length for the generated password. + Comprimento para a senha gerada. + + + length + tamanho + + + Path of the entry to add. + Caminho da entrada para adicionar. + + + Copy an entry's password to the clipboard. + Copiar a senha de uma entrada para a área de transferência. + + + Path of the entry to clip. + clip = copy to clipboard + Caminho da entrada para copiar. + + + Timeout in seconds before clearing the clipboard. + Tempo limite em segundos antes de limpar a área de transferência. + + + Edit an entry. + Editar uma entrada. + + + Title for the entry. + Título para a entrada. + + + title + título + + + Path of the entry to edit. + Caminho da entrada para editar. + + + Estimate the entropy of a password. + Calcular a entropia da senha. + + + Password for which to estimate the entropy. + Senha para o qual deseja calcular a entropia. + + + Perform advanced analysis on the password. + Execute análise avançada sobre a senha. + + + Extract and print the content of a database. + Extrair e imprimir o conteúdo do banco de dados. + + + Path of the database to extract. + Caminho do banco de dados para extração. + + + Insert password to unlock %1: + Inserir a senha 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: 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. + + + + +Available commands: + + + +Comandos disponíveis: + + + + Name of the command to execute. + Nome do comando para executar. + + + List database entries. + Listar entradas do banco de dados. + + + Path of the group to list. Default is / + Caminho do grupo para à lista. O padrão é / + + + Find entries quickly. + Encontrar entradas rapidamente. + + + Search term. + Termo de pesquisa. + + + Merge two databases. + Juntar dois bancos de dados. + + + Path of the database to merge into. + Caminho do banco de dados para combinar. + + + Path of the database to merge from. + Caminho do banco de dados para combinar como base. + + + Use the same credentials for both database files. + Use as mesmas credenciais para ambos os arquivos de banco de dados. + + + Key file of the database to merge from. + Arquivo de chave do banco de dados para combinar como base. + + + Show an entry's information. + Mostre 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. + Nomes de atributos para exibir. Esta opção pode ser especificada mais de uma vez, com cada atributo mostrado um-por-linha em ordem determinada. Se nenhum atributo é especificado, um resumo dos atributos padrão é fornecido. + + + attribute + atributo + + + Name of the entry to show. + Nome da entrada para mostrar. + + + NULL device + Dispositivo NULL + + + error reading from device + erro ao ler dispositivo + + + malformed string + sequência de caracteres malformada + + + missing closing quote + apóstrofo de fechamento ausente + + + Group + Grupo + + + Title + Título + + + Username + Nome de usuário + + + Password + Senha + + + Notes + Notas + + + Last Modified + Última modificação + + + Created + Criado + + + Browser Integration + Integração com o Navegador + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + YubiKey [%1] desafio resposta - Slot %2 - %3 + + + Press + Aperte + + + Passive + Passivo + + + SSH Agent + Agente SSH + + + Generate a new random diceware passphrase. + Gere uma senha aleatória diceware novamente. + + + Word count for the diceware passphrase. + Contagem de palavra para a frase-chave diceware. + + + Wordlist for the diceware generator. +[Default: EFF English] + Lista de palavras para o gerador diceware. +[Padrão: EFF Inglês] + + + Generate a new random password. + Gerar nova senha aleatória. + + + Invalid value for password length %1. + + + + Could not create entry with path %1. + + + + Enter password for new entry: + Digite a senha para a nova entrada: + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + 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 + - Copy - Copiar + Type: Repeated + - Accept - Aceitar + Type: Sequence + - Close - Fechar + Type: Spatial + - Apply - Aplicar + Type: Date + - Entropy: %1 bit - Entropia: %1 bit + Type: Bruteforce(Rep) + - Password Quality: %1 - Qualidade da senha: %1 + Type: Dictionary(Rep) + - Poor - Password quality - Pobre + Type: Dict+Leet(Rep) + - Weak - Password quality - Fraco + Type: User Words(Rep) + - Good - Password quality - Bom + Type: User+Leet(Rep) + - Excellent - Password quality - Excelente + Type: Repeated(Rep) + - - - QObject - Database not opened - Banco de dados não foi aberto + Type: Sequence(Rep) + - Database hash not available - Hash de banco de dados não disponível + Type: Spatial(Rep) + - Client public key not received - Chave pública do cliente não recebida + Type: Date(Rep) + - Cannot decrypt message - Não é possível descriptografar a mensagem + Type: Unknown%1 + - Timeout or cannot connect to KeePassXC - Tempo limite ou não pode conectar ao KeePassXC + Entropy %1 (%2) + Entropia %1 (%2) - Action cancelled or denied - Ação cancelada ou negada + *** Password length (%1) != sum of length of parts (%2) *** + - 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? + Failed to load key file %1: %2 + - KeePassXC association failed, try again - KeePassXC associação falhou, tente novamente + File %1 does not exist. + Arquivo %1 não existe. - Key change was not successful - Mudança da chave não foi bem sucedida + Unable to open file %1. + Não é possível abrir o arquivo %1. - Encryption key is not recognized - Chave criptográfica não é reconhecida + Error while reading the database: +%1 + - No saved databases found - Nenhum banco de dados salvo encontrado + Error while parsing the database: +%1 + - Incorrect action - Ação incorreta + Length of the generated password + - Empty message received - Mensagem vazia recebida + Use lowercase characters + Usar caracteres minúsculos - No URL provided - Nenhuma URL informada + Use uppercase characters + Usar caracteres maiúsculos - No logins found - Nenhum login encontrado + Use numbers. + Usar números. - Unknown error - Erro desconhecido + Use special characters + Usar caracteres especiais - Add a new entry to a database. - Adicionar uma nova entrada ao banco de dados. + Use extended ASCII + Use estendido ASCII - Path of the database. - Caminho do banco de dados. + Exclude character set + - Key file of the database. - Arquivo-chave do banco de dados. + chars + - path - caminho + Exclude similar looking characters + - Username for the entry. - Usuário para a entrada. + Include characters from every selected group + - username - usuário + Recursively list the elements of the group. + Listar recursivamente os elementos do grupo. - URL for the entry. - URL para a entrada. + Cannot find group %1. + - URL - URL + Error reading merge file: +%1 + - Prompt for the entry's password. - Solicitar senha da entrada. + Unable to save database to file : %1 + - Generate a password for the entry. - Gerar uma senha para a entrada. + Unable to save database to file: %1 + - Length for the generated password. - Comprimento para a senha gerada. + Successfully recycled entry %1. + - length - tamanho + Successfully deleted entry %1. + - Path of the entry to add. - Caminho da entrada para adicionar. + Show the entry's current TOTP. + - Copy an entry's password to the clipboard. - Copiar a senha de uma entrada para a área de transferência. + ERROR: unknown attribute %1. + - Path of the entry to clip. - clip = copy to clipboard - Caminho da entrada para copiar. + No program defined for clipboard manipulation + - Timeout in seconds before clearing the clipboard. - Tempo limite em segundos antes de limpar a área de transferência. + Unable to start program %1 + - Edit an entry. - Editar uma entrada. + file empty + arquivo vazio - Title for the entry. - Título para a entrada. + %1: (row, col) %2,%3 + - title - título + AES: 256-bit + AES: 256 bits - Path of the entry to edit. - Caminho da entrada para editar. + Twofish: 256-bit + Twofish: 256 bits - Estimate the entropy of a password. - Calcular a entropia da senha. + ChaCha20: 256-bit + ChaCha20: 256 bits - Password for which to estimate the entropy. - Senha para o qual deseja calcular a entropia. + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – recomendado) - Perform advanced analysis on the password. - Execute análise avançada sobre a senha. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Extract and print the content of a database. - Extrair e imprimir o conteúdo do banco de dados. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Path of the database to extract. - Caminho do banco de dados para extração. + Invalid Settings + TOTP + Configurações Inválidas - Insert password to unlock %1: - Inserir a senha para desbloquear %1: + Invalid Key + TOTP + Chave Inválida - Failed to load key file %1 : %2 - Falha ao carregar o arquivo de chave %1: %2 + Message encryption failed. + - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Aviso: 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. + No groups found + Nenhum grupo encontrado - - -Available commands: - - - -Comandos disponíveis: - + Create a new database. + Criar um novo banco de dados. - Name of the command to execute. - Nome do comando para executar. + File %1 already exists. + - List database entries. - Listar entradas do banco de dados. + Loading the key file failed + O carregamento do arquivo de chave falhou - Path of the group to list. Default is / - Caminho do grupo para à lista. O padrão é / + No key is set. Aborting database creation. + Nenhuma chave definida. Abortando a criação de banco de dados. - Find entries quickly. - Encontrar entradas rapidamente. + Failed to save the database: %1. + Falha ao salvar o banco de dados: %1. - Search term. - Termo de pesquisa. + Successfully created new database. + Novo banco de dados criado com sucesso. - Merge two databases. - Juntar dois bancos de dados. + Insert password to encrypt database (Press enter to leave blank): + Inserir senha para criptografar banco de dados (Aperte enter para deixar em branco): - Path of the database to merge into. - Caminho do banco de dados para combinar. + Creating KeyFile %1 failed: %2 + - Path of the database to merge from. - Caminho do banco de dados para combinar como base. + Loading KeyFile %1 failed: %2 + - Use the same credentials for both database files. - Use as mesmas credenciais para ambos os arquivos de banco de dados. + Remove an entry from the database. + Remover entrada do banco de dados. - Key file of the database to merge from. - Arquivo de chave do banco de dados para combinar como base. + Path of the entry to remove. + Caminho para remover entrada. - Show an entry's information. - Mostre informações de uma 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. - 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. - Nomes de atributos para exibir. Esta opção pode ser especificada mais de uma vez, com cada atributo mostrado um-por-linha em ordem determinada. Se nenhum atributo é especificado, um resumo dos atributos padrão é fornecido. + 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. - attribute - atributo + KeePassXC - cross-platform password manager + KeePassXC - gerenciador de senhas multiplataforma - Name of the entry to show. - Nome da entrada para mostrar. + filenames of the password databases to open (*.kdbx) + nome de arquivo do banco de dados de senhas a ser aberto (*.kdbx) - NULL device - Dispositivo nulo + path to a custom config file + caminho para um arquivo de configuração personalizado - error reading from device - erro ao ler dispositivo + key file of the database + arquivo-chave do banco de dados - file empty ! - - Arquivo vazio! - + read password of the database from stdin + ler a senha do banco de dados da entrada padrão - malformed string - sequência de caracteres malformada + Parent window handle + Identificador de janela pai - missing closing quote - cotação de fechamento ausente + Another instance of KeePassXC is already running. + Outra instância do KeePassXC já está rodando. - Group - Grupo + Fatal error while testing the cryptographic functions. + Erro fatal enquanto testava as funções criptográficas. - Title - Título + KeePassXC - Error + KeePassXC - Erro - Username - Nome de usuário + Database password: + Senha do banco de dados: - Password - Senha + Cannot create new group + + + + QtIOCompressor - Notes - Notas + Internal zlib error when compressing: + Erro interno do zlib ao compactar: - Last Modified - Última modificação + Error writing to underlying device: + Erro ao gravar no dispositivo subjacente: - Created - Criado + Error opening underlying device: + Erro ao abrir dispositivo subjacente: - Legacy Browser Integration - Integração do legado de navegador + Error reading data from underlying device: + Erro ao ler dados do dispositivo subjacente: - Browser Integration - Integração com o Navegador + Internal zlib error when decompressing: + Erro interno do zlib ao descompactar: + + + QtIOCompressor::open - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey [%1] desafio resposta - Slot %2 - %3 + The gzip format not supported in this version of zlib. + Sem suporte ao formato gzip nesta versão do zlib. - Press - Aperte + Internal zlib error: + Erro interno do zlib: + + + SSHAgent - Passive - Passivo + Agent connection failed. + Falha na conexão do agente. - SSH Agent - Agente SSH + Agent protocol error. + Erro de protocolo do agente - Generate a new random diceware passphrase. - Gere uma senha aleatória diceware novamente. + No agent running, cannot add identity. + Nenhum agente em execução, não é possível adicionar identidade. - Word count for the diceware passphrase. - Contagem de palavra para a frase-chave diceware. + No agent running, cannot remove identity. + Nenhum agente em execução, não é possível remover a identidade. - count - contagem + Agent refused this identity. Possible reasons include: + Agente recusou essa identidade. Possíveis razões incluem: - Wordlist for the diceware generator. -[Default: EFF English] - Lista de palavras para o gerador diceware. -[Padrão: EFF inglês] + The key has already been added. + O atalho já foi adicionado. - Generate a new random password. - Gerar nova senha aleatória. + Restricted lifetime is not supported by the agent (check options). + - Length of the generated password. - Tamanho da senha gerada. + A confirmation request is not supported by the agent (check options). + + + + SearchHelpWidget - Use lowercase characters in the generated password. - Use caracteres minúsculos na senha gerada. + Search Help + Ajuda com a Busca - Use uppercase characters in the generated password. - Use letras maiúsculas para a senha gerada. + Search terms are as follows: [modifiers][field:]["]term["] + - Use numbers in the generated password. - Use números na senha gerada. + Every search term must match (ie, logical AND) + - Use special characters in the generated password. - Use caracteres especiais na senha gerada. + Modifiers + Modificadores - Use extended ASCII in the generated password. - Uso estendido ASCII na senha gerada. + exclude term from results + excluir termo dos resultados + + + match term exactly + encontrar termo exato - - - QtIOCompressor - Internal zlib error when compressing: - Erro interno do zlib ao compactar: + use regex in term + usar regex no termo - Error writing to underlying device: - Erro ao gravar no dispositivo subjacente: + Fields + Campos - Error opening underlying device: - Erro ao abrir dispositivo subjacente: + Term Wildcards + Termos Coringas - Error reading data from underlying device: - Erro ao ler dados do dispositivo subjacente: + match anything + coincidir com qualquer coisa - Internal zlib error when decompressing: - Erro interno do zlib ao descompactar: + match one + coincidir com um - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Sem suporte ao formato gzip nesta versão do zlib. + logical OR + lógico OU - Internal zlib error: - Erro interno do zlib: + Examples + Exemplos SearchWidget - - Search... - Buscar... - 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 - - 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. + + Import + Importar - KeePassXC: No keys found - KeePassXC: Nenhuma chave localizada + Export + Exportar - No shared encryption-keys found in KeePassHttp Settings. - Nenhuma chave de criptografia compartilhada encontrada nas Configurações do KeePassHttp. + Imported certificates + Certificados importados - KeePassXC: Settings not available! - KeePassXC: Configurações não disponíveis! + Trust + Confiar - 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. + Ask + Perguntar - Removing stored permissions... - Removendo permissões armazenadas... + Untrust + Não Confiar - Abort - Cancelar + Remove + Remover - KeePassXC: Removed permissions - KeePassXC: Permissões removidas + Path + Caminho - - Successfully removed permissions from %n entries. - Removido com êxito as permissões de %n entradas.Removido com êxito as permissões de %n entradas. + + Status + Status - KeePassXC: No entry with permissions found! - KeePassXC: Nenhuma entrada com permissões localizada! + Fingerprint + Fingerprint - The active database does not contain an entry with permissions. - A base de dados ativa não contém uma entrada com permissões. + Certificate + Certificado - - - SettingsWidget - Application Settings - Configurações do Aplicativo + Trusted + Confiável - General - Geral + Untrusted + Não Confiável - Security - Segurança + Unknown + Desconhecido - Access error for config file %1 - Erro de acesso para o arquivo de configuração %1 + key.share + Filetype for KeeShare key + - - - SettingsWidgetGeneral - Basic Settings - Configurações Básicas + KeeShare key file + - Start only a single instance of KeePassXC - Iniciar apenas uma única instância do KeePassXC + All files + Todos arquivos - Remember last databases - Lembrar dos últimos bancos de dados + Select path + Selecione o caminho - Remember last key files and security dongles - Lembre-se de arquivos de chave passados e dongles de segurança + Exporting changed certificate + Exportando certificado alterado - Load previous databases on startup - Carregar bancos de dados anteriores na inicialização + 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? - Automatically save on exit - Salvar automaticamente ao sair + Signer: + + + + ShareObserver - Automatically save after every change - Salvar automaticamente depois de cada alteração + Import from container without signature + Importar do contêiner sem assinatura - Automatically reload the database when modified externally - Automaticamente recarregar o banco de dados quando houver modificações externas + 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? - Minimize when copying to clipboard - Minimizar ao copiar para área de transferência + Import from container with certificate + Importar do contêiner com certificado - Minimize window at application startup - Iniciar programa com janela minimizada + Not this time + Não dessa vez - Use group icon on entry creation - Usar ícone de grupo na criação da entrada + Never + Nunca - 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) + Always + Sempre - Hide the Details view - Ocultar a visualização de detalhes + Just this time + Só desta vez - Show a system tray icon - Mostrar um ícone da bandeja do sistema + Import from %1 failed (%2) + - Hide window to system tray when minimized - Ocultar janela na bandeja de sistema quando minimizada + Import from %1 successful (%2) + - Hide window to system tray instead of app exit - Ocultar janela na bandeja de sistema em vez de sair do programa + Imported from %1 + Importado de %1 - Dark system tray icon - Ícone de bandeja do sistema escuro + Signed share container are not supported - import prevented + - Language - Idioma + File is not readable + Arquivo não é legível - Auto-Type - Auto-Digitação + Invalid sharing container + Contêiner de compartilhamento inválido - 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 + Untrusted import prevented + Importação não confiável impedida - Use entry URL to match windows for global Auto-Type - Use o URL de entrada para coincidir com a janela para Auto-Digitar global + Successful signed import + Importação assinada bem-sucedida - Always ask before performing Auto-Type - Sempre perguntar antes de executar o Auto-Digitar + Unexpected error + Erro inesperado - Global Auto-Type shortcut - Atalho para Auto-Digitação Global + Unsigned share container are not supported - import prevented + - Auto-Type delay - Atraso de autotipo + Successful unsigned import + - ms - Milliseconds - ms + File does not exist + Arquivo não existe - Startup - Inicialização + Unknown share container type + - File Management - Gerenciamento de Arquivo + Overwriting signed share container is not supported - export prevented + - 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) + Could not write export container (%1) + - Backup database file before saving - Fazer cópia de segurança do banco de dados antes de salvar + 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 - Entry Management - Gerenciamento de entrada + Could not write export container + Não foi possível escrever o contêiner de exportação - General - Geral + Unexpected export error occurred + Ocorreu um erro de exportação inesperado - - - SettingsWidgetSecurity - Timeouts - Tempos limite + Export to %1 failed (%2) + - Clear clipboard after - Limpar área de transferência após + Export to %1 successful (%2) + - sec - Seconds - seg + Export to %1 + Exportar para %1 - Lock databases after inactivity of - Travar bancos de dados após inatividade de + Do you want to trust %1 with the fingerprint of %2 from %3? + - Convenience - Conveniência + Multiple import source path to %1 in %2 + - 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 + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Bloquear bancos de dados após minimizar a janela + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Quando a senha for visível não pedir para repeti-la + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Mostrar senhas em texto claro por padrão + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Ocultar senhas no painel de visualização + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Esconder notas de entrada por padrão + Timed Password + Senha Temporária - Privacy - Privacidade + 000000 + 000000 + + + Copy + Copiar + + + Expires in <b>%n</b> second(s) + Expira em <b>%n</b> segundo(s)Expira em <b>%n</b> segundo(s) + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Usar o Google como fallback para baixar ícones do site + Copy + Copiar - Re-lock previously locked database after performing Auto-Type - Bloquear novamente o banco de dados anteriormente bloqueado depois de executar o Auto-Digitar + 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. + + + There was an error creating the QR code. + Ocorreu um erro ao criar o código QR. + + + Closing in %1 seconds. + Fechando em %1 segundos. - 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 + sec + Seconds + seg + + + Code size: + Tamanho do código: 6 digits 6 dígitos - Code size: - Tamanho do código: + 7 digits + 7 dígitos - sec - Seconds - seg + 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. + + + 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! - - - UnlockDatabaseWidget - Unlock database - Destrancar banco de dados + 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 - - Remove an entry from the database. - Remover entrada do banco de dados. - - - Path of the database. - Caminho do banco de dados. - - - Path of the entry to remove. - Caminho do item à ser removido. - + YubiKeyEditWidget - 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) + Refresh + Atualizar - path to a custom config file - caminho para um arquivo de configuração personalizado + YubiKey Challenge-Response + - key file of the database - arquivo-chave do banco de dados + <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> + - read password of the database from stdin - ler a senha do banco de dados da entrada padrão + No YubiKey detected, please ensure it's plugged in. + Nenhuma YubiKey detectada, verifique se está conectada. - 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 5ef30eeccb..5e2014fc8c 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 @@ -38,91 +38,301 @@ Copiar para a área de transferência - Version %1 - - Versão %1 - + 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 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 - Revision: %1 - Revisão: %1 + Application Settings + Definições da aplicação - Distribution: %1 - Distribuição: %1 + General + Geral - Libraries: - Bibliotecas: + Security + Segurança - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operativo: %1 -Arquitetura do CPU: %2 -Kernel: %3 %4 + Access error for config file %1 + Erro de acesso ao ficheiro %1 - Enabled extensions: - Extensões ativas: + Icon only + Apenas ícones - Project Maintainers: - Manutenção do projeto: + Text only + Apenas texto - 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. + Text beside icon + Texto ao lado dos ícones - Build Type: %1 - - Tipo de compilação: %1 - + Text under icon + Texto por baixo dos ícones + + + Follow style + Seguir estilo - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP - Confirmar acesso + Basic Settings + Definições básicas - Remember this decision - Memorizar esta escolha + Startup + Arranque - Allow - Permitir + Start only a single instance of KeePassXC + Abrir apenas uma instância do KeepassXC - Deny - Recusar + Remember last databases + Memorizar últimas bases de dados - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Ativar agente SSH (tem que reiniciar) + 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,44 +578,65 @@ 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! + <b>Aviso</b>: as opções seguintes podem ser perigosas! - Executable Files (*.exe);;All Files (*.*) - Ficheiros executáveis (*.exe);;Todos os ficheiros (*.*) + Select custom proxy location + Selecionar localização do proxy personalizado - Executable Files (*) - Ficheiros executáveis (*) + &Tor Browser + Navegador &Tor - Select custom proxy location - Selecionar localização do proxy personalizado + <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: - 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. + Executable Files + Ficheiros executáveis - - - BrowserService - KeePassXC: New key association request - KeePassXC: Pedido de associação de nova chave + All Files + Todos os ficheiros - 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, -digite um nome identificável e aceite o pedido. + 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 @@ -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 - - - 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. - - - - ChangeMasterKeyWidget - - Password - Palavra-passe - - - Enter password: - Digite a palavra-passe: - - - Repeat password: - Repita a palavra-passe: - - - &Key file - Ficheiro-&chave - - - 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... + Converting attributes to custom data… + A converter atributos para dados personalizados... - Unable to create Key File : - Incapaz de criar o ficheiro-chave: + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Atributos KeePassHTTP convertidos - Select a key file - Selecione o ficheiro-chave + 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. - - Empty password - Palavra-passe vazia + + Successfully moved %n keys to custom data. + %n chave movida para dados personalizados.%n chaves movidas para dados personalizados. - Do you really want to use an empty string as password? - Deseja mesmo utilizar uma cadeia vazia como palavra-passe? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Não existem entradas com atributos KeePassHTTP! - Different passwords supplied. - As palavras-passe não são iguais. + The active database does not contain an entry with KeePassHTTP attributes. + A base de dados ativa não tem entradas com atributos KePassHTTP. - Failed to set %1 as the Key file: -%2 - Falha ao definir %1 como ficheiro-chave: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: Detetadas definições de integração legada com o navegador - Legacy key file format - Formato legado de ficheiro-chave + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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: + Dados originais: - Error(s) detected in CSV file ! - Detetado(s) erro(s) no ficheiro CSV! + Error + Erro - more messages skipped] - mais mensagens ignoradas] + Empty fieldname %1 + Nome de campo vazio %1 - Error - Erro + column %1 + coluna %1 - CSV import: writer has errors: - - Importação CSV: com erros: - + Error(s) detected in CSV file! + Detetado(s) erro(s) no ficheiro CSV! - - - CsvImportWizard - - Error - Erro + + [%n more message(s) skipped] + [%n mensagem ignorada][%n mensagens ignoradas] - Unable to calculate master key - Impossível de calcular a chave-mestre + CSV import: writer has errors: +%1 + Importação CSV com erros: +%1 CsvParserModel - %n byte(s), - %n bytes, %n bytes, + %n column(s) + %n coluna,%n coluna(s), + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n linha,%n linhas, + %n byte(s) + %n byte%n bytes - %n column(s) - %n coluna,%n colunas, + %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,120 +938,189 @@ 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 + Can't open key file: +%1 + Não foi possível abrir o ficheiro-chave: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Incapaz de abrir a base de dados. + Passwords + Palavras-passe + + + + DatabaseSettingsDialog + + Advanced Settings + Definições avançadas + + + General + Geral - Database opened fine. Nothing to do. - Base de dados aberta. Nada para fazer. + Security + Segurança - Success - Sucesso + Master Key + Chave-mestre - The database has been successfully repaired -You can now save it. - A base de dados foi reparada com sucesso -Agora já a pode guardar. + Encryption Settings + Definições de cifra - Unable to repair the database. - Incapaz de reparar a base de dados. + Browser Integration + Integração com navegador - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Geral + KeePassXC-Browser settings + Definições KeePassXC-Browser - Encryption - Cifra + &Disconnect all browsers + &Desconectar de todos os navegadores - Number of rounds too high - Key transformation rounds - Número de ciclos muito alto + Forg&et all site-specific settings on entries + &Esquecer definições específicas dos sites (nas entradas) - 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! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Mover atributos KeePassHTTP para dados personalizados KeePassX&C-Browser - Understood, keep number - Percebi, manter número + Stored keys + Chaves guardadas - Cancel - Cancelar + Remove + Remover - Number of rounds too low - Key transformation rounds - Número de ciclos muito baixo + Delete the selected key? + Apagar chave selecionada? - 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! + 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. - KDF unchanged - KDF inalterado + Key + Chave - Failed to transform key with new KDF parameters; KDF unchanged. - Falha ao transformar a chave com os novos parâmetros KDF; KDF inalterado. + Value + Valor - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB + + Enable Browser Integration to access these settings. + Ative a integração com o navegador para aceder a estas definições. - - thread(s) - Threads for parallel execution (KDF settings) - processoprocessos + + Disconnect all browsers + Desconectar de todos os navegadores - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Algoritmo de cifra: + 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. - AES: 256 Bit (default) - AES: 256 bits (padrão) + KeePassXC: No keys found + KeePassXC: Nenhuma chave encontrada - Twofish: 256 Bit - Twofish: 256 bits + 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: @@ -893,7 +1132,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm Benchmark 1-second delay - + Testar atraso de 1 segundo Memory Usage: @@ -903,6 +1142,113 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm 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) + processo processos + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + DatabaseSettingsWidgetGeneral @@ -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,91 +1298,112 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Raiz + Sharing + Partilha - KeePass 2 Database - Base de dados do KeePass 2 + Breadcrumb + Breadcrumb - All files - Todos os ficheiros + Type + Tipo - Open database - Abrir base de dados + Path + Caminho - File not found! - Ficheiro não encontrado! + Last Signer + Último signatário - Unable to open the database. - Incapaz de abrir a base de dados. + Certificates + Certificados - File opened in read only mode. - Ficheiro aberto no modo de leitura. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Abrir ficheiro CSV + Add additional protection... + Adicionar proteção extra... - CSV file - Ficheiro CSV + No encryption key added + Chave de cifra não adicionada - All files (*) - Todos os ficheiros (*) + 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! - Merge database - Combinar base de dados + No password set + Palavra-passe não definida - Open KeePass 1 database - Abrir base de dados do KeePass 1 + 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? - KeePass 1 database - Base de dados do KeePass 1 + Unknown error + Erro desconhecido + + + Failed to change master key + Erro ao alterar a chave-mestre + + + DatabaseSettingsWidgetMetaDataSimple - Close? - Fechar? + Database Name: + Nome da base de dados: - "%1" is in edit mode. -Discard changes and close anyway? - %1 está em modo de edição. -Deseja fechar e perder as alterações? + Description: + Descrição: + + + DatabaseTabWidget - Save changes? - Guardar alterações? + KeePass 2 Database + Base de dados do KeePass 2 - "%1" was modified. -Save changes? - "%1" foi modificada. -Guardar alterações? + All files + Todos os ficheiros - Writing the database failed. - Falha ao escrever na base de dados. + Open database + Abrir base de dados - Passwords - Palavras-passe + CSV file + Ficheiro CSV - Save database as - Guardar base de dados como + 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 @@ -1044,43 +1411,44 @@ Guardar alterações? Writing the CSV file failed. - Falha ao escrever no ficheiro CSV. + Erro ao escrever no ficheiro CSV. - New database - Nova base de dados + Database creation error + Erro ao criar a base de dados - locked - bloqueada + 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. - Lock database - Bloquear base de dados + 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. - 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. + Select CSV file + Selecionar ficheiro CSV - 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. + New Database + Nova base de dados - Disable safe saves? - Desativar salvaguardas? + %1 [New Database] + Database tab name modifier + %1 [Nova base 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? - 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 [Locked] + Database tab name modifier + %1 [Bloqueada] + + + %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 @@ -2000,84 +2572,49 @@ Esta ação pode implicar um funcionamento errático. - HttpPasswordGeneratorWidget + KMessageWidget - Length: - Comprimento: + &Close + Fe&char - Character Types - Tipos de caracteres + Close message + Fechar mensagem + + + Kdbx3Reader - Upper Case Letters - Letras maiúsculas + Unable to calculate master key + Não foi possível calcular a chave-mestre - 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 + Unable to issue challenge-response. + Não foi possível emitir a pergunta de segurança. - Extended ASCII - ASCII expandido + Wrong key or database file is corrupt. + Chave errada ou base de dados danificada. - - - KMessageWidget - &Close - Fe&char + missing database headers + cabeçalhos em falta da base de dados - Close message - Fechar mensagem + Header doesn't match hash + Disparidade de 'hash' no cabeçalho - - - Kdbx3Reader - Unable to calculate master key - Não foi possível calcular a chave-mestre + Invalid header id size + Tamanho do id do cabeçalho inválido - Unable to issue challenge-response. - Não foi possível emitir a pergunta de segurança. + Invalid header field length + Comprimento do campo de cabeçalho inválido - Wrong key or database file is corrupt. - Chave errada ou base de dados danificada. + Invalid header data length + Comprimento dos dados de cabeçalho inválido @@ -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 + + unable to seek to content position + Não foi possível pesquisar no conteúdo + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + Partilha desativada - Twofish: 256-bit - Twofish: 256-bit + Import from + Importar de - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + Exportar para - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Sincronizar com - 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. - O ficheiro de bloqueio da instância única é inválido. A iniciar nova instância. + Key Component + Componente chave - 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. + Key Component Description + Descrição do componente chave - Another instance of KeePassXC is already running. - Já está em execução uma instância do KeePassXC. + Cancel + Cancelar - Fatal error while testing the cryptographic functions. - Erro fatal ao testar as funções de criptografia. + Key Component set, click to change or remove + Componente chave definido, clique para alterar ou remover - KeePassXC - Error - KeePassXC - Erro + 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 @@ -2868,257 +3428,405 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados Sair do KeePassXC - KeePass 2 Database - Base de dados do KeePass 2 + Please touch the button on your YubiKey! + Toque no botão da sua YubiKey! - All files - Todos os ficheiros - + 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 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. + - Open database - Abrir base de dados + &Donate + &Donativos - Save repaired database - Guardar base de dados reparada + Report a &bug + Reportar um &erro - Writing the database failed. - Falha ao escrever na base de dados. + 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. - Please touch the button on your YubiKey! - Toque no botão da sua YubiKey! + &Import + &Importar - 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. + 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. - OpenSSHKey + Merger - Invalid key file, expecting an OpenSSH key - Chave inválida, esperada chave OpenSSH + Creating missing %1 [%2] + A criar %1 [%2] - PEM boundary mismatch - Disparidade nos limites PEM + Relocating %1 [%2] + A alocar %1 [%2] - Base64 decoding failed - Falha na descodificação Base64 + Overwriting %1 [%2] + A substituir %1 [%2] - Key file way too small. - Ficheiro-chave muito pequeno + older entry merged from database "%1" + entrada antiga combinada da base de dados %1 - Key file magic header id invalid - ID do cabeçalho mágico do ficheiro-chave inválida + Adding backup for older target %1 [%2] + A adicionar backup para o destino antigo %1 [%2] - Found zero keys - Encontradas zero chaves + Adding backup for older source %1 [%2] + A adicionar backup para a origem antiga %1 [%2] - Failed to read public key. - Falha ao ler a chave pública. + Reapplying older target entry on top of newer source %1 [%2] + A reaplicar a entrada de destino antiga na origem recente %1 [%2] - Corrupted key file, reading private key failed - Ficheiro danificado, erro ao ler a chave privada + Reapplying older source entry on top of newer target %1 [%2] + A reaplicar a entrada de origem antiga no destinio recente %1 [%2] - No private key payload to decrypt - Não existe chave privada para decifrar + Synchronizing from newer source %1 [%2] + A sincronizar da origem recente %1 [%2] - Trying to run KDF without cipher - A tentar executar KDF sem cifra + Synchronizing from older source %1 [%2] + A sincronizar da origem antiga %1 [%2] - Passphrase is required to decrypt this key - Requer frase-chave para decifrar esta chave + Deleting child %1 [%2] + A apagar dependente %1 [%2] - Key derivation failed, key file corrupted? - Falha na derivação da chave, ficheiro chave danificado? + Deleting orphan %1 [%2] + A apagar órfão %1 [%2] - Decryption failed, wrong passphrase? - Falha ao decifrar, frase-chave errada? + Changed deleted objects + Objetos apagados alterados - Unexpected EOF while reading public key - EOF inesperado ao ler a chave pública + Adding missing icon %1 + Adicionar ícone em falta %1 + + + NewDatabaseWizard - Unexpected EOF while reading private key - EOF inesperado ao ler a chave privada + Create a new KeePassXC database... + A criar uma nova base de dados do KeePassXC... - Can't write public key as it is empty - Incapaz de escrever a chave pública porque está vazia + Root + Root group + Raiz + + + NewDatabaseWizardPage - Unexpected EOF when writing public key - EOF inesperado ao escrever a chave pública + WizardPage + Assistente - Can't write private key as it is empty - Incapaz de escrever a chave privada porque está vazia + En&cryption Settings + Definições de &cifra - Unexpected EOF when writing private key - EOF inesperado ao escrever a chave privada + 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. - Unsupported key type: %1 - Tipo de chave não suportado: %1 + Advanced Settings + Definições avançadas - Unknown cipher: %1 - Cifra desconhecida: %1 + Simple Settings + Definições básicas + + + NewDatabaseWizardPageEncryption - Cipher IV is too short for MD5 kdf - Cifra IV é muito curta para MD kdf + Encryption Settings + Definições de cifra - Unknown KDF: %1 - KDF desconhecido: %1 + 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 - Unknown key type: %1 - Tipo de chave desconhecido: %1 + 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. - OptionDialog + NewDatabaseWizardPageMetaData - Dialog - Diálogo + General Database Information + Informação geral sobre a base de dados - 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 + 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 - Enable KeePassHTTP server - Ativar servidor KeePassHTTP + Invalid key file, expecting an OpenSSH key + Chave inválida, esperada chave OpenSSH - General - Geral + PEM boundary mismatch + Disparidade nos limites PEM - 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 + Base64 decoding failed + Erro de descodificação Base64 - 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. + Key file way too small. + Ficheiro-chave muito pequeno. - &Return only best matching entries - Devolve&r apenas as entradas coincidentes + Key file magic header id invalid + ID do cabeçalho mágico do ficheiro-chave inválida - Re&quest to unlock the database if it is locked - Pe&dir para desbloquear a base de dados se esta estiver bloqueada + Found zero keys + Encontradas zero chaves - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Apenas serão devolvidas as entradas com o mesmo esquema (http://, https://, ftp://, ...). + Failed to read public key. + Erro ao ler a chave pública. - &Match URL schemes - Corresponder com os esque&mas do URL + Corrupted key file, reading private key failed + Ficheiro danificado, erro ao ler a chave privada - Sort matching entries by &username - Ordenar entradas coincidentes por nome de &utilizador + No private key payload to decrypt + Não existe uma chave privada para decifrar - Sort &matching entries by title - Ordenar &entradas por título + Trying to run KDF without cipher + A tentar executar KDF sem cifra - R&emove all shared encryption keys from active database - R&emover todas as chaves cifradas partilhadas da base de dados ativa + Passphrase is required to decrypt this key + Necessita de uma frase-chave para decifrar esta chave - 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 + Key derivation failed, key file corrupted? + Erro na derivação da chave, ficheiro-chave danificado? - Password Generator - Gerador de palavra-passe + Decryption failed, wrong passphrase? + Erro ao decifrar, frase-chave errada? - Advanced - Avançado + Unexpected EOF while reading public key + EOF inesperado ao ler a chave pública - Always allow &access to entries - Permitir sempre &acesso às entradas + Unexpected EOF while reading private key + EOF inesperado ao ler a chave privada - Always allow &updating entries - Permitir sempre at&ualizar as entradas + Can't write public key as it is empty + Incapaz de escrever a chave pública porque está vazia - Only the selected database has to be connected with a client. - Apenas a base de dados selecionada tem que estar conectada a um cliente. + Unexpected EOF when writing public key + EOF inesperado ao escrever a chave pública - Searc&h in all opened databases for matching entries - Pesquisar por entradas semel&hantes em todas as base de dados abertas + Can't write private key as it is empty + Incapaz de escrever a chave privada porque está vazia - Automatically creating or updating string fields is not supported. - A criação ou atualização dos campos de cadeias não é suportada. + Unexpected EOF when writing private key + EOF inesperado ao escrever a chave privada - &Return advanced string fields which start with "KPH: " - Most&rar campos avançados que começam com "KPH: " + Unsupported key type: %1 + Tipo de chave não suportado: %1 + + + Unknown cipher: %1 + Cifra desconhecida: %1 - HTTP Port: - Porta HTTP: + Cipher IV is too short for MD5 kdf + Cifra IV é muito curta para MD kdf - Default port: 19455 - Porta padrão: 19455 + Unknown KDF: %1 + KDF desconhecido: %1 - KeePassXC will listen to this port on 127.0.0.1 - O KeePassXC vai escutar nesta porta em 127.0.0.1 + Unknown key type: %1 + Tipo de chave desconhecido: %1 + + + PasswordEditWidget - <b>Warning:</b> The following options can be dangerous! - <b>AVISO</b>: as opções seguintes podem ser perigosas! + Enter password: + Introduza a palavra-passe: + + + Confirm password: + Confirmação de palavra-passe: + + + Password + Palavra-passe - <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> + <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> - Cannot bind to privileged ports - Incapaz de associar às portas privilegiadas + Passwords do not match. + Disparidade nas palavras-passe. - 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,99 +3940,248 @@ Será utilizada a porta 19455 (padrão). Password quality Excelente - - - QObject - Database not opened - Base de dados não aberta + ExtendedASCII + ASCII expandido - Database hash not available - 'Hash' da base de dados não disponível + Switch to advanced mode + Ativar modo avançado - Client public key not received - Chave pública do cliente não recebida + Advanced + Avançado - Cannot decrypt message - Não foi possível decifrar a mensagem + Upper Case Letters A to F + Letras maiúsculas de A até F - Timeout or cannot connect to KeePassXC - Tempo limite atingido ou não foi possível comunicar com o KeePassXC + A-Z + A-Z - Action cancelled or denied - Ação cancelada ou recusada + Lower Case Letters A to F + Letras minúsculas de A até F - 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? + a-z + a-z - KeePassXC association failed, try again - Falha ao associar o KeePassXC. Tente novamente. + 0-9 + 0-9 - Key change was not successful - Alteração de chave não efetuada + Braces + Parênteses - Encryption key is not recognized - Chave de cifra não reconhecida + {[( + {[( - No saved databases found - Não existem bases de dados guardadas + Punctuation + Pontuação - Incorrect action - Ação incorreta + .,:; + .,:; - Empty message received - Recebida mensagem vazia + Quotes + Aspas - No URL provided - URL não disponibilizado + " ' + " ' - No logins found - Não existem credenciais + Math + Matemática - Unknown error - Erro desconhecido + <*+!?= + <*+!?= - Add a new entry to a database. - Adicionar entrada à base de dados. + Dashes + Traços - Path of the database. - Caminho da base de dados. + \_|-/ + \_|-/ - Key file of the database. - Ficheiro-chave da base de dados. + Logograms + Logo-gramas - path - caminho + #$%&&@^`~ + #$%&&@^`~ - Username for the entry. - Nome de utilizador para a entrada. + Switch to simple mode + Trocar para o modo básico - username - nome de utilizador + Simple + Básico - URL for the entry. + 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 + + 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. @@ -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,70 +4420,573 @@ 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 + + + 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 - Use lowercase characters in the generated password. - Utilizar letras minúsculas para a palavra-passe gerada. + Search terms are as follows: [modifiers][field:]["]term["] + Introduza os termos de pesquisa da seguinte forma: [modificadores][campo:]["]termo["] - Use uppercase characters in the generated password. - Utilizar letras maiúsculas para a palavra-passe gerada. + Every search term must match (ie, logical AND) + Todos os termos de pesquisa coincidentes (AND lógico) - Use numbers in the generated password. - Utilizar números para a palavra-passe gerada. + Modifiers + Modificadores - Use special characters in the generated password. - Utilizar caracteres especiais para a palavra-passe gerada. + exclude term from results + excluir termo dos resultados - Use extended ASCII in the generated password. - Utilizar ASCII estendido para a palavra-passe gerada. + match term exactly + coincidência exata - - - QtIOCompressor - Internal zlib error when compressing: - Erro interno zlib durante a compressão: + use regex in term + utilizar regex no termo - Error writing to underlying device: - Erro de escrita no dispositivo subjacente: + Fields + Campos - Error opening underlying device: - Erro ao abrir o dispositivo subjacente: + Term Wildcards + Caracteres universais do termo - Error reading data from underlying device: - Erro de leitura no dispositivo subjacente: + match anything + coincidência relativa - Internal zlib error when decompressing: - Erro interno zlib durante a descompressão: + match one + uma coincidência - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - O formato gzip não é suportado por esta versão zlib. + logical OR + OU lógico - Internal zlib error: - Erro interno zlib: + 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 - - 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. + + Import + Importar - KeePassXC: No keys found - KeePassXC: Nenhuma chave encontrada + Export + Exportar - No shared encryption-keys found in KeePassHttp Settings. - Nenhuma chaves de cifra partilhadas encontrada nas definições do KeePassHttp. + Imported certificates + Certificados importados - KeePassXC: Settings not available! - KeePassXC: Definições indisponíveis! + Trust + Confiar - 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. + Ask + Perguntar - Removing stored permissions... - A remover permissões guardadas... + Untrust + Deixar de confiar - Abort - Abortar + Remove + Remover - KeePassXC: Removed permissions - KeePassXC: Permissões removidas + Path + Caminho - - Successfully removed permissions from %n entries. - Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas. + + Status + Estado - KeePassXC: No entry with permissions found! - KeePassXC: Não existem entradas com permissões! + Fingerprint + Impressão digital - The active database does not contain an entry with permissions. - A base de dados ativa não contém uma entrada com permissões. + Certificate + Certificado - - - SettingsWidget - Application Settings - Definições da aplicação + Trusted + Confiável - General - Geral + Untrusted + Não confiável - Security - Segurança + Unknown + Desconhecido - Access error for config file %1 - Erro de acesso ao ficheiro %1 + key.share + Filetype for KeeShare key + partilha da chave - - - SettingsWidgetGeneral - Basic Settings - Definições básicas + KeeShare key file + Ficheiro-chave KeeShare - Start only a single instance of KeePassXC - Abrir apenas uma instância do KeepassXC + All files + Todos os ficheiros - Remember last databases - Memorizar últimas bases de dados + Select path + Selecionar caminho - Remember last key files and security dongles - Memorizar últimos ficheiros-chave e dispositivos de segurança + Exporting changed certificate + A exportar certificado alterado - Load previous databases on startup - Ao iniciar, carregar a última base de dados utilizada + 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? - Automatically save on exit - Guardar automaticamente ao fechar + Signer: + + + + ShareObserver - Automatically save after every change - Guardar automaticamente a cada alteração + Import from container without signature + Importar de um contentor sem assinatura - Automatically reload the database when modified externally - Recarregar base de dados se esta for modificada externamente + 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? - Minimize when copying to clipboard - Minimizar ao copiar para a área de transferência + Import from container with certificate + Importar de um contentor com certificado - Minimize window at application startup - Minimizar janela ao iniciar a aplicação + Not this time + Agora não - Use group icon on entry creation - Utilizar ícone do grupo ao criar a entrada + Never + Nunca - 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) + Always + Sempre - Hide the Details view - Ocultar vista de detalhes + Just this time + Apenas agora - Show a system tray icon - Mostrar ícone na bandeja do sistema + Import from %1 failed (%2) + Não foi possível importar %1 (%2) - Hide window to system tray when minimized - Ao minimizar, ocultar a janela na bandeja do sistema + Import from %1 successful (%2) + %1 foi importada com sucesso (%2) - Hide window to system tray instead of app exit - Ao fechar, ocultar a janela na bandeja do sistema + Imported from %1 + Importada de %1 - Dark system tray icon - Ícone escuro na bandeja + Signed share container are not supported - import prevented + O contentor de partilha assinado não é suportado - importação evitada - Language - Idioma + File is not readable + O ficheiro não é legível - Auto-Type - Escrita automática + Invalid sharing container + Contentor de partilha inválido - Use entry title to match windows for global Auto-Type - Utilizar título da entrada para fazer coincidir com a escrita automática + Untrusted import prevented + Importação não fiável impedida - Use entry URL to match windows for global Auto-Type - Utilizar URL da entrada para fazer coincidir com a escrita automática + Successful signed import + Importação assinada bem sucedida - Always ask before performing Auto-Type - Perguntar antes de executar a escrita automática + Unexpected error + Erro inesperado - Global Auto-Type shortcut - Atalho global de escrita automática + Unsigned share container are not supported - import prevented + O contentor de partilha não assinado não é suportado - importação evitada - Auto-Type delay - Atraso de escrita automática + Successful unsigned import + Importação não assinada bem sucedida - ms - Milliseconds - ms + File does not exist + O ficheiro não existe - Startup - Arranque + Unknown share container type + Tipo de contentor de partilha desconhecido - File Management - Gestão de ficheiros + 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 - 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) + Could not write export container (%1) + Não foi possível escrever contentor de exportação (%1) - Backup database file before saving - Criar backup da base de dados antes de guardar + Overwriting unsigned share container is not supported - export prevented + A substituição de contentor de partilha assinado não é suportada - exportação evitada - Entry Management - Gestão de entradas + Could not write export container + Não foi possível escrever contentor de exportação - General - Geral + Unexpected export error occurred + Ocorreu um erro inesperado ao exportar - - - SettingsWidgetSecurity - Timeouts - Tempo limite + Export to %1 failed (%2) + Não foi possível exportar %1 (%2) - Clear clipboard after - Limpar área de transferência após + Export to %1 successful (%2) + %1 foi exportada com sucesso (%2) - sec - Seconds - seg. + Export to %1 + Exportar para %1 - Lock databases after inactivity of - Bloquear base de dados se inativa durante + 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 ?} - Convenience - Conveniência + Multiple import source path to %1 in %2 + - 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 + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Bloquear base de dados ao minimizar a janela + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Não pedir repetição da palavra-passe se esta estiver visível + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Mostrar palavras-passe em texto simples + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Ocultar palavras-passe no painel de pré-visualização + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Por definição, ocultar notas da entrada + Timed Password + Palavra-passe limitada - Privacy - Privacidade + 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 - Use Google as fallback for downloading website icons - Utilizar o Google como recurso para descarregar os ícones dos sites + 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. - Re-lock previously locked database after performing Auto-Type - Bloquear novamente a base de dados depois de usar a escrita automática + 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. - 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 + sec + Seconds + seg + + + Code size: + Tamanho do código: 6 digits 6 dígitos - Code size: - Tamanho do código: + 7 digits + 7 dígitos - sec - Seconds - seg. + 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. + + + 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. - - - UnlockDatabaseWidget - Unlock database - Desbloquear base de dados + 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 - - Remove an entry from the database. - Remover uma entrada da base de dados. - - - Path of the database. - Caminho da base de dados. - - - Path of the entry to remove. - Caminho da entrada a remover. - + YubiKeyEditWidget - 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) + Refresh + Recarregar - path to a custom config file - caminho para um ficheiro de configuração personalizado + YubiKey Challenge-Response + Pergunta de segurança YubiKey - key file of the database - ficheiro-chave da base de dados + <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> - read password of the database from stdin - ler palavra-passe da base de dados a partir de stdin + No YubiKey detected, please ensure it's plugged in. + Yubikey não detetada. verifique se está inserida corretamente. - 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 5a6c5ae5cb..c6dfda9938 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,1352 +70,1761 @@ Nucleu (Kernel): %3 %4 - Build Type: %1 - + Version %1 - - - AccessControlDialog - KeePassXC HTTP Confirm Access + Build Type: %1 - Remember this decision - Ține minte această decizie - - - Allow - Permite - - - Deny - Interzice - - - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + Auto-Type - - - AgentSettingsWidget - Enable SSH Agent (requires restart) - Activează Agentul SSH (necesită repornire) + Browser Integration + Integrare cu browserul - - - AutoType - Couldn't find an entry that matches the window title: - Nu a putut fi gasită nicio intrare care să coincidă cu titlul ferestrei: + SSH Agent + Agent SSH - Auto-Type - KeePassXC + YubiKey - Auto-Type + TouchID - The Syntax of your Auto-Type statement is incorrect! + None - This Auto-Type command contains a very long delay. Do you really want to proceed? + KeeShare (signed and unsigned sharing) - This Auto-Type command contains very slow key presses. Do you really want to proceed? + KeeShare (only signed sharing) - This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + KeeShare (only unsigned sharing) - AutoTypeAssociationsModel - - Window - Fereastră - + AgentSettingsWidget - Sequence - Secvență + Enable SSH Agent (requires restart) + Activează Agentul SSH (necesită repornire) - Default sequence - Secvență implicită + Use OpenSSH for Windows instead of Pageant + - AutoTypeMatchModel - - Group - Grup - + ApplicationSettingsWidget - Title - Titlu + Application Settings + Setări aplicație - Username - Nume utilizator + General + General - Sequence - Secvență + Security + Securitate - - - AutoTypeSelectDialog - Auto-Type - KeePassXC + Access error for config file %1 - Select entry to Auto-Type: + Icon only - - - BrowserAccessControlDialog - KeePassXC-Browser Confirm Access + Text only - Remember this decision - Ține minte această decizie - - - Allow - Permite + Text beside icon + - Deny - Interzice + Text under icon + - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + Follow style - BrowserOptionDialog + ApplicationSettingsWidgetGeneral - Dialog - Dialog + Basic Settings + Setări de bază - This is required for accessing your databases with KeePassXC-Browser + Startup - Enable KeepassXC browser integration + Start only a single instance of KeePassXC - General - General - - - Enable integration for these browsers: - + Remember last databases + Memorează ultimele baze de date - &Google Chrome + Remember last key files and security dongles - &Firefox + Load previous databases on startup - &Chromium + Minimize window at application startup - &Vivaldi + File Management - Show a &notification when credentials are requested - Credentials mean login data requested via browser extension + Safely save database files (may be incompatible with Dropbox, etc) - Re&quest to unlock the database if it is locked + Backup database file before saving - Only entries with the same scheme (http://, https://, ...) are returned. + Automatically save after every change - &Match URL scheme (e.g., https://...) - + Automatically save on exit + Salvare automată la ieșire - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Don't mark database as modified for non-data changes (e.g., expanding groups) - &Return only best-matching credentials + Automatically reload the database when modified externally - Sort &matching credentials by title - Credentials mean login data requested via browser extension + Entry Management - Sort matching credentials by &username - Credentials mean login data requested via browser extension + Use group icon on entry creation - &Disconnect all browsers + Minimize when copying to clipboard - Forget all remembered &permissions + Hide the entry preview panel - Advanced - Avansat + General + General - Never &ask before accessing credentials - Credentials mean login data requested via browser extension + Hide toolbar (icons) - Never ask before &updating credentials - Credentials mean login data requested via browser extension + Minimize instead of app exit - Only the selected database has to be connected with a client. + Show a system tray icon - Searc&h in all opened databases for matching credentials - Credentials mean login data requested via browser extension + Dark system tray icon - Automatically creating or updating string fields is not supported. + Hide window to system tray when minimized - &Return advanced string fields which start with "KPH: " - + Language + Limbă - Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + Auto-Type - Update &native messaging manifest files at startup + Use entry title to match windows for global Auto-Type - Support a proxy application between KeePassXC and browser extension. + Use entry URL to match windows for global Auto-Type - Use a &proxy application between KeePassXC and browser extension + Always ask before performing Auto-Type - Use a custom proxy location if you installed a proxy manually. + Global Auto-Type shortcut - Use a &custom proxy location - Meant is the proxy for KeePassXC-Browser + Auto-Type typing delay - Browse... - Button for opening file dialog - Răsfoiește... + ms + Milliseconds + ms - <b>Warning:</b> The following options can be dangerous! + Auto-Type start delay - Executable Files (*.exe);;All Files (*.*) - Fișiere Executabile (*.exe);;Toate Fișierele (*.*) + Check for updates at application startup + - Executable Files (*) - Fișiere Executabile (*) + Include pre-releases when checking for updates + - Select custom proxy location + Movable toolbar - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + Button style - BrowserService + ApplicationSettingsWidgetSecurity - 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. + Timeouts - Save and allow access - Salvează și permite acces + Clear clipboard after + Golește clipboard după - KeePassXC: Overwrite existing key? - KeePassXC: Suprascriere cheie existentă? + sec + Seconds + sec - A shared encryption key with the name "%1" already exists. -Do you want to overwrite it? + Lock databases after inactivity of - KeePassXC: Update Entry + min - Do you want to update the information in %1 - %2? + Forget TouchID after inactivity of - KeePassXC: Database locked! - + Convenience + Comoditate - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Lock databases when session is locked or lid is closed - KeePassXC: Settings not available! + Forget TouchID when session is locked or lid is closed - The active database does not contain a settings entry. + Lock databases after minimizing the window - KeePassXC: No keys found + Re-lock previously locked database after performing Auto-Type - No shared encryption keys found in KeePassXC Settings. + Don't require password repeat when it is visible - KeePassXC: Removed keys from database + Don't hide passwords when editing them - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - Removing stored permissions… + Don't use placeholder for empty password fields - Abort - Anulează + Hide passwords in the entry preview panel + - KeePassXC: Removed permissions + Hide entry notes by default - - Successfully removed permissions from %n entry(s). - - - KeePassXC: No entry with permissions found! - + Privacy + Confidențialitate - The active database does not contain an entry with permissions. + Use DuckDuckGo as fallback for downloading website icons - ChangeMasterKeyWidget + AutoType - Password - Parola + Couldn't find an entry that matches the window title: + Nu a putut fi gasită o intrare care să coincidă cu titlul ferestrei: - Enter password: - Introdu parola: + Auto-Type - KeePassXC + - Repeat password: - Repetă parola: + Auto-Type + - &Key file + The Syntax of your Auto-Type statement is incorrect! - Browse - Răsfoiește + This Auto-Type command contains a very long delay. Do you really want to proceed? + - Create - Creează + This Auto-Type command contains very slow key presses. Do you really want to proceed? + - Cha&llenge Response + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + + AutoTypeAssociationsModel - Refresh - Actualizează + Window + Fereastră - Key files - Fișiere cheie + Sequence + Secvență - All files - Toate fișierele + Default sequence + Secvență implicită + + + AutoTypeMatchModel - Create Key File... - Creare fișier cheie... + Group + Grup - Unable to create Key File : - + Title + Titlu - Select a key file - Selectați un fișier cheie + Username + Nume utilizator - Empty password - Parolă vidă + Sequence + Secvență + + + AutoTypeSelectDialog - Do you really want to use an empty string as password? + Auto-Type - KeePassXC - Different passwords supplied. - Au fost introduse parole diferite. + Select entry to Auto-Type: + + + + BrowserAccessControlDialog - Failed to set %1 as the Key file: -%2 + KeePassXC-Browser Confirm Access - Legacy key file format - + Remember this decision + Ține minte această decizie - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - + Allow + Permite + + + Deny + Interzice - 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. - CloneDialog + BrowserEntrySaveDialog - Clone Options + KeePassXC-Browser Save Entry - Append ' - Clone' to title + Ok - Replace username and password with references - Înlocuiește numele utilizator și parola cu referințe + Cancel + Anulare - Copy history - Copiază istoric + You have multiple databases open. +Please select the correct database for saving credentials. + - CsvImportWidget + BrowserOptionDialog - Import CSV fields - Importă câmpuri CSV + Dialog + Dialog - filename + This is required for accessing your databases with KeePassXC-Browser - size, rows, columns - dimensiune, rânduri, coloane + Enable KeepassXC browser integration + - Encoding - Codificare + General + General - Codec - Codec + Enable integration for these browsers: + - Text is qualified by - Textul este calificat de + &Google Chrome + - Fields are separated by - Câmpurile sunt separate de + &Firefox + - Comments start with - Comentariile încep cu + &Chromium + - First record has field names - Prima înregistrare conține denumirile de câmpuri + &Vivaldi + - Number of headers line to discard - Număr de linii antet de eliminat + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + - Consider '\' an escape character + Re&quest to unlock the database if it is locked - Preview - Previzualizare + Only entries with the same scheme (http://, https://, ...) are returned. + - Column layout - Aranjare coloane + &Match URL scheme (e.g., https://...) + - Not present in CSV file + Only returns the best matches for a specific URL instead of all entries for the whole domain. - Empty fieldname - Denumire câmp vidă + &Return only best-matching credentials + - column - coloană + Sort &matching credentials by title + Credentials mean login data requested via browser extension + - Imported from CSV file - Importat din fișier CSV + Sort matching credentials by &username + Credentials mean login data requested via browser extension + - Original data: - Datele originale: + Advanced + Avansat - Error(s) detected in CSV file ! + Never &ask before accessing credentials + Credentials mean login data requested via browser extension - more messages skipped] + Never ask before &updating credentials + Credentials mean login data requested via browser extension - Error - Eroare + Only the selected database has to be connected with a client. + - CSV import: writer has errors: - + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension - - - CsvImportWizard - Error - Eroare + Automatically creating or updating string fields is not supported. + - Unable to calculate master key - Nu a putut fi calculată cheia principală - - - - CsvParserModel - - %n byte(s), - + &Return advanced string fields which start with "KPH: " + - - %n row(s), - %n rând, %n rânduri, %n rânduri, + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + - - %n column(s) - %n coloană%n coloane%n coloane + + Update &native messaging manifest files at startup + - - - DatabaseOpenWidget - Enter master key - Introduceți cheia principală + Support a proxy application between KeePassXC and browser extension. + - Key File: - Fișier cheie: + Use a &proxy application between KeePassXC and browser extension + - Password: - Parola: + Use a custom proxy location if you installed a proxy manually. + - Browse - Răsfoiește + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + - Refresh - Actualizează + Browse... + Button for opening file dialog + Răsfoiește... - Challenge Response: + <b>Warning:</b> The following options can be dangerous! - Unable to open the database. - Nu pot deschide baza de date. + Select custom proxy location + - Can't open key file - Fișierul cheie nu a putut fi deschis + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + - Legacy key file format + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + &Tor Browser - Don't show this warning again + <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: - All files - Toate fișierele + Executable Files + - Key files - Fișiere cheie + All Files + - Select key file - Selectați fișier cheie + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + - DatabaseRepairWidget + BrowserService - Repair database - Repară baza de date + KeePassXC: New key association request + - Error - Eroare + 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. + - Can't open key file - Fișierul cheie nu a putut fi deschis + Save and allow access + Salvează și permite acces - Unable to open the database. - Baza de date nu poate fi deschisă. + KeePassXC: Overwrite existing key? + KeePassXC: Suprascriere cheie existentă? - Database opened fine. Nothing to do. + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? - Success - Succes + KeePassXC: Update Entry + - The database has been successfully repaired -You can now save it. + Do you want to update the information in %1 - %2? - Unable to repair the database. - Baza de date nu poate fi reparată. + Abort + Anulează - - - DatabaseSettingsWidget - General - General + Converting attributes to custom data… + - Encryption - Criptare + KeePassXC: Converted KeePassHTTP attributes + - Number of rounds too high - Key transformation rounds + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + Successfully moved %n keys to custom data. + + - 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! + KeePassXC: No entry with KeePassHTTP attributes found! - Understood, keep number + The active database does not contain an entry with KeePassHTTP attributes. - Cancel - Anulare - - - Number of rounds too low - Key transformation rounds + KeePassXC: Legacy browser integration settings detected - 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! + 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 - KDF unchanged + Clone Options - Failed to transform key with new KDF parameters; KDF unchanged. + Append ' - Clone' to title - - MiB - Abbreviation for Mebibytes (KDF settings) - + + Replace username and password with references + Înlocuiește numele utilizator și parola cu referințe - - thread(s) - Threads for parallel execution (KDF settings) - + + Copy history + Copiază istoric - DatabaseSettingsWidgetEncryption + CsvImportWidget - Encryption Algorithm: - Algoritm Criptare: + Import CSV fields + Importă câmpuri CSV - AES: 256 Bit (default) - AES: 256 Bit (implicit) + filename + - Twofish: 256 Bit - Twofish: 256 Bit + size, rows, columns + dimensiune, rânduri, coloane - Key Derivation Function: - Funcție Derivare Cheie: + Encoding + Codificare - Transform rounds: - Runde de transformare: + Codec + Codec - Benchmark 1-second delay - + Text is qualified by + Textul este calificat de - Memory Usage: - Utilizare Memorie: + Fields are separated by + Câmpurile sunt separate de - Parallelism: - Paralelism: + Comments start with + Comentariile încep cu - - - DatabaseSettingsWidgetGeneral - Database Meta Data - Meta Date Bază de Date + First record has field names + Prima înregistrare conține denumirile de câmpuri - Database name: - Nume bază de date: + Number of headers line to discard + Număr de linii antet de eliminat - Database description: - Descriere bază de date: + Consider '\' an escape character + - Default username: - Nume utilizator implicit: + Preview + Previzualizare - History Settings - Setări Istoric + Column layout + Aranjare coloane - Max. history items: + Not present in CSV file - Max. history size: + Imported from CSV file + Importat din fișier CSV + + + Original data: + Datele originale: + + + Error + Eroare + + + Empty fieldname %1 - MiB + column %1 - Use recycle bin - Utilizare coș de gunoi + Error(s) detected in CSV file! + + + + [%n more message(s) skipped] + - Additional Database Settings - Setări Adiționale Bază de Date + CSV import: writer has errors: +%1 + + + + + CsvParserModel + + %n column(s) + - Enable &compression (recommended) + %1, %2, %3 + file info: bytes, rows, columns + + %n byte(s) + + + + %n row(s) + + - DatabaseTabWidget + Database Root - Root group + Root group name Rădăcină - KeePass 2 Database - Bază de date KeePass 2 + File %1 does not exist. + - All files - Toate fișierele + Unable to open file %1. + - Open database - Deschide baza de date + Error while reading the database: %1 + - File not found! - Fișierul nu a fost găsit + Could not save, database has no file name. + - Unable to open the database. - Baza de date nu poate fi deschisă. + File cannot be written as it is opened in read-only mode. + + + + DatabaseOpenDialog - File opened in read only mode. - Fișier deschis doar pentru citire. + Unlock Database - KeePassXC + + + + DatabaseOpenWidget - Open CSV file - Deschide fișier CSV + Enter master key + Introduceți cheia principală - CSV file - Fișier CSV + Key File: + Fișier cheie: - All files (*) - Toate fișierele (*) + Password: + Parola: - Merge database - Îmbina baza de date + Browse + Răsfoiește - Open KeePass 1 database - Deschide bază de date KeePass 1 + Refresh + Actualizează - KeePass 1 database - Bază de date KeePass 1 + Challenge Response: + - Close? - Închidere? + Legacy key file format + - "%1" is in edit mode. -Discard changes and close anyway? + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - Save changes? - Salvare modificări? + Don't show this warning again + - "%1" was modified. -Save changes? - "%1" a fost modificat. -Salvați modificările? + All files + Toate fișierele - Writing the database failed. - Scrierea în baza de date a eșuat. + Key files + Fișiere cheie - Passwords - Parole + Select key file + Selectați fișier cheie - Save database as - Salvează bază de date ca + TouchID for quick unlock + - Export database to CSV file - Exportă baza de date în fișier CSV + Unable to open the database: +%1 + - Writing the CSV file failed. - Scrierea în fișierul CSV a eșuat. + Can't open key file: +%1 + + + + DatabaseSettingWidgetMetaData - New database - Bază de date nouă + Passwords + Parole + + + DatabaseSettingsDialog - locked - blocat + Advanced Settings + - Lock database - Blocare bază de date + General + General - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - + Security + Securitate - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. + Master Key - Disable safe saves? + Encryption Settings - 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? - + Browser Integration + Integrare cu browserul - DatabaseWidget - - Searching... - Căutare... - + DatabaseSettingsWidgetBrowser - Change master key - Modifică cheia principală + KeePassXC-Browser settings + - Delete entry? - Stergeți intrarea? + &Disconnect all browsers + - Do you really want to delete the entry "%1" for good? + Forg&et all site-specific settings on entries - Delete entries? - Ștergeți intrările? + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Do you really want to delete %1 entries for good? + Stored keys - Move entry to recycle bin? - Mutați intrarea în coșul de gunoi? + Remove + Înlătură - Do you really want to move entry "%1" to the recycle bin? + Delete the selected key? - 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? - + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + - Execute command? - Executați comanda? + Key + - Do you really want to execute the following command?<br><br>%1<br> + Value - Remember my choice - Ține minte alegerea mea + Enable Browser Integration to access these settings. + - Delete group? - Ștergeți grupul? + Disconnect all browsers + - Do you really want to delete the group "%1" for good? + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. - Unable to calculate master key - Nu a putut fi calculată cheia principală + KeePassXC: No keys found + - No current database. - Nu există o bază de date curentă. + No shared encryption keys found in KeePassXC settings. + - No source database, nothing to do. + KeePassXC: Removed keys from database + + Successfully removed %n encryption key(s) from KeePassXC settings. + + - Search Results (%1) - Rezultatele căutării (%1) + Forget all site-specific settings on entries + - No Results - Nu sunt rezultate + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + - File has changed - Fișierul a fost modificat + Removing stored permissions… + - The database file has changed. Do you want to load the changes? - Fișierul bazei de date a fost modificat. Doriți să încărcați ultimele modificări? + Abort + Anulează - Merge Request - Cerere îmbinare + KeePassXC: Removed permissions + + + + Successfully removed permissions from %n entry(s). + - The database file has changed and you have unsaved changes. -Do you want to merge your changes? + KeePassXC: No entry with permissions found! - Could not open the new database file while attempting to autoreload this database. + The active database does not contain an entry with permissions. - Empty recycle bin? - Goliți coșul de gunoi? + Move KeePassHTTP attributes to custom data + - Are you sure you want to permanently delete everything from your recycle bin? + 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. - DetailsWidget - - Generate TOTP Token - Generează token TOTP - - - Close - Închide - + DatabaseSettingsWidgetEncryption - General - General + Encryption Algorithm: + Algoritm Criptare: - Password - Parola + AES: 256 Bit (default) + AES: 256 Bit (implicit) - URL - URL + Twofish: 256 Bit + Twofish: 256 Bit - Expiration - Expirare + Key Derivation Function: + Funcție Derivare Cheie: - Username - Nume utilizator + Transform rounds: + Runde de transformare: - Autotype + Benchmark 1-second delay - Searching - Căutare + Memory Usage: + Utilizare Memorie: - Attributes - Atribute + Parallelism: + Paralelism: - Attachments - Atașamente + Decryption Time: + - Notes - Notițe + ?? s + - Window - Fereastră + Change + - Sequence - Secvență + 100 ms + - Search - Caută + 5 s + - Clear - Golește + Higher values offer more protection, but opening the database will take longer. + - Never - Niciodată + Database format: + - [PROTECTED] - [PROTEJAT] + This is only important if you need to use your database with other programs. + - Disabled - Dezactivat + KDBX 4.0 (recommended) + - Enabled - Activat + KDBX 3.1 + - - - EditEntryWidget - Entry - Intrare + unchanged + Database decryption time is unchanged + - Advanced - Avansat + Number of rounds too high + Key transformation rounds + - Icon - Icon + 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! + - Auto-Type + Understood, keep number - Properties - Proprietăți + Cancel + Anulare - History - Istoric + Number of rounds too low + Key transformation rounds + - SSH Agent - Agent SSH + 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! + - n/a - nu se aplică + KDF unchanged + - (encrypted) - (criptat) + Failed to transform key with new KDF parameters; KDF unchanged. + - - Select private key - Selectați cheia privată + + MiB + Abbreviation for Mebibytes (KDF settings) + - - File too large to be a private key - Fișier prea mare pentru a fi cheie privată + + thread(s) + Threads for parallel execution (KDF settings) + - - Failed to open private key - Deschiderea cheii private a eșuat + + %1 ms + milliseconds + - - Entry history - Istoric intrare + + %1 s + seconds + + + + DatabaseSettingsWidgetGeneral - Add entry - Adaugă intrare + Database Meta Data + Meta Date Bază de Date - Edit entry - Editează intrare + Database name: + Nume bază de date: - Different passwords supplied. - Au fost introduse parole diferite. + Database description: + Descriere bază de date: - New attribute - Atribut nou + Default username: + Nume utilizator implicit: - Confirm Remove - Confirmați înlăturarea + History Settings + Setări Istoric - Are you sure you want to remove this attribute? - Sigur doriți să eliminați acest atribut? + Max. history items: + - [PROTECTED] - [PROTEJAT] + Max. history size: + - Press reveal to view or edit + MiB - Tomorrow - Mâine - - - %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 + Use recycle bin + Utilizare coș de gunoi - 1 year - 1 an + Additional Database Settings + Setări Adiționale Bază de Date - Apply generated password? + Enable &compression (recommended) + + + DatabaseSettingsWidgetKeeShare - Do you want to apply the generated password to this entry? + Sharing - Entry updated successfully. + Breadcrumb - - - EditEntryWidgetAdvanced - Additional attributes - Atribute adiționale + Type + - Add - Adaugă + Path + - Remove - Înlătură + Last Signer + - Edit Name - Editează nume + Certificates + - Protect - Protejează + > + Breadcrumb separator + + + + DatabaseSettingsWidgetMasterKey - Reveal - Dezvăluie + Add additional protection... + - Attachments - Atașamente + No encryption key added + - Foreground Color: + You must add at least one encryption key to secure your database! - Background Color: + No password set - - - EditEntryWidgetAutoType - Enable Auto-Type for this entry + 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? - Inherit default Auto-Type sequence from the &group + Unknown error - &Use custom Auto-Type sequence: + Failed to change master key + + + DatabaseSettingsWidgetMetaDataSimple - Window Associations + Database Name: + + + + Description: + + + + + DatabaseTabWidget + + KeePass 2 Database + Bază de date KeePass 2 + + + All files + Toate fișierele + + + Open database + Deschide baza de date + + + CSV file + Fișier CSV + + + Merge database + Îmbină baza de date + + + Open KeePass 1 database + Deschide bază de date KeePass 1 + + + KeePass 1 database + Bază de date KeePass 1 + + + Export database to CSV file + Exportă baza de date în fișier CSV + + + Writing the CSV file failed. + Scrierea în fișierul CSV a eșuat. + + + 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... + Căutare... + + + 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? + Executați comanda? + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + Ține minte alegerea mea + + + Do you really want to delete the group "%1" for good? + + + + No current database. + Nu există o baza de date curentă. + + + No source database, nothing to do. + + + + Search Results (%1) + Rezultatele căutării (%1) + + + No Results + Nu sunt rezultate + + + File has changed + Fișierul a fost modificat + + + The database file has changed. Do you want to load the changes? + Fișierul bazei de date a fost modificat. Doriți să încărcați ultimele modificări? + + + Merge Request + Cerere îmbinare + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + + + + Empty recycle bin? + Goliți coșul de gunoi? + + + 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. + Fișier deschis doar pentru citire. + + + Lock Database? + + + + You are editing an entry. Discard changes and lock anyway? + + + + "%1" was modified. +Save changes? + "%1" a fost modificat. +Salvați modificările? + + + Database was modified. +Save changes? + + + + Save changes? + Salvare modificări? + + + 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 + Parole + + + Save database as + Salvează bază de date ca + + + KeePass 2 Database + Bază de date 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 + + Entry + Intrare + + + Advanced + Avansat + + + Icon + Icon + + + Auto-Type + + + + Properties + Proprietăți + + + History + Istoric + + + SSH Agent + Agent SSH + + + n/a + nu se aplică + + + (encrypted) + (criptat) + + + Select private key + Selectați cheia privată + + + File too large to be a private key + Fișier prea mare pentru a fi cheie privată + + + Failed to open private key + Deschiderea cheii private a eșuat + + + Entry history + Istoric intrare + + + Add entry + Adaugă intrare + + + Edit entry + Editează intrare + + + Different passwords supplied. + Au fost introduse parole diferite. + + + New attribute + Atribut nou + + + Are you sure you want to remove this attribute? + Sunteți sigur că doriți să eliminați acest atribut? + + + Tomorrow + Mâine + + + %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 + Atribute adiționale + + + Add + Adaugă + + + Remove + Înlătură + + + Edit Name + Editează nume + + + Protect + Protejează + + + Reveal + Dezvăluie + + + Attachments + Atașamente + + + 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 @@ -1429,2191 +1832,3126 @@ Do you want to merge your changes? + - - - - + - + - + + + Window title: + Titlu fereastră: + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + Arată + + + Restore + Restaurează + + + Delete + Șterge + + + Delete all + Șterge toate + + + + EditEntryWidgetMain + + URL: + URL: + + + Password: + Parola: + + + Repeat: + Repetă: + + + Title: + Titlu: + + + Notes + Notițe + + + Presets + Presetări + + + Toggle the checkbox to reveal the notes section. + + + + Username: + Nume utilizator: + + + Expires + Expiră + + + + EditEntryWidgetSSHAgent + + Form + De la + + + Remove key from agent after + + + + seconds + secunde + + + Fingerprint + + + + Remove key from agent when database is closed/locked + + + + Public key + Cheie publică + + + Add key to agent when database is opened/unlocked + + + + Comment + Comentariu + + + Decrypt + Decriptează + + + n/a + nu se aplică + + + Copy to clipboard + Copiază în clipboard + + + Private key + Cheie privată + + + External file + Fișier extern + + + Browse... + Button for opening file dialog + Răsfoiește... + + + Attachment + Atașament + + + Add to agent + Adaugă în agent + + + Remove from agent + Elimină din agent + + + Require user confirmation when this key is used + + + + + EditGroupWidget + + Group + Grup + + + Icon + Icon + + + Properties + Proprietăți + + + Add group + Adaugă grup + + + Edit group + Editează grup + + + Enable + Activează + + + Disable + Dezactivează + + + Inherit from parent group (%1) + + + + + 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 + + Name + Nume + + + Notes + Notițe + + + Expires + Expiră + + + Search + Caută + + + 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 + Adaugă icon personalizat + + + Delete custom icon + Șterge icon personalizat + + + Download favicon + Descarcă favicon + + + Unable to fetch favicon. + Nu pot descărca favicon. + + + Images + Imagini + + + All files + Toate fișierele + + + Custom icon already exists + Icon personalizat deja există + + + Confirm Delete + Confirmați ștergerea + + + 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: + Creat: + + + Modified: + Modificat: + + + Accessed: + Accesat: + + + Uuid: + Uuid: + + + Plugin Data + + + + Remove + Înlătură + + + 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 + Nume + + + Size + + + + + EntryAttachmentsWidget + + Form + De la + + + Add + Adaugă + + + Remove + Înlătură + + + Open + Deschide + + + Save + Salvează + + + Select files + Selectați fișierele + + + Are you sure you want to remove %n attachment(s)? + + + + Save attachments + Salvați atașamentele + + + Unable to create directory: +%1 + + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + + Confirm overwrite + Confirmați suprascrierea + + + 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 + Nume + + + + EntryHistoryModel + + Last modified + Ultima modificare + + + Title + Titlu + + + Username + Nume utilizator + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + Ref: + + + Group + Grup + + + Title + Titlu + + + Username + Nume utilizator + + + URL + URL + + + Never + Niciodată + + + Password + Parolă + + + Notes + Notițe + + + Expires + Expiră + + + Created + + + + Modified + + + + Accessed + + + + 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 + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + Atașamente (icon) + + + + Group + + Recycle Bin + Coș de gunoi + + + [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 + Închide mesaj + + + + Kdbx3Reader + + Unable to calculate master key + Nu a putut fi calculată cheia principală + + + Unable to issue challenge-response. + + + + 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 + + Unable to issue challenge-response. + + + + Unable to calculate master key + Nu a putut fi calculată cheia principală + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + Nu a putut fi calculată cheia principală + + + Invalid header checksum size + + + + Header SHA256 mismatch + - Window title: - Titlu fereastră: + Wrong key or database file is corrupt. (HMAC mismatch) + - Use a specific sequence for this association: + 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 - EditEntryWidgetHistory + Kdbx4Writer - Show - Arată + Invalid symmetric cipher algorithm. + - Restore - Restaurează + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + - Delete - Șterge + Unable to calculate master key + Nu a putut fi calculată cheia principală - Delete all - Șterge toate + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + - EditEntryWidgetMain + KdbxReader - URL: - URL: + Unsupported cipher + - Password: - Parola: + Invalid compression flags length + - Repeat: - Repetă: + Unsupported compression algorithm + - Title: - Titlu: + Invalid master seed size + - Notes - Notițe + Invalid transform seed size + - Presets - Presetări + Invalid transform rounds size + - Toggle the checkbox to reveal the notes section. + Invalid start bytes size - Username: - Nume utilizator: + Invalid random stream id size + - Expires - Expiră + Invalid inner random stream cipher + + + + Not a KeePass database. + Nu este o bază de date 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. + - EditEntryWidgetSSHAgent + KdbxXmlReader - Form - De la + XML parsing failure: %1 + - Remove key from agent after + No root group - seconds - secunde + Missing icon uuid or data + - Fingerprint + Missing custom data key or value - Remove key from agent when database is closed/locked + Multiple group elements - Public key - Cheie publică + Null group uuid + - Add key to agent when database is opened/unlocked + Invalid group icon number - Comment - Comentariu + Invalid EnableAutoType value + - Decrypt - Decriptează + Invalid EnableSearching value + - n/a - nu se aplică + No group uuid found + - Copy to clipboard - Copiază în clipboard + Null DeleteObject uuid + - Private key - Cheie privată + Missing DeletedObject uuid or time + - External file - Fișier extern + Null entry uuid + - Browse... - Button for opening file dialog - Răsfoiește... + 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 + - Attachment - Atașament + Duplicate attachment found + - Add to agent - Adaugă în agent + Entry binary key or value missing + - Remove from agent - Elimină din agent + Auto-type association window or sequence missing + - Require user confirmation when this key is used + Invalid bool value - - - EditGroupWidget - Group - Grup + Invalid date time value + - Icon - Icon + Invalid color value + - Properties - Proprietăți + Invalid color rgb part + - Add group - Adaugă grup + Invalid number value + - Edit group - Editează grup + Invalid uuid value + - Enable - Activează + Unable to decompress binary + Translator meant is a binary data inside an entry + - Disable - Dezactivează + XML error: +%1 +Line %2, column %3 + + + + KeePass1OpenWidget - Inherit from parent group (%1) + Import KeePass1 database + + Unable to open the database. + Nu pot deschide baza de date. + - EditGroupWidgetMain + KeePass1Reader - Name - Nume + Unable to read keyfile. + Fișierul cheie nu poate fi citit. - Notes - Notițe + Not a KeePass database. + Nu este o bază de date KeePass. - Expires - Expiră + Unsupported encryption algorithm. + Algoritm criptare nesuportat. - Search - Caută + Unsupported KeePass database version. + Versiune bază de date KeePass nesuportată. - Auto-Type + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher - &Use default Auto-Type sequence of parent group + Invalid number of groups - Set default Auto-Type se&quence + Invalid number of entries - - - EditWidgetIcons - &Use default icon + Invalid content hash size - Use custo&m icon + Invalid transform seed size - Add custom icon - Adaugă icon personalizat + Invalid number of transform rounds + - Delete custom icon - Șterge icon personalizat + Unable to construct group tree + - Download favicon - Descarcă favicon + Root + Rădăcină - Unable to fetch favicon. - Nu pot descărca favicon. + Unable to calculate master key + Nu a putut fi calculată cheia principală - Hint: You can enable Google as a fallback under Tools>Settings>Security - + Wrong key or database file is corrupt. + Cheie greșită sau fișier bază de date corupt. - Images - Imagini + Key transformation failed + - All files - Toate fișierele + Invalid group field type number + - Select Image - Selectați imagine + Invalid group field size + - Can't read icon - Nu pot citi icon + Read group field data doesn't match size + - Custom icon already exists - Icon personalizat deja există + Incorrect group id field size + - Confirm Delete - Confirmați ștergerea + Incorrect group creation time field size + - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Incorrect group modification time field size - - - EditWidgetProperties - Created: - Creat: + Incorrect group access time field size + - Modified: - Modificat: + Incorrect group expiry time field size + - Accessed: - Accesat: + Incorrect group icon field size + - Uuid: - Uuid: + Incorrect group level field size + - Plugin Data + Invalid group field type - Remove - Înlătură + Missing group id or level + - Delete plugin data? + Missing entry field type number - Do you really want to delete the selected plugin data? -This may cause the affected plugins to malfunction. + Invalid entry field size - Key + Read entry field data doesn't match size - Value + Invalid entry uuid field size - - - Entry - - Clone - Suffix added to cloned entries + Invalid entry group id field size - - - EntryAttachmentsModel - Name - Nume + Invalid entry icon field size + - Size + Invalid entry creation time field size - - - EntryAttachmentsWidget - Form - Formular + Invalid entry modification time field size + - Add - Adaugă + Invalid entry expiry time field size + - Remove - Înlătură + Invalid entry field type + - Open - Deschide + unable to seek to content position + + + + KeeShare - Save - Salvează + Disabled share + - Select files - Selectați fișierele - - - Are you sure you want to remove %n attachment(s)? - + Import from + - Confirm Remove - Confirmați înlăturarea + Export to + - Save attachments - Salvați atașamentele + Synchronize with + + + + KeyComponentWidget - Unable to create directory: -%1 + Key Component - Are you sure you want to overwrite the existing file "%1" with the attachment? + Key Component Description - Confirm overwrite - Confirmați suprascrierea + Cancel + Anulare - Unable to save attachments: -%1 + Key Component set, click to change or remove - Unable to open attachment: -%1 + Add %1 + Add a key component - Unable to open attachments: -%1 + Change %1 + Change a key component - Unable to open files: -%1 + Remove %1 + Remove a key component - - - EntryAttributesModel - Name - Nume + %1 set, click to change or remove + Change or remove a key component + - EntryHistoryModel + KeyFileEditWidget - Last modified - Ultima modificare + Browse + Răsfoiește - Title - Titlu + 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. + - Username - Nume utilizator + Error loading the key file '%1' +Message: %2 + - URL - URL + Key files + Fișiere cheie - - - EntryModel - Ref: - Reference abbreviation - Ref: + All files + Toate fișierele - Group - Grup + Create Key File... + Creare fișier cheie... - Title - Titlu + Error creating key file + - Username - Nume utilizator + Unable to create key file: %1 + - URL - URL + Select a key file + Selectați un fișier cheie + + + MainWindow - Never - Niciodată + &Database + - Password - Parola + &Recent databases + - Notes - Notițe + &Help + - Expires - Expiră + E&ntries + - Created + &Groups - Modified + &Tools - Accessed + &Quit - Attachments - Atașamente + &About + - - - EntryView - Customize View + &Open database... - Hide Usernames + &Save database - Hide Passwords + &Close database - Fit to window + &Delete entry - Fit to contents + &Edit group - Reset to defaults + &Delete group - Attachments (icon) - Atașamente (icon) + Sa&ve database as... + - - - Group - Recycle Bin - Coș de gunoi + Database settings + Setări bază de date - - - HostInstaller - KeePassXC: Cannot save file! + &Clone entry - Cannot save the native messaging script file. + Copy &username - - - HttpPasswordGeneratorWidget - Length: - Lungime: + Copy username to clipboard + - Character Types - Tipuri de caractere + Copy password to clipboard + - Upper Case Letters - Litere mari + &Settings + &Setări - A-Z - A-Z + Password Generator + Generator de parole - Lower Case Letters - Litere mici + &Lock databases + - a-z - a-z + &Title + - Numbers - Numere + Copy title to clipboard + - 0-9 - 0-9 + &URL + - Special Characters - Caractere speciale + Copy URL to clipboard + - /*_& ... - /*_& ... + &Notes + &Notițe - Exclude look-alike characters - Exclude caractere asemănătoare + Copy notes to clipboard + - Ensure that the password contains characters from every group + &Export to CSV file... - Extended ASCII + Set up TOTP... - - - KMessageWidget - &Close + Copy &TOTP - Close message - Închide mesaj + E&mpty recycle bin + - - - Kdbx3Reader - Unable to calculate master key - Nu a putut fi calculată cheia principală + Clear history + Golește istoric - Unable to issue challenge-response. + Access error for config file %1 - Wrong key or database file is corrupt. - Cheie greșită sau fișier bază de date corupt. + Settings + Setări - - - Kdbx3Writer - Unable to issue challenge-response. + Toggle window - Unable to calculate master key - Nu a putut fi calculată cheia principală - - - - Kdbx4Reader - - missing database headers + Quit KeePassXC - Unable to calculate master key - Nu a putut fi calculată cheia principală + Please touch the button on your YubiKey! + - Invalid header checksum size + 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. - Header SHA256 mismatch + &Donate - Wrong key or database file is corrupt. (HMAC mismatch) + Report a &bug - Unknown cipher + 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. - Invalid header id size + &Import - Invalid header field length + Copy att&ribute... - Invalid header data length + TOTP... - Failed to open buffer for KDF parameters in header + &New database... - Unsupported key derivation function (KDF) or invalid parameters + Create a new database - Legacy header fields found in KDBX4 file. + &Merge from database... - Invalid inner header id size + Merge from another KDBX database - Invalid inner header field length + &New entry - Invalid inner header binary size + Add a new entry - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data + &Edit entry - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data + View or edit entry - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data + &New group - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data + Add a new group - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data + Change master &key... - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data + &Database settings... - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data + Copy &password - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data + Perform &Auto-Type - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data + Open &URL - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data + KeePass 1 database... - Invalid variant map entry type - Translation: variant map = data structure for storing meta data + Import a KeePass 1 database - Invalid variant map field type size - Translation: variant map = data structure for storing meta data + CSV file... - - - Kdbx4Writer - Invalid symmetric cipher algorithm. + Import a CSV file - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher + Show TOTP... - Unable to calculate master key - Nu a putut fi calculată cheia principală + Show TOTP QR Code... + - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data + Check for Updates... - - - KdbxReader - Invalid cipher uuid length + Share entry - Unsupported cipher + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. - Invalid compression flags length + Check for updates on startup? - Unsupported compression algorithm + Would you like KeePassXC to check for updates on startup? - Invalid master seed size + You can always check for updates manually from the application menu. + + + Merger - Invalid transform seed size + Creating missing %1 [%2] - Invalid transform rounds size + Relocating %1 [%2] - Invalid start bytes size + Overwriting %1 [%2] - Invalid random stream id size + older entry merged from database "%1" - Invalid inner random stream cipher + Adding backup for older target %1 [%2] - Not a KeePass database. - Nu este o bază de date KeePass. + Adding backup for older source %1 [%2] + - 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. + Reapplying older target entry on top of newer source %1 [%2] - Unsupported KeePass 2 database version. + Reapplying older source entry on top of newer target %1 [%2] - - - KdbxXmlReader - XML parsing failure: %1 + Synchronizing from newer source %1 [%2] - No root group + Synchronizing from older source %1 [%2] - Missing icon uuid or data + Deleting child %1 [%2] - Missing custom data key or value + Deleting orphan %1 [%2] - Multiple group elements + Changed deleted objects - Null group uuid + Adding missing icon %1 + + + NewDatabaseWizard - Invalid group icon number + Create a new KeePassXC database... - Invalid EnableAutoType value - + Root + Root group + Rădăcină + + + NewDatabaseWizardPage - Invalid EnableSearching value + WizardPage - No group uuid found + En&cryption Settings - Null DeleteObject uuid + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Missing DeletedObject uuid or time + Advanced Settings - Null entry uuid + Simple Settings + + + NewDatabaseWizardPageEncryption - Invalid entry icon number + Encryption Settings - History element in history entry + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - No entry uuid found + Database Master Key - History element with different uuid + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - Unable to decrypt entry string + General Database Information - Duplicate custom attribute found + Please fill in the display name and an optional description for your new database: + + + OpenSSHKey - Entry string key or value missing + Invalid key file, expecting an OpenSSH key - Duplicate attachment found + PEM boundary mismatch - Entry binary key or value missing + Base64 decoding failed - Auto-type association window or sequence missing + Key file way too small. - Invalid bool value + Key file magic header id invalid - Invalid date time value + Found zero keys - Invalid color value - + Failed to read public key. + Citirea cheii publice a eșuat. - Invalid color rgb part + Corrupted key file, reading private key failed - Invalid number value + No private key payload to decrypt - Invalid uuid value + Trying to run KDF without cipher - Unable to decompress binary - Translator meant is a binary data inside an entry + Passphrase is required to decrypt this key - - - KeePass1OpenWidget - Import KeePass1 database + Key derivation failed, key file corrupted? - Unable to open the database. - Nu pot deschide baza de date. + Decryption failed, wrong passphrase? + - - - KeePass1Reader - Unable to read keyfile. - Fișierul cheie nu poate fi citit. + Unexpected EOF while reading public key + - Not a KeePass database. - Nu este o bază de date KeePass. + Unexpected EOF while reading private key + - Unsupported encryption algorithm. - Algoritm criptare nesuportat. + Can't write public key as it is empty + - Unsupported KeePass database version. - Versiune bază de date KeePass nesuportată. + Unexpected EOF when writing public key + - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher + Can't write private key as it is empty - Invalid number of groups + Unexpected EOF when writing private key - Invalid number of entries + Unsupported key type: %1 - Invalid content hash size + Unknown cipher: %1 - Invalid transform seed size + Cipher IV is too short for MD5 kdf - Invalid number of transform rounds + Unknown KDF: %1 - Unable to construct group tree + Unknown key type: %1 + + + PasswordEditWidget - Root - Rădăcină + Enter password: + Introdu parola: - Unable to calculate master key - Nu a putut fi calculată cheia principală + Confirm password: + - Wrong key or database file is corrupt. - Cheie greșită sau fișier bază de date corupt. + Password + Parola - Key transformation failed + <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> - Invalid group field type number + Password cannot be empty. - Invalid group field size + Passwords do not match. - Read group field data doesn't match size + Generate master password + + + PasswordGeneratorWidget - Incorrect group id field size - + %p% + %p% - Incorrect group creation time field size - + Password: + Parola: - Incorrect group modification time field size - + strength + Password strength + putere - Incorrect group access time field size - + entropy + entropie - Incorrect group expiry time field size - + Password + Parolă - Incorrect group icon field size - + Character Types + Tipuri de caractere - Incorrect group level field size - + Upper Case Letters + Litere mari - Invalid group field type - + Lower Case Letters + Litere mici - Missing group id or level - + Numbers + Numere - Missing entry field type number - + Special Characters + Caractere speciale - Invalid entry field size + Extended ASCII - Read entry field data doesn't match size - + Exclude look-alike characters + Exclude caractere asemănătoare - Invalid entry uuid field size - + Pick characters from every group + Alegeți caractere din fiecare grup - Invalid entry group id field size - + &Length: + &Lungime: - Invalid entry icon field size + Passphrase - Invalid entry creation time field size + Wordlist: - Invalid entry modification time field size - + Word Separator: + Separator cuvinte: - Invalid entry expiry time field size - + Copy + Copiază - Invalid entry field type - + Accept + Acceptă - - - KeePass2 - AES: 256-bit - + Close + Închide - Twofish: 256-bit - + Entropy: %1 bit + Entropie: %1 bit - ChaCha20: 256-bit - + Password Quality: %1 + Calitate parolă: %1 - AES-KDF (KDBX 4) - + Poor + Password quality + Inacceptabil - AES-KDF (KDBX 3.1) - + Weak + Password quality + Slab - Argon2 (KDBX 4 – recommended) - + Good + Password quality + Bun - - - Main - Existing single-instance lock file is invalid. Launching new instance. - + Excellent + Password quality + Excelent - The lock file could not be created. Single-instance mode disabled. + ExtendedASCII - Another instance of KeePassXC is already running. + Switch to advanced mode - Fatal error while testing the cryptographic functions. + Advanced + Avansat + + + Upper Case Letters A to F - KeePassXC - Error - KeePassXC - Eroare + A-Z + A-Z - - - MainWindow - &Database + Lower Case Letters A to F - &Recent databases + a-z + a-z + + + 0-9 + 0-9 + + + Braces - Import + {[( - &Help + Punctuation - E&ntries + .,:; - Copy att&ribute to clipboard + Quotes - Time-based one-time password + " ' - &Groups + Math - &Tools + <*+!?= - &Quit + Dashes - &About + \_|-/ - &Open database... + Logograms - &Save database + #$%&&@^`~ - &Close database + Switch to simple mode - &New database + Simple - Merge from KeePassX database - Îmbină dintr-o bază de date KeePass + Character set to exclude from generated password + - &Add new entry + Do not include: - &View/Edit entry + Add non-hex letters to "do not include" list - &Delete entry + Hex - &Add new group + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - &Edit group + Word Co&unt: - &Delete group + Regenerate + + + QApplication - Sa&ve database as... + KeeShare + + + QFileDialog - Change &master key... + Select + + + QMessageBox - &Database settings + Overwrite - Database settings - Setări bază de date + Delete + Șterge - &Clone entry + Move - &Find + Empty - Copy &username - + Remove + Înlătură - Copy username to clipboard + Skip - Cop&y password - + Disable + Dezactivează - Copy password to clipboard + Merge + + + QObject - &Settings - &Setări + Database not opened + - Password Generator - Generator de parole + Database hash not available + - &Perform Auto-Type + Client public key not received - &Open URL + Cannot decrypt message - &Lock databases + Action cancelled or denied - &Title + KeePassXC association failed, try again - Copy title to clipboard + Encryption key is not recognized - &URL + Incorrect action - Copy URL to clipboard + Empty message received - &Notes - &Notițe + No URL provided + - Copy notes to clipboard + No logins found - &Export to CSV file... + Unknown error - Import KeePass 1 database... - Importă bază de date KeePass 1... + Add a new entry to a database. + Adaugă o intrare nouă în baza de date. - Import CSV file... - Importă fișier CSV... + Path of the database. + Calea către baza de date - Re&pair database... - + Key file of the database. + Fișier cheie al bazei de date. - Show TOTP - + path + cale - Set up TOTP... + Username for the entry. - Copy &TOTP - + username + nume utilizator - E&mpty recycle bin + URL for the entry. - Clear history - Golește istoric + URL + URL - Access error for config file %1 + Prompt for the entry's password. - <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> + Generate a password for the entry. - read-only - + Length for the generated password. + Lungimea parolei generate. - Settings - Setări + length + lungime - Toggle window + Path of the entry to add. - Quit KeePassXC + Copy an entry's password to the clipboard. - KeePass 2 Database - Bază de date KeePass 2 + Path of the entry to clip. + clip = copy to clipboard + - All files - Toate fișierele + Timeout in seconds before clearing the clipboard. + - Open database - Deschide baza de date + Edit an entry. + Editați o intrare. - Save repaired database - Salvează bază de date reparată + Title for the entry. + Titlu pentru intrare. - Writing the database failed. - Scrierea în baza de date a eșuat. + title + titlu - Please touch the button on your YubiKey! + Path of the entry to edit. - 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. + Estimate the entropy of a password. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key + Password for which to estimate the entropy. - PEM boundary mismatch + Perform advanced analysis on the password. - Base64 decoding failed + Extract and print the content of a database. - Key file way too small. - + Path of the database to extract. + Calea bazei de date pentru extragere. - Key file magic header id invalid + Insert password to unlock %1: - Found zero keys + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - Failed to read public key. - Citirea cheii publice a eșuat. + + +Available commands: + + + +Comenzi disponibile: + - Corrupted key file, reading private key failed - + Name of the command to execute. + Numele comenzii de executat. - No private key payload to decrypt + List database entries. - Trying to run KDF without cipher + Path of the group to list. Default is / - Passphrase is required to decrypt this key + Find entries quickly. - Key derivation failed, key file corrupted? - + Search term. + Termen de căutare. - Decryption failed, wrong passphrase? - + Merge two databases. + Îmbina doua baze de date - Unexpected EOF while reading public key + Path of the database to merge into. - Unexpected EOF while reading private key + Path of the database to merge from. - Can't write public key as it is empty + Use the same credentials for both database files. - Unexpected EOF when writing public key + Key file of the database to merge from. - Can't write private key as it is empty + Show an entry's information. - Unexpected EOF when writing private key + 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. - Unsupported key type: %1 - + attribute + atribut - Unknown cipher: %1 + Name of the entry to show. - Cipher IV is too short for MD5 kdf + NULL device - Unknown KDF: %1 + error reading from device - Unknown key type: %1 + malformed string - - - OptionDialog - - Dialog - Dialog - - This is required for accessing your databases from ChromeIPass or PassIFox + missing closing quote - Enable KeePassHTTP server - Actvați serverul KeePassHTTP - - - General - General - - - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - + Group + Grup - Only returns the best matches for a specific URL instead of all entries for the whole domain. - + Title + Titlu - &Return only best matching entries - + Username + Nume utilizator - Re&quest to unlock the database if it is locked - + Password + Parolă - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - + Notes + Notițe - &Match URL schemes + Last Modified - Sort matching entries by &username + Created - Sort &matching entries by title - + Browser Integration + Integrare cu browserul - R&emove all shared encryption keys from active database + YubiKey[%1] Challenge Response - Slot %2 - %3 - Re&move all stored permissions from entries in active database - + Press + Apasă - Password Generator - Generator de parole + Passive + Pasiv - Advanced - Avansat + SSH Agent + Agent SSH - Always allow &access to entries + Generate a new random diceware passphrase. - Always allow &updating entries + Word count for the diceware passphrase. - Only the selected database has to be connected with a client. + Wordlist for the diceware generator. +[Default: EFF English] - Searc&h in all opened databases for matching entries + Generate a new random password. - Automatically creating or updating string fields is not supported. + Invalid value for password length %1. - &Return advanced string fields which start with "KPH: " + Could not create entry with path %1. - HTTP Port: - Port HTTP: - - - Default port: 19455 - Port implicit: 19455 + Enter password for new entry: + - KeePassXC will listen to this port on 127.0.0.1 + Writing the database failed %1. - <b>Warning:</b> The following options can be dangerous! + Successfully added entry %1. - <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> + Copy the current TOTP to the clipboard. - Cannot bind to privileged ports + Invalid timeout value %1. - Cannot bind to privileged ports below 1024! -Using default port 19455. + Entry %1 not found. - - - PasswordGeneratorWidget - %p% - %p% + Entry with path %1 has no TOTP set up. + - Password: - Parola: + Entry's current TOTP copied to the clipboard! + - strength - Password strength - putere + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - entropy - entropie + Clipboard cleared! + - Password - Parolă + Silence password prompt and other secondary outputs. + - Character Types - Tipuri de caractere + count + CLI parameter + - Upper Case Letters - Litere mari + Invalid value for password length: %1 + - Lower Case Letters - Litere mici + Could not find entry with path %1. + - Numbers - Numere + Not changing any field for entry %1. + - Special Characters - Caractere speciale + Enter new password for entry: + - Extended ASCII + Writing the database failed: %1 - Exclude look-alike characters - Exclude caractere asemănătoare + Successfully edited entry %1. + - Pick characters from every group - Alegeți caractere din fiecare grup + Length %1 + - &Length: - &Lungime: + Entropy %1 + - Passphrase + Log10 %1 - Wordlist: + Multi-word extra bits %1 - Word Count: - Număr cuvinte: + Type: Bruteforce + - Word Separator: - Separator cuvinte: + Type: Dictionary + - Generate - Generează + Type: Dict+Leet + - Copy - Copiază + Type: User Words + - Accept - Acceptă + Type: User+Leet + - Close - Închide + Type: Repeated + - Apply - Aplică + Type: Sequence + - Entropy: %1 bit - Entropie: %1 bit + Type: Spatial + - Password Quality: %1 - Calitate parolă: %1 + Type: Date + - Poor - Password quality - Inacceptabil + Type: Bruteforce(Rep) + - Weak - Password quality - Slab + Type: Dictionary(Rep) + - Good - Password quality - Bun + Type: Dict+Leet(Rep) + - Excellent - Password quality - Excelent + Type: User Words(Rep) + - - - QObject - Database not opened + Type: User+Leet(Rep) - Database hash not available + Type: Repeated(Rep) - Client public key not received + Type: Sequence(Rep) - Cannot decrypt message + Type: Spatial(Rep) - Timeout or cannot connect to KeePassXC + Type: Date(Rep) - Action cancelled or denied + Type: Unknown%1 - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + Entropy %1 (%2) - KeePassXC association failed, try again + *** Password length (%1) != sum of length of parts (%2) *** - Key change was not successful + Failed to load key file %1: %2 - Encryption key is not recognized + File %1 does not exist. - No saved databases found + Unable to open file %1. - Incorrect action + Error while reading the database: +%1 - Empty message received + Error while parsing the database: +%1 - No URL provided + Length of the generated password - No logins found + Use lowercase characters - Unknown error + Use uppercase characters - Add a new entry to a database. - Adaugă o intrare nouă în baza de date. + Use numbers. + - Path of the database. - Calea către baza de date. + Use special characters + - Key file of the database. - Fișier cheie al bazei de date. + Use extended ASCII + - path - cale + Exclude character set + - Username for the entry. + chars - username - nume utilizator + Exclude similar looking characters + - URL for the entry. + Include characters from every selected group - URL - URL + Recursively list the elements of the group. + - Prompt for the entry's password. + Cannot find group %1. - Generate a password for the entry. + Error reading merge file: +%1 - Length for the generated password. - Lungimea parolei generate. + Unable to save database to file : %1 + - length - lungime + Unable to save database to file: %1 + - Path of the entry to add. + Successfully recycled entry %1. - Copy an entry's password to the clipboard. + Successfully deleted entry %1. - Path of the entry to clip. - clip = copy to clipboard + Show the entry's current TOTP. - Timeout in seconds before clearing the clipboard. + ERROR: unknown attribute %1. - Edit an entry. - Editați o intrare. + No program defined for clipboard manipulation + - Title for the entry. - Titlu pentru intrare. + Unable to start program %1 + - title - titlu + file empty + - Path of the entry to edit. + %1: (row, col) %2,%3 - Estimate the entropy of a password. + AES: 256-bit - Password for which to estimate the entropy. + Twofish: 256-bit - Perform advanced analysis on the password. + ChaCha20: 256-bit - Extract and print the content of a database. + Argon2 (KDBX 4 – recommended) - Path of the database to extract. - Calea bazei de date pentru extragere. + AES-KDF (KDBX 4) + - Insert password to unlock %1: + AES-KDF (KDBX 3.1) - Failed to load key file %1 : %2 + Invalid Settings + TOTP - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + Invalid Key + TOTP - - -Available commands: - - - -Comenzi disponibile: - + Message encryption failed. + - Name of the command to execute. - Numele comenzii de executat. + No groups found + - List database entries. + Create a new database. - Path of the group to list. Default is / + File %1 already exists. - Find entries quickly. + Loading the key file failed - Search term. - Termen de căutare. + No key is set. Aborting database creation. + - Merge two databases. - Îmbina doua baze de date + Failed to save the database: %1. + - Path of the database to merge into. + Successfully created new database. - Path of the database to merge from. + Insert password to encrypt database (Press enter to leave blank): - Use the same credentials for both database files. + Creating KeyFile %1 failed: %2 - Key file of the database to merge from. + Loading KeyFile %1 failed: %2 - Show an entry's information. + Remove an entry from the database. + Eliminați o intrare din baza de date. + + + Path of the entry to remove. - 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. + Existing single-instance lock file is invalid. Launching new instance. - attribute - atribut + The lock file could not be created. Single-instance mode disabled. + - Name of the entry to show. + KeePassXC - cross-platform password manager - NULL device + filenames of the password databases to open (*.kdbx) - error reading from device + path to a custom config file - file empty ! - - fișier vid! - + key file of the database + - malformed string + read password of the database from stdin - missing closing quote + Parent window handle - Group - Grup + Another instance of KeePassXC is already running. + - Title - Titlu + Fatal error while testing the cryptographic functions. + - Username - Nume utilizator + KeePassXC - Error + KeePassXC - Eroare - Password - Parolă + Database password: + + + + QtIOCompressor - Notes - Notițe + Internal zlib error when compressing: + - Last Modified + Error writing to underlying device: - Created + Error opening underlying device: - Legacy Browser Integration + Error reading data from underlying device: - Browser Integration - Integrare cu browserul + Internal zlib error when decompressing: + + + + QtIOCompressor::open - YubiKey[%1] Challenge Response - Slot %2 - %3 + The gzip format not supported in this version of zlib. - Press - Apasă + Internal zlib error: + Eroare internă zlib: + + + + SSHAgent + + Agent connection failed. + - Passive - Pasiv + Agent protocol error. + - SSH Agent - Agent SSH + No agent running, cannot add identity. + - Generate a new random diceware passphrase. + No agent running, cannot remove identity. - Word count for the diceware passphrase. + Agent refused this identity. Possible reasons include: - count + The key has already been added. - Wordlist for the diceware generator. -[Default: EFF English] + Restricted lifetime is not supported by the agent (check options). - Generate a new random password. + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - Length of the generated password. + Search Help - Use lowercase characters in the generated password. + Search terms are as follows: [modifiers][field:]["]term["] - Use uppercase characters in the generated password. + Every search term must match (ie, logical AND) - Use numbers in the generated password. + Modifiers - Use special characters in the generated password. + exclude term from results - Use extended ASCII in the generated password. + match term exactly - - - QtIOCompressor - Internal zlib error when compressing: + use regex in term - Error writing to underlying device: + Fields - Error opening underlying device: + Term Wildcards - Error reading data from underlying device: + match anything - Internal zlib error when decompressing: + match one - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. + logical OR - Internal zlib error: - Eroare internă zlib: + Examples + SearchWidget - - Search... - Caută... - Search Caută @@ -3623,310 +4961,316 @@ Comenzi disponibile: Golește - Case Sensitive + Limit search to selected group + Limitați căutarea la grupul selectat + + + Search Help - Limit search to selected group - Limitați căutarea la grupul selectat + 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ă? + 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: + Cheie: - KeePassXC: Removed keys from database - + Generate + Generează - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Import + - KeePassXC: No keys found + Export - No shared encryption-keys found in KeePassHttp Settings. + Imported certificates - KeePassXC: Settings not available! + Trust - The active database does not contain an entry of KeePassHttp Settings. + Ask - Removing stored permissions... + Untrust - Abort - Anulează + Remove + Înlătură - KeePassXC: Removed permissions + Path - - Successfully removed permissions from %n entries. - - - KeePassXC: No entry with permissions found! + Status - The active database does not contain an entry with permissions. + Fingerprint - - - SettingsWidget - Application Settings - Setări aplicație + Certificate + - General - General + Trusted + - Security - Securitate + Untrusted + - Access error for config file %1 + Unknown - - - SettingsWidgetGeneral - Basic Settings - Setări de bază + key.share + Filetype for KeeShare key + - Start only a single instance of KeePassXC + KeeShare key file - Remember last databases - Memorează ultimele baze de date + All files + Toate fișierele - Remember last key files and security dongles + Select path - Load previous databases on startup + Exporting changed certificate - Automatically save on exit - Salvare automată la ieșire + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Automatically save after every change + %1.%2 + Template for KeeShare key file + + + ShareObserver - Automatically reload the database when modified externally + Import from container without signature - Minimize when copying to clipboard + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? - Minimize window at application startup + Import from container with certificate - Use group icon on entry creation + Do you want to trust %1 with the fingerprint of %2 from %3 - Don't mark database as modified for non-data changes (e.g., expanding groups) + Not this time - Hide the Details view - + Never + Niciodată - Show a system tray icon + Always - Hide window to system tray when minimized + Just this time - Hide window to system tray instead of app exit + Import from %1 failed (%2) - Dark system tray icon + Import from %1 successful (%2) - Language - Limbă + Imported from %1 + - Auto-Type + Signed share container are not supported - import prevented - Use entry title to match windows for global Auto-Type + File is not readable - Use entry URL to match windows for global Auto-Type + Invalid sharing container - Always ask before performing Auto-Type + Untrusted import prevented - Global Auto-Type shortcut + Successful signed import - Auto-Type delay + Unexpected error - ms - Milliseconds - ms + Unsigned share container are not supported - import prevented + - Startup + Successful unsigned import - File Management + File does not exist - Safely save database files (may be incompatible with Dropbox, etc) + Unknown share container type - Backup database file before saving + Overwriting signed share container is not supported - export prevented - Entry Management + Could not write export container (%1) - General - General + Could not embed signature (%1) + - - - SettingsWidgetSecurity - Timeouts + Could not embed database (%1) - Clear clipboard after - Golește clipboard după + Overwriting unsigned share container is not supported - export prevented + - sec - Seconds - sec + Could not write export container + - Lock databases after inactivity of + Unexpected export error occurred - Convenience - Comoditate + Export to %1 failed (%2) + - Lock databases when session is locked or lid is closed + Export to %1 successful (%2) - Lock databases after minimizing the window + Export to %1 + + + TotpDialog - Don't require password repeat when it is visible - + Timed Password + Parolă temporizată - Show passwords in cleartext by default - + 000000 + 000000 - Hide passwords in the preview panel - + Copy + Copiază + + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Hide entry notes by default - + Copy + Copiază - Privacy - Confidențialitate + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Use Google as fallback for downloading website icons - Folosește Google ca variantă de rezervă pentru descărcare favicon site + There was an error creating the QR code. + - Re-lock previously locked database after performing Auto-Type + Closing in %1 seconds. - 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 + sec + Seconds + sec + + + Code size: + Dimensiune cod: 6 digits 6 cifre - Code size: - Dimensiune cod: + 7 digits + - sec - Seconds - sec + 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. + + + + 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 + - - - UnlockDatabaseWidget - Unlock database - Deblocare bază de date + 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 - - Remove an entry from the database. - Eliminați o intrare din baza de date. - - - Path of the database. - Calea către baza de date - + YubiKeyEditWidget - Path of the entry to remove. - - - - KeePassXC - cross-platform password manager - - - - filenames of the password databases to open (*.kdbx) - + Refresh + Actualizează - path to a custom config file + YubiKey Challenge-Response - key file 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> - read password of the database from stdin + No YubiKey detected, please ensure it's plugged in. - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_ru.ts b/share/translations/keepassx_ru.ts index 14f0590d43..10b78f00d6 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,87 +31,297 @@ Include the following information whenever you report a bug: - Включите следующую информацию, когда сообщаете об ошибке: + Добавьте в сообщение об ошибке следующую информацию: Copy to clipboard Скопировать в буфер обмена - Version %1 - - Версия %1 - + Project Maintainers: + Проект сопровождают: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Команда KeePassXC выражает особую благодарность debfx за создание оригинального KeePassX. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Включить SSH-агент (необходим перезапуск) + + + Use OpenSSH for Windows instead of Pageant + Использовать OpenSSH для Windows вместо Pageant + + + ApplicationSettingsWidget - Revision: %1 - Ревизия: %1 + Application Settings + Параметры приложения - Distribution: %1 - Дистрибутив: %1 + General + Общие - Libraries: - Библиотеки: + Security + Безопасность - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Операционная система: %1 -Архитектура CPU: %2 -Ядро: %3 %4 + Access error for config file %1 + Ошибка доступа к файлу конфигурации %1 - Enabled extensions: - Включенные расширения: + Icon only + Только значок - Project Maintainers: - Проект сопровождают: + Text only + Только текст - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Команда KeePassXC выражает особую благодарность debfx за создание оригинального KeePassX. + Text beside icon + Текст рядом со значком - Build Type: %1 - - Тип сборки: %1 - + Text under icon + Текст под значком + + + Follow style + Следовать стилю - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - Подтверждение доступа к KeePassXC HTTP + Basic Settings + Основные параметры - Remember this decision - Запомнить это решение + Startup + Запуск - Allow - Разрешить + Start only a single instance of KeePassXC + Запускать только один экземпляр KeePassXC - Deny - Запретить + Remember last databases + Запоминать последнюю базу данных - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 запросил доступ к паролям для следующего элемента(ов). -Разрешить доступ? + 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 + Стиль кнопок - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Включить SSH агент (необходим перезапуск) + 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> Следующие параметры могут быть опасны! + <b>ВНИМАНИЕ:</b> Следующие параметры могут быть опасны! + + + Select custom proxy location + Выбрать другое расположение прокси - Executable Files (*.exe);;All Files (*.*) - Исполняемые файлы (*.exe);;Все файлы (*.*) + &Tor Browser + &Tor Browser - Executable Files (*) - Исполняемые файлы (*) + <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 />Ожидаемый путь: - Select custom proxy location - Выбрать другое расположение прокси + 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 + - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Извините, но KeePassXC-Browser не поддерживается для Snap выпусков на данный момент. + 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 @@ -417,152 +661,54 @@ Do you want to overwrite it? Обновить информацию в %1 — %2? - KeePassXC: Database locked! - KeePassXC: База данных заблокирована! + Abort + Прервать - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Активная база данных заблокирована! -Разблокируйте выбранную базу данных или выберите другую, незаблокированную. + Converting attributes to custom data… + Преобразование атрибутов в пользовательских данных... - KeePassXC: Settings not available! - KeePassXC: Параметры недоступны! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Атрибуты KeePassHTTP преобразованы - The active database does not contain a settings entry. - В базе данных отсутствует запись с настройками. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Успешно преобразованы атрибуты из %1 записи(ей). +%2 ключей перемещены в пользовательские данные. + + + Successfully moved %n keys to custom data. + Успешно переехал %n ключи пользовательских данных.Успешно переехал %n ключи пользовательских данных.Успешно переехал %n ключи пользовательских данных.Успешно перемещено %n ключей в пользовательские данные. - KeePassXC: No keys found - KeePassXC: Ключи не найдены + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Не найдено записи с атрибутами KeePassHTTP! - No shared encryption keys found in KeePassXC Settings. - Разделяемые секретные ключи не найдены в настройках KeePassXC. + The active database does not contain an entry with KeePassHTTP attributes. + Активная база данных не содержит запись с атрибутами KeePassHTTP. - KeePassXC: Removed keys from database - KeePassXC: Ключи удалены из базы данных + KeePassXC: Legacy browser integration settings detected + KeePassXC: Устаревшая интеграция с браузером обнаружена - - Successfully removed %n encryption key(s) from KeePassXC settings. - Успешно удален %n ключ шифрования из параметров KeePassXC.Успешно удалено %n ключей шифрования из параметров KeePassXC.Успешно удалено %n ключей шифрования из параметров KeePassXC.Успешно удалено %n ключей шифрования из параметров KeePassXC. + + KeePassXC: Create a new group + - Removing stored permissions… - Удаление сохраненных разрешений... - - - Abort - Прервать - - - KeePassXC: Removed permissions - KeePassXC: Права доступа удалены - - - 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. - Активная база данных не содержит записей с назначенными правами доступа. - - - - 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 - Устаревший формат ключевого файла - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Вы используете устаревший формат ключевого файла, поддержка которого может быть прекращена в будущем. - -Рассмотрите возможность создания нового ключевого файла. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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! + Error + Ошибка - more messages skipped] - пропущено больше сообщений] + Empty fieldname %1 + Пустое имя поле %1 - Error - Ошибка + column %1 + колонке %1 - CSV import: writer has errors: - - Импорт CSV: у записи есть ошибки: - + Error(s) detected in CSV file! + В CSV-файле обнаруженны ошибки! - - - CsvImportWizard - - Error - Ошибка + + [%n more message(s) skipped] + [%n больше сообщений пропущен][%n больше сообщений пропущен][%n больше сообщений пропущен][%n сообщений пропущено] - Unable to calculate master key - Невозможно вычислить мастер-пароль + CSV import: writer has errors: +%1 + Импорт CSV: запись была с ошибками: %1 CsvParserModel - %n byte(s), - %n байт, %n байт(а), %n байт(а), %n байт(а), + %n column(s) + %n столбцов%n столбцов%n столбцов%n столбцов + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n строка, %n строк, %n строк, %n строк, + %n byte(s) + %n байт(ов)%n байт(ов)%n байт(ов)%n байт(ов) - %n column(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 - Выберите файл-ключ + Выберите ключевой файл - - - DatabaseRepairWidget - Repair database - Восстановить базу данных + TouchID for quick unlock + TouchID для быстрой разблокировки - Error - Ошибка + Unable to open the database: +%1 + Не удается открыть базу данных: +%1 + + + Can't open key file: +%1 + Не удается открыть ключевой файл: +%1 + + + DatabaseSettingWidgetMetaData - Can't open key file - Не могу открыть файл-ключ + Passwords + Пароли + + + DatabaseSettingsDialog - Unable to open the database. - Невозможно открыть базу данных. + Advanced Settings + Дополнительные параметры + + + General + Общие - Database opened fine. Nothing to do. - База данных открылось прекрасно. Больше нечего делать. + Security + Безопасность - Success - Успешно + Master Key + Мастер ключ - The database has been successfully repaired -You can now save it. - База данных была восстановлена. -Теперь можете сохранить её. + Encryption Settings + Параметры шифрования - Unable to repair the database. - Невозможно восстановить базу данных. + Browser Integration + Интеграция с браузером - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Общие + KeePassXC-Browser settings + Настройки KeePassXC-Browser - Encryption - Шифрование + &Disconnect all browsers + &Отключить все браузеры - Number of rounds too high - Key transformation rounds - Слишком много раундов + Forg&et all site-specific settings on entries + Забыть все сайтоспецифические настройки записей - 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. - -При сохранении этого значение открытие базы данных может занять часы или дни (или даже больше)! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Переместить аттрибуты KeePassHTTP в пользовательские данные KeePassXC-Browser - Understood, keep number - Понятно, сохранить значение + Stored keys + Сохраненные ключи - Cancel - Отмена + Remove + Удалить - Number of rounds too low - Key transformation rounds - Слишком мало раундов + Delete the selected key? + Удалить выбранный ключ? - 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. - -При сохранении этого значения, база данных может быть взломана слишком легко! + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Вы действительно хотите удалить выбранный ключ? +Это может воспрепятствовать соединению с плагином браузера. - KDF unchanged - ФФК не изменена + Key + Ключ - Failed to transform key with new KDF parameters; KDF unchanged. - Ошибка преобразования ФФК с новыми параметрами; ФФК не изменена. + 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,40 +1140,147 @@ If you keep this number, your database may be too easy to crack! Parallelism: Параллелизм: - - - DatabaseSettingsWidgetGeneral - Database Meta Data - Метаданные базы данных + Decryption Time: + Время расшифровки: - Database name: - Название базы данных: + ?? s + ?? с - Database description: - Описание базы данных: + Change + Изменить - Default username: - Имя пользователя по умолчанию: + 100 ms + 100 мс - History Settings - Настройки истории + 5 s + 5 s - Max. history items: - Макс. количество записей истории: + Higher values offer more protection, but opening the database will take longer. + Более высокие значения дают более высокий уровень защиты, но открытие базы данных займет больше времени. - Max. history size: - Максимальный размер истории: + Database format: + Формат базы данных: - MiB - МиБ + 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 + + Database Meta Data + Метаданные базы данных + + + Database name: + Название базы данных: + + + Database description: + Описание базы данных: + + + Default username: + Имя пользователя по умолчанию: + + + History Settings + Настройки истории + + + Max. history items: + Максимум записей в истории: + + + Max. history size: + Максимальный размер истории: + + + MiB + МиБ Use recycle bin @@ -950,91 +1296,112 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Корень + Sharing + Совместное использование - KeePass 2 Database - База данных KeePass 2 + Breadcrumb + Цепочка - All files - Все файлы + Type + Тип - Open database - Открыть базу данных + Path + Путь - File not found! - Файл не найден! + Last Signer + Последний подписавшийся - Unable to open the database. - Не удаётся открыть базу данных. + Certificates + Сертификаты - File opened in read only mode. - Файл открыт в режиме только для чтения. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Открыть файл CSV + Add additional protection... + Добавить дополнительную защиту... - CSV file - Файл CSV + No encryption key added + Ключ шифрования не добавлен - All files (*) - Все файлы (*) + You must add at least one encryption key to secure your database! + Вы должны добавить по крайней мере один ключ шифрования, чтобы обезопасить вашу базу данных! - Merge database - Объединить базу данных + No password set + Пароль не установлен - Open KeePass 1 database - Открыть базу данных KeePass 1 + 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? + ВНИМАНИЕ! Вы не установили пароль. Мы настоятельно отговариваем Вас от использования базы данных без пароля! + +Вы уверены, что хотите продолжить без пароля? - KeePass 1 database - База данных KeePass 1 + Unknown error + Неизвестная ошибка - Close? - Закрыть? + Failed to change master key + Не удалось сменить мастер ключ + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - «%1» в режиме правки. -Отменить изменения и всё равно закрыть? + Database Name: + Имя базы данных: - Save changes? - Сохранить изменения? + Description: + Описание: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - «%1» изменён. -Сохранить изменения? + KeePass 2 Database + База данных KeePass 2 - Writing the database failed. - Не удалось записать базу данных. + All files + Все файлы - Passwords - Пароли + Open database + Открыть базу данных - Save database as - Сохранить базу данных как + CSV file + Файл CSV + + + Merge database + Объединить базу данных + + + Open KeePass 1 database + Открыть базу данных KeePass 1 + + + KeePass 1 database + База данных KeePass 1 Export database to CSV file @@ -1042,43 +1409,44 @@ Save changes? Writing the CSV file failed. - Не удалось записать CSV файл. + Не удалось записать 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 + Выберать CSV-файл - 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 + %1 [Новая база данных] - 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 [Заблокировано] + + + %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? - Удалить все из корзины? + Удалить всё из корзины? + + + Do you really want to delete %n entry(s) for good? + Вы действительно хотите удалить %n запись насовсем?Вы действительно хотите удалить %n записи насовсем?Вы действительно хотите удалить %n записей насовсем?Вы действительно хотите удалить %n запись(ей) насовсем? + + + Delete entry(s)? + Удалить запись?Удалить записи?Удалить записи?Удалить запись(и)? + + + Move entry(s) to recycle bin? + Переместить запись в корзину?Переместить записи в корзину?Переместить записи в корзину?Переместить запись(и) в корзину? - - - DetailsWidget - Generate TOTP Token - Генерировать TOTP токен + File opened in read only mode. + Файл открыт в режиме только для чтения. - Close - Закрыть + Lock Database? + Заблокировать базу данных? - General - Общие + You are editing an entry. Discard changes and lock anyway? + Вы редактируете запись. Сбросить изменения и заблокировать в любом случае? - Password - Пароль + "%1" was modified. +Save changes? + «%1» изменён. +Сохранить изменения? - URL - URL-адрес + Database was modified. +Save changes? + База данных была изменена. +Сохранить изменения? - Expiration - Срок действия + Save changes? + Сохранить изменения? - Username - Имя пользователя + Could not open the new database file while attempting to autoreload. +Error: %1 + Не удалось открыть новый файл базы данных во время попытки автоматической перезагрузки. +Ошибка: %1 - Autotype - Автоввод + Disable safe saves? + Отключить безопасное сохранение? - Searching - Поиск + 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 несколько раз не удалось сохранить базу данных. Это могло быть вызвано службами синхронизации файлов, блокирующими файл при сохранении. +Отключить безопасное сохранение и повторить попытку? - Attributes - Атрибуты + Writing the database failed. +%1 + Не удалось записать базу данных. +%1 - Attachments - Вложения + Passwords + Пароли - Notes - Примечания + Save database as + Сохранить базу данных как - Window - Окно + KeePass 2 Database + База данных KeePass 2 - Sequence - Последовательность + 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 ссылку(ки, ок). Вы хотите переписать ссылки значениями, пропустить эту запись или удалить в любом случае? - Search - Поиск + Delete group + Удалить группу - Clear - Очистить + Move group to recycle bin? + Переместить группу в корзину? - Never - Никогда + Do you really want to move the group "%1" to the recycle bin? + Вы действительно хотите переместить группу "%1" в корзину? - [PROTECTED] - [ЗАЩИЩЕННЫЙ] + Successfully merged the database files. + Слияние файлов баз данных прошло успешно. - Disabled - Отключено + Database was not modified by merge operation. + База данных не была изменена операцией слияния. - Enabled - Включено + 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,109 +2414,159 @@ This may cause the affected plugins to malfunction. Attachments Вложения + + Yes + Да + + + TOTP + TOTP + - EntryView + EntryPreviewWidget - Customize View - Настройка вида + Generate TOTP Token + Генерировать токен TOTP - Hide Usernames - Скрыть имена пользователей + Close + Закрыть - Hide Passwords - Скрыть пароли + General + Общие - Fit to window - По размеру окна + Username + Имя пользователя - Fit to contents - По размеру содержимого + Password + Пароль - Reset to defaults - Восстановить значения по умолчанию + Expiration + Срок действия - Attachments (icon) - Вложения (иконки) + URL + URL-адрес - - - Group - Recycle Bin - Корзина + Attributes + Атрибуты - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: Не удается сохранить файл! + Attachments + Вложения - Cannot save the native messaging script file. - Не удается сохранить файл сценария для механизма native messaging. + Notes + Примечания - - - HttpPasswordGeneratorWidget - Length: - Длина: + Autotype + Автоввод - Character Types - Виды символов + Window + Окно - Upper Case Letters - Заглавные буквы + Sequence + Последовательность - A-Z - A-Z + Searching + Поиск - Lower Case Letters - Строчные буквы + Search + Поиск - a-z - a-z + Clear + Очистить - Numbers - Цифры + Never + Никогда - 0-9 - 0-9 + [PROTECTED] + [ЗАЩИЩЁННЫЙ] - Special Characters - Специальные символы + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 - /*_& ... - /*_& ... + Enabled + Включено - Exclude look-alike characters - Исключить визуально схожие символы + Disabled + Отключено - Ensure that the password contains characters from every group - Убедиться, что пароль содержит символы из каждой группы + Share + Предоставить общий доступ + + + EntryView - Extended ASCII - Расширенный ASCII + 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 + [пустой] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: Невозможно сохранить файл! + + + Cannot save the native messaging script file. + Невозможно сохранить файл сценария для механизма 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,17 +2817,29 @@ 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 XML parsing failure: %1 @@ -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 Недопустимый тип поля записи + + unable to seek to content position + не удалось переместиться к позиции содержимого + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-бит + Disabled share + Отключить общий доступ - Twofish: 256-bit - Twofish: 256-бит + Import from + Импорт из - ChaCha20: 256-bit - ChaCha20: 256-бит + 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 – рекомендуемый) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Запускается новый экземпляр программы, т.к. файл блокировки запуска повреждён. + Key Component + Ключевой компонент - The lock file could not be created. Single-instance mode disabled. - Файл блокировки не может быть создан. Режим недублирующего хранения отключен. + Key Component Description + Описание ключевого компонента - Another instance of KeePassXC is already running. - Другой экземпляр KeePassXC уже запущен. + Cancel + Отмена - Fatal error while testing the cryptographic functions. - Неисправимая ошибка в процессе тестирования криптографических функций. + Key Component set, click to change or remove + Ключевой компонент установлен, щёлкните, чтобы изменить или удалить - KeePassXC - Error - Ошибка - KeePassXC + 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 @@ -2865,312 +3425,460 @@ This is a one-way migration. You won't be able to open the imported databas Закрыть KeePassXC - KeePass 2 Database - База данных KeePass 2 + Please touch the button on your YubiKey! + Нажмите кнопку на YubiKey! - All files - Все файлы + 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! +Весьма вероятно повреждение базы данных, сделайте её резервную копию. +Эта версия не предназначена для повседневного использования. - Open database - Открыть базу данных + &Donate + &Пожертвовать - Save repaired database - Сохранить восстановленную базу данных + Report a &bug + Сообщить об &ошибке - Writing the database failed. - Не удалось записать базу данных. + 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 доступны на нашей странице загрузки. - Please touch the button on your YubiKey! - Нажмите кнопку на YubiKey! + &Import + &Импорт - 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! -Существует высокий риск повреждения базы данных, сделайте резервную копию базы данных. -Эта версия не предназначен для повседневного использования. + Copy att&ribute... + Скопировать ат&рибут... - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Недопустимый файл ключа, ожидается OpenSSH ключ + TOTP... + &TOTP... - PEM boundary mismatch - Несоответствие границ PEM + &New database... + &Новая база данных... - Base64 decoding failed - Не удалось декодировать Base64 + Create a new database + Создать новую базу данных - Key file way too small. - Ключевой файл слишком мал. + &Merge from database... + Сое&динить с другой базой данных... - Key file magic header id invalid - Недопустимый идентификатор заголовка файла ключа + Merge from another KDBX database + Соединить с другой базой данных KDBX - Found zero keys - Найдены пустые ключи + &New entry + &Новая запись - Failed to read public key. - Не удалось прочесть открытый ключ. + Add a new entry + Добавить новую запись - Corrupted key file, reading private key failed - Поврежденный файл ключа, чтение закрытого ключа не удалось + &Edit entry + &Править запись - No private key payload to decrypt - В закрытом ключе нет сведений для дешифрования + View or edit entry + Просмотреть или отредактировать запись - Trying to run KDF without cipher - Попытка запустить ФФК без шифрования + &New group + &Новая группа - Passphrase is required to decrypt this key - Пароль требуется для расшифровки этого ключа + Add a new group + Добавить новую группу - Key derivation failed, key file corrupted? - Формирования ключа не удалось, ключевой файл поврежден? + Change master &key... + Измнить мастер &ключ... - Decryption failed, wrong passphrase? - Расшифровка не удалась, неправильный пароль? + &Database settings... + &Параметры базы данных... - Unexpected EOF while reading public key - Неожиданное EOF при чтении открытого ключа + Copy &password + Скопировать п&ароль - Unexpected EOF while reading private key - Неожиданный EOF при чтении закрытого ключа + Perform &Auto-Type + Осуществить а&втоввод - Can't write public key as it is empty - Не удается записать открытый ключ, так как он пуст + Open &URL + Открыть &URL - Unexpected EOF when writing public key - Неожиданный EOF при записе открытого ключа + KeePass 1 database... + База данных KeePass 1... - Can't write private key as it is empty - Нельзя записать закрытый ключ, поскольку он пустой + Import a KeePass 1 database + Импортировать базу данных KeePass 1 - Unexpected EOF when writing private key - Неожиданный EOF при записи закрытого ключа + CSV file... + Файл CSV... - Unsupported key type: %1 - Неизвестный тип ключа: %1 + Import a CSV file + Импортировать файл CSV - Unknown cipher: %1 - Неизвестный шифр: %1 + Show TOTP... + Показать TOTP... - Cipher IV is too short for MD5 kdf - Слишком короткий Cipher IV для MD5 ФФК + Show TOTP QR Code... + Показать QR-код TOTP... - Unknown KDF: %1 - Неизвестная ФФК: %1 + Check for Updates... + Проверить обновления... - Unknown key type: %1 - Неизвестный тип ключа: %1 + Share entry + Поделиться записью - - - OptionDialog - Dialog - Диалог + 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! +Ожидайте некоторые баги и мелкие проблемы, эта версия не подразумевается для производственного использования. - This is required for accessing your databases from ChromeIPass or PassIFox - Это необходимо для доступа к вашим базам данных из ChromeIPass или PassIFox + Check for updates on startup? + Проверять обновления при запуске? - Enable KeePassHTTP server - Включить сервер KeePassHTTP + Would you like KeePassXC to check for updates on startup? + Вы бы хотели, чтобы KeePassXC проверял обновления при запуске? - General - Общие + You can always check for updates manually from the application menu. + Вы всегда можете проверять обновления вручную из меню приложения. + + + Merger - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Показывать уведомление при запросе учётных данных + Creating missing %1 [%2] + Создание отсутствующей %1 [%2] - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Возвращает только лучшие совпадения для определенного URL вместо всех записей для всего домена. + Relocating %1 [%2] + Перемещение %1 [%2] - &Return only best matching entries - &Показывать только лучшие совпадения + Overwriting %1 [%2] + Перезапись %1 [%2] - Re&quest to unlock the database if it is locked - Запрашивать разблокировку базы данных, если она заблокирована + older entry merged from database "%1" + более старая запись присоединена из базы данных "%1" - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Будут отобраны только записи с совпадающим протоколом (http://, https://, ftp://, ...). + Adding backup for older target %1 [%2] + Добавление резервной копии для более старой мишени %1 [%2] - &Match URL schemes - &Проверять протокол + Adding backup for older source %1 [%2] + Добавление резервной копии для более старого источника %1 [%2] - Sort matching entries by &username - Сортировать совпавшие записи по &имени пользователя + Reapplying older target entry on top of newer source %1 [%2] + Повторное применение более старой целевой записи поверх более нового источника %1 [%2] - Sort &matching entries by title - Сортировать совпадающие записи по названию + Reapplying older source entry on top of newer target %1 [%2] + Повторное применение более старой исходной записи поверх более новой мишени %1 [%2] - R&emove all shared encryption keys from active database - &Удалить все общие ключи шифрования из активной базы данных + Synchronizing from newer source %1 [%2] + Синхронизация с более новым источником %1 [%2] - Re&move all stored permissions from entries in active database - Удалить все сохранённые права доступа из записей активной базы данных + Synchronizing from older source %1 [%2] + Синхронизация с более старым источником %1 [%2] - Password Generator - Генератор паролей + Deleting child %1 [%2] + Удаление дочерней %1 [%2] - Advanced - Продвинутые + Deleting orphan %1 [%2] + Удаление заброшенной %1 [%2] - Always allow &access to entries - Всегда разрешать доступ к записям + Changed deleted objects + Изменены удалённые объекты - Always allow &updating entries - Всегда разрешать обновление записей + Adding missing icon %1 + Добавление отсутствующей иконки %1 + + + NewDatabaseWizard - Only the selected database has to be connected with a client. - К клиенту должна быть подключена только выбранная база данных. + Create a new KeePassXC database... + Создать новую базу данных KeePassXC - Searc&h in all opened databases for matching entries - Искать подходящие записи во всех открытых базах данных + Root + Root group + Корень + + + NewDatabaseWizardPage - Automatically creating or updating string fields is not supported. - Автоматическое создание или обновление полей, содержащих строки, не поддерживается. + WizardPage + СтраницаМастера - &Return advanced string fields which start with "KPH: " - Возвращать продвинутые стро&ковые поля, начинающиеся с «KPH: » + En&cryption Settings + Настройки шифрования - HTTP Port: - Порт HTTP: + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Здесь Вы можете отрегулировать настройки шифрования базы данных. Не беспокойтесь, вы сможете изменить их позже в настройках базы данных. - Default port: 19455 - Порт по умолчанию: 19455 + Advanced Settings + Дополнительные параметры - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC будет слушать этот порт на 127.0.0.1 + Simple Settings + Простые настройки + + + NewDatabaseWizardPageEncryption - <b>Warning:</b> The following options can be dangerous! - <b>Предупреждение:</b> Следующие параметры могут быть опасны! + Encryption Settings + Параметры шифрования - <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> + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Здесь Вы можете отрегулировать настройки шифрования базы данных. Не беспокойтесь, вы сможете изменить их позже в настройках базы данных. + + + NewDatabaseWizardPageMasterKey - Cannot bind to privileged ports - Не удаётся выполнить привязку к привилегированным портам + Database Master Key + Мастер-ключ базы данных - Cannot bind to privileged ports below 1024! -Using default port 19455. - Не удаётся привязать к привилегированным портам с номерами меньше 1024! -Используется порт по умолчанию: 19455. + A master key known only to you protects your database. + Мастер-ключ, известный только Вам, защищает Вашу базу данных. - PasswordGeneratorWidget + NewDatabaseWizardPageMetaData - %p% - %p% + General Database Information + Общая информация о базе данных - Password: - Пароль: + Please fill in the display name and an optional description for your new database: + Пожалуйста, заполните отображаемое имя и опциональное описание Вашей новой базы данных: + + + OpenSSHKey - strength - Password strength - надёжность + Invalid key file, expecting an OpenSSH key + Недопустимый ключевой файл, ожидается ключ OpenSSH - entropy - энтропия + PEM boundary mismatch + Несоответствие границ PEM - Password - Пароль + Base64 decoding failed + Не удалось декодировать Base64 - Character Types - Виды символов + Key file way too small. + Ключевой файл слишком мал. - Upper Case Letters - Заглавные буквы + Key file magic header id invalid + Недопустимый идентификатор заголовка ключевого файла - Lower Case Letters - Строчные буквы + Found zero keys + Обнаружены пустые ключи - Numbers - Цифры + Failed to read public key. + Не удалось прочитать публичный ключ. - Special Characters - Особые символы + Corrupted key file, reading private key failed + Поврежденный ключевой файл, ошибка чтения частного ключа - Extended ASCII - Расширенный ASCII + No private key payload to decrypt + Нет сведений для дешифрования в частном ключе - Exclude look-alike characters - Исключить похожие символы + Trying to run KDF without cipher + Попытка запустить ФФК без шифрования - Pick characters from every group + 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 + Слишком короткий Cipher IV для MD5 ФФК + + + Unknown KDF: %1 + Неизвестная ФФК: %1 + + + Unknown key type: %1 + Неизвестный тип ключа: %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> + <p>Пароль - первичный метод защиты Вашей базы данных.</p><p>Хорошие пароли длинные и уникальные. KeePassXC может сгенерировать его для Вас.</p> + + + Passwords do not match. + Пароли не совпадают. + + + Generate master password + Сгенерировать мастер-пароль + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + Пароль: + + + strength + Password strength + надёжность + + + entropy + энтропия + + + Password + Пароль + + + Character Types + Виды символов + + + Upper Case Letters + Заглавные буквы + + + Lower Case Letters + Строчные буквы + + + Numbers + Цифры + + + Special Characters + Специальные символы + + + Extended ASCII + Расширенный ASCII + + + 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 @@ -3564,96 +4395,595 @@ Available commands: Пассивная - SSH Agent - SSH Агент + SSH Agent + SSH-агент + + + Generate a new random diceware passphrase. + Сгенерировать новую парольную фразу. + + + Word count for the diceware passphrase. + Количество слов для парольной фразы. + + + Wordlist for the diceware generator. +[Default: EFF English] + Список слов для генератора парольной фразы. +[По умолчанию: Английский EFF] + + + Generate a new random password. + Сгенерировать новый случайный пароль. + + + Invalid value for password length %1. + Неверная величина для длины пароля %1 + + + Could not create entry with path %1. + Не удалось создать запись с путём %1. + + + Enter password for new entry: + Введите пароль для новой записи: + + + Writing the database failed %1. + Запись базы данных не удалась %1. + + + Successfully added entry %1. + Успешно добавлена запись %1. + + + 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 + + + + + QtIOCompressor + + Internal zlib error when compressing: + Внутренняя ошибка zlib при сжатии: + + + Error writing to underlying device: + Ошибка записи на основное устройство: + + + Error opening underlying device: + Ошибка открытия основного устройства: + + + Error reading data from underlying device: + Ошибка чтения с основного устройства: + + + Internal zlib error when decompressing: + Внутренняя ошибка zlib при распаковке: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Формат gzip не поддерживается в этой версии zlib. + + + Internal zlib error: + Внутренняя ошибка zlib: + + + + SSHAgent + + Agent connection failed. + Сбой подключения агента. + + + Agent protocol error. + Ошибка протокола агента. + + + No agent running, cannot add identity. + Агент не запущен, не удается добавить идентификатор. - Generate a new random diceware passphrase. - Сгенерировать новую парольную фразу. + No agent running, cannot remove identity. + Агент не запущен, не удается удалить личность - Word count for the diceware passphrase. - Количество слов для парольной фразы. + Agent refused this identity. Possible reasons include: + Агент отклонил учетную запись. Возможные причины: - count - количество + The key has already been added. + Ключ уже добавлен. - Wordlist for the diceware generator. -[Default: EFF English] - Список слов для генератора парольной фразы. -[По умолчанию: Английский EFF] + Restricted lifetime is not supported by the agent (check options). + Ограничение по времени не поддерживается этим агентом (проверьте настройки). - Generate a new random password. - Сгенерировать новый случайный пароль. + A confirmation request is not supported by the agent (check options). + Запрос подтверждения не поддерживается этим агентом (проверьте настройки). + + + SearchHelpWidget - Length of the generated password. - Длина сгенерированного пароля. + Search Help + Искать в справке - Use lowercase characters in the generated password. - Использовать символы в нижнем регистре в генерируемом пароле. + Search terms are as follows: [modifiers][field:]["]term["] + Поисковые выражения выглядят следующим образом: [модификаторы][поле:]["]выражение["] - Use uppercase characters in the generated password. - Использовать заглавные буквы в генерируемом пароле. + Every search term must match (ie, logical AND) + Каждое поисковое выражение должно иметь соответствие (т.е. логическое И) - Use numbers in the generated password. - Использовать цифры в генерируемом пароле. + Modifiers + Модификаторы - Use special characters in the generated password. - Использовать специальные символы в генерируемом пароле. + exclude term from results + исключить выражение из результатов - Use extended ASCII in the generated password. - Использовать расширенный ASCII в генерируемом пароле. + match term exactly + соответствовать выражению в точности - - - QtIOCompressor - Internal zlib error when compressing: - Внутренняя ошибка zlib при сжатии: + use regex in term + использовать регулярные выражения в поисковых - Error writing to underlying device: - Ошибка записи на основное устройство: + Fields + Поля - Error opening underlying device: - Ошибка открытия основного устройства: + Term Wildcards + Шаблоны для выражений - Error reading data from underlying device: - Ошибка чтения с основного устройства: + match anything + соответствие всему - Internal zlib error when decompressing: - Внутренняя ошибка zlib при распаковке: + match one + соответствие одному - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Формат gzip не поддерживается в этой версии zlib. + logical OR + логическое ИЛИ - Internal zlib error: - Внутренняя ошибка zlib: + Examples + Примеры SearchWidget - - Search... - Поиск... - Search Поиск @@ -3663,317 +4993,334 @@ Available commands: Очистить - Case Sensitive - Чувствительно к регистру + Limit search to selected group + Поиск только в выбранной группе - 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 + Генерировать - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Успешно удалена %n шифрования-ключи от параметров KeePassX/Http.Успешно удалена %n шифрования-ключи от параметров KeePassX/Http.Успешно удалена %n шифрования-ключи от параметров KeePassX/Http.Успешно удалено %n ключей шифрования из параметров KeePassX/Http. + + Import + Импортировать - KeePassXC: No keys found - KeePassXC: Ключи не найдены + Export + Экспортировать - No shared encryption-keys found in KeePassHttp Settings. - Не найдено общих ключей шифрования в настройках KeePassHttp. + Imported certificates + Импортированные сертификаты - KeePassXC: Settings not available! - KeePassXC: Настройки недоступны! + Trust + Доверять - The active database does not contain an entry of KeePassHttp Settings. - Активная база данных не содержит записей настроек KeePassHttp. + Ask + Запросить - Removing stored permissions... - Удаляю сохранённые права доступа... + Untrust + Не доверять - Abort - Прервать + Remove + Удалить - KeePassXC: Removed permissions - KeePassXC: Права доступа удалены + Path + Путь - - Successfully removed permissions from %n entries. - Успешно удалены доступы для %n записи.Успешно удалены доступы для %n записей.Успешно удалены доступы для %n записей.Успешно удалены доступы для %n записей. + + Status + Статус - KeePassXC: No entry with permissions found! - KeePassXC: Не найдена запись с правами доступа! + Fingerprint + Отпечаток - The active database does not contain an entry with permissions. - Активная база данных не содержит записей с назначенными правами доступа. + Certificate + Сертификат - - - SettingsWidget - Application Settings - Параметры приложения + Trusted + Надёжный - General - Общие + Untrusted + Ненадёжный - Security - Безопасность + Unknown + Неизвестен - Access error for config file %1 - Ошибка доступа к файлу конфигурации %1 + key.share + Filetype for KeeShare key + key.share - - - SettingsWidgetGeneral - Basic Settings - Основные параметры + KeeShare key file + Ключевой файл KeeShare - Start only a single instance of KeePassXC - Запускать только один экземпляр KeePassXC + All files + Все файлы - Remember last databases - Запоминать последнюю базу данных + Select path + Выберите путь - Remember last key files and security dongles - Запоминать последние использованные файлы ключей и устройства + Exporting changed certificate + Экспортирование изменённого сертификата - Load previous databases on startup - Загружать предыдущие базы данных при запуске + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Экспортированный сертификат не такой же, как сертификат, который используется. Вы хотите экспортировать текущий сертификат? - Automatically save on exit - Автоматически сохранять при выходе + Signer: + + + + ShareObserver - Automatically save after every change - Автоматически сохранять после каждого изменения + Import from container without signature + Импортировать из контейнера без подписи - Automatically reload the database when modified externally - Автоматически перезагружать базу данных при её изменении извне + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Мы не можем проверить источник коллективного контейнера, потому что он не подписан. Вы действительно хотите импортировать из %1? - Minimize when copying to clipboard - Сворачивать при копировании в буфер обмена + Import from container with certificate + Импортировать из контейнера с сертификатом - Minimize window at application startup - Сворачивать окно при запуске приложения + Not this time + Не в этот раз - Use group icon on entry creation - Использовать значок группы для новых записей + Never + Никогда - Don't mark database as modified for non-data changes (e.g., expanding groups) - Не помечать базу данных изменённой при действиях, не связанных с изменением данных (например, при распахивании групп) + Always + Всегда - Hide the Details view - Скрыть подробную информацию + Just this time + Только в этот раз - Show a system tray icon - Показывать значок в системном лотке + Import from %1 failed (%2) + Импорт из %1 не удался (%2) - Hide window to system tray when minimized - При сворачивании скрывать окно в системный лоток + Import from %1 successful (%2) + Импорт из %1 успешен (%2) - Hide window to system tray instead of app exit - Скрывать окно в системный лоток вместо выхода + Imported from %1 + Импортировано из %1 - Dark system tray icon - Темная иконка в системном трее + Signed share container are not supported - import prevented + Контейнер с подписанным ресурсом не поддерживается - импорт запрещен - Language - Язык + File is not readable + Файл не читабелен - Auto-Type - Автоввод + Invalid sharing container + Неверный контейнер для обмена - Use entry title to match windows for global Auto-Type - Использовать название записи, для глобального автоввода + Untrusted import prevented + Ненадежный импорт предотвращен - Use entry URL to match windows for global Auto-Type - Использовать URL-адрес для глобального автоввода + Successful signed import + Успешный подписанный импорт - Always ask before performing Auto-Type - Всегда спрашивать перед выполнением автоввода + Unexpected error + Неожиданная ошибка - Global Auto-Type shortcut - Глобальная комбинация клавиш для автоввода + Unsigned share container are not supported - import prevented + Контейнер без подписи не поддерживается - импорт запрещен - Auto-Type delay - Задержка автоввода + Successful unsigned import + Успешный импорт без подписи - ms - Milliseconds - мс + File does not exist + Файл не существует - Startup - Запуск + Unknown share container type + Неизвестный тип контейнера - File Management - Управление файлами + Overwriting signed share container is not supported - export prevented + Перезапись подписанного контейнера общего ресурса не поддерживается - экспорт запрещен - Safely save database files (may be incompatible with Dropbox, etc) - Безопасное сохранение файлов базы данных (может быть несовместимо с Dropbox и другими) + Could not write export container (%1) + Не удалось записать Экспорт контейнера (%1) - Backup database file before saving - Создавать резервную копию базы данных перед сохранением + Overwriting unsigned share container is not supported - export prevented + Перезапись неподписанного общего ресурса не поддерживается - экспорт запрещен - Entry Management - Управление записями + Could not write export container + Не удалось записать экспорта контейнера - General - Общие + Unexpected export error occurred + Произошла непредвиденная ошибка экспорта - - - SettingsWidgetSecurity - Timeouts - Таймауты + Export to %1 failed (%2) + Ошибка экспорта в %1 (%2) - Clear clipboard after - Очищать буфер обмена через + Export to %1 successful (%2) + Экспорт в %1 завершен (%2) - sec - Seconds - сек + Export to %1 + Экспорт в %1 - Lock databases after inactivity of - Блокировать базу данных при отсутствии активности длительностью + Do you want to trust %1 with the fingerprint of %2 from %3? + Вы хотите довериться %1 с отпечатком %2 из %3? {1 ?} {2 ?} - Convenience - Удобство + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Блокировать базу данных при закрытии сеанса или закрытии крышки + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Блокировать базу данных при сворачивания окна + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Не требовать повторный ввод пароля, когда он показывается + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - По умолчанию показывать пароль в открытую + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Скрыть пароли в панели предварительного просмотра + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Скрыть примечания записи по умолчанию + Timed Password + Временной пароль - Privacy - Конфиденциальность + 000000 + 000000 - Use Google as fallback for downloading website icons - Использовать Google в качестве резервного варианта для получения значков веб-сайтов + Copy + Копировать + + + Expires in <b>%n</b> second(s) + Истекает через <b>%n</b> секундуИстекает через <b>%n</b> секундыИстекает через <b>%n</b> секундИстекает через <b>%n</b> секунд(у) + + + TotpExportSettingsDialog - Re-lock previously locked database after performing Auto-Type - Заблокировать базу данных после автоввода + 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 секунд. - SetupTotpDialog + TotpSetupDialog Setup TOTP - Настроить ВРП + Настроить TOTP Key: @@ -3989,62 +5336,87 @@ 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 цифр + sec + Seconds + сек + + + Code size: + Размер кода: 6 digits 6 цифр - Code size: - Размер кода: + 7 digits + 7 цифр - sec - Seconds - сек + 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. + Возникла ошибка при извлечении информации об обновлении. + + + 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! + У Вас всё самое свежее! - - - UnlockDatabaseWidget - Unlock database - Разблокировать базу данных + 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 - - Remove an entry from the database. - Удалить запись из базы данных. - - - Path of the database. - Путь к базе данных. - - - Path of the entry to remove. - Путь к записи, для удаления. - - - KeePassXC - cross-platform password manager - KeePassXC - кроссплатформенный менеджер паролей - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - имена файлов открываемой базы данных паролей (*.kdbx) + Refresh + Обновить - path to a custom config file - путь к своему файлу настроек + YubiKey Challenge-Response + YubiKey вызов-ответ - key file 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> + <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> - read password of the database from stdin - читать пароли базы данных из стандартного ввода «stdin» + No YubiKey detected, please ensure it's plugged in. + YubiKey не обнаружен, пожалуйста убедитесь, что он подключен. - 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 0e73dd894a..450f50f42c 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> @@ -38,80 +38,290 @@ Kopírovať do schránky - Version %1 - - Verzia %1 - + Project Maintainers: + Správcovia projektu: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Zapnúť Agenta SSH (vyžaduje reštart) - Revision: %1 - Revízia %1 + Use OpenSSH for Windows instead of Pageant + Použiť OpenSSH pre Windows namiesto Pageant + + + ApplicationSettingsWidget - Distribution: %1 - Distribúcia %1 + Application Settings + Nastavenia aplikácie - Libraries: - Knižnice: + General + Všeobecné - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operačný systém: %1 -Architektúra CPU: %2 -Jadro: %3 %4 + Security + Bezpečnosť - Enabled extensions: - Zapnuté rozšírenia: + Access error for config file %1 + Chyba prístupu ku konfiguračnému súboru %1 - Project Maintainers: - Správcovia projektu: + Icon only + Len ikona - 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. + Text only + Len text - Build Type: %1 - - Typ zostavenia: %1 - + Text beside icon + Text vedľa ikony + + + Text under icon + Text pod ikonou + + + Follow style + - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP Potvrdenie prístupu + Basic Settings + Základné nastavenia - Remember this decision - Zapamätať si túto voľbu + Startup + Štart - Allow - Povoliť + Start only a single instance of KeePassXC + Spustiť len jednu inštanciu KeePassXC - Deny - Zakázať + Remember last databases + Zapamätať posledné databázy - %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. + 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 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Zapnúť Agenta SSH (vyžaduje reštart) + 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 @@ -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 @@ -362,31 +585,52 @@ Prosím, zvoľte, či chcete povoliť prístup. <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(*.*) + Select custom proxy location + Zvoliť vlastné umiestnenie proxy - Executable Files (*) - Spustiteľné súbory (*) + &Tor Browser + &Tor Browser - Select custom proxy location - Zvoliť vlastné umiestnenie proxy + <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: - 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. + Executable Files + Spustiteľné súbory - - - BrowserService - KeePassXC: New key association request - KeePassXC: Nová požiadavka priradenia kľúča + All Files + Všetky súbory - You have received an association request for the above key. - + 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 + + + + + BrowserService + + KeePassXC: New key association request + KeePassXC: Nová požiadavka priradenia kľúča + + + 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. @@ -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é - - - 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. - - - 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. - - - - ChangeMasterKeyWidget - - Password - Heslo - - - Enter password: - Zadajte heslo: - - - Repeat password: - Zopakujte heslo: - - - &Key file - Súbor &kľúča - - - 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... + Converting attributes to custom data… + - Unable to create Key File : - Nemožno vytvoriť súbor kľúča: + KeePassXC: Converted KeePassHTTP attributes + - Select a key file - Zvoľte súbor kľúča + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - Empty password - Prázdne heslo + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - Naozaj chcete použiť prázdny reťazec ako heslo? + KeePassXC: No entry with KeePassHTTP attributes found! + - Different passwords supplied. - Zadané heslá s líšia. + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 - Zlyhalo nastavenie %1 ako súboru kľúča: -%2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format - Starý formát kľúča + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 @@ -660,48 +796,88 @@ Prosím, zvážte vygenerovanie nového súboru kľúča. Pôvodné dáta: - Error(s) detected in CSV file ! - V súbore CSV zistená chyba(y)! + Error + Chyba - more messages skipped] - ďalšie správy preskočené] + Empty fieldname %1 + Prázdne meno poľa %1 - Error - Chyba + column %1 + stĺpec %1 - CSV import: writer has errors: - - Import CSV: zapisovač má chyby: - + Error(s) detected in CSV file! + V súbore CSV zistená chyba(y)! - - - CsvImportWizard - - Error - Chyba + + [%n more message(s) skipped] + - Unable to calculate master key - Nemožno vypočítať hlavný kľúč + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - %n bajt%n bajty%n bajtov%n bajtov + %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 row(s), - %n riadok%n riadky%n riadkov%n riadkov + %n byte(s) + %n bajt%n bajty%n bajtov%n bajt(y) - %n column(s) - %n stĺpec%n stĺpce%n stĺpcov%n stĺpcov + %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 + @@ -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,132 +936,197 @@ 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 + Can't open key file: +%1 + + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Nemožno otvoriť databázu. + Passwords + Heslá + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + Všeobecné - Database opened fine. Nothing to do. - Databáza úspešne otvorená. Nič netreba vykonať. + Security + Bezpečnosť - Success - Úspešné + Master Key + Hlavný kľúč - The database has been successfully repaired -You can now save it. - Databáza bola úspešne opravená -Môžete ju teraz uložiť. + Encryption Settings + Nastavenia šifrovania - Unable to repair the database. - Nemožno opraviť databázu. + Browser Integration + Integrácia prehliadača - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Všeobecné + KeePassXC-Browser settings + - Encryption - Šifrovanie + &Disconnect all browsers + O&pojiť všetky prehliadače - Number of rounds too high - Key transformation rounds - Počet prechodov príliš vysoký + Forg&et all site-specific settings on entries + - 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! - Zadali ste príliš vysoký počet prechodov transformácie kľúča pre Argon2. - -Ak ponecháte toto číslo, môže otvorenie databázy trvať hodiny alebo i dni (dokonca i dlhšie)! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Understood, keep number - Rozumiem, nechať hodnotu + Stored keys + Uložené kľúče - Cancel - Zrušiť + Remove + Odstrániť - Number of rounds too low - Key transformation rounds - Počet prechodov príliš nízky + Delete the selected key? + Odstrániť zvolený kľúč? - 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! - Zadali ste príliš nízky počet prechodov transformácie kľúča pre Argon2. - -Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš jednoduché! + 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. - KDF unchanged - KDF nezmenené + Key + Kľúč - Failed to transform key with new KDF parameters; KDF unchanged. - Zlyhala transformácia kľúča s novými parametrami KDF; KDF nezmenené. + Value + Hodnota - - MiB - Abbreviation for Mebibytes (KDF settings) - MiBMiBMiBMiB + + Enable Browser Integration to access these settings. + Zapnúť Integráciu prehliadača na prístup k týmto nastaveniam. - - thread(s) - Threads for parallel execution (KDF settings) - vláknovláknavlákienvlákien + + Disconnect all browsers + Odpojiť všetky prehliadače - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Šifrovací algoritmus: + 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. - AES: 256 Bit (default) - AES: 256 bitov (predvolené) + KeePassXC: No keys found + KeePassXC: Nenájdené žiadne kľúče - Twofish: 256 Bit - Twofish: 256 bitov + No shared encryption keys found in KeePassXC settings. + V nastavení KeePassXC neboli nájdené zdieľané šifrovacie kľúče. - Key Derivation Function: - Funkcia odvodenia kľúča (KDF): + KeePassXC: Removed keys from database + KeePassXC: Klúče odstránené z databázy + + + Successfully removed %n encryption key(s) from KeePassXC settings. + - Transform rounds: - Počet transformácií: + Forget all site-specific settings on entries + Zabudnúť všetky nastavenia položiek špecifické pre stránky - Benchmark 1-second delay - 1-sekundové oneskorenie testu výkonu + 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: @@ -903,6 +1136,113 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je 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 + Key transformation rounds + Počet prechodov príliš vysoký + + + 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! + Zadali ste príliš vysoký počet prechodov transformácie kľúča pre Argon2. + +Ak ponecháte toto číslo, môže otvorenie databázy trvať hodiny alebo i dni (dokonca i dlhšie)! + + + Understood, keep number + Rozumiem, nechať hodnotu + + + Cancel + Zrušiť + + + Number of rounds too low + Key transformation rounds + Počet prechodov príliš nízky + + + 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! + Zadali ste príliš nízky počet prechodov transformácie kľúča pre Argon2. + +Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš jednoduché! + + + KDF unchanged + KDF nezmenené + + + Failed to transform key with new KDF parameters; KDF unchanged. + Zlyhala transformácia kľúča s novými parametrami KDF; KDF nezmenené. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + %1 ms%1 ms%1 ms%1 ms + + + %1 s + seconds + %1 s%1 s%1 s%1 s + DatabaseSettingsWidgetGeneral @@ -952,91 +1292,110 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Koreň + Sharing + Zdieľanie - KeePass 2 Database - Databáza KeePass 2 + Breadcrumb + - All files - Všetky súbory + Type + Typ - Open database - Otvoriť databázu + Path + Cesta - File not found! - Súbor nenájdený! + Last Signer + - Unable to open the database. - Nemožno otvoriť databázu. + Certificates + Certifikáty - File opened in read only mode. - Súbor otvorený v režime len na čítanie. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Otvoriť súbor CSV + Add additional protection... + - CSV file - Súbor CSV + No encryption key added + - All files (*) - Všetky súbory (*) + You must add at least one encryption key to secure your database! + - Merge database - Zlúčiť databázu + No password set + - Open KeePass 1 database - Otvoriť databázu KeePass 1 + 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? + - KeePass 1 database - Databáza KeePass 1 + Unknown error + Neznáma chyba - Close? - Zatvoriť? + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - „%1” je v režime úprav. -Zahodiť zmeny a zatvoriť? + Database Name: + Meno databázy: - Save changes? - Uložiť zmeny? + Description: + Popis: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - „%1” bol zmenený. -Uložiť zmeny? + KeePass 2 Database + Databáza KeePass 2 - Writing the database failed. - Zápis databázy zlyhal. + All files + Všetky súbory - Passwords - Heslá + Open database + Otvoriť databázu - Save database as - Uložiť databázu ako + CSV file + Súbor CSV + + + Merge database + Zlúčiť databázu + + + Open KeePass 1 database + Otvoriť databázu KeePass 1 + + + KeePass 1 database + Databáza KeePass 1 Export database to CSV file @@ -1047,40 +1406,40 @@ Uložiť zmeny? Zápis do súboru CSV zlyhal. - New database - Nová databáza + Database creation error + Chyba vytvorenia databázy - locked - zamknuté + 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 - Zamknúť databázu + 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. - Databázu nemožno zamknúť, práve ju upravujete. -Prosím, zvoľte Zrušiť na dokončenie svojich úprav alebo ich zahoďte. + Select CSV file + Zvoľte súbor CSV - 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é. + New Database + Nová databáza - Disable safe saves? - Vypnúť bezpečné ukladanie? + %1 [New Database] + Database tab name modifier + %1 [Nová databáza] - 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 [Locked] + Database tab name modifier + %1 [Zamknutá] + + + %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 @@ -2000,84 +2557,49 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov. - HttpPasswordGeneratorWidget + KMessageWidget - Length: - Dĺžka: + &Close + &Zatvoriť - Character Types - Typy znakov + Close message + Zatvoriť správu + + + Kdbx3Reader - Upper Case Letters - Veľké písmená + Unable to calculate master key + Nemožno vypočítať hlavný kľúč - A-Z - A-Ž + Unable to issue challenge-response. + Nemožno vyvolať výzvu – odpoveď. - 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 + Wrong key or database file is corrupt. + Zlý kľúč alebo je súbor databázy poškodený. - - - KMessageWidget - &Close - &Zatvoriť + missing database headers + chýbajúce hlavičky databázy - Close message - Zatvoriť správu + Header doesn't match hash + - - - Kdbx3Reader - Unable to calculate master key - Nemožno vypočítať hlavný kľúč + Invalid header id size + Neplatná veľkosť ID hlavičky - Unable to issue challenge-response. - Nemožno vyvolať výzvu – odpoveď. + Invalid header field length + Neplatná dĺžka poľa hlavičky - Wrong key or database file is corrupt. - Zlý kľúč alebo je súbor databázy poškodený. + Invalid header data length + Neplatná dĺžka dát hlavičky @@ -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 + + unable to seek to content position + + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-b + Disabled share + - Twofish: 256-bit - Twofish: 256-b + Import from + - ChaCha20: 256-bit - ChaCha20: 256-b + 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 – odporúčané) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - 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. + Key Component + - The lock file could not be created. Single-instance mode disabled. - Súbor zámku nemožno vytvoriť. Režim jednej inštancie vypnutý. + Key Component Description + - Another instance of KeePassXC is already running. - Už je spustená iná inštancia KeePassXC. + Cancel + Zrušiť - Fatal error while testing the cryptographic functions. - Fatálna chyba pri testovaní kryptografických funkcií. + Key Component set, click to change or remove + - KeePassXC - Error - KeePassXC – Chyba + 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,226 +3419,393 @@ 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. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Neplatný súbor kľúča, očakávaný je kľúč OpenSSH + &Donate + &Podporiť - PEM boundary mismatch - Nezhoda ohraničenia PEM + Report a &bug + Nahlásiť &chybu - Base64 decoding failed - Dekódovanie Base64 zlyhalo + 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í. - Key file way too small. - Súbor kľúča je príliš krátky. + &Import + - Key file magic header id invalid - Neplatný ID magickej hlavičky súboru kľúča + Copy att&ribute... + - Found zero keys - Nenájdené žiadne kľúče + TOTP... + - Failed to read public key. - Zlyhalo čítanie verejného kľúča. + &New database... + - Corrupted key file, reading private key failed - Poškodený súbor kľúča, čítanie súkromného kľúč azlyhalo + Create a new database + - No private key payload to decrypt - Žiadny obsah súkromného kľúča na dešifrovanie + &Merge from database... + - Trying to run KDF without cipher - Pokúšate sa spustiť KDF bez šifry + Merge from another KDBX database + - Passphrase is required to decrypt this key - Na dešifrovanie tohoto kľúča je potrebná tajná veta + &New entry + - Key derivation failed, key file corrupted? - Odvodenie kľúča zlyhalo, súbor kľúča je poškodený? + Add a new entry + - Decryption failed, wrong passphrase? - Dešifrovanie zlyhalo, zlá tajná veta? + &Edit entry + - Unexpected EOF while reading public key - Neočakávaný koniec súboru pri čítaní verejného kľúča + View or edit entry + - Unexpected EOF while reading private key - Neočakávaný koniec súboru pri čítaní súkromného kľúča + &New group + - Can't write public key as it is empty - Nemožno zapísať verejný kľúč, pretože je prázdny + Add a new group + - Unexpected EOF when writing public key - Neočakávaný koniec súboru pri zápise verejného kľúča + Change master &key... + - Can't write private key as it is empty - Nemožno zapísať súkromný kľúč, pretože je prázdny + &Database settings... + - Unexpected EOF when writing private key - Neočakávaný koniec súboru pri zápise súkromného kľúča + Copy &password + - Unsupported key type: %1 - Nepodporovaný typ kľúča: %1 + Perform &Auto-Type + - Unknown cipher: %1 - Neznáma šifra: %1 + Open &URL + - Cipher IV is too short for MD5 kdf - IV šifry je príliš krátky na MD5 KDF + KeePass 1 database... + - Unknown KDF: %1 - Neznáma KDF: %1 + Import a KeePass 1 database + - Unknown key type: %1 - Neznámy typ kľúča: %1 + 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 - Dialóg + Creating missing %1 [%2] + - 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 + Relocating %1 [%2] + - Enable KeePassHTTP server - Zapnúť server KeePassHTTP + Overwriting %1 [%2] + - General - Všeobecné + older entry merged from database "%1" + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Z&obraziť upozornenie, keď sú požadované údaje + Adding backup for older target %1 [%2] + - 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. + Adding backup for older source %1 [%2] + - &Return only best matching entries - V&rátiť len položky s najlepšou zhodou + Reapplying older target entry on top of newer source %1 [%2] + - Re&quest to unlock the database if it is locked - Po&žiadať o odomknutie databázy, ak je zamknutá + Reapplying older source entry on top of newer target %1 [%2] + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Vrátené budú len položky s rovnakou schémou (http://, https://, ftp://, ...). + Synchronizing from newer source %1 [%2] + - &Match URL schemes - Zhoda sché&m URL + Synchronizing from older source %1 [%2] + - Sort matching entries by &username - Zoradiť vyhovujúce položky podľa p&už. mena + Deleting child %1 [%2] + - Sort &matching entries by title - Zoradiť vyhovujúce položky podľa &názvu + Deleting orphan %1 [%2] + - R&emove all shared encryption keys from active database - Odstrániť vš&etky zdieľané šifrovacie kľúče z aktívnej databázy + Changed deleted objects + - Re&move all stored permissions from entries in active database - Odstrániť všetky uložené povolenia z položiek aktívnej databázy + Adding missing icon %1 + + + + NewDatabaseWizard - Password Generator - Generátor hesla + Create a new KeePassXC database... + - Advanced - Pokročilé + Root + Root group + Koreň + + + NewDatabaseWizardPage - Always allow &access to entries - Vždy povoliť &prístup k položkám + WizardPage + - Always allow &updating entries - Vždy povoliť &úpravu položiek + En&cryption Settings + - Only the selected database has to be connected with a client. - S klientom má byť pripojená len zvolená databáza. + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + - Searc&h in all opened databases for matching entries - &Hľadať vyhovujúce položky vo všetkých otvorených databázach + Advanced Settings + - Automatically creating or updating string fields is not supported. - Automatické vytváranie alebo úprava textových polí nie je podporovaná. + Simple Settings + + + + NewDatabaseWizardPageEncryption - &Return advanced string fields which start with "KPH: " - V&rátiť reťazce pokročilých polí, ktoré začínajú na „KPH: ” + 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 - HTTP Port: - Port HTTP: + Database Master Key + - Default port: 19455 - Predvolený port: 19455 + A master key known only to you protects your database. + + + + NewDatabaseWizardPageMetaData - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC bude prijímať na tomto porte na 127.0.0.1 + General Database Information + - <b>Warning:</b> The following options can be dangerous! - <b>Upozornenie:</b> nasledujúce voľby môžu byť nebezpečné! + Please fill in the display name and an optional description for your new database: + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key + Neplatný súbor kľúča, očakávaný je kľúč OpenSSH + + + PEM boundary mismatch + Nezhoda ohraničenia PEM + + + Base64 decoding failed + Dekódovanie Base64 zlyhalo + + + Key file way too small. + Súbor kľúča je príliš krátky. + + + Key file magic header id invalid + Neplatný ID magickej hlavičky súboru kľúča + + + Found zero keys + Nenájdené žiadne kľúče + + + Failed to read public key. + Zlyhalo čítanie verejného kľúča. + + + Corrupted key file, reading private key failed + Poškodený súbor kľúča, čítanie súkromného kľúč azlyhalo + + + No private key payload to decrypt + Žiadny obsah súkromného kľúča na dešifrovanie + + + Trying to run KDF without cipher + Pokúšate sa spustiť KDF bez šifry + + + Passphrase is required to decrypt this key + Na dešifrovanie tohoto kľúča je potrebná tajná veta + + + Key derivation failed, key file corrupted? + Odvodenie kľúča zlyhalo, súbor kľúča je poškodený? + + + Decryption failed, wrong passphrase? + Dešifrovanie zlyhalo, zlá tajná veta? + + + Unexpected EOF while reading public key + Neočakávaný koniec súboru pri čítaní verejného kľúča + + + Unexpected EOF while reading private key + Neočakávaný koniec súboru pri čítaní súkromného kľúča + + + Can't write public key as it is empty + Nemožno zapísať verejný kľúč, pretože je prázdny + + + Unexpected EOF when writing public key + Neočakávaný koniec súboru pri zápise verejného kľúča + + + Can't write private key as it is empty + Nemožno zapísať súkromný kľúč, pretože je prázdny + + + Unexpected EOF when writing private key + Neočakávaný koniec súboru pri zápise súkromného kľúča + + + Unsupported key type: %1 + Nepodporovaný typ kľúča: %1 + + + Unknown cipher: %1 + Neznáma šifra: %1 + + + Cipher IV is too short for MD5 kdf + IV šifry je príliš krátky na MD5 KDF + + + Unknown KDF: %1 + Neznáma KDF: %1 + + + Unknown key type: %1 + Neznámy typ kľúča: %1 + + + + PasswordEditWidget + + Enter password: + Zadajte heslo: - <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> + Confirm password: + - Cannot bind to privileged ports - Nemožno použiť privilegované porty + Password + Heslo + + + <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. - Nemožno použiť privilegované porty pod 1204! -Použitý predvolený port 19455. + Passwords do not match. + + + + 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,152 +3919,301 @@ Použitý predvolený port 19455. Password quality Výbroné - - - QObject - Database not opened - Databáza nie je otvorená + ExtendedASCII + - Database hash not available - Odtlačok databázy nie je dostupný + Switch to advanced mode + - Client public key not received - Nebol prijatý verejný kľúč klienta + Advanced + Pokročilé - Cannot decrypt message - Nemožno dešifrovať správu + Upper Case Letters A to F + - Timeout or cannot connect to KeePassXC - Uplynul časový limit alebo sa ku KeePassXC nemožno pripojiť + A-Z + A-Ž - Action cancelled or denied - Akcia zrušená alebo odmietnutá + Lower Case Letters A to F + - 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)? + a-z + a-ž - KeePassXC association failed, try again - Spojenie s KeePassXC zlyhalo, skúste znova + 0-9 + 0-9 - Key change was not successful - Zmena kľúča nebola úspešná + Braces + - Encryption key is not recognized - Šifrovací kľúč nerozpoznaný + {[( + - No saved databases found - Neboli nájdené uložené databázy + Punctuation + - Incorrect action - Nesprávna akcia + .,:; + - Empty message received - Prijatá prázdna správa + Quotes + - No URL provided - Nebolo poskytnuté URL + " ' + - No logins found - Neboli nájdené prihlásenia + Math + - Unknown error - Neznáma chyba + <*+!?= + - Add a new entry to a database. - Pridá do databázy novú položku + Dashes + - Path of the database. - Cesta k databáze. + \_|-/ + - Key file of the database. - Súbor kľúča databázy. + Logograms + - path - cesta + #$%&&@^`~ + - Username for the entry. - Použ. meno položky. + Switch to simple mode + - username - použmeno + Simple + - URL for the entry. - URL položky. + Character set to exclude from generated password + - URL - URL + Do not include: + - Prompt for the entry's password. - Vyžiadať heslo položky. + Add non-hex letters to "do not include" list + - Generate a password for the entry. - Generovať heslo tejto položky. + Hex + - Length for the generated password. - Dĺžka generovaného hesla. + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - length - dĺžka + Word Co&unt: + - Path of the entry to add. - Cesta pridávanej položky. + Regenerate + + + + QApplication - Copy an entry's password to the clipboard. - Skopíruje heslo položky do schránky. + KeeShare + + + + QFileDialog - Path of the entry to clip. - clip = copy to clipboard - Cesta položky na vystrihnutie. + Select + + + + QMessageBox - Timeout in seconds before clearing the clipboard. - Časový limit pred vymazaním schránky. + Overwrite + - Edit an entry. - Upraviť položku. + Delete + Odstrániť - Title for the entry. - Názov položky. + Move + - title - názov + Empty + - Path of the entry to edit. + Remove + Odstrániť + + + Skip + + + + Disable + Vypnúť + + + Merge + + + + + QObject + + Database not opened + Databáza nie je otvorená + + + Database hash not available + Odtlačok databázy nie je dostupný + + + Client public key not received + Nebol prijatý verejný kľúč klienta + + + Cannot decrypt message + Nemožno dešifrovať správu + + + Action cancelled or denied + Akcia zrušená alebo odmietnutá + + + KeePassXC association failed, try again + Spojenie s KeePassXC zlyhalo, skúste znova + + + Encryption key is not recognized + Šifrovací kľúč nerozpoznaný + + + Incorrect action + Nesprávna akcia + + + Empty message received + Prijatá prázdna správa + + + No URL provided + Nebolo poskytnuté URL + + + No logins found + Nebolo nájdené prihlásenie + + + Unknown error + Neznáma chyba + + + Add a new entry to a database. + Pridá do databázy novú položku + + + Path of the database. + Cesta k databáze. + + + Key file of the database. + Súbor kľúča databázy. + + + path + cesta + + + Username for the entry. + Použ. meno položky. + + + username + použmeno + + + URL for the entry. + URL položky. + + + URL + URL + + + Prompt for the entry's password. + Vyžiadať heslo položky. + + + Generate a password for the entry. + Generovať heslo tejto položky. + + + Length for the generated password. + Dĺžka generovaného hesla. + + + length + dĺžka + + + Path of the entry to add. + Cesta pridávanej položky + + + Copy an entry's password to the clipboard. + Skopíruje heslo položky do schránky. + + + Path of the entry to clip. + clip = copy to clipboard + Cesta položky na vystrihnutie. + + + Timeout in seconds before clearing the clipboard. + Časový limit pred vymazaním schránky. + + + Edit an entry. + Upraviť položku. + + + Title for the entry. + Názov položky. + + + title + názov + + + Path of the entry to edit. Cesta položky na úpravu. @@ -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. + + + + 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! + - Use lowercase characters in the generated password. - V generovanom hesle použiť malé písmená. + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + počet - Use uppercase characters in the generated password. - V generovanom hesle použiť veľké písmená. + Invalid value for password length: %1 + - Use numbers in the generated password. - V generovanom hesle použiť číslice. + Could not find entry with path %1. + - Use special characters in the generated password. - V generovanom hesle použiť špeciálne znaky. + Not changing any field for entry %1. + - Use extended ASCII in the generated password. - V generovanom hesle použiť rozšírené ASCII. + 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 + @@ -3628,35 +4848,121 @@ Dostupné príkazy: Chyba zápisu na zariadenie: - Error opening underlying device: - Chyba otvorenia zariadenia: + Error opening underlying device: + Chyba otvorenia zariadenia: + + + Error reading data from underlying device: + Chyba čítania dát zo zariadenia: + + + Internal zlib error when decompressing: + Pri dekomprimácii sa vyskytla interná chyba zlib: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Formát gzip nie je touto verziou zlib podporovaný. + + + Internal zlib error: + Interná chyba zlib: + + + + SSHAgent + + 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 + - Error reading data from underlying device: - Chyba čítania dát zo zariadenia: + match anything + - Internal zlib error when decompressing: - Pri dekomprimácii sa vyskytla interná chyba zlib: + match one + - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Formát gzip nie je touto verziou zlib podporovaný. + logical OR + - Internal zlib error: - Interná chyba zlib: + Examples + SearchWidget - - Search... - Hľadanie… - 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ť - - 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. + + Import + Importovať - KeePassXC: No keys found - KeePassXC: Nenájdené žiadne kľúče + Export + - No shared encryption-keys found in KeePassHttp Settings. - Nenájdené žiadne šifrovacie kľúče v nastavení KeePassHttp. + Imported certificates + - KeePassXC: Settings not available! - KeePassXC: Nastavenia nie sú dostupné! + Trust + - The active database does not contain an entry of KeePassHttp Settings. - Aktívna databáza neobsahuje položku nastavení KeePassHttp. + Ask + - Removing stored permissions... - Odstraňovanie uložených povolení… + Untrust + - Abort - Zrušiť + Remove + Odstrániť - KeePassXC: Removed permissions - KeePassXC: Povolenia odstránené + Path + Cesta - - 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. + + Status + - KeePassXC: No entry with permissions found! - KeePassXC: Nenájdená žiadna položka s povoleniami! + Fingerprint + Odtlačok - The active database does not contain an entry with permissions. - Aktívna databáza neobsahuje položku s povoleniami. + Certificate + - - - SettingsWidget - Application Settings - Nastavenia aplikácie + Trusted + - General - Všeobecné + Untrusted + - Security - Bezpečnosť + Unknown + - Access error for config file %1 - Chyba prístupu ku konfiguračnému súboru %1 + key.share + Filetype for KeeShare key + - - - SettingsWidgetGeneral - Basic Settings - Základné nastavenia + KeeShare key file + - Start only a single instance of KeePassXC - Spustiť len jednu inštanciu KeePassXC + All files + Všetky súbory - Remember last databases - Zapamätať posledné databázy + Select path + - Remember last key files and security dongles - Zapamätať si posledné súbory kľúčov a bezpečnostných kľúčeniek + Exporting changed certificate + - Load previous databases on startup - Načítať predošlé databázy pri štarte + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Automatically save on exit - Automaticky uložiť pri ukončení + Signer: + + + + ShareObserver - Automatically save after every change - Automaticky uložiť po každej zmene + Import from container without signature + - Automatically reload the database when modified externally - Automaticky načítať databázu, ak je upravená externe + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Minimize when copying to clipboard - Minimalizovať pri skopírovaní do schránky + Import from container with certificate + - Minimize window at application startup - Minimalizovať okno pri spustení aplikácie + Not this time + - Use group icon on entry creation - Použiť ikonu skupiny pri vytváraní položky + Never + Nikdy - 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) + Always + - Hide the Details view - Skryť zobrazenie podrobností + Just this time + - Show a system tray icon - Zobraziť ikonu v oznamovacej oblasti + Import from %1 failed (%2) + - Hide window to system tray when minimized - Skryť okno do oznamovacej oblasti pri minimalizácii + Import from %1 successful (%2) + - Hide window to system tray instead of app exit - Skryť okno do oznamovacej oblasti namiesto ukončenia + Imported from %1 + - Dark system tray icon - Tmavá ikona oznamovacej oblasti + Signed share container are not supported - import prevented + - Language - Jazyk + File is not readable + - Auto-Type - Automatické vypĺňanie + Invalid sharing container + - 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 + Untrusted import prevented + - Use entry URL to match windows for global Auto-Type - Použiť URL položky na zhodu okna pre globálne Automatické vypĺňanie + Successful signed import + - Always ask before performing Auto-Type - Vždy sa spýtať pred vykonaním Automatického vypĺňania + Unexpected error + - Global Auto-Type shortcut - Globálna klávesová skratka Automatického vypĺňania + Unsigned share container are not supported - import prevented + - Auto-Type delay - Oneskorenie Automatického vypĺňania + Successful unsigned import + - ms - Milliseconds - ms + File does not exist + - Startup - Štart + Unknown share container type + - File Management - Správa súborov + Overwriting signed share container is not supported - export prevented + - Safely save database files (may be incompatible with Dropbox, etc) - Bezpečne uložiť súbory databáz (môže byť nekompatibilné Dropbox, apod) + Could not write export container (%1) + - Backup database file before saving - Zálohovať databázu pri každom uložení + Overwriting unsigned share container is not supported - export prevented + - Entry Management - Správa položky + Could not write export container + - General - Všeobecné + Unexpected export error occurred + - - - SettingsWidgetSecurity - Timeouts - Časové limity + Export to %1 failed (%2) + - Clear clipboard after - Vymazať schránku po + Export to %1 successful (%2) + - sec - Seconds - s + Export to %1 + - Lock databases after inactivity of - Zamknúť databázu po neaktivite + Do you want to trust %1 with the fingerprint of %2 from %3? + - Convenience - Pohodlie + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Zamknúť databázu pri zamknutí relácie alebo zatvorení krytu + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Zamknúť databázu pri minimalizovaní okna + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Nevyžadovať opakovanie hesla, ak je viditeľné + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Predvolene zobraziť heslo prostým textom + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel - Skryť heslá v paneli ukážky + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide entry notes by default - Predvolene skryť poznámky položky + Timed Password + Časové heslo - Privacy - Súkromie + 000000 + 000000 + + + Copy + Kopírovať + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Použiť Google ako poslednú záchranu pri sťahovaní ikon webovej stránky + Copy + Kopírovať - Re-lock previously locked database after performing Auto-Type - Znova zamknúť predtým zamknutú databázu po vykonaní Automatického vypĺňania + 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. + - 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 + sec + Seconds + s + + + Code size: + Veľkosť kódu: 6 digits 6 číslic - Code size: - Veľkosť kódu: + 7 digits + - sec - Seconds - s + 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. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + - - - UnlockDatabaseWidget - Unlock database - Odomknúť databázu + 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 - - Remove an entry from the database. - Odstrániť položku z databázy. - - - Path of the database. - Cesta k databáze. - - - Path of the entry to remove. - Cesta položky na odstránenie. - + YubiKeyEditWidget - 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) + Refresh + Obnoviť - path to a custom config file - cesta k vlastnému konfiguračnému súboru + YubiKey Challenge-Response + - key file of the database - súbor kľúča databázy + <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> + - read password of the database from stdin - čítať heslo databázy zo stdin + No YubiKey detected, please ensure it's plugged in. + - 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 cec9bd6ca7..e2ede67f90 100644 --- a/share/translations/keepassx_sl_SI.ts +++ b/share/translations/keepassx_sl_SI.ts @@ -9,27 +9,42 @@ 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 - Copy to clipboard + Include the following information whenever you report a bug: - Version %1 - + Copy to clipboard Revision: %1 + + Distribution: %1 + + Libraries: @@ -45,2344 +60,5364 @@ Kernel: %3 %4 - Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Project Maintainers: - KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Project Maintainers: + Version %1 - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + Build Type: %1 - Include the following information whenever you report a bug: - + Auto-Type + Samodejno tipkanje - Distribution: %1 + Browser Integration - - - AccessControlDialog - Remember this decision + SSH Agent - Allow + YubiKey - Deny + TouchID - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + None - KeePassXC HTTP Confirm Access + KeeShare (signed and unsigned sharing) - - - AutoType - Couldn't find an entry that matches the window title: - Ne najdem vnosa, ki bi ustrezal: + KeeShare (only signed sharing) + - Auto-Type - KeePassXC + KeeShare (only unsigned sharing) - AutoTypeAssociationsModel - - Window - Okno - + AgentSettingsWidget - Sequence - Sekvenca + Enable SSH Agent (requires restart) + - Default sequence - Privzeta sekvenca + Use OpenSSH for Windows instead of Pageant + - AutoTypeSelectDialog + ApplicationSettingsWidget - Select entry to Auto-Type: - Izberi vnos za samodejno tipkanje: + Application Settings + Nastavitve aplikacije - Auto-Type - KeePassXC - + General + Splošno - - - ChangeMasterKeyWidget - Password - Geslo + Security + Varnost - Enter password: - Vnesi geslo: + Access error for config file %1 + - Repeat password: - Ponovi geslo: + Icon only + - Browse - Prebrskaj + Text only + - Create - Ustvari novo + Text beside icon + - Key files - Datoteke s ključi + Text under icon + - All files - Vse datoteke + Follow style + + + + ApplicationSettingsWidgetGeneral - Create Key File... - Ustvari datoteko s ključi... + Basic Settings + - Unable to create Key File : - Ustvarjanje datoteke s ključi ni uspelo: + Startup + - Select a key file - Izberi datoteko s kljući + Start only a single instance of KeePassXC + - Do you really want to use an empty string as password? - Ali res želite uporabiti prazen niz kot geslo? + Remember last databases + Zapomni si zadnje podatkovne baze - Different passwords supplied. - Vnešeni gesli sta različni. + Remember last key files and security dongles + - Failed to set %1 as the Key file: -%2 - Nastavljanje %1 kot datoteko s ključi ni uspelo: -%2 + Load previous databases on startup + - &Key file + Minimize window at application startup - Cha&llenge Response + File Management - Refresh + Safely save database files (may be incompatible with Dropbox, etc) - Empty password + Backup database file before saving - Changing master key failed: no YubiKey inserted. - + Automatically save after every change + Samodejno shrani po vsaki spremembi - - - CloneDialog - Clone Options - + Automatically save on exit + Samodejno shrani ob izhodu - Replace username and password with references + Don't mark database as modified for non-data changes (e.g., expanding groups) - Copy history + Automatically reload the database when modified externally - Append ' - Clone' to title + Entry Management - - - CsvImportWidget - Import CSV fields - + Use group icon on entry creation + Za nove vnose uporabi ikono skupine - filename - + Minimize when copying to clipboard + Minimiziraj pri kopiranju v odložišče - size, rows, columns + Hide the entry preview panel - Encoding - + General + Splošno - Codec + Hide toolbar (icons) - Text is qualified by + Minimize instead of app exit - Fields are separated by - + Show a system tray icon + Pokaži ikono v sistemski vrstici - Comments start with + Dark system tray icon - First record has field names - + Hide window to system tray when minimized + Minimiziraj v sistemsko vrstico - Number of headers line to discard - + Language + Jezik - Consider '\' an escape character - + Auto-Type + Samodejno tipkanje - Preview + Use entry title to match windows for global Auto-Type - Column layout + Use entry URL to match windows for global Auto-Type - Not present in CSV file + Always ask before performing Auto-Type - Empty fieldname - + Global Auto-Type shortcut + Globalna bližnjica za samodejno tipkanje - column + Auto-Type typing delay - Imported from CSV file + ms + Milliseconds - Original data: + Auto-Type start delay - Error(s) detected in CSV file ! + Check for updates at application startup - more messages skipped] + Include pre-releases when checking for updates - Error - Napaka + Movable toolbar + - CSV import: writer has errors: - + Button style - CsvImportWizard + ApplicationSettingsWidgetSecurity - Import CSV file + Timeouts - Error - Napaka + Clear clipboard after + Pobriši odložišče po - Unable to calculate master key - Izračun glavnega ključa ni uspel + sec + Seconds + sekundah - - - CsvParserModel - byte, + Lock databases after inactivity of + Zakleni podatkovne baze po neaktivnosti + + + min - rows, + Forget TouchID after inactivity of - columns + Convenience - - - DatabaseOpenWidget - Enter master key - Vnesi glavno geslo + Lock databases when session is locked or lid is closed + - Key File: - Datoteka s ključi: + Forget TouchID when session is locked or lid is closed + - Password: - Geslo: + Lock databases after minimizing the window + - Browse - Prebrskaj + Re-lock previously locked database after performing Auto-Type + - Unable to open the database. - Odpiranje podatkovne baze ni uspelo. + Don't require password repeat when it is visible + - Can't open key file - Odpiranje datoteke s ključi ni uspelo + Don't hide passwords when editing them + - All files - Vse datoteke + Don't use placeholder for empty password fields + - Key files - Datoteke s ključi + Hide passwords in the entry preview panel + - Select key file - Izberi datoteko s ključi + Hide entry notes by default + - Refresh + Privacy - Challenge Response: + Use DuckDuckGo as fallback for downloading website icons - DatabaseRepairWidget + AutoType - Repair database - + Couldn't find an entry that matches the window title: + Ne najdem vnosa, ki bi ustrezal: - Error - Napaka + Auto-Type - KeePassXC + - Can't open key file - Odpiranje datoteke s ključi ni uspelo + Auto-Type + Samodejno tipkanje - Database opened fine. Nothing to do. + The Syntax of your Auto-Type statement is incorrect! - Unable to open the database. - Odpiranje podatkovne baze ni uspelo. - - - Success + This Auto-Type command contains a very long delay. Do you really want to proceed? - The database has been successfully repaired -You can now save it. + This Auto-Type command contains very slow key presses. Do you really want to proceed? - Unable to repair the database. + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - DatabaseSettingsWidget + AutoTypeAssociationsModel - Database name: - Ime podatkovne baze: + Window + Okno - Database description: - Opis podatkovne baze: + Sequence + Sekvenca - Transform rounds: - Transform rounds: + Default sequence + Privzeta sekvenca + + + AutoTypeMatchModel - Default username: - Privzeto uporabniško ime: + Group + Skupina - MiB - MiB + Title + Naslov - Benchmark - Primerjalni preizkus (benchmark) + Username + Uporabniško ime - Max. history items: - Max. vnosov zgodovine: + Sequence + Sekvenca + + + AutoTypeSelectDialog - Max. history size: - Max. velikost zgodovine: + Auto-Type - KeePassXC + - Use recycle bin - + Select entry to Auto-Type: + Izberi vnos za samodejno tipkanje: + + + BrowserAccessControlDialog - AES: 256 Bit (default) + KeePassXC-Browser Confirm Access - Twofish: 256 Bit + Remember this decision - Algorithm: + Allow - - - DatabaseTabWidget - Root - Koren + Deny + - KeePass 2 Database - KeePass 2 podatkovna baza + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + BrowserEntrySaveDialog - All files - Vse datoteke + KeePassXC-Browser Save Entry + - Open database - Odpri podatkovno bazo + Ok + - File not found! - Datoteke ni mogoče najti! + Cancel + - Open KeePass 1 database - Odpri KeePass 1 podatkovno bazo + You have multiple databases open. +Please select the correct database for saving credentials. + + + + BrowserOptionDialog - KeePass 1 database - KeePass 1 podatkovna baza + Dialog + - All files (*) - Vse datoteke (*) + This is required for accessing your databases with KeePassXC-Browser + - Close? - Zapri? + Enable KeepassXC browser integration + - Save changes? - Shrani spremembe? + General + Splošno - "%1" was modified. -Save changes? - "%1" spremenjeno. -Shrani spremembe? + Enable integration for these browsers: + - Writing the database failed. - Zapis podatkovne baze ni uspel. + &Google Chrome + - Save database as - Shrani podatkovno bazo kot + &Firefox + - New database - Nova podatkovna baza + &Chromium + - locked - zaklenjeno + &Vivaldi + - Lock database - Zakleni podatkovno bazo + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + - 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. + Re&quest to unlock the database if it is locked + - 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. + Only entries with the same scheme (http://, https://, ...) are returned. + - 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. + &Match URL scheme (e.g., https://...) + - "%1" is in edit mode. -Discard changes and close anyway? - "%1" je v urejanju. -Zavrži spremembe in zapri? + Only returns the best matches for a specific URL instead of all entries for the whole domain. + - Export database to CSV file - Izvozi podatkovno bazo v CSV datoteko + &Return only best-matching credentials + - CSV file - CSV datoteka + Sort &matching credentials by title + Credentials mean login data requested via browser extension + - Writing the CSV file failed. - Pisanje v CSV datoteko ni uspelo + Sort matching credentials by &username + Credentials mean login data requested via browser extension + - Unable to open the database. - Odpiranje podatkovne baze ni uspelo. + Advanced + Napredno - Merge database + Never &ask before accessing credentials + Credentials mean login data requested via browser extension - The database you are trying to save as is locked by another instance of KeePassXC. -Do you want to save it anyway? + Never ask before &updating credentials + Credentials mean login data requested via browser extension - Passwords + Only the selected database has to be connected with a client. - Database already opened + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension - The database you are trying to open is locked by another instance of KeePassXC. - -Do you want to open it anyway? + Automatically creating or updating string fields is not supported. - Open read-only + &Return advanced string fields which start with "KPH: " - File opened in read only mode. + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Open CSV file + Update &native messaging manifest files at startup - - - DatabaseWidget - - Change master key - Spremeni glavni ključ - - Delete entry? - Izbris vnosa? + Support a proxy application between KeePassXC and browser extension. + - Do you really want to delete the entry "%1" for good? - Ali res želite izbrisati "%1"? + Use a &proxy application between KeePassXC and browser extension + - Delete entries? - Izbris vnosov? + Use a custom proxy location if you installed a proxy manually. + - Do you really want to delete %1 entries for good? - Ali res želite izbrisati %1 vnosov? + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + - Move entries to recycle bin? - Premik vnosov v koš? - - - 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š? + Browse... + Button for opening file dialog + - Delete group? - Izbris skupine? + <b>Warning:</b> The following options can be dangerous! + - Do you really want to delete the group "%1" for good? - Ali res želite izbrisati skupino "%1"? + Select custom proxy location + - Unable to calculate master key - Izračun glavnega ključa ni uspel + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + - Move entry to recycle bin? + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. - Do you really want to move entry "%1" to the recycle bin? + &Tor Browser - Searching... + <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: - No current database. + Executable Files - No source database, nothing to do. + All Files - Search Results (%1) + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + BrowserService - No Results + KeePassXC: New key association request - Execute command? + 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. - Do you really want to execute the following command?<br><br>%1<br> + Save and allow access - Remember my choice + KeePassXC: Overwrite existing key? - Autoreload Request + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? - The database file has changed. Do you want to load the changes? + KeePassXC: Update Entry - Merge Request + Do you want to update the information in %1 - %2? - The database file has changed and you have unsaved changes.Do you want to merge your changes? + Abort - Could not open the new database file while attempting to autoreload this database. + Converting attributes to custom data… - Empty recycle bin? + KeePassXC: Converted KeePassHTTP attributes - Are you sure you want to permanently delete everything from your recycle bin? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. - - - EditEntryWidget - - Entry - Vnos + + Successfully moved %n keys to custom data. + - Advanced - Napredno + KeePassXC: No entry with KeePassHTTP attributes found! + - Icon - Ikona + The active database does not contain an entry with KeePassHTTP attributes. + - Auto-Type - Samodejno tipkanje + KeePassXC: Legacy browser integration settings detected + - Properties - Lastnosti + 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 - History - Zgodovina + Clone Options + - Entry history - Zgodovina vnosov + Append ' - Clone' to title + - Add entry - Dodaj vnos + Replace username and password with references + - Edit entry - Uredi vnos + Copy history + + + + CsvImportWidget - Different passwords supplied. - Gesli se ne ujemata. + Import CSV fields + - New attribute - Nov atribut + filename + - Select file - Izberi datoteko + size, rows, columns + - Unable to open file - Datoteke ni mogoče odpreti + Encoding + - Save attachment - Shrani priponko + Codec + - Unable to save the attachment: - - Priponke ni bilo mogoče shraniti: + Text is qualified by + - Tomorrow - Jutri - - - %n week(s) - %n teden%n tedna%n tedni%n tednov - - - %n month(s) - %n mesec%n meseca%n meseci%n mesecev + Fields are separated by + - 1 year - 1 leto + Comments start with + - Confirm Remove + First record has field names - Are you sure you want to remove this attribute? + Number of headers line to discard - [PROTECTED] Press reveal to view or edit + Consider '\' an escape character - Are you sure you want to remove this attachment? + Preview - - - EditEntryWidgetAdvanced - Additional attributes - Dodatni atributi + Column layout + - Add - Dodaj + Not present in CSV file + - Remove - Odstrani + Imported from CSV file + - Attachments - Priponke + Original data: + - Save - Shrani + Error + Napaka - Open - Odpri + Empty fieldname %1 + - Edit Name + column %1 - Protect + Error(s) detected in CSV file! + + [%n more message(s) skipped] + + - Reveal + CSV import: writer has errors: +%1 - EditEntryWidgetAutoType + CsvParserModel + + %n column(s) + + + + %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. + + + + 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 + Vnesi glavno geslo + + + Key File: + Datoteka s ključi: + + + Password: + Geslo: + + + Browse + Prebrskaj + + + 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 + Vse datoteke + + + Key files + Datoteke s ključi + + + Select key file + Izberi datoteko s ključi + + + TouchID for quick unlock + + + + Unable to open the database: +%1 + + + + Can't open key file: +%1 + + + + + DatabaseSettingWidgetMetaData + + Passwords + + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + Splošno + + + Security + Varnost + + + 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 + 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: + + + + AES: 256 Bit (default) + + + + Twofish: 256 Bit + + + + 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 + + KeePass 2 Database + KeePass 2 podatkovna baza + + + All files + Vse datoteke + + + Open database + Odpri podatkovno bazo + + + CSV file + CSV datoteka + + + Merge database + + + + Open KeePass 1 database + Odpri KeePass 1 podatkovno bazo + + + KeePass 1 database + KeePass 1 podatkovna baza + + + Export database to CSV file + Izvozi podatkovno bazo v CSV datoteko + + + Writing the CSV file failed. + Pisanje v CSV datoteko ni uspelo + + + 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? + Ali res želite izbrisati "%1"? + + + 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? + Ali res želite izbrisati skupino "%1"? + + + 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? + "%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 + + Entry + Vnos + + + Advanced + Napredno + + + Icon + Ikona + + + Auto-Type + Samodejno tipkanje + + + Properties + Lastnosti + + + 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 + + + Add entry + Dodaj vnos + + + Edit entry + Uredi vnos + + + Different passwords supplied. + Gesli se ne ujemata. + + + New attribute + Nov atribut + + + Are you sure you want to remove this attribute? + + + + Tomorrow + Jutri + + + %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 + Dodatni atributi + + + Add + Dodaj + + + Remove + Odstrani + + + Edit Name + + + + Protect + + + + Reveal + + + + Attachments + Priponke + + + Foreground Color: + + + + Background Color: + + + + + EditEntryWidgetAutoType + + 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 + + + + + + + + + + - + - + + + Window title: + Naslov okna: + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + Prikaži + + + Restore + Obnovi + + + Delete + Izbriši + + + Delete all + Izbriši vse + + + + EditEntryWidgetMain + + URL: + URL: + + + Password: + Geslo: + + + Repeat: + Ponovi geslo: + + + Title: + Naslov: + + + Notes + Opombe + + + Presets + Prednastavljeno + + + 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 + + + + + EditGroupWidget + + Group + Skupina + + + Icon + Ikona + + + Properties + Lastnosti + + + Add group + Dodaj skupino + + + Edit group + Uredi skupino + + + Enable + Omogoči + + + Disable + Onemogoči + + + Inherit from parent group (%1) + 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 + + Name + Ime + + + Notes + Opombe + + + Expires + Poteče + + + Search + Išči + + + Auto-Type + Samodejno tipkanje + + + &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 + Dodaj poljubno ikono + + + Delete custom icon + Izbriši ikono + + + Download favicon + + + + Unable to fetch favicon. + + + + Images + Slike + + + All files + Vse datoteke + + + 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: + Ustvarjeno: + + + Modified: + Spremenjeno: + + + Accessed: + Zadnji dostop: + + + 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 + + %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 + + Name + Ime + + + + EntryHistoryModel + + Last modified + Zadnja sprememba + + + Title + Naslov + + + Username + Uporabniško ime + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + + + + Group + Skupina + + + Title + Naslov + + + Username + Uporabniško ime + + + URL + URL + + + 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) + + + + + Group + + Recycle Bin + Koš + + + [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 + 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 + + Import KeePass1 database + Uvozi KeePass1 podatkovno bazo + + + Unable to open the database. + Odpiranje podatkovne baze ni uspelo. + + + + KeePass1Reader + + Unable to read keyfile. + Branje datoteke s ključi ni uspelo. + + + Not a KeePass database. + Datoteka ni KeePass podatkovna baza. + + + Unsupported encryption algorithm. + Algoritem za enkripcijo ni podprt. + + + 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 + + + Unable to calculate master key + Izračun glavnega ključa ni uspel + + + Wrong key or database file is corrupt. + Napačno geslo ali pa je podatkovna baza poškodovana. + + + 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 + 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. + +Please go to the master key settings and generate a new key file. + + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Datoteke s ključi + + + All files + Vse datoteke + + + Create Key File... + Ustvari datoteko s ključi... + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Izberi datoteko s kljući + + + + 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 + Nastavitve podatkovne baze + + + &Clone entry + + + + Copy &username + + + + Copy username to clipboard + Kopiraj uporabniško ime v odložišče + + + Copy password to clipboard + Kopiraj geslo v odložišče + + + &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 + Nastavitve + + + Toggle window + Preklopi okno + + + 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 + Koren + + + + 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: + 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 + + + Upper Case Letters + Velike črke + + + Lower Case Letters + Male črke + + + Numbers + Številke + + + Special Characters + Posebni znaki + + + Extended ASCII + + + + Exclude look-alike characters + Izključi podobne znake + + + Pick characters from every group + + + + &Length: + + + + Passphrase + + + + Wordlist: + + + + Word Separator: + + + + Copy + + + + Accept + Sprejmi + + + Close + + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + - Enable Auto-Type for this entry - Omogoči samodejno tipkanje za ta vnos + ExtendedASCII + - + - + + Switch to advanced mode + - - - - + Advanced + Napredno - Window title: - Naslov okna: + Upper Case Letters A to F + - Inherit default Auto-Type sequence from the &group + A-Z - &Use custom Auto-Type sequence: + Lower Case Letters A to F - Use default se&quence + a-z - Set custo&m sequence: + 0-9 - Window Associations + Braces - - - EditEntryWidgetHistory - Show - Prikaži + {[( + - Restore - Obnovi + Punctuation + - Delete - Izbriši + .,:; + - Delete all - Izbriši vse + Quotes + - - - EditEntryWidgetMain - Title: - Naslov: + " ' + - Username: - Uporabniško ime: + Math + - Password: - Geslo: + <*+!?= + - Repeat: - Ponovi geslo: + Dashes + - URL: - URL: + \_|-/ + - Expires - Poteče + Logograms + - Presets - Prednastavljeno + #$%&&@^`~ + + + + Switch to simple mode + - Notes: - Opombe: + 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 + - EditGroupWidget + QApplication - Group - Skupina + KeeShare + + + + QFileDialog - Icon - Ikona + Select + + + + + QMessageBox + + Overwrite + - Properties - Lastnosti + Delete + Izbriši - Add group - Dodaj skupino + Move + - Edit group - Uredi skupino + Empty + - Enable - Omogoči + Remove + Odstrani + + + Skip + Disable Onemogoči - Inherit from parent group (%1) - Podeduj iz nadrejene skupine (%1) + Merge + - EditGroupWidgetMain + QObject - Name - Ime + Database not opened + - Notes - Opombe + Database hash not available + - Expires - Poteče + Client public key not received + - Search - Išči + Cannot decrypt message + - Auto-Type - Samodejno tipkanje + Action cancelled or denied + - &Use default Auto-Type sequence of parent group + KeePassXC association failed, try again - Set default Auto-Type se&quence + Encryption key is not recognized - - - EditWidgetIcons - Add custom icon - Dodaj poljubno ikono + Incorrect action + - Delete custom icon - Izbriši ikono + Empty message received + - Images - Slike + No URL provided + - All files - Vse datoteke + No logins found + - Select Image - Izberi sliko + Unknown error + - Download favicon + Add a new entry to a database. - Unable to fetch favicon. + Path of the database. - Can't read icon + Key file of the database. - &Use default icon + path - Use custo&m icon + Username for the entry. - Confirm Delete + username - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + URL for the entry. - Hint: You can enable Google as a fallback under Tools>Settings>Security - + URL + URL - Custom icon already exists + Prompt for the entry's password. - - - EditWidgetProperties - Created: - Ustvarjeno: + Generate a password for the entry. + - Modified: - Spremenjeno: + Length for the generated password. + - Accessed: - Zadnji dostop: + length + - Uuid: - Uuid: + Path of the entry to add. + - - - Entry - - Clone + Copy an entry's password to the clipboard. - - - EntryAttributesModel - Name - Ime + Path of the entry to clip. + clip = copy to clipboard + - - - EntryHistoryModel - Last modified - Zadnja sprememba + Timeout in seconds before clearing the clipboard. + - Title - Naslov + Edit an entry. + - Username - Uporabniško ime + Title for the entry. + - URL - URL + title + - - - EntryModel - Group - Skupina + Path of the entry to edit. + - Title - Naslov + Estimate the entropy of a password. + - Username - Uporabniško ime + Password for which to estimate the entropy. + - URL - URL + Perform advanced analysis on the password. + - Ref: - Reference abbreviation + Extract and print the content of a database. - - - Group - Recycle Bin - Koš + Path of the database to extract. + - - - HttpPasswordGeneratorWidget - Length: - Dolžina: + Insert password to unlock %1: + - Character Types - Tipi znakov + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + - Upper Case Letters - Velike črke + + +Available commands: + + - A-Z + Name of the command to execute. - Lower Case Letters - Male črke + List database entries. + - a-z + Path of the group to list. Default is / - Numbers - Številke + Find entries quickly. + - 0-9 + Search term. - Special Characters - Posebni znaki + Merge two databases. + - /*_& ... + Path of the database to merge into. - Exclude look-alike characters - Izključi podobne znake + Path of the database to merge from. + - Ensure that the password contains characters from every group - Geslo naj vsebuje znake iz vsake skupine + Use the same credentials for both database files. + - - - KMessageWidget - &Close + Key file of the database to merge from. - Close message + Show an entry's information. - - - KeePass1OpenWidget - Import KeePass1 database - Uvozi KeePass1 podatkovno bazo + 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. + - Unable to open the database. - Odpiranje podatkovne baze ni uspelo. + attribute + - - - KeePass1Reader - Unable to read keyfile. - Branje datoteke s ključi ni uspelo. + Name of the entry to show. + - Not a KeePass database. - Datoteka ni KeePass podatkovna baza. + NULL device + - Unsupported encryption algorithm. - Algoritem za enkripcijo ni podprt. + error reading from device + - Unsupported KeePass database version. - Različica KeePass podatkovne baze ni podprta. + malformed string + - Root - Koren + missing closing quote + - Unable to calculate master key - Izračun glavnega ključa ni uspel + Group + Skupina - Wrong key or database file is corrupt. - Napačno geslo ali pa je podatkovna baza poškodovana. + Title + Naslov - - - KeePass2Reader - Not a KeePass database. - Datoteka ni KeePass podatkovna baza. + Username + Uporabniško ime - Unsupported KeePass database version. - Različica KeePass podatkovne baze ni podprta. + Password + Geslo - Wrong key or database file is corrupt. - Napačno geslo ali pa je podatkovna baza poškodovana. + Notes + Opombe - Unable to calculate master key - Izračun glavnega ključa ni uspel + Last Modified + - Unable to issue challenge-response. + Created - 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. + Browser Integration - - - KeePass2Writer - Unable to issue challenge-response. + YubiKey[%1] Challenge Response - Slot %2 - %3 - Unable to calculate master key - Izračun glavnega ključa ni uspel + Press + - - - Main - Fatal error while testing the cryptographic functions. - Napaka pri testiranju kriptografskih funkcij. + Passive + - KeePassXC - Error + SSH Agent - The lock file could not be created. Single-instance mode disabled. + Generate a new random diceware passphrase. - Another instance of KeePassXC is already running. + Word count for the diceware passphrase. - Existing single-instance lock file is invalid. Launching new instance. + Wordlist for the diceware generator. +[Default: EFF English] - - - MainWindow - Open database - Odpri podatkovno bazo + Generate a new random password. + - Database settings - Nastavitve podatkovne baze + Invalid value for password length %1. + - Copy username to clipboard - Kopiraj uporabniško ime v odložišče + Could not create entry with path %1. + - Copy password to clipboard - Kopiraj geslo v odložišče + Enter password for new entry: + - Settings - Nastavitve + Writing the database failed %1. + - Show toolbar - Prikaži orodno vrstico + Successfully added entry %1. + - read-only - samo za branje + Copy the current TOTP to the clipboard. + - Toggle window - Preklopi okno + Invalid timeout value %1. + - KeePass 2 Database - KeePass 2 podatkovna baza + Entry %1 not found. + - All files - Vse datoteke + Entry with path %1 has no TOTP set up. + - Save repaired database + Entry's current TOTP copied to the clipboard! - Writing the database failed. - Zapis podatkovne baze ni uspel. + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - &Recent databases + Clipboard cleared! - E&ntries + Silence password prompt and other secondary outputs. - Copy att&ribute to clipboard + count + CLI parameter - &Groups + Invalid value for password length: %1 - &View + Could not find entry with path %1. - &Quit + Not changing any field for entry %1. - &About + Enter new password for entry: - &Save database + Writing the database failed: %1 - &Close database + Successfully edited entry %1. - &New database + Length %1 - Merge from KeePassX database + Entropy %1 - &Add new entry + Log10 %1 - &View/Edit entry + Multi-word extra bits %1 - &Delete entry + Type: Bruteforce - &Add new group + Type: Dictionary - &Edit group + Type: Dict+Leet - &Delete group + Type: User Words - &Database settings + Type: User+Leet - &Clone entry + Type: Repeated - Timed one-time password + Type: Sequence - Copy &TOTP + Type: Spatial - Show TOTP + Type: Date - &Find + Type: Bruteforce(Rep) - Copy &username + Type: Dictionary(Rep) - Cop&y password + Type: Dict+Leet(Rep) - &Settings + Type: User Words(Rep) - &Perform Auto-Type + Type: User+Leet(Rep) - &Open URL + Type: Repeated(Rep) - &Lock databases + Type: Sequence(Rep) - &Title + Type: Spatial(Rep) - &URL + Type: Date(Rep) - &Notes + Type: Unknown%1 - Password Generator + Entropy %1 (%2) - Clear history + *** Password length (%1) != sum of length of parts (%2) *** - &Database + Failed to load key file %1: %2 - Import + File %1 does not exist. - &Tools + Unable to open file %1. - Empty recycle bin + Error while reading the database: +%1 - Access error for config file %1 + Error while parsing the database: +%1 - Quit KeePassXC + Length of the generated password - Please touch the button on your YubiKey! + Use lowercase characters - &Help + Use uppercase characters - &Open database... + Use numbers. - Sa&ve database as... + Use special characters - Change &master key... + Use extended ASCII - &Export to CSV file... + Exclude character set - Import KeePass 1 database... + chars - Import CSV file... + Exclude similar looking characters - Re&pair database... + Include characters from every selected group - Set up TOTP... + Recursively list the elements of the group. - - - OptionDialog - Dialog + Cannot find group %1. - General - Splošno + Error reading merge file: +%1 + - Sh&ow a notification when credentials are requested + Unable to save database to file : %1 - Sort matching entries by &username + Unable to save database to file: %1 - Re&move all stored permissions from entries in active database + Successfully recycled entry %1. - Advanced - Napredno + Successfully deleted entry %1. + - Always allow &access to entries + Show the entry's current TOTP. - Always allow &updating entries + ERROR: unknown attribute %1. - Searc&h in all opened databases for matching entries + No program defined for clipboard manipulation - HTTP Port: + Unable to start program %1 - Default port: 19455 + file empty - Re&quest to unlock the database if it is locked + %1: (row, col) %2,%3 - Sort &matching entries by title + AES: 256-bit - KeePassXC will listen to this port on 127.0.0.1 + Twofish: 256-bit - Cannot bind to privileged ports + ChaCha20: 256-bit - Cannot bind to privileged ports below 1024! -Using default port 19455. + Argon2 (KDBX 4 – recommended) - R&emove all shared encryption keys from active database + AES-KDF (KDBX 4) - &Return advanced string fields which start with "KPH: " + AES-KDF (KDBX 3.1) - Automatically creating or updating string fields is not supported. + Invalid Settings + TOTP - This is required for accessing your databases from ChromeIPass or PassIFox + Invalid Key + TOTP - Enable KeePassHTTP server + Message encryption failed. - Only returns the best matches for a specific URL instead of all entries for the whole domain. + No groups found - &Return only best matching entries + Create a new database. - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + File %1 already exists. - &Match URL schemes + Loading the key file failed - Password Generator + No key is set. Aborting database creation. - Only the selected database has to be connected with a client. + Failed to save the database: %1. - The following options can be dangerous! -Change them only if you know what you are doing. + Successfully created new database. - - - PasswordGeneratorWidget - Password: - Geslo: + Insert password to encrypt database (Press enter to leave blank): + - Character Types - Tipi znakov + Creating KeyFile %1 failed: %2 + - Upper Case Letters - Velike črke + Loading KeyFile %1 failed: %2 + - Lower Case Letters - Male črke + Remove an entry from the database. + - Numbers - Številke + Path of the entry to remove. + - Special Characters - Posebni znaki + Existing single-instance lock file is invalid. Launching new instance. + - Exclude look-alike characters - Izključi podobne znake + The lock file could not be created. Single-instance mode disabled. + - Accept - Sprejmi + KeePassXC - cross-platform password manager + - %p% + filenames of the password databases to open (*.kdbx) - strength - + path to a custom config file + pot do konfiguracijske datoteke po meri - entropy - + key file of the database + datoteka s ključi podatkovne baze - &Length: + read password of the database from stdin - Pick characters from every group + Parent window handle - Generate + Another instance of KeePassXC is already running. - Close - + Fatal error while testing the cryptographic functions. + Napaka pri testiranju kriptografskih funkcij. - Apply + KeePassXC - Error - Entropy: %1 bit + Database password: + + + QtIOCompressor - Password Quality: %1 - + Internal zlib error when compressing: + Notranja zlib napaka pri stiskanju: - Poor - + Error writing to underlying device: + Napaka pri pisanju na napravo: - Weak - + Error opening underlying device: + Napaka pri odpiranju naprave: - Good - + Error reading data from underlying device: + Napak pri branju iz naprave: - Excellent - + Internal zlib error when decompressing: + Notranja zlib napaka pri dekompresiranju: + + + QtIOCompressor::open - Password - Geslo + The gzip format not supported in this version of zlib. + Ta različica zlib ne podpira gzip formata. - Extended ASCII - + Internal zlib error: + Notranja zlib napaka: + + + SSHAgent - Passphrase + Agent connection failed. - Wordlist: + Agent protocol error. - Word Count: + No agent running, cannot add identity. - Word Separator: + No agent running, cannot remove identity. - Copy + Agent refused this identity. Possible reasons include: - - - QObject - NULL device + The key has already been added. - error reading from device + Restricted lifetime is not supported by the agent (check options). - file empty ! - + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - malformed string + Search Help - missing closing quote + Search terms are as follows: [modifiers][field:]["]term["] - INTERNAL - unget lower bound exceeded + Every search term must match (ie, logical AND) - Group - Skupina + Modifiers + - Title - Naslov + exclude term from results + - Username - Uporabniško ime + match term exactly + - Password - Geslo + use regex in term + - URL - URL + Fields + - Notes - Opombe + Term Wildcards + - Browser Integration + match anything - YubiKey[%1] Challenge Response - Slot %2 - %3 + match one - Press + logical OR - Passive + Examples - QtIOCompressor - - Internal zlib error when compressing: - Notranja zlib napaka pri stiskanju: - + SearchWidget - Error writing to underlying device: - Napaka pri pisanju na napravo: + Search + Išči - Error opening underlying device: - Napaka pri odpiranju naprave: + Clear + - Error reading data from underlying device: - Napak pri branju iz naprave: + Limit search to selected group + - Internal zlib error when decompressing: - Notranja zlib napaka pri dekompresiranju: + Search Help + - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Ta različica zlib ne podpira gzip formata. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + - Internal zlib error: - Notranja zlib napaka: + Case sensitive + Razlikuj med velikimi in malimi črkami - SearchWidget + SettingsWidgetKeeShare - Case Sensitive + Active - Search - Išči - - - Clear + Allow export - Search... + Allow import - Limit search to selected group + Own certificate - - - Service - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Fingerprint: - Do you want to update the information in %1 - %2? + Certificate: - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Signer - Successfully removed %1 encryption-%2 from KeePassX/Http Settings. + Key: - No shared encryption-keys found in KeePassHttp Settings. + Generate - The active database does not contain an entry of KeePassHttp Settings. + Import - Removing stored permissions... + Export - Abort + Imported certificates - Successfully removed permissions from %1 %2. + Trust - The active database does not contain an entry with permissions. + Ask - KeePassXC: New key association request + Untrust - 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. - + Remove + Odstrani - KeePassXC: Overwrite existing key? + Path - KeePassXC: Update Entry + Status - KeePassXC: Database locked! + Fingerprint - KeePassXC: Removed keys from database + Certificate - KeePassXC: No keys found + Trusted - KeePassXC: Settings not available! + Untrusted - KeePassXC: Removed permissions + Unknown - KeePassXC: No entry with permissions found! + key.share + Filetype for KeeShare key - - - SettingsWidget - Application Settings - Nastavitve aplikacije + KeeShare key file + - General - Splošno + All files + Vse datoteke - Security - Varnost + Select path + - Access error for config file %1 + Exporting changed certificate - - - SettingsWidgetGeneral - Remember last databases - Zapomni si zadnje podatkovne baze + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Automatically save on exit - Samodejno shrani ob izhodu + %1.%2 + Template for KeeShare key file + + + + ShareObserver - Automatically save after every change - Samodejno shrani po vsaki spremembi + Import from container without signature + - Minimize when copying to clipboard - Minimiziraj pri kopiranju v odložišče + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Use group icon on entry creation - Za nove vnose uporabi ikono skupine + Import from container with certificate + - Global Auto-Type shortcut - Globalna bližnjica za samodejno tipkanje + Do you want to trust %1 with the fingerprint of %2 from %3 + - Language - Jezik + Not this time + - Show a system tray icon - Pokaži ikono v sistemski vrstici + Never + - Hide window to system tray when minimized - Minimiziraj v sistemsko vrstico + Always + - Load previous databases on startup + Just this time - Automatically reload the database when modified externally + Import from %1 failed (%2) - Hide window to system tray instead of app exit + Import from %1 successful (%2) - Minimize window at application startup + Imported from %1 - Basic Settings + Signed share container are not supported - import prevented - Remember last key files and security dongles + File is not readable - Don't mark database as modified for non-data changes (e.g., expanding groups) + Invalid sharing container - Auto-Type - Samodejno tipkanje + Untrusted import prevented + - Use entry title and URL to match windows for global Auto-Type + Successful signed import - Always ask before performing Auto-Type + Unexpected error - Auto-Type delay + Unsigned share container are not supported - import prevented - ms + Successful unsigned import - Start only a single instance of KeePassXC + File does not exist - - - SettingsWidgetSecurity - Clear clipboard after - Pobriši odložišče po + Unknown share container type + - sec - sekundah + Overwriting signed share container is not supported - export prevented + - Lock databases after inactivity of - Zakleni podatkovne baze po neaktivnosti + Could not write export container (%1) + - Show passwords in cleartext by default - Gesla privzeto v čistopisu + Could not embed signature (%1) + - Lock databases after minimizing the window + Could not embed database (%1) - Don't require password repeat when it is visible + Overwriting unsigned share container is not supported - export prevented - Timeouts + Could not write export container - Convenience + Unexpected export error occurred - Lock databases when session is locked or lid is closed + Export to %1 failed (%2) - Privacy + Export to %1 successful (%2) - Use Google as fallback for downloading website icons + Export to %1 - SetupTotpDialog + TotpDialog - Setup TOTP + Timed Password - Key: + 000000 - Use custom settings + Copy + + Expires in <b>%n</b> second(s) + + + + + TotpExportSettingsDialog - Note: Change these settings only if you know what you are doing. + Copy - Time step: + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning - 8 digits + There was an error creating the QR code. - 6 digits + Closing in %1 seconds. + + + TotpSetupDialog - Code size: + Setup TOTP - sec - sekundah + Key: + - - - TotpDialog - Timed Password + Default RFC 6238 token settings - 000000 + Steam token settings - Copy + Use custom settings - Expires in + Custom Settings - seconds + Time step: - - - UnlockDatabaseWidget - Unlock database - Odkleni podatkovno bazo + sec + Seconds + sekundah - - - WelcomeWidget - Welcome to KeePassXC + Code size: - Start storing your passwords securely in a KeePassXC database + 6 digits - Create new database + 7 digits - Open existing database + 8 digits + + + UpdateCheckDialog - Import from KeePass 1 + Checking for updates - Import from CSV + Checking for updates... - Recent databases - Nedavne podatkovne baze + Close + - - - main - path to a custom config file - pot do konfiguracijske datoteke po meri + Update Error! + - key file of the database - datoteka s ključi podatkovne baze + An error occurred in retrieving update information. + - KeePassXC - cross-platform password manager + Please try again later. - read password of the database from stdin + Software Update - filenames of the password databases to open (*.kdbx) + A new version of KeePassXC is available! - Copy a password to the clipboard + KeePassXC %1 is now available — you have %2. - Path of the database. + Download it at keepassxc.org - Use a GUI prompt unlocking the database. + You're up-to-date! - Name of the entry to clip. + KeePassXC %1 is currently the newest version available + + + WelcomeWidget - Extract and print the content of a database. + Start storing your passwords securely in a KeePassXC database - Path of the database to extract. + Create new database - Name of the command to execute. + Open existing database - List database entries. + Import from KeePass 1 - Path of the group to list. Default is / + Import from CSV - Print the UUIDs of the entries and groups. - + Recent databases + Nedavne podatkovne baze - Merge two databases. + Welcome to KeePassXC %1 + + + YubiKeyEditWidget - Path of the database to merge into. + Refresh - Path of the database to merge from. + YubiKey Challenge-Response - Use the same password for both database files. + <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> - Show a password. + No YubiKey detected, please ensure it's plugged in. - Name of the entry to show. + No YubiKey inserted. diff --git a/share/translations/keepassx_sr.ts b/share/translations/keepassx_sr.ts index b86e3c8bce..80787e01ef 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,3554 +70,4889 @@ Kernel: %3 %4 - Build Type: %1 - + Version %1 - - - AccessControlDialog - - KeePassXC HTTP Confirm Access - KeePassXC HTTP Потврдите Приступ - - - Remember this decision - Запамти ову одлуку - - - Allow - Допусти - - Deny - Одбаци + Build Type: %1 + - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 тражи приступ лозинкама за следећу ставку (или ставке). -Молим вас одаберите да ли желите да одобрите приступ. + Auto-Type + Аутоматско-куцање - - - AgentSettingsWidget - Enable SSH Agent (requires restart) - Омогући SSH агента (захтева поновно покретање апликације) + Browser Integration + Интеграција са прегледачем - - - AutoType - Couldn't find an entry that matches the window title: - Ставка која одговара наведеном наслову прозора није пронађена: + SSH Agent + SSH Агент - Auto-Type - KeePassXC - Autoматско-Куцање - KeePassXC + YubiKey + - Auto-Type - Аутоматско-куцање + TouchID + - The Syntax of your Auto-Type statement is incorrect! + None - This Auto-Type command contains a very long delay. Do you really want to proceed? + KeeShare (signed and unsigned sharing) - This Auto-Type command contains very slow key presses. Do you really want to proceed? + KeeShare (only signed sharing) - This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + KeeShare (only unsigned sharing) - AutoTypeAssociationsModel - - Window - Прозор - + AgentSettingsWidget - Sequence - Редослед + Enable SSH Agent (requires restart) + Омогући SSH агента (захтева поновно покретање апликације) - Default sequence - Подразумевани редослед + Use OpenSSH for Windows instead of Pageant + - AutoTypeMatchModel + ApplicationSettingsWidget - Group - Група - - - Title - Наслов - - - Username - Корисничко име + Application Settings + - Sequence - Редослед + General + Опште - - - AutoTypeSelectDialog - Auto-Type - KeePassXC - Autoматско-Куцање - KeePassXC + Security + - Select entry to Auto-Type: - Одаберите ставку за Аутоматско-Куцање + Access error for config file %1 + Грешка приликом приступа конфигурационој датотеци %1 - - - BrowserAccessControlDialog - KeePassXC-Browser Confirm Access + Icon only - Remember this decision - Запамти ову одлуку + Text only + - Allow - Допусти + Text beside icon + - Deny - Одбаци + Text under icon + - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 тражи приступ лозинкама за следећу ставку (или ставке). -Молим вас одаберите да ли желите да одобрите приступ. + Follow style + - BrowserOptionDialog - - Dialog - Дијалог - + ApplicationSettingsWidgetGeneral - This is required for accessing your databases with KeePassXC-Browser + Basic Settings - Enable KeepassXC browser integration + Startup - General - Опште + Start only a single instance of KeePassXC + - Enable integration for these browsers: + Remember last databases - &Google Chrome + Remember last key files and security dongles - &Firefox + Load previous databases on startup - &Chromium + Minimize window at application startup - &Vivaldi + File Management - Show a &notification when credentials are requested - Credentials mean login data requested via browser extension + Safely save database files (may be incompatible with Dropbox, etc) - Re&quest to unlock the database if it is locked + Backup database file before saving - Only entries with the same scheme (http://, https://, ...) are returned. + Automatically save after every change - &Match URL scheme (e.g., https://...) + Automatically save on exit - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Don't mark database as modified for non-data changes (e.g., expanding groups) - &Return only best-matching credentials + Automatically reload the database when modified externally - Sort &matching credentials by title - Credentials mean login data requested via browser extension + Entry Management - Sort matching credentials by &username - Credentials mean login data requested via browser extension + Use group icon on entry creation - &Disconnect all browsers + Minimize when copying to clipboard - Forget all remembered &permissions + Hide the entry preview panel - Advanced - Напредно + General + Опште - Never &ask before accessing credentials - Credentials mean login data requested via browser extension + Hide toolbar (icons) - Never ask before &updating credentials - Credentials mean login data requested via browser extension + Minimize instead of app exit - Only the selected database has to be connected with a client. + Show a system tray icon - Searc&h in all opened databases for matching credentials - Credentials mean login data requested via browser extension + Dark system tray icon - Automatically creating or updating string fields is not supported. + Hide window to system tray when minimized - &Return advanced string fields which start with "KPH: " + Language - Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - + Auto-Type + Аутоматско-куцање - Update &native messaging manifest files at startup + Use entry title to match windows for global Auto-Type - Support a proxy application between KeePassXC and browser extension. + Use entry URL to match windows for global Auto-Type - Use a &proxy application between KeePassXC and browser extension + Always ask before performing Auto-Type - Use a custom proxy location if you installed a proxy manually. + Global Auto-Type shortcut - Use a &custom proxy location - Meant is the proxy for KeePassXC-Browser + Auto-Type typing delay - Browse... - Button for opening file dialog - Разгледај... + ms + Milliseconds + - <b>Warning:</b> The following options can be dangerous! + Auto-Type start delay - Executable Files (*.exe);;All Files (*.*) + Check for updates at application startup - Executable Files (*) + Include pre-releases when checking for updates - Select custom proxy location + Movable toolbar - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + Button style - BrowserService - - KeePassXC: New key association request - - + ApplicationSettingsWidgetSecurity - 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. + Timeouts - Save and allow access + Clear clipboard after - KeePassXC: Overwrite existing key? + sec + Seconds - A shared encryption key with the name "%1" already exists. -Do you want to overwrite it? + Lock databases after inactivity of - KeePassXC: Update Entry + min - Do you want to update the information in %1 - %2? + Forget TouchID after inactivity of - KeePassXC: Database locked! + Convenience - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Lock databases when session is locked or lid is closed - KeePassXC: Settings not available! + Forget TouchID when session is locked or lid is closed - The active database does not contain a settings entry. + Lock databases after minimizing the window - KeePassXC: No keys found + Re-lock previously locked database after performing Auto-Type - No shared encryption keys found in KeePassXC Settings. + Don't require password repeat when it is visible - KeePassXC: Removed keys from database + Don't hide passwords when editing them - - Successfully removed %n encryption key(s) from KeePassXC settings. - - - Removing stored permissions… + Don't use placeholder for empty password fields - Abort + Hide passwords in the entry preview panel - KeePassXC: Removed permissions + Hide entry notes by default - - Successfully removed permissions from %n entry(s). - - - KeePassXC: No entry with permissions found! + Privacy - The active database does not contain an entry with permissions. + Use DuckDuckGo as fallback for downloading website icons - ChangeMasterKeyWidget + AutoType - Password - Лозинка + Couldn't find an entry that matches the window title: + Ставка која одговара наведеном наслову прозора није пронађена: - Enter password: - Унесите лозинку: + Auto-Type - KeePassXC + Autoматско-Куцање - KeePassXC - Repeat password: - Поновите лозинку: + Auto-Type + Аутоматско-куцање - &Key file - &Кључ-Датотека + The Syntax of your Auto-Type statement is incorrect! + - Browse - Преглед + This Auto-Type command contains a very long delay. Do you really want to proceed? + - Create - Креирај + This Auto-Type command contains very slow key presses. Do you really want to proceed? + - Cha&llenge Response - Изазов Одговор - - - Refresh - Освежи + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + + + AutoTypeAssociationsModel - Key files - Кључ-Датотеке + Window + Прозор - All files - Све датотеке + Sequence + Секвенца - Create Key File... - Креирај Кључ-Датотеку... + Default sequence + Подразумевани редослед + + + AutoTypeMatchModel - Unable to create Key File : - Није могуће креирати Кључ-Датотеку: + Group + Група - Select a key file - Одаберите кључ-датотеку + Title + Наслов - Empty password - Празна лозинка + Username + Корисничко име - Do you really want to use an empty string as password? - Да ли сте сигурни да желите да лозинка буде празна? + Sequence + Редослед + + + AutoTypeSelectDialog - Different passwords supplied. - Унете су две различите лозинке. + Auto-Type - KeePassXC + Autoматско-Куцање - KeePassXC - Failed to set %1 as the Key file: -%2 - Неуспешно постављање %1 као Кључ-Датотеку: -%2 + Select entry to Auto-Type: + Одаберите ставку за Аутоматско-Куцање + + + BrowserAccessControlDialog - Legacy key file format + KeePassXC-Browser Confirm Access - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - + Remember this decision + Запамти ову одлуку + + + Allow + Допусти + + + Deny + Одбаци - Changing master key failed: no YubiKey inserted. - Неуспешна промена главног кључа: YubiKey није унет. + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + %1 тражи приступ лозинкама за следеће ставке. +Молим вас одаберите да ли желите да одобрите приступ. - CloneDialog + BrowserEntrySaveDialog - Clone Options - Клонирај Опције + KeePassXC-Browser Save Entry + - Append ' - Clone' to title - Додај наслову суфикс ' - дупликат' + Ok + - Replace username and password with references - Замени корисничко име и лозинку са референцама + Cancel + - Copy history - Копирај историју + You have multiple databases open. +Please select the correct database for saving credentials. + - CsvImportWidget + BrowserOptionDialog - Import CSV fields - Увези CSV поља + Dialog + Дијалог - filename - датотека + This is required for accessing your databases with KeePassXC-Browser + - size, rows, columns - величина, редови, колоне + Enable KeepassXC browser integration + - Encoding - Кодирање + General + Опште - Codec - Кодек + Enable integration for these browsers: + - Text is qualified by - Текст је означен са + &Google Chrome + - Fields are separated by - Поља су одвојена са + &Firefox + - Comments start with - Коментари почињу са + &Chromium + - First record has field names - Први ред садржи имена колона + &Vivaldi + - Number of headers line to discard - Прескочи колико првих линија + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + - Consider '\' an escape character - Третирај '\' као командни знак + Re&quest to unlock the database if it is locked + - Preview - Преглед + Only entries with the same scheme (http://, https://, ...) are returned. + - Column layout - Распоред по колонама + &Match URL scheme (e.g., https://...) + - Not present in CSV file - Није присутан у CSV датотеци + Only returns the best matches for a specific URL instead of all entries for the whole domain. + - Empty fieldname - Празно име поља + &Return only best-matching credentials + - column - колона + Sort &matching credentials by title + Credentials mean login data requested via browser extension + - Imported from CSV file - Увезено из CSV датотеке + Sort matching credentials by &username + Credentials mean login data requested via browser extension + - Original data: - Изворни подаци: + Advanced + Напредно - Error(s) detected in CSV file ! - Грешка(грешке) у CSV датотеци ! + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + - more messages skipped] - порука прескочено] + Never ask before &updating credentials + Credentials mean login data requested via browser extension + - Error - Грешка + Only the selected database has to be connected with a client. + - CSV import: writer has errors: - - CSV увоз: грешке приликом уписа: - + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + - - - CsvImportWizard - Error - Грешка + Automatically creating or updating string fields is not supported. + - Unable to calculate master key - Није могуће израчунати главни кључ - - - - CsvParserModel - - %n byte(s), - %n бајт(ова),%n бајт(ова),%n бајт(ова), + &Return advanced string fields which start with "KPH: " + - - %n row(s), - %n ред(ова),%n ред(ова),%n ред(ова), + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + - - %n column(s) - %n колона%n колона%n колона + + Update &native messaging manifest files at startup + - - - DatabaseOpenWidget - Enter master key - Унесите главни кључ + Support a proxy application between KeePassXC and browser extension. + - Key File: - Кључ-Датотека: + Use a &proxy application between KeePassXC and browser extension + - Password: - Лозинка: + Use a custom proxy location if you installed a proxy manually. + - Browse - Разгледај + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + - Refresh - Освежи + Browse... + Button for opening file dialog + Разгледај... - Challenge Response: - Изазов Одговор: + <b>Warning:</b> The following options can be dangerous! + - Unable to open the database. - Није могуће отворити базу података. + Select custom proxy location + - Can't open key file - Није могуће отворити кључ-датотеку + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + - Legacy key file format + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + &Tor Browser - Don't show this warning again + <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: - All files - Све датотеке + Executable Files + - Key files - Датотеке са кључем + All Files + - Select key file - Одаберите кључ-датотеку + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + - DatabaseRepairWidget - - Repair database - Оправи базу података - + BrowserService - Error - Грешка + KeePassXC: New key association request + - Can't open key file - Није могуће отворити кључ-датотеку + 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. + - Unable to open the database. - Није могуће отворити базу података. + Save and allow access + - Database opened fine. Nothing to do. - База података успешно отворена. Нема шта да се уради. + KeePassXC: Overwrite existing key? + - Success - Успешно + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + - The database has been successfully repaired -You can now save it. - База података је успешно оправљена -Сада је можете сачувати. + KeePassXC: Update Entry + - Unable to repair the database. - Није могуће оправити базу података. + Do you want to update the information in %1 - %2? + - - - DatabaseSettingsWidget - General - Опште + Abort + - Encryption + Converting attributes to custom data… - Number of rounds too high - Key transformation rounds + KeePassXC: Converted KeePassHTTP attributes - 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! + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + Successfully moved %n keys to custom data. + + - Understood, keep number + KeePassXC: No entry with KeePassHTTP attributes found! - Cancel + The active database does not contain an entry with KeePassHTTP attributes. - Number of rounds too low - Key transformation rounds + KeePassXC: Legacy browser integration settings detected - 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! + 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 - KDF unchanged - + Clone Options + Клонирај Опције - Failed to transform key with new KDF parameters; KDF unchanged. - + Append ' - Clone' to title + Додај наслову суфикс ' - дупликат' - - MiB - Abbreviation for Mebibytes (KDF settings) - + + Replace username and password with references + Замените корисничко име и лозинку са референцама - - thread(s) - Threads for parallel execution (KDF settings) - + + Copy history + Копирај историју - DatabaseSettingsWidgetEncryption + CsvImportWidget - Encryption Algorithm: - + Import CSV fields + Увези CSV поља - AES: 256 Bit (default) - AES: 256 Bit (подразумевано) + filename + датотека - Twofish: 256 Bit - Twofish: 256 Bit + size, rows, columns + величина, редови, колоне - Key Derivation Function: - + Encoding + Кодирање - Transform rounds: - + Codec + Кодек - Benchmark 1-second delay - + Text is qualified by + Текст је означен са - Memory Usage: - + Fields are separated by + Поља су одвојена са - Parallelism: - + Comments start with + Коментари почињу са - - - DatabaseSettingsWidgetGeneral - Database Meta Data - + First record has field names + Први ред садржи имена колона - Database name: - Име базе података: + Number of headers line to discard + Прескочи колико првих линија - Database description: - Опис базе података: + Consider '\' an escape character + Третирај '\' као командни знак - Default username: - Подразумевано корисничко име: + Preview + Приказ - History Settings - + Column layout + Распоред по колонама - Max. history items: - Максималан број ставки из историје: + Not present in CSV file + Није присутан у CSV датотеци - Max. history size: - Максималан број ставки у историји: + Imported from CSV file + Увезено из CSV датотеке - MiB - MiB + Original data: + Изворни подаци: - Use recycle bin - Користи корпу за отпатке + Error + Грешка - Additional Database Settings + Empty fieldname %1 - Enable &compression (recommended) + column %1 - - - DatabaseTabWidget - Root - Root group - Корен + Error(s) detected in CSV file! + - - KeePass 2 Database - KeePass 2 База података + + [%n more message(s) skipped] + - All files - Све датотеке + CSV import: writer has errors: +%1 + - - Open database - Отвори базу података + + + CsvParserModel + + %n column(s) + - File not found! - Датотека није пронађена! + %1, %2, %3 + file info: bytes, rows, columns + - - Unable to open the database. - Није могуће отворити базу података. + + %n byte(s) + - - File opened in read only mode. - Датотека је отворена у моду само за читање. + + %n row(s) + + + + Database - Open CSV file - Отвори CSV датотеку + Root + Root group name + Корен - CSV file - CSV датотека + File %1 does not exist. + - All files (*) - Све датотеке (*) + Unable to open file %1. + - Merge database - Удружи базу података + Error while reading the database: %1 + - Open KeePass 1 database - Отвори KeePass 1 базу података + Could not save, database has no file name. + - KeePass 1 database - KeePass 1 база података + File cannot be written as it is opened in read-only mode. + + + + DatabaseOpenDialog - Close? - Затвори? + Unlock Database - KeePassXC + + + + DatabaseOpenWidget - "%1" is in edit mode. -Discard changes and close anyway? - "%1" у моду за измене. -Одбаци све измене и свеједно затвори? + Enter master key + Унесите главни кључ - Save changes? - Сними измене? + Key File: + Кључ-Датотека: - "%1" was modified. -Save changes? - "%1" је измењен. -Сачувај измене? + Password: + Лозинка: - Writing the database failed. - Уписивање у базу података није успело. + Browse + Разгледај - Passwords - Лозинке + Refresh + Освежи - Save database as - Сними базу података као + Challenge Response: + Изазов Одговор: - Export database to CSV file - Извези базу података у CSV датотеку + Legacy key file format + - Writing the CSV file failed. - Уписивање у CSV датотеку није успело. + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + - New database - Нова база података + Don't show this warning again + - locked - закључано + All files + Све датотеке - Lock database - Закључај базу података + Key files + Датотеке са кључем - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Није могуће закључати базу података јер је тренутно ажурирате. -Молим вас сачувајте измене или их одбаците. + Select key file + Одаберите кључ-датотеку - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - Ова база података је измењена. -Да ли желите да је сачувате пре закључавања? -У супротном све измене ће бити изгубљене. + TouchID for quick unlock + - Disable safe saves? + Unable to open the database: +%1 - 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? + Can't open key file: +%1 - DatabaseWidget + DatabaseSettingWidgetMetaData - Searching... - Претрага је у току... + Passwords + Лозинке + + + DatabaseSettingsDialog - Change master key - Промени главни кључ + Advanced Settings + - Delete entry? - Обриши ставку? + General + Опште - Do you really want to delete the entry "%1" for good? - Да ли сте сигурни да желите да обришете ставку "%1"? + Security + - Delete entries? - Обриши ставке? + Master Key + - Do you really want to delete %1 entries for good? - Да ли сте сигурни да желите да обришете %1 ставке? + Encryption Settings + - Move entry to recycle bin? - Премести ставку у корпу за отпатке? + Browser Integration + Интеграција са прегледачем + + + DatabaseSettingsWidgetBrowser - Do you really want to move entry "%1" to the recycle bin? - Да ли сте сигурни да желите да преместите ставку "%1" у корпу за отпатке? + KeePassXC-Browser settings + - Move entries to recycle bin? - Премести ставке у корпу за отпатке? - - - Do you really want to move %n entry(s) to the recycle bin? - Да ли сте сигурни да желите да преместите %n ставку у корпу за отпатке?Да ли сте сигурни да желите да преместите %n ставке у корпу за отпатке?Да ли сте сигурни да желите да преместите %n ставку(ставке) у корпу за отпатке? + &Disconnect all browsers + - Execute command? - Изврши команду? + Forg&et all site-specific settings on entries + - Do you really want to execute the following command?<br><br>%1<br> - Да ли сте сигурни да желите да извршите следећу команду? <br><br>%1<br> + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Remember my choice - Запамти мој избор + Stored keys + - Delete group? - Обриши групу? + Remove + Уклони - Do you really want to delete the group "%1" for good? - Да ли сте сигурни да желите да обришете групу "%1"? + Delete the selected key? + - Unable to calculate master key - Није могуће израчунати главни кључ + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + - No current database. - Нема тренутне базе података. + Key + - No source database, nothing to do. - Нема изворне базе података, нема шта да се уради. + Value + - Search Results (%1) - Резултати претраге (%1) + Enable Browser Integration to access these settings. + - No Results - Нема резултата + Disconnect all browsers + - File has changed + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. - The database file has changed. Do you want to load the changes? - Датотека базе података је измењена. Да ли желите да учитате измене? + KeePassXC: No keys found + - Merge Request - Споји захтев + No shared encryption keys found in KeePassXC settings. + - The database file has changed and you have unsaved changes. -Do you want to merge your changes? + KeePassXC: Removed keys from database - - Could not open the new database file while attempting to autoreload this database. - Није могуће отворити нову датотеку базе података током аутоматског учитавања тренутне базе. + + Successfully removed %n encryption key(s) from KeePassXC settings. + - Empty recycle bin? - Испразни корпу за отпатке + Forget all site-specific settings on entries + - Are you sure you want to permanently delete everything from your recycle bin? - Да ли сте сигурни да желите да желите да трајно обришете све ставке из корпе за отпатке? + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + - - - DetailsWidget - Generate TOTP Token - Генериши TOTP токен + Removing stored permissions… + - Close - Затвори + Abort + - General - Опште + KeePassXC: Removed permissions + - - Password - Лозинка + + Successfully removed permissions from %n entry(s). + - URL - URL + KeePassXC: No entry with permissions found! + - Expiration - Датум истека + The active database does not contain an entry with permissions. + - Username - Корисничко име + Move KeePassHTTP attributes to custom data + - Autotype - Аутоматско куцање + 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 - Searching - Претрага је у току... + Encryption Algorithm: + - Attributes - Атрибути + AES: 256 Bit (default) + AES: 256 Bit (подразумевано) - Attachments - Прилози + Twofish: 256 Bit + Twofish: 256 Bit - Notes - Белешке + Key Derivation Function: + - Window - Прозор + Transform rounds: + - Sequence - Редослед + Benchmark 1-second delay + - Search - Претрага + Memory Usage: + - Clear - Очисти + Parallelism: + - Never - Никада + Decryption Time: + - [PROTECTED] - [ЗАШТИЋЕНО] + ?? s + - Disabled - Онемогућено + Change + - Enabled - Омогућено + 100 ms + - - - EditEntryWidget - Entry - Унос + 5 s + - Advanced - Напредно + Higher values offer more protection, but opening the database will take longer. + - Icon - Икона + Database format: + - Auto-Type - Аутоматско-куцање + This is only important if you need to use your database with other programs. + - Properties - Особине + KDBX 4.0 (recommended) + - History - Историја + KDBX 3.1 + - SSH Agent - SSH Агент + unchanged + Database decryption time is unchanged + - n/a - / + Number of rounds too high + Key transformation rounds + - (encrypted) - (енкриптовано) + 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! + - Select private key - Одаберите приватни кључ + Understood, keep number + - File too large to be a private key - Датотека је превелика да би била приватни кључ + Cancel + - Failed to open private key - Неуспешно отварање приватног кључа + Number of rounds too low + Key transformation rounds + - Entry history - Историја уноса + 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! + - Add entry - Додај унос + KDF unchanged + - Edit entry - Измени унос + Failed to transform key with new KDF parameters; KDF unchanged. + - - Different passwords supplied. - Унете су две различите лозинке. + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + DatabaseSettingsWidgetGeneral - New attribute - Нови атрибут + Database Meta Data + - Confirm Remove - Потврди уклањање + Database name: + Име базе података: - Are you sure you want to remove this attribute? - Да ли сте сигурни да желите да уклоните атрибут? + Database description: + Опис базе података: - [PROTECTED] - [ЗАШТИЋЕНО] + Default username: + Подразумевано корисничко име: - Press reveal to view or edit - Молимо вас да откријете да бисте видели или изменили + History Settings + - Tomorrow - Сутра + Max. history items: + Максималан број ставки из историје: - - %n week(s) - %n недеља%n недеље(а)%n недеље(а) + + Max. history size: + Максималан број ставки у историји: - - %n month(s) - %n месец%n месеца(и)%n месеца(и) + + MiB + MiB - 1 year - 1 година + Use recycle bin + Користи корпу за отпатке - Apply generated password? + Additional Database Settings - Do you want to apply the generated password to this entry? - - - - Entry updated successfully. + Enable &compression (recommended) - EditEntryWidgetAdvanced - - Additional attributes - Додатни атрибути - - - Add - Додај - + DatabaseSettingsWidgetKeeShare - Remove - Уклони + Sharing + - Edit Name - Измени име + Breadcrumb + - Protect - Заштити + Type + - Reveal - Откриј + Path + - Attachments - Прилози + Last Signer + - Foreground Color: + Certificates - Background Color: + > + Breadcrumb separator - EditEntryWidgetAutoType + DatabaseSettingsWidgetMasterKey - Enable Auto-Type for this entry - Омогући Аутоматско-Куцање за овај унос - - - Inherit default Auto-Type sequence from the &group - Наследи подразумевану секвенцу за Аутоматско-Куцање од &group + Add additional protection... + - &Use custom Auto-Type sequence: - &Користи посебну секвенцу за Аутоматско-Куцање: + No encryption key added + - Window Associations - Везе са прозорима + 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? + - Window title: - Наслов прозора: + Unknown error + - Use a specific sequence for this association: + Failed to change master key - EditEntryWidgetHistory - - Show - Прикажи - - - Restore - Обнови - + DatabaseSettingsWidgetMetaDataSimple - Delete - Обриши + Database Name: + - Delete all - Обриши све + Description: + - EditEntryWidgetMain + DatabaseTabWidget - URL: - URL: + KeePass 2 Database + KeePass 2 База података - Password: - Лозинка: + All files + Све датотеке - Repeat: - Понови: + Open database + Отвори базу података - Title: - Наслов: + CSV file + CSV датотека - Notes - Белешке + Merge database + Удружи базу података - Presets - Предефинисани + Open KeePass 1 database + Отвори KeePass 1  базу података - Toggle the checkbox to reveal the notes section. - Штиклирај поље жа потврду да бисте приказали секцију за белешке. + KeePass 1 database + KeePass 1 база података - Username: - Корисничко име: + Export database to CSV file + Извези базу података у CSV датотеку - Expires - Истиче + Writing the CSV file failed. + Уписивање у CSV датотеку није успело. - - - EditEntryWidgetSSHAgent - Form - Форма + Database creation error + - Remove key from agent after - Уклони кључ са агента након акције + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + - seconds - секунди + The database file does not exist or is not accessible. + - Fingerprint - Отисак прста + Select CSV file + - Remove key from agent when database is closed/locked - Уклони кључ са агента када је база података затворена/закључана + New Database + - Public key - Јавни кључ + %1 [New Database] + Database tab name modifier + - Add key to agent when database is opened/unlocked - Додај кључ агенту када је база података отворена/откључана + %1 [Locked] + Database tab name modifier + - Comment - Коментар + %1 [Read-only] + Database tab name modifier + + + + DatabaseWidget - Decrypt - Декриптуј + Searching... + Претрага је у току... - n/a - / + Do you really want to delete the entry "%1" for good? + Да ли сте сигурни да желите да обришете ставку "%1"? - Copy to clipboard - Копирај + Do you really want to move entry "%1" to the recycle bin? + Да ли сте сигурни да желите да преместите ставку "%1" у корпу за отпатке? - - Private key - Приватни кључ + + Do you really want to move %n entry(s) to the recycle bin? + - External file - Спољашња датотека + Execute command? + Изврши команду? - Browse... - Button for opening file dialog - Разгледај... + Do you really want to execute the following command?<br><br>%1<br> + Да ли сте сигурни да желите да извршите следећу команду? <br><br>%1<br> - Attachment - Прилог + Remember my choice + Запамти мој избор - Add to agent - Додај агенту + Do you really want to delete the group "%1" for good? + Да ли сте сигурни да желите да обришете групу "%1"? - Remove from agent - Уклони са агента + No current database. + Нема тренутне базе података. - Require user confirmation when this key is used - Захтевај потврду приликом коришћења овог кључа + No source database, nothing to do. + Нема изворне базе података, нема шта да се уради. - - - EditGroupWidget - Group - Група + Search Results (%1) + Резултати претраге (%1) - Icon - Икона + No Results + Нема резултата - Properties - Особине + File has changed + - Add group - Додај групу + The database file has changed. Do you want to load the changes? + Датотека базе података је измењена. Да ли желите да учитате измене? - Edit group - Измени групу + Merge Request + Споји захтев - Enable - Омогући + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + - Disable - Онемогући + Empty recycle bin? + Испразни корпу за отпатке - Inherit from parent group (%1) - Наследи од родитељске групе (%1) + 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? + - - - EditGroupWidgetMain - Name - Име + File opened in read only mode. + Датотека је отворена у моду само за читање. - Notes - Белешке + Lock Database? + - Expires - Истиче + You are editing an entry. Discard changes and lock anyway? + - Search - Претрага + "%1" was modified. +Save changes? + "%1" је измењен. +Сачувај измене? - Auto-Type - Аутоматско-куцање + Database was modified. +Save changes? + - &Use default Auto-Type sequence of parent group - Користи подразумевану секвенцу за Аутоматско-Куцање од родитељске групе + Save changes? + Сними измене? - Set default Auto-Type se&quence - Подеси као подразумевану секвенцу за Аутоматско-Куцање + 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 + + Entry + Унос + + + Advanced + Напредно + + + Icon + Икона + + + Auto-Type + Аутоматско-куцање + + + Properties + Особине + + + History + Историја + + + SSH Agent + SSH Агент + + + 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 + Наследи подразумевану секвенцу за Аутоматско-Куцање од &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: + 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) + Наследи од родитељске групе (%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: + 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 + URL + + + + EntryModel + + Ref: + Reference abbreviation + Референца: + + + Group + Група + + + Title + Наслов + + + Username + Корисничко име + + + URL + URL + + + Never + Никада + + + Password + Лозинка + + + Notes + Белешке + + + Expires + Истиче + + + Created + + + + Modified + + + + 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 + + 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 + - EditWidgetIcons + KdbxReader - &Use default icon - Користи подражумевану иконицу + Unsupported cipher + - Use custo&m icon - Користи посебну иконицу + Invalid compression flags length + - Add custom icon - Додај посебну иконицу + Unsupported compression algorithm + - Delete custom icon - Обриши посебну иконицу + Invalid master seed size + - Download favicon - Преузми иконицу са сајта + Invalid transform seed size + - Unable to fetch favicon. - Није могуће добавити иконицу са сајта. + 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 + + Import KeePass1 database + Увези KeePass1 базу података + + + Unable to open the database. + Није могуће отворити базу података. + + + + KeePass1Reader + + Unable to read keyfile. + Није могуће прочитати Кључ-Датотеку: + + + Not a KeePass database. + Није KeePass база података + + + Unsupported encryption algorithm. + Енкрипциони алгоритам није подржан. + + + 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 + Корен + + + Unable to calculate master key + Није могуће израчунати главни кључ - Hint: You can enable Google as a fallback under Tools>Settings>Security - Савет: Можете омогућити Гугл као резерву под Алатке>Подешавања>Сигурност + Wrong key or database file is corrupt. + Неисправан кључ или неисправна база података. - Images - Слике + Key transformation failed + - All files - Све датотеке + Invalid group field type number + - Select Image - Одабери слику + Invalid group field size + - Can't read icon - Није могуће учитати иконицу + Read group field data doesn't match size + - Custom icon already exists - Посебна иконица већ постоји + Incorrect group id field size + - Confirm Delete - Потврди брисање + Incorrect group creation time field size + - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - Ову иконицу користи %1 уноса, и биће замењена подразумеваном иконицом. Да ли сте сигурни да желите да је обришете? + Incorrect group modification time field size + - - - EditWidgetProperties - Created: - Креирано: + Incorrect group access time field size + - Modified: - Измењено: + Incorrect group expiry time field size + - Accessed: - Приступљено: + Incorrect group icon field size + - Uuid: - Uuid: + Incorrect group level field size + - Plugin Data + Invalid group field type - Remove - Уклони + Missing group id or level + - Delete plugin data? + Missing entry field type number - Do you really want to delete the selected plugin data? -This may cause the affected plugins to malfunction. + Invalid entry field size - Key + Read entry field data doesn't match size - Value + Invalid entry uuid field size - - - Entry - - Clone - Suffix added to cloned entries - - Дупликат + Invalid entry group id field size + - - - EntryAttachmentsModel - Name - Име + Invalid entry icon field size + - Size + Invalid entry creation time field size - - - EntryAttachmentsWidget - Form - Форма + Invalid entry modification time field size + - Add - Додај + Invalid entry expiry time field size + - Remove - Уклони + Invalid entry field type + - Open - Отвори + unable to seek to content position + + + + KeeShare - Save - Сними + Disabled share + - Select files - Одаберите датотеке + Import from + - - Are you sure you want to remove %n attachment(s)? - + + Export to + - Confirm Remove - Потврди уклањање + Synchronize with + + + + KeyComponentWidget - Save attachments - Сними прилоге + Key Component + - Unable to create directory: -%1 + Key Component Description - Are you sure you want to overwrite the existing file "%1" with the attachment? + Cancel - Confirm overwrite - Потврди пребрисање + Key Component set, click to change or remove + - Unable to save attachments: -%1 + Add %1 + Add a key component - Unable to open attachment: -%1 + Change %1 + Change a key component - Unable to open attachments: -%1 + Remove %1 + Remove a key component - Unable to open files: -%1 - Није могуће отворити датотеке: -%1 + %1 set, click to change or remove + Change or remove a key component + - EntryAttributesModel + KeyFileEditWidget - Name - Име + Browse + Преглед - - - EntryHistoryModel - Last modified - Последњи пут измењено + Generate + Генериши - Title - Наслов + Key File + - Username - Корисничко име + <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> + - URL - URL + Legacy key file format + - - - EntryModel - Ref: - Reference abbreviation - Референца: + 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. + - Group - Група + Error loading the key file '%1' +Message: %2 + - Title - Наслов + Key files + Кључ-Датотеке - Username - Корисничко име + All files + Све датотеке - URL - URL + Create Key File... + Креирај Кључ-Датотеку... - Never - Никада + Error creating key file + - Password - Лозинка + Unable to create key file: %1 + - Notes - Белешке + Select a key file + Одаберите кључ-датотеку + + + MainWindow - Expires - Истиче + &Database + База података - Created - + &Recent databases + Скорашње базе података - Modified - + &Help + Помоћ - Accessed - + E&ntries + Уноси - Attachments - Прилози + &Groups + Групе - - - EntryView - Customize View - + &Tools + Алатке - Hide Usernames - + &Quit + Напусти - Hide Passwords - + &About + О апликацији - Fit to window - + &Open database... + &Отвори базу података... - Fit to contents - + &Save database + Сними базу података - Reset to defaults - + &Close database + Затвори базу података - Attachments (icon) - + &Delete entry + Обриши унос - - - Group - Recycle Bin - Корпа за отпатке + &Edit group + Измени групу - - - HostInstaller - KeePassXC: Cannot save file! - + &Delete group + Обриши групу - Cannot save the native messaging script file. - + Sa&ve database as... + Сачувај базу података као... + + + Database settings + Подешавања базе података - - - HttpPasswordGeneratorWidget - Length: - Дужина: + &Clone entry + Направи дупликат уноса - Character Types - Типови карактера + Copy &username + Копирај корисничко име - Upper Case Letters - Велика слова + Copy username to clipboard + Копирај корисничко име - A-Z - A-Z + Copy password to clipboard + Копирај лозинку - Lower Case Letters - Мала слова + &Settings + Подешавања - a-z - a-z + Password Generator + Генератор Лозинки - Numbers - Бројеви + &Lock databases + Закључај базу података - 0-9 - 0-9 + &Title + Наслов - Special Characters - Посебни карактери + Copy title to clipboard + Копирај назив - /*_& ... - /*_& ... + &URL + &URL - Exclude look-alike characters - Изостави сличне карактере + Copy URL to clipboard + Копирај URL - Ensure that the password contains characters from every group - Обезбеди да лозинка садржи карактере из сваке групе + &Notes + Белешке - Extended ASCII - Проширени ASCII + Copy notes to clipboard + Копирај белешке - - - KMessageWidget - &Close - Затвори + &Export to CSV file... + Извези у CSV датотеку - Close message - Затвори поруку + Set up TOTP... + Подеси TOTP... - - - Kdbx3Reader - Unable to calculate master key - Није могуће израчунати главни кључ + Copy &TOTP + Копирај &TOTP - Unable to issue challenge-response. - Издавање изазов-одговора није успело. + E&mpty recycle bin + Испразни корпу за отпатке - Wrong key or database file is corrupt. - Неисправан кључ или неисправна база података. + Clear history + Очисти историју - - - Kdbx3Writer - Unable to issue challenge-response. - Издавање изазов-одговора није успело. + Access error for config file %1 + Грешка приликом приступа конфигурационој датотеци %1 - Unable to calculate master key - Није могуће израчунати главни кључ + Settings + Подешавања - - - Kdbx4Reader - missing database headers + Toggle window - Unable to calculate master key - Није могуће израчунати главни кључ + Quit KeePassXC + Напусти KeePassXC - Invalid header checksum size + Please touch the button on your YubiKey! - Header SHA256 mismatch + 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. - Wrong key or database file is corrupt. (HMAC mismatch) + &Donate - Unknown cipher + Report a &bug - Invalid header id size + 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. - Invalid header field length + &Import - Invalid header data length + Copy att&ribute... - Failed to open buffer for KDF parameters in header + TOTP... - Unsupported key derivation function (KDF) or invalid parameters + &New database... - Legacy header fields found in KDBX4 file. + Create a new database - Invalid inner header id size + &Merge from database... - Invalid inner header field length + Merge from another KDBX database - Invalid inner header binary size + &New entry - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data + Add a new entry - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data + &Edit entry - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data + View or edit entry - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data + &New group - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data + Add a new group - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data + Change master &key... - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data + &Database settings... - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data + Copy &password - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data + Perform &Auto-Type - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data + Open &URL - Invalid variant map entry type - Translation: variant map = data structure for storing meta data + KeePass 1 database... - Invalid variant map field type size - Translation: variant map = data structure for storing meta data + Import a KeePass 1 database - - - Kdbx4Writer - Invalid symmetric cipher algorithm. + CSV file... - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher + Import a CSV file - Unable to calculate master key - Није могуће израчунати главни кључ + Show TOTP... + - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data + Show TOTP QR Code... - - - KdbxReader - Invalid cipher uuid length + Check for Updates... - Unsupported cipher + Share entry - Invalid compression flags length + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. - Unsupported compression algorithm + Check for updates on startup? - Invalid master seed size + Would you like KeePassXC to check for updates on startup? - Invalid transform seed size + You can always check for updates manually from the application menu. + + + Merger - Invalid transform rounds size + Creating missing %1 [%2] - Invalid start bytes size + Relocating %1 [%2] - Invalid random stream id size + Overwriting %1 [%2] - Invalid inner random stream cipher + older entry merged from database "%1" - Not a KeePass database. - Није KeePass база података + Adding backup for older target %1 [%2] + - 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. + Adding backup for older source %1 [%2] - Unsupported KeePass 2 database version. + Reapplying older target entry on top of newer source %1 [%2] - - - KdbxXmlReader - XML parsing failure: %1 + Reapplying older source entry on top of newer target %1 [%2] - No root group + Synchronizing from newer source %1 [%2] - Missing icon uuid or data + Synchronizing from older source %1 [%2] - Missing custom data key or value + Deleting child %1 [%2] - Multiple group elements + Deleting orphan %1 [%2] - Null group uuid + Changed deleted objects - Invalid group icon number + Adding missing icon %1 + + + NewDatabaseWizard - Invalid EnableAutoType value + Create a new KeePassXC database... - Invalid EnableSearching value - + Root + Root group + Корен + + + NewDatabaseWizardPage - No group uuid found + WizardPage - Null DeleteObject uuid + En&cryption Settings - Missing DeletedObject uuid or time + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Null entry uuid + Advanced Settings - Invalid entry icon number + Simple Settings + + + NewDatabaseWizardPageEncryption - History element in history entry + Encryption Settings - No entry uuid found + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - History element with different uuid + Database Master Key - Unable to decrypt entry string + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - Duplicate custom attribute found + General Database Information - Entry string key or value missing + Please fill in the display name and an optional description for your new database: + + + OpenSSHKey - Duplicate attachment found - + Invalid key file, expecting an OpenSSH key + Неисправна датотека са кључем, очекује се OpenSSH кључ - Entry binary key or value missing + PEM boundary mismatch - Auto-type association window or sequence missing - + Base64 decoding failed + Декодирање Base64 није успело - Invalid bool value - + Key file way too small. + Кључ-датотека је превише мала. - Invalid date time value - + Key file magic header id invalid + Идентификатор магичног заглавља Кључ-датотеке није валидан - Invalid color value - + Found zero keys + Није пронађен ниједан кључ - Invalid color rgb part - + Failed to read public key. + Није могуће прочитати јавни кључ. - Invalid number value - + Corrupted key file, reading private key failed + Кључ-датотека је корумпирана, није успело ишчитавање приватног кључа - Invalid uuid value + No private key payload to decrypt + Нема приватног кључа за декриптовање + + + Trying to run KDF without cipher - Unable to decompress binary - Translator meant is a binary data inside an entry + Passphrase is required to decrypt this key - - - KeePass1OpenWidget - Import KeePass1 database - Увези KeePass1 базу података + Key derivation failed, key file corrupted? + - Unable to open the database. - Није могуће отворити базу података. + Decryption failed, wrong passphrase? + - - - KeePass1Reader - Unable to read keyfile. - Није могуће прочитати Кључ-Датотеку: + Unexpected EOF while reading public key + - Not a KeePass database. - Није KeePass база података + Unexpected EOF while reading private key + - Unsupported encryption algorithm. - Енкрипциони алгоритам није подржан. + Can't write public key as it is empty + Није могуће записати јавни кључ јер је празан - Unsupported KeePass database version. - Верзија KeePass базе података није подржана. + Unexpected EOF when writing public key + Неочекиван крај датотеке приликом уписивања јавног кључа - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher - + Can't write private key as it is empty + Није могуће записати приватни кључ јер је празан - Invalid number of groups - + Unexpected EOF when writing private key + Неочекиван крај датотеке приликом уписивања приватног кључа - Invalid number of entries + Unsupported key type: %1 - Invalid content hash size + Unknown cipher: %1 - Invalid transform seed size + Cipher IV is too short for MD5 kdf - Invalid number of transform rounds + Unknown KDF: %1 - Unable to construct group tree + Unknown key type: %1 + + + PasswordEditWidget - Root - Корен + Enter password: + Унесите лозинку: - Unable to calculate master key - Није могуће израчунати главни кључ + Confirm password: + - Wrong key or database file is corrupt. - Неисправан кључ или неисправна база података. + Password + Лозинка - Key transformation failed + <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> - Invalid group field type number + Password cannot be empty. - Invalid group field size + Passwords do not match. - Read group field data doesn't match size + Generate master password + + + PasswordGeneratorWidget - Incorrect group id field size - + %p% + %p% - Incorrect group creation time field size - + Password: + Лозинка: - Incorrect group modification time field size - + strength + Password strength + јачина - Incorrect group access time field size - + entropy + ентропија - Incorrect group expiry time field size - + Password + Лозинка - Incorrect group icon field size - + Character Types + Типови карактера - Incorrect group level field size - + Upper Case Letters + Велика слова - Invalid group field type - + Lower Case Letters + Мала слова - Missing group id or level - + Numbers + Бројеви - Missing entry field type number - + Special Characters + Посебни карактери - Invalid entry field size - + Extended ASCII + Проширени ASCII - Read entry field data doesn't match size - + Exclude look-alike characters + Изостави сличне карактере - Invalid entry uuid field size - + Pick characters from every group + Обезбеди да лозинка садржи карактере из сваке групе - Invalid entry group id field size - + &Length: + Дужина: - Invalid entry icon field size - + Passphrase + Фразална Лозинка - Invalid entry creation time field size - + Wordlist: + Листа речи: - Invalid entry modification time field size - + Word Separator: + Разделник Фраза: - Invalid entry expiry time field size - + Copy + Кпирај - Invalid entry field type - + Accept + Прихвати - - - KeePass2 - AES: 256-bit - + Close + Затвори - Twofish: 256-bit - + Entropy: %1 bit + Ентропија: %1 бит - ChaCha20: 256-bit - + Password Quality: %1 + Квалитет Лозинке: %1 - AES-KDF (KDBX 4) - + Poor + Password quality + Слаб - AES-KDF (KDBX 3.1) - + Weak + Password quality + Слаб - Argon2 (KDBX 4 – recommended) + Good + Password quality + Добар + + + Excellent + Password quality + Одличан + + + ExtendedASCII - - - Main - Existing single-instance lock file is invalid. Launching new instance. + Switch to advanced mode - The lock file could not be created. Single-instance mode disabled. + Advanced + Напредно + + + Upper Case Letters A to F - Another instance of KeePassXC is already running. - Друга инстанца KeePassXC апликације је већ активна. + A-Z + A-Z - Fatal error while testing the cryptographic functions. + Lower Case Letters A to F - KeePassXC - Error - KeePassXC - Грешка + a-z + a-z - - - MainWindow - &Database - База података + 0-9 + 0-9 - &Recent databases - Скорашње базе података + Braces + - Import - Увези + {[( + - &Help - Помоћ + Punctuation + - E&ntries - Уноси + .,:; + - Copy att&ribute to clipboard - Копирај атрибут + Quotes + - Time-based one-time password + " ' - &Groups - Групе + Math + - &Tools - Алатке + <*+!?= + - &Quit - Напусти + Dashes + - &About - О апликацији + \_|-/ + - &Open database... - &Отвори базу података... + Logograms + - &Save database - Сними базу података + #$%&&@^`~ + - &Close database - Затвори базу података + Switch to simple mode + - &New database - Нова база података + Simple + - Merge from KeePassX database - Удружи податке из KeePassX базе података + Character set to exclude from generated password + - &Add new entry - Додај нови унос + Do not include: + - &View/Edit entry - Прикажи/Измени унос + Add non-hex letters to "do not include" list + - &Delete entry - Обриши унос + Hex + - &Add new group - Додај нову групу + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - &Edit group - Измени групу + Word Co&unt: + - &Delete group - Обриши групу + Regenerate + + + + QApplication - Sa&ve database as... - Сачувај базу података као... + KeeShare + + + + QFileDialog - Change &master key... - Промени главни кључ + Select + + + + QMessageBox - &Database settings - Подешавања базе података + Overwrite + - Database settings - Подешавања базе података + Delete + Обриши - &Clone entry - Направи дупликат уноса + Move + - &Find - Пронађи + Empty + - Copy &username - Копирај корисничко име + Remove + Уклони - Copy username to clipboard - Копирај корисничко име + Skip + - Cop&y password - Копирај лозинку + Disable + Онемогући - Copy password to clipboard - Копирај лозинку + Merge + + + + QObject - &Settings - Подешавања + Database not opened + - Password Generator - Генератор Лозинки + Database hash not available + - &Perform Auto-Type - Изврши Аутоматско-куцање + Client public key not received + - &Open URL - Отвори URL + Cannot decrypt message + - &Lock databases - Закључај базу података + Action cancelled or denied + - &Title - Наслов + KeePassXC association failed, try again + - Copy title to clipboard - Копирај назив + Encryption key is not recognized + - &URL - &URL + Incorrect action + - Copy URL to clipboard - Копирај URL + Empty message received + - &Notes - Белешке + No URL provided + - Copy notes to clipboard - Копирај белешке + No logins found + - &Export to CSV file... - Извези у CSV датотеку + Unknown error + - Import KeePass 1 database... - Увези KeePass 1 базу података + Add a new entry to a database. + Додај нови унос у базу података. - Import CSV file... - Увези CSV датотеку... + Path of the database. + Путања до базе података. - Re&pair database... - Оправи базу података... + Key file of the database. + Кључ-Датотека базе података. - Show TOTP - Прикажи TOTP + path + путања - Set up TOTP... - Подеси TOTP... + Username for the entry. + Корисничко име за овај унос. - Copy &TOTP - Копирај &TOTP + username + корисничко име - E&mpty recycle bin - Испразни корпу за отпатке + URL for the entry. + URL за овај унос. - Clear history - Очисти историју + URL + URL - Access error for config file %1 - Грешка приликом приступа конфигурационој датотеци %1 + Prompt for the entry's password. + Питај за лозинку уноса. - <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> - + Generate a password for the entry. + Генериши лозинку за овај унос. - read-only - само-читање + Length for the generated password. + Дужина генерисане лозинке. - Settings - Подешавања + length + дужина - Toggle window - + Path of the entry to add. + Путања уноса који треба да се дода. - Quit KeePassXC - Напусти KeePassXC + Copy an entry's password to the clipboard. + Копирај лозинку - KeePass 2 Database - KeePass 2 База података + Path of the entry to clip. + clip = copy to clipboard + - All files - Све датотеке + Timeout in seconds before clearing the clipboard. + - Open database - Отвори базу података + Edit an entry. + Измени унос. - Save repaired database - Сними исправљену базу података + Title for the entry. + Наслов уноса. - Writing the database failed. - Уписивање у базу података није успело. + title + наслов - Please touch the button on your YubiKey! + Path of the entry to edit. - 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. + Estimate the entropy of a password. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Неисправна датотека са кључем, очекује се OpenSSH кључ + Password for which to estimate the entropy. + - PEM boundary mismatch + Perform advanced analysis on the password. - Base64 decoding failed - Декодирање Base64 није успело + Extract and print the content of a database. + - Key file way too small. - Кључ-датотека је превише мала. + Path of the database to extract. + - Key file magic header id invalid - Идентификатор магичног заглавља Кључ-датотеке није валидан + Insert password to unlock %1: + - Found zero keys - Није пронађен ниједан кључ + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + - Failed to read public key. - Није могуће прочитати јавни кључ. + + +Available commands: + + + +Доступне команде: + - Corrupted key file, reading private key failed - Кључ-датотека је корумпирана, није успело ишчитавање приватног кључа + Name of the command to execute. + - No private key payload to decrypt - Нема приватног кључа за декриптовање + List database entries. + - Trying to run KDF without cipher + Path of the group to list. Default is / - Passphrase is required to decrypt this key + Find entries quickly. - Key derivation failed, key file corrupted? + Search term. - Decryption failed, wrong passphrase? + Merge two databases. - Unexpected EOF while reading public key + Path of the database to merge into. - Unexpected EOF while reading private key + Path of the database to merge from. - Can't write public key as it is empty - Није могуће записати јавни кључ јер је празан + Use the same credentials for both database files. + - Unexpected EOF when writing public key - Неочекиван крај датотеке приликом уписивања јавног кључа + Key file of the database to merge from. + - Can't write private key as it is empty - Није могуће записати приватни кључ јер је празан + Show an entry's information. + - Unexpected EOF when writing private key - Неочекиван крај датотеке приликом уписивања приватног кључа + 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. + - Unsupported key type: %1 + attribute - Unknown cipher: %1 + Name of the entry to show. - Cipher IV is too short for MD5 kdf - + NULL device + NULL уређај - Unknown KDF: %1 - + error reading from device + грешка приликом читања са уређаја - Unknown key type: %1 - + malformed string + неисправна ниска - - - OptionDialog - Dialog - Дијалог + missing closing quote + недостаје завршни наводник - This is required for accessing your databases from ChromeIPass or PassIFox - + Group + Група - Enable KeePassHTTP server - Омогући KeePassHTTP сервер + Title + Наслов - General - Опште + Username + Корисничко име - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - + Password + Лозинка - Only returns the best matches for a specific URL instead of all entries for the whole domain. - + Notes + Белешке - &Return only best matching entries + Last Modified - Re&quest to unlock the database if it is locked + Created - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - + Browser Integration + Интеграција са прегледачем - &Match URL schemes + YubiKey[%1] Challenge Response - Slot %2 - %3 - Sort matching entries by &username - Сортирај пронађене уносе по корисничком имену + Press + Притисни - Sort &matching entries by title - Сортирај пронађене уносе по наслову + Passive + Пасивно - R&emove all shared encryption keys from active database - + SSH Agent + SSH Агент - Re&move all stored permissions from entries in active database + Generate a new random diceware passphrase. - Password Generator - Генератор Лозинки - - - Advanced - Напредно + Word count for the diceware passphrase. + - Always allow &access to entries - Увек дозволи приступ уносима + Wordlist for the diceware generator. +[Default: EFF English] + - Always allow &updating entries + Generate a new random password. - Only the selected database has to be connected with a client. + Invalid value for password length %1. - Searc&h in all opened databases for matching entries + Could not create entry with path %1. - Automatically creating or updating string fields is not supported. + Enter password for new entry: - &Return advanced string fields which start with "KPH: " + Writing the database failed %1. - HTTP Port: - HTTP Порт: + Successfully added entry %1. + - Default port: 19455 - Подразумевани порт: 19455 + Copy the current TOTP to the clipboard. + - KeePassXC will listen to this port on 127.0.0.1 + Invalid timeout value %1. - <b>Warning:</b> The following options can be dangerous! + Entry %1 not found. - <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> + Entry with path %1 has no TOTP set up. - Cannot bind to privileged ports + Entry's current TOTP copied to the clipboard! - Cannot bind to privileged ports below 1024! -Using default port 19455. + Entry's password copied to the clipboard! - - - PasswordGeneratorWidget - - %p% - %p% + + Clearing the clipboard in %1 second(s)... + - Password: - Лозинка: + Clipboard cleared! + - strength - Password strength - јачина + Silence password prompt and other secondary outputs. + - entropy - ентропија + count + CLI parameter + - Password - Лозинка + Invalid value for password length: %1 + - Character Types - Типови карактера + Could not find entry with path %1. + - Upper Case Letters - Велика слова + Not changing any field for entry %1. + - Lower Case Letters - Мала слова + Enter new password for entry: + - Numbers - Бројеви + Writing the database failed: %1 + - Special Characters - Посебни карактери + Successfully edited entry %1. + - Extended ASCII - Проширени ASCII + Length %1 + - Exclude look-alike characters - Изостави сличне карактере + Entropy %1 + - Pick characters from every group - Обезбеди да лозинка садржи карактере из сваке групе + Log10 %1 + - &Length: - Дужина: + Multi-word extra bits %1 + - Passphrase - Фразална Лозинка + Type: Bruteforce + - Wordlist: - Листа фраза: + Type: Dictionary + - Word Count: - Број Фраза: + Type: Dict+Leet + - Word Separator: - Разделник Фраза: + Type: User Words + - Generate - Генериши + Type: User+Leet + - Copy - Кпирај + Type: Repeated + - Accept - Прихвати + Type: Sequence + - Close - Затвори + Type: Spatial + - Apply - Примени + Type: Date + - Entropy: %1 bit - Ентропија: %1 бит + Type: Bruteforce(Rep) + - Password Quality: %1 - Квалитет Лозинке: %1 + Type: Dictionary(Rep) + - Poor - Password quality - Бедан + Type: Dict+Leet(Rep) + - Weak - Password quality - Слаб + Type: User Words(Rep) + - Good - Password quality - Добар + Type: User+Leet(Rep) + - Excellent - Password quality - Одличан + Type: Repeated(Rep) + - - - QObject - Database not opened + Type: Sequence(Rep) - Database hash not available + Type: Spatial(Rep) - Client public key not received + Type: Date(Rep) - Cannot decrypt message + Type: Unknown%1 - Timeout or cannot connect to KeePassXC + Entropy %1 (%2) - Action cancelled or denied + *** Password length (%1) != sum of length of parts (%2) *** - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + Failed to load key file %1: %2 - KeePassXC association failed, try again + File %1 does not exist. - Key change was not successful + Unable to open file %1. - Encryption key is not recognized + Error while reading the database: +%1 - No saved databases found + Error while parsing the database: +%1 - Incorrect action + Length of the generated password - Empty message received + Use lowercase characters - No URL provided + Use uppercase characters - No logins found + Use numbers. - Unknown error + Use special characters - Add a new entry to a database. - Додај нови унос у базу података. + Use extended ASCII + - Path of the database. - Путања до базе података. + Exclude character set + - Key file of the database. - Кључ-Датотека базе података. + chars + - path - путања + Exclude similar looking characters + - Username for the entry. - Корисничко име за овај унос. + Include characters from every selected group + - username - корисничко име + Recursively list the elements of the group. + - URL for the entry. - URL за овај унос. + Cannot find group %1. + - URL - URL + Error reading merge file: +%1 + - Prompt for the entry's password. - Питај за лозинку уноса. + Unable to save database to file : %1 + - Generate a password for the entry. - Генериши лозинку за овај унос. + Unable to save database to file: %1 + - Length for the generated password. - Дужина генерисане лозинке. + Successfully recycled entry %1. + - length - дужина + Successfully deleted entry %1. + - Path of the entry to add. - Путања уноса који треба да се дода. + Show the entry's current TOTP. + - Copy an entry's password to the clipboard. - Копирај лозинку + ERROR: unknown attribute %1. + - Path of the entry to clip. - clip = copy to clipboard + No program defined for clipboard manipulation - Timeout in seconds before clearing the clipboard. + Unable to start program %1 - Edit an entry. - Измени унос. + file empty + - Title for the entry. - Наслов уноса. + %1: (row, col) %2,%3 + - title - наслов + AES: 256-bit + - Path of the entry to edit. + Twofish: 256-bit - Estimate the entropy of a password. + ChaCha20: 256-bit - Password for which to estimate the entropy. + Argon2 (KDBX 4 – recommended) - Perform advanced analysis on the password. + AES-KDF (KDBX 4) - Extract and print the content of a database. + AES-KDF (KDBX 3.1) - Path of the database to extract. + Invalid Settings + TOTP - Insert password to unlock %1: + Invalid Key + TOTP - Failed to load key file %1 : %2 + Message encryption failed. - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + No groups found - - -Available commands: - - - -Доступне команде: - + Create a new database. + - Name of the command to execute. + File %1 already exists. - List database entries. + Loading the key file failed - Path of the group to list. Default is / + No key is set. Aborting database creation. - Find entries quickly. + Failed to save the database: %1. - Search term. + Successfully created new database. - Merge two databases. + Insert password to encrypt database (Press enter to leave blank): - Path of the database to merge into. + Creating KeyFile %1 failed: %2 - Path of the database to merge from. + Loading KeyFile %1 failed: %2 - Use the same credentials for both database files. + Remove an entry from the database. - Key file of the database to merge from. + Path of the entry to remove. - Show an entry's information. + Existing single-instance lock file is invalid. Launching new instance. - 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. + The lock file could not be created. Single-instance mode disabled. - attribute + KeePassXC - cross-platform password manager - Name of the entry to show. + filenames of the password databases to open (*.kdbx) - NULL device - NULL уређај + path to a custom config file + - error reading from device - грешка приликом читања са уређаја + key file of the database + - file empty ! - - датотека је празна! - + read password of the database from stdin + - malformed string - неисправна ниска + Parent window handle + - missing closing quote - недостаје завршни наводник + Another instance of KeePassXC is already running. + Друга инстанца KeePassXC апликације је већ активна. - Group - Група + Fatal error while testing the cryptographic functions. + - Title - Наслов + KeePassXC - Error + KeePassXC - Грешка - Username - Корисничко име + Database password: + + + + QtIOCompressor - Password - Лозинка + Internal zlib error when compressing: + - Notes - Белешке + Error writing to underlying device: + - Last Modified + Error opening underlying device: - Created + Error reading data from underlying device: - Legacy Browser Integration + Internal zlib error when decompressing: + + + QtIOCompressor::open - Browser Integration - Интеграција са прегледачем + The gzip format not supported in this version of zlib. + - YubiKey[%1] Challenge Response - Slot %2 - %3 + Internal zlib error: + + + SSHAgent - Press - Притисни + Agent connection failed. + - Passive - Пасивно + Agent protocol error. + - SSH Agent - SSH Агент + No agent running, cannot add identity. + - Generate a new random diceware passphrase. + No agent running, cannot remove identity. - Word count for the diceware passphrase. + Agent refused this identity. Possible reasons include: - count + The key has already been added. - Wordlist for the diceware generator. -[Default: EFF English] + Restricted lifetime is not supported by the agent (check options). - Generate a new random password. + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - Length of the generated password. + Search Help - Use lowercase characters in the generated password. + Search terms are as follows: [modifiers][field:]["]term["] - Use uppercase characters in the generated password. + Every search term must match (ie, logical AND) - Use numbers in the generated password. + Modifiers - Use special characters in the generated password. + exclude term from results - Use extended ASCII in the generated password. + match term exactly - - - QtIOCompressor - Internal zlib error when compressing: + use regex in term - Error writing to underlying device: + Fields - Error opening underlying device: + Term Wildcards - Error reading data from underlying device: + match anything - Internal zlib error when decompressing: + match one - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. + logical OR - Internal zlib error: + Examples SearchWidget - - Search... - - Search Претрага @@ -3633,310 +4962,316 @@ Available commands: Очисти - Case Sensitive + Limit search to selected group - Limit search to selected group + Search Help - - - Service - KeePassXC: New key association request + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut - 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. + Case sensitive + + + SettingsWidgetKeeShare - KeePassXC: Overwrite existing key? + Active - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Allow export - KeePassXC: Update Entry + Allow import - 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 - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - - - KeePassXC: No keys found + Key: - No shared encryption-keys found in KeePassHttp Settings. - + Generate + Генериши - KeePassXC: Settings not available! - + Import + Увези - The active database does not contain an entry of KeePassHttp Settings. + Export - Removing stored permissions... + Imported certificates - Abort + Trust - KeePassXC: Removed permissions + Ask - - Successfully removed permissions from %n entries. - - - KeePassXC: No entry with permissions found! + Untrust - The active database does not contain an entry with permissions. + Remove + Уклони + + + Path - - - SettingsWidget - Application Settings + Status - General - Опште + Fingerprint + Отисак прста - Security + Certificate - Access error for config file %1 - Грешка приликом приступа конфигурационој датотеци %1 + Trusted + - - - SettingsWidgetGeneral - Basic Settings + Untrusted - Start only a single instance of KeePassXC + Unknown - Remember last databases + key.share + Filetype for KeeShare key - Remember last key files and security dongles + KeeShare key file - Load previous databases on startup - + All files + Све датотеке - Automatically save on exit + Select path - Automatically save after every change + Exporting changed certificate - Automatically reload the database when modified externally + The exported certificate is not the same as the one in use. Do you want to export the current certificate? - Minimize when copying to clipboard + %1.%2 + Template for KeeShare key file + + + ShareObserver - Minimize window at application startup + Import from container without signature - Use group icon on entry creation + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? - Don't mark database as modified for non-data changes (e.g., expanding groups) + Import from container with certificate - Hide the Details view + Do you want to trust %1 with the fingerprint of %2 from %3 - Show a system tray icon + Not this time - Hide window to system tray when minimized - + Never + Никада - Hide window to system tray instead of app exit + Always - Dark system tray icon + Just this time - Language + Import from %1 failed (%2) - Auto-Type - Аутоматско-куцање + Import from %1 successful (%2) + - Use entry title to match windows for global Auto-Type + Imported from %1 - Use entry URL to match windows for global Auto-Type + Signed share container are not supported - import prevented - Always ask before performing Auto-Type + File is not readable - Global Auto-Type shortcut + Invalid sharing container - Auto-Type delay + Untrusted import prevented - ms - Milliseconds + Successful signed import - Startup + Unexpected error - File Management + Unsigned share container are not supported - import prevented - Safely save database files (may be incompatible with Dropbox, etc) + Successful unsigned import - Backup database file before saving + File does not exist - Entry Management + Unknown share container type - General - Опште + Overwriting signed share container is not supported - export prevented + - - - SettingsWidgetSecurity - Timeouts + Could not write export container (%1) - Clear clipboard after + Could not embed signature (%1) - sec - Seconds + Could not embed database (%1) - Lock databases after inactivity of + Overwriting unsigned share container is not supported - export prevented - Convenience + Could not write export container - Lock databases when session is locked or lid is closed + Unexpected export error occurred - Lock databases after minimizing the window + Export to %1 failed (%2) - Don't require password repeat when it is visible + Export to %1 successful (%2) - Show passwords in cleartext by default + Export to %1 + + + TotpDialog - Hide passwords in the preview panel + Timed Password - Hide entry notes by default + 000000 - Privacy + 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 - Use Google as fallback for downloading website icons + There was an error creating the QR code. - Re-lock previously locked database after performing Auto-Type + Closing in %1 seconds. - 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,7 +5301,12 @@ Please unlock the selected database or choose another one which is unlocked. - 8 digits + sec + Seconds + + + + Code size: @@ -3974,112 +5314,116 @@ 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 - Кпирај + Close + Затвори - Expires in + Update Error! - seconds + An error occurred in retrieving update information. - - - UnlockDatabaseWidget - Unlock database + Please try again later. - - - WelcomeWidget - Start storing your passwords securely in a KeePassXC database + Software Update - Create new database + A new version of KeePassXC is available! - Open existing database + KeePassXC %1 is now available — you have %2. - Import from KeePass 1 + Download it at keepassxc.org - Import from CSV + You're up-to-date! - Recent databases + KeePassXC %1 is currently the newest version available + + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database - Welcome to KeePassXC %1 + Create new database - - - main - Remove an entry from the database. + Open existing database - Path of the database. - Путања до базе података. + Import from KeePass 1 + - Path of the entry to remove. + Import from CSV - KeePassXC - cross-platform password manager + Recent databases - filenames of the password databases to open (*.kdbx) + Welcome to KeePassXC %1 + + + YubiKeyEditWidget + + Refresh + Освежи + - path to a custom config file + YubiKey Challenge-Response - key file 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> - read password of the database from stdin + No YubiKey detected, please ensure it's plugged in. - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_sv.ts b/share/translations/keepassx_sv.ts index f66e51d367..ffc6479037 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: @@ -38,79 +38,290 @@ Kopiera till urklipp - Version %1 - - Version %1 - + Project Maintainers: + Projekt Ansvariga: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + 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 - Revision: %1 - Ändring: %1 + Application Settings + Applikationsinställningar - Distribution: %1 - Utdelning: %1 + General + Allmänt - Libraries: - Arkiv: + Security + Säkerhet - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Operativ system: %1 -CPU-arkitektur: %2 -Kärna: %3 %4 + Access error for config file %1 + Åtkomstfel för konfigurationsfil %1 - Enabled extensions: - Aktiverade tillägg: + Icon only + Endast Ikon - Project Maintainers: - Projekt Ansvariga: + Text only + Endast text - 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. + Text beside icon + Text bredvid ikon - Build Type: %1 - + Text under icon + Text under ikon + + + Follow style - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP Bekräfta åtkomst + Basic Settings + Grundinställningar - Remember this decision - Kom ihåg detta val + Startup + Uppstart - Allow - Tillåt + Start only a single instance of KeePassXC + Tillåt endast en samtidig instans av KeePassXC - Deny - Neka + Remember last databases + Komihåg senaste databasen - %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. + 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 + - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Aktivera SSH Agent (kräver omstart) + 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... @@ -361,19 +584,40 @@ Vill du tillåta det? <b>Varning:</b> Följande parametrar kan vara farliga! - Executable Files (*.exe);;All Files (*.*) - Exekverbara filer (*.exe);;Alla filer (*.*) + Select custom proxy location + Välj en proxy - Executable Files (*) - Exekverbara filer (*) + &Tor Browser + &Tor Browser - Select custom proxy location - Välj en proxy + <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 + - 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. %3 @@ -412,148 +656,52 @@ Do you want to overwrite it? 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! + Abort + Avbryt - The active database does not contain a settings entry. + Converting attributes to custom data… - KeePassXC: No keys found - KeePassXC: Hittade inga nycklar + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konverterade KeePassHTTP attribut - No shared encryption keys found in KeePassXC Settings. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. - - 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 - - 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 + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 - Kunde inte sätta %1 som nyckel-fil: -%2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format + KeePassXC: Create a new group - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + A request for creating a new group "%1" has been received. +Do you want to create this group? + - 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? @@ -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 @@ -651,47 +791,89 @@ Please consider generating a new key file. Ursprungsdata: - Error(s) detected in CSV file ! - Ett eller flera fel upptäckta i CSV fil! + Error + Fel - more messages skipped] - Fler meddelande hoppades över + Empty fieldname %1 + Tomt fältnamn %1 - Error - Fel + column %1 + kolumn %1 - CSV import: writer has errors: - - CSV importering: skrivare har fel: + Error(s) detected in CSV file! + Fel upptäckta i CSV-fil! - - - CsvImportWizard - - Error - Fel + + [%n more message(s) skipped] + [%n fler meddelande(n) hoppades över][%n fler meddelande(n) hoppades över] - Unable to calculate master key - Kunde inte räkna nu master-nyckeln + CSV import: writer has errors: +%1 + CSV importering: skrivare har fel: +%1 CsvParserModel - %n byte(s), - %n byte(s),%n byte(s), + %n column(s) + %n kolumn(er)%n kolumn(er) + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n rad(er),%n rad(er), + %n byte(s) + %n byte(s)%n byte(s) - %n column(s) - %n kolumn(er)%n kolumn(er) + %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 + @@ -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,137 +929,309 @@ 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 + Can't open key file: +%1 + Kunde inte öppna nyckelfilen: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Misslyckades att öppna databasen. + Passwords + Lösenord + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Databas öppnades fint. Inget att göra. + Advanced Settings + Avancerade inställningar - Success - Succé + General + Allmänt - The database has been successfully repaired -You can now save it. - Databasens reparation har varit lyckad. -Du kan nu spara den. + Security + Säkerhet - Unable to repair the database. - Misslyckades med att laga databasen. + Master Key + - - - DatabaseSettingsWidget - General - Allmänt + Encryption Settings + Krypteringsinställningar - Encryption - Kryptering + Browser Integration + Webbläsarintegration + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - + KeePassXC-Browser settings + KeePassXC-Browser inställningar - 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! - + &Disconnect all browsers + &Koppla från alla browsers - Understood, keep number + Forg&et all site-specific settings on entries - Cancel - Avbryt + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Number of rounds too low - Key transformation rounds - + Stored keys + Sparade nycklar - 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! - + Remove + Ta bort - KDF unchanged - KDF oförändrad + Delete the selected key? + Radera den valda nyckeln? - Failed to transform key with new KDF parameters; KDF unchanged. + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. - - MiB - Abbreviation for Mebibytes (KDF settings) - MiBMiB - - - thread(s) - Threads for parallel execution (KDF settings) - tråd(ar)tråd(ar) + + Key + Nyckel - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Krypteringsalgoritm: + Value + Värde - AES: 256 Bit (default) - AES: 256 Bit (standard) + Enable Browser Integration to access these settings. + - Twofish: 256 Bit - Twofish: 256 Bit + Disconnect all browsers + - Key Derivation Function: + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. - Transform rounds: - Transformerings varv: + KeePassXC: No keys found + KeePassXC: Hittade inga nycklar - Benchmark 1-second delay + No shared encryption keys found in KeePassXC settings. - Memory Usage: - Minnesanvändning: + 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 + + + KeePassXC: Removed permissions + KeePassXC: Tog bort behörigheter + + + Successfully removed permissions from %n entry(s). + + + + 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. + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Krypteringsalgoritm: + + + AES: 256 Bit (default) + AES: 256 Bit (standard) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + + + + Transform rounds: + Transformerings varv: + + + Benchmark 1-second delay + + + + Memory Usage: + Minnesanvändning: 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,95 +1277,114 @@ If you keep this number, your database may be too easy to crack! Enable &compression (recommended) - + Aktivera &komprimering (rekommenderas) - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - Root + Sharing + Delning - KeePass 2 Database - KeePass 2 Databas + Breadcrumb + Brödsmulor - All files - Alla filer + Type + Typ - Open database - Öppna databas + Path + Sökväg - File not found! - Filen kunde inte hittas! + Last Signer + - Unable to open the database. - Kunde inte öppna databas. + Certificates + Certifikat - File opened in read only mode. - Fil öppnad i läs-enbart läge. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - Öppna CSV fil + Add additional protection... + - CSV file - CSV-fil + No encryption key added + Ingen krypteringsnyckel tillagd - All files (*) - Alla filer (*) + You must add at least one encryption key to secure your database! + - Merge database - Slå samman databas + No password set + Inget lösenord satt - Open KeePass 1 database - Öppna KeePass 1 databas + 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? + - KeePass 1 database - KeePass 1 databas + Unknown error + Okänt fel - Close? - Stäng? + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - "%1" är i redigeringsläge. -Kasta ändringarna och stäng ändå? + Database Name: + Databasnamn: - Save changes? - Spara ändringar? + Description: + Beskrivning: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" har ändrats. -Spara ändringarna? + KeePass 2 Database + KeePass 2 databas + + + All files + Alla filer - Writing the database failed. - Kunde inte skriva till databasen. + Open database + Öppna databas - Passwords - Lösenord + CSV file + CSV-fil - Save database as - Spara databas som + Merge database + Slå samman databas + + + Open KeePass 1 database + Öppna KeePass 1 databas + + + KeePass 1 database + KeePass 1 databas Export database to CSV file @@ -1030,38 +1395,39 @@ Spara ändringarna? Kunde inte skriva till CSV-filen - New database - Ny databas + 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. + - locked - låst + The database file does not exist or is not accessible. + - Lock database - Lås databasen + Select CSV file + Välj CSV-fil - 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. + New Database + Ny databas - 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. + %1 [New Database] + Database tab name modifier + %1 [Ny databas] - Disable safe saves? - Inaktivera spara säkert? + %1 [Locked] + Database tab name modifier + %1 [Lå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? + %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? + - - Close - Stäng + + Delete entry(s)? + + + + Move entry(s) to recycle bin? + - General - Allmän + File opened in read only mode. + Fil öppnad i läs-enbart läge. - Password - Lösenord + Lock Database? + Lås databas? - URL - URL + You are editing an entry. Discard changes and lock anyway? + - Expiration - Utgår + "%1" was modified. +Save changes? + "%1" har ändrats. +Spara ändringarna? - Username - Användarnamn + Database was modified. +Save changes? + - Autotype - Autotyp + Save changes? + Spara ändringar? - Searching - Söker + Could not open the new database file while attempting to autoreload. +Error: %1 + - Attributes - Attribut + Disable safe saves? + Inaktivera spara säkert? - Attachments - Bilagor + 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? + - Notes - Anteckningar + Writing the database failed. +%1 + - Window - Fönster + Passwords + Lösenord - Sequence - Sekvens + Save database as + Spara databas som - Search - Sök + KeePass 2 Database + KeePass 2 databas - Clear - Rensa + Replace references to entry? + + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + - Never - Aldrig + Delete group + Ta bort grupp - [PROTECTED] - [SKYDDAD] + Move group to recycle bin? + - Disabled - Inaktiverad + Do you really want to move the group "%1" to the recycle bin? + - Enabled - Aktiverad + Successfully merged the database files. + + + + Database was not modified by merge operation. + + + + 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 @@ -1688,25 +2128,45 @@ Do you want to merge your changes? Alla filer - Select Image - Välj bild + Custom icon already exists + + + + Confirm Delete + Bekräfta radering - Can't read icon - Kan inte läsa ikon + Custom icon successfully downloaded + - Custom icon already exists + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security - Confirm Delete - Bekräfta radering + Select Image(s) + Välj bild(er) + + + Successfully loaded %1 of %n icon(s) + - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + 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,119 +2376,169 @@ This may cause the affected plugins to malfunction. Modified - + Ändrad Accessed - + Läst Attachments Bilagor - - - EntryView - Customize View + Yes + Ja + + + TOTP + + + EntryPreviewWidget - Hide Usernames - Dölj användarnamn + Generate TOTP Token + Generera TOTP Token - Hide Passwords - Dölj lösenord + Close + Stäng - Fit to window - Anpassa till fönster + General + Allmänt - Fit to contents - Anpassa för innehåll + Username + Användarnamn - Reset to defaults - Återställ till standardvärden + Password + Lösenord - Attachments (icon) - Bilagor (ikon) + Expiration + Utgår - - - Group - Recycle Bin - Papperskorg + URL + URL - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: Kan inte spara fil! + Attributes + Attribut - Cannot save the native messaging script file. - + Attachments + Bilagor - - - HttpPasswordGeneratorWidget - Length: - Längd: + Notes + Anteckningar - Character Types - Teckentyper + Autotype + Autotyp - Upper Case Letters - Versaler + Window + Fönster - A-Z - A-Z + Sequence + Sekvens - Lower Case Letters - Gemener + Searching + Söker - a-z - a-z + Search + Sök - Numbers - Siffror + Clear + Rensa - 0-9 - 0-9 + Never + Aldrig - Special Characters - Specialtecken + [PROTECTED] + [SKYDDAD] - /*_& ... - /*_& ... + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 - Exclude look-alike characters - Uteslut liknande tecken + Enabled + Aktiverad - Ensure that the password contains characters from every group - Säkerställ att lösenordet innehåller tecken från varje grupp + Disabled + Inaktiverad - Extended ASCII - Utökad ASCII + Share + Dela + + + + EntryView + + Customize View + Anpassa vy + + + Hide Usernames + Dölj användarnamn + + + Hide Passwords + Dölj lösenord + + + Fit to window + Anpassa till fönster + + + Fit to contents + Anpassa för innehåll + + + Reset to defaults + Återställ till standardvärden + + + Attachments (icon) + Bilagor (ikon) + + + + Group + + Recycle Bin + Papperskorg + + + [empty] + group has no children + [tom] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: Kan inte spara fil! + + + Cannot save the native messaging script file. + @@ -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 + + unable to seek to content position + + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bitar + Disabled share + - Twofish: 256-bit - Twofish: 256-bitar + Import from + - ChaCha20: 256-bit - ChaCha20: 256-bitar + 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 – rekommenderad) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. + Key Component - The lock file could not be created. Single-instance mode disabled. + Key Component Description - Another instance of KeePassXC is already running. - En annan instans av KeePassXC körs redan. + Cancel + Avbryt - Fatal error while testing the cryptographic functions. - Allvarligt fel vid testning av kryptografiska funktioner. + Key Component set, click to change or remove + - KeePassXC - Error - KeePassXC - Fel + 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 @@ -2841,253 +3389,400 @@ This is a one-way migration. You won't be able to open the imported databas Avsluta KeePassXC - KeePass 2 Database - KeePass 2 databas + Please touch the button on your YubiKey! + - All files - Alla filer + 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 - Öppna databas + &Donate + &Donera - Save repaired database - Spara lagad databas + Report a &bug + Rapportera en &bug - Writing the database failed. - Misslyckades med att skriva till databasen. + 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. + - Please touch the button on your YubiKey! + &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 - 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. + 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. - OpenSSHKey + Merger - Invalid key file, expecting an OpenSSH key + Creating missing %1 [%2] - PEM boundary mismatch + Relocating %1 [%2] - Base64 decoding failed - + Overwriting %1 [%2] + Skriver över %1[%2] - Key file way too small. + older entry merged from database "%1" - Key file magic header id invalid + Adding backup for older target %1 [%2] - Found zero keys + Adding backup for older source %1 [%2] - Failed to read public key. + Reapplying older target entry on top of newer source %1 [%2] - Corrupted key file, reading private key failed + Reapplying older source entry on top of newer target %1 [%2] - No private key payload to decrypt + Synchronizing from newer source %1 [%2] - Trying to run KDF without cipher + Synchronizing from older source %1 [%2] - Passphrase is required to decrypt this key + Deleting child %1 [%2] - Key derivation failed, key file corrupted? + Deleting orphan %1 [%2] - Decryption failed, wrong passphrase? + Changed deleted objects - Unexpected EOF while reading public key + Adding missing icon %1 + + + NewDatabaseWizard - Unexpected EOF while reading private key + Create a new KeePassXC database... - Can't write public key as it is empty + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage - Unexpected EOF when writing public key + En&cryption Settings - Can't write private key as it is empty + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Unexpected EOF when writing private key + Advanced Settings + Avancerade inställningar + + + Simple Settings + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Krypteringsinställningar + - Unsupported key type: %1 + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - Unknown cipher: %1 + Database Master Key - Cipher IV is too short for MD5 kdf + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - Unknown KDF: %1 - Okänd KDF: %1 + General Database Information + - Unknown key type: %1 - Okänd nyckeltyp: %1 + Please fill in the display name and an optional description for your new database: + - OptionDialog + OpenSSHKey - Dialog - Dialogruta + Invalid key file, expecting an OpenSSH key + - This is required for accessing your databases from ChromeIPass or PassIFox + PEM boundary mismatch - Enable KeePassHTTP server - Aktivera KeePassHTTP server + Base64 decoding failed + - General - Allmän + Key file way too small. + Nyckelfilen är alldeles för liten - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension + Key file magic header id invalid - 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. + Found zero keys + - &Return only best matching entries + Failed to read public key. - Re&quest to unlock the database if it is locked - Begär att låsa upp databasen om den är låst + Corrupted key file, reading private key failed + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + No private key payload to decrypt - &Match URL schemes + Trying to run KDF without cipher - Sort matching entries by &username + Passphrase is required to decrypt this key - Sort &matching entries by title + Key derivation failed, key file corrupted? - R&emove all shared encryption keys from active database + Decryption failed, wrong passphrase? - Re&move all stored permissions from entries in active database + Unexpected EOF while reading public key - Password Generator - Lösenordsgenerator + Unexpected EOF while reading private key + - Advanced - Avancerat + Can't write public key as it is empty + - Always allow &access to entries + Unexpected EOF when writing public key - Always allow &updating entries + Can't write private key as it is empty - Only the selected database has to be connected with a client. - Endast den valda databasen måste vara ansluten med en klient. + Unexpected EOF when writing private key + - Searc&h in all opened databases for matching entries + Unsupported key type: %1 - Automatically creating or updating string fields is not supported. - Automatiskt skapande eller uppdaterande av strängfält stöds inte. + Unknown cipher: %1 + - &Return advanced string fields which start with "KPH: " + Cipher IV is too short for MD5 kdf - HTTP Port: - Http-Port: + Unknown KDF: %1 + Okänd KDF: %1 + + + Unknown key type: %1 + Okänd nyckeltyp: %1 + + + PasswordEditWidget - Default port: 19455 - Standard port: 19455 + Enter password: + Ange lösenord: - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC kommer att lyssna på denna port på 127.0.0.1 + Confirm password: + - <b>Warning:</b> The following options can be dangerous! - <b>Varning:</b> Följande parametrar kan vara farliga! + Password + Lösenord - <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 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 + Passwords do not match. - 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,52 +3897,201 @@ Using default port 19455. Password quality Utmärkt - - - QObject - - Database not opened - Databasen är inte öppen - - Database hash not available + ExtendedASCII - Client public key not received + Switch to advanced mode - Cannot decrypt message - Kan inte avkoda meddelande + Advanced + Avancerat - Timeout or cannot connect to KeePassXC + Upper Case Letters A to F - Action cancelled or denied - Åtgärden avbröts eller nekades + A-Z + A-Z - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + Lower Case Letters A to F - KeePassXC association failed, try again - + a-z + a-z - Key change was not successful - Nyckelbytet misslyckades + 0-9 + 0-9 - Encryption key is not recognized + Braces - No saved databases found - Ingen sparad databas hittades + {[( + + + + 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 + + Database not opened + Databasen är inte öppen + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + Kan inte avkoda meddelande + + + Action cancelled or denied + Åtgärden avbröts eller nekades + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + Incorrect action @@ -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,383 +4373,904 @@ Tillgängliga kommandon: Generera ett nytt slumpmässigt lösenord. - Length of the generated password. - Längden av det genererade lösenordet. + 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. - - - QtIOCompressor - Internal zlib error when compressing: - Internt zlib fel vid komprimering: + Invalid timeout value %1. + - Error writing to underlying device: - Fel vid skrivning till underliggande enhet: + Entry %1 not found. + - Error opening underlying device: - Fel vid öppning av underliggande enhet: + Entry with path %1 has no TOTP set up. + - Error reading data from underlying device: - Fel vid läsning från underliggande enhet: + Entry's current TOTP copied to the clipboard! + - Internal zlib error when decompressing: - Internt zlib fel vid extrahering: + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Gzip formatet stöds inte av denna version av zlib. + Clipboard cleared! + - Internal zlib error: - Internt zlib fel: + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + - - - SearchWidget - Search... - Sök... + Invalid value for password length: %1 + - Search - Sök + Could not find entry with path %1. + - Clear - Rensa + Not changing any field for entry %1. + - Case Sensitive - Skiftlägeskänslig + Enter new password for entry: + - Limit search to selected group - Begränsa sökningen till vald grupp + 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 + + + + + QtIOCompressor + + Internal zlib error when compressing: + Internt zlib fel vid komprimering: + + + Error writing to underlying device: + Fel vid skrivning till underliggande enhet: + + + Error opening underlying device: + Fel vid öppning av underliggande enhet: + + + Error reading data from underlying device: + Fel vid läsning från underliggande enhet: + + + Internal zlib error when decompressing: + Internt zlib fel vid extrahering: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Gzip formatet stöds inte av denna version av zlib. + + + Internal zlib error: + Internt zlib fel: + + + + 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 + Fält + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + Exempel + + + + SearchWidget + + Search + Sök + + + Clear + Rensa + + + 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? + Own certificate + - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Fingerprint: - KeePassXC: Update Entry - KeePassXC: Uppdatera post + Certificate: + Certifikat: - Do you want to update the information in %1 - %2? - Vill du uppdatera informationen i %1 - %2? + Signer + - KeePassXC: Database locked! - KeePassXC: Databasen är låst! + Key: + Nyckel: - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - + Generate + Generera - KeePassXC: Removed keys from database - KeePassXC: Nycklar borttagna från databasen + Import + Importera - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Export + Export - KeePassXC: No keys found - KeePassXC: Inga nycklar hittade + Imported certificates + - No shared encryption-keys found in KeePassHttp Settings. + Trust - KeePassXC: Settings not available! - KeePassXC: Inställningar är inte tillgängliga! + Ask + Fråga - The active database does not contain an entry of KeePassHttp Settings. + Untrust - Removing stored permissions... - Tar bort lagrade behörigheter... + Remove + Ta bort - Abort - Avbryt + Path + Sökväg - KeePassXC: Removed permissions - KeePassXC: Tog bort behörigheter + Status + Status - - Successfully removed permissions from %n entries. - + + Fingerprint + Fingeravtryck - KeePassXC: No entry with permissions found! - KeePassXC: Ingen post med behörigheter hittades! + Certificate + Certifikat - The active database does not contain an entry with permissions. - Den aktiva databasen innehåller inte en post med behörigheter. + Trusted + - - - SettingsWidget - Application Settings - Applikationsinställningar + Untrusted + - General - Allmän + Unknown + Okänd - Security - Säkerhet + key.share + Filetype for KeeShare key + - Access error for config file %1 - Åtkomstfel för konfigurationsfil %1 + KeeShare key file + - - - SettingsWidgetGeneral - Basic Settings - Grund inställningar + All files + Alla filer - Start only a single instance of KeePassXC - Tillåt endast en öppen instans av KeePassXC + Select path + - Remember last databases - Komihåg senaste databasen + Exporting changed certificate + - Remember last key files and security dongles + The exported certificate is not the same as the one in use. Do you want to export the current certificate? - Load previous databases on startup - Ladda tidigare databaser vid uppstart + Signer: + + + + ShareObserver - Automatically save on exit - Spara automatiskt när applikationen anslutas + Import from container without signature + - Automatically save after every change - Spara automatiskt efter varje ändring + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Automatically reload the database when modified externally - Ladda om databasen automatiskt när den ändras externt + Import from container with certificate + - Minimize when copying to clipboard - Minimera vid kopiering + Not this time + Inte denna gång - Minimize window at application startup - Minimera fönstret vid start av programmet + Never + Aldrig - Use group icon on entry creation - Använd gruppens ikon för nya poster + Always + Alltid - 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) + Just this time + Bara denna gång - Hide the Details view - Dölj detaljvyn + Import from %1 failed (%2) + Import från %1 misslyckades (%2) - Show a system tray icon - Visa statusfält ikon + Import from %1 successful (%2) + Import från %1 lyckades (%2) - Hide window to system tray when minimized - Vid minimering, minimera fönstret till systemfältet + Imported from %1 + Importerad ifrån %1 - Hide window to system tray instead of app exit - Vid stängning, minimera fönstret till systemfältet istället + Signed share container are not supported - import prevented + - Dark system tray icon - Mörk ikon för systemfältet + File is not readable + Filen är inte läsbar - Language - Språk + Invalid sharing container + Ogiltig delningscontainer - Auto-Type - Auto-skriv + Untrusted import prevented + - 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 + Successful signed import + - 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 + Unexpected error + Oväntat fel - Always ask before performing Auto-Type - Fråga alltid innan auto-skriv utförs + Unsigned share container are not supported - import prevented + - Global Auto-Type shortcut - Globalt auto-skriv kortkommando + Successful unsigned import + - Auto-Type delay - Auto-skriv fördröjning + File does not exist + Filen existerar inte. - ms - Milliseconds - ms. + Unknown share container type + - Startup - Uppstart + Overwriting signed share container is not supported - export prevented + - File Management - Filhantering + Could not write export container (%1) + - Safely save database files (may be incompatible with Dropbox, etc) + Overwriting unsigned share container is not supported - export prevented - Backup database file before saving - Gör databasbackup innan sparning + Could not write export container + - Entry Management - Posthantering + Unexpected export error occurred + - General - Allmänt + Export to %1 failed (%2) + - - - SettingsWidgetSecurity - Timeouts - Tidsgränser + Export to %1 successful (%2) + - Clear clipboard after - Rensa urklipp efter + Export to %1 + Exportera till %1 - sec - Seconds - sek + Do you want to trust %1 with the fingerprint of %2 from %3? + - Lock databases after inactivity of - Lås databaser efter inaktivitet i + Multiple import source path to %1 in %2 + - Convenience - Bekvämlighet + Conflicting export target path %1 in %2 + - Lock databases when session is locked or lid is closed - Lås databaserna när sessionen låses eller locket stängs + Could not embed signature: Could not open file to write (%1) + - Lock databases after minimizing the window - Lås databaserna när fönstret minimeras + Could not embed signature: Could not write file (%1) + - Don't require password repeat when it is visible - Behöver inte upprepa lösenord när det är synligt + Could not embed database: Could not open file to write (%1) + - Show passwords in cleartext by default - Visa lösenord i klartext som standard + Could not embed database: Could not write file (%1) + + + + TotpDialog - Hide passwords in the preview panel - Dölj lösenord i förhandsgranskningsrutan + Timed Password + Tidsinställt Lösenord - Hide entry notes by default - Dölj posters anteckningar som standard + 000000 + 000000 - Privacy - Integritet + Copy + Kopiera + + + Expires in <b>%n</b> second(s) + Löper ut om %n sekund(er)Löper ut om <b>%n</b> sekund(er) + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Använd Google som reserv för att ladda ner webbplatsikoner + Copy + Kopiera - Re-lock previously locked database after performing Auto-Type + 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. + Det uppstod ett fel vid skapandet av QR-koden. + + + Closing in %1 seconds. + Stänger om %1 sekunder. + - 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 + sec + Seconds + sek + + + Code size: + Kodstorlek: 6 digits 6 siffror - Code size: - Kodstorlek: + 7 digits + 7 siffror - sec - Seconds - sek + 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. + + + 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 - - - UnlockDatabaseWidget - Unlock database - Lås upp databas + 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 - - Remove an entry from the database. - Ta bort en post från databasen - - - Path of the database. - Sökväg till databasen - - - Path of the entry to remove. - Sökväg till posten som tas bort - - - KeePassXC - cross-platform password manager - KeePassXC - plattformsoberoende lösenordshanterare - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - namnen på lösenordsdatabaserna som öppnas (*.kdbx) + Refresh + Uppdatera - path to a custom config file - Sökväg till egen konfigurations-fil + YubiKey Challenge-Response + - key file of the database - nyckel-fil för databas + <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> + - read password of the database from stdin - mottag databaslösenord från stdin + No YubiKey detected, please ensure it's plugged in. + - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_th.ts b/share/translations/keepassx_th.ts index ac86a94661..a7fbc578fc 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,1104 +71,2359 @@ Kernel: %3 %4 - Build Type: %1 - + Version %1 - - - AccessControlDialog - KeePassXC HTTP Confirm Access + Build Type: %1 - Remember this decision - จำการตัดสินใจนี้ - - - 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 - - - AgentSettingsWidget - Enable SSH Agent (requires restart) + YubiKey - - - AutoType - Couldn't find an entry that matches the window title: + TouchID - Auto-Type - KeePassXC - Auto-Type - KeePassXC - - - Auto-Type - Auto-Type - - - The Syntax of your Auto-Type statement is incorrect! + None - This Auto-Type command contains a very long delay. Do you really want to proceed? + KeeShare (signed and unsigned sharing) - This Auto-Type command contains very slow key presses. Do you really want to proceed? + KeeShare (only signed sharing) - This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + KeeShare (only unsigned sharing) - AutoTypeAssociationsModel - - Window - หน้าต่าง - + AgentSettingsWidget - Sequence - ลำดับ + Enable SSH Agent (requires restart) + - Default sequence - ลำดับมาตรฐาน + Use OpenSSH for Windows instead of Pageant + - AutoTypeMatchModel - - Group - กลุ่ม - + ApplicationSettingsWidget - Title - หัวเรื่อง + Application Settings + การตั้งค่าแอป - Username - ชื่อผู้ใช้ + General + ทั่วไป - Sequence - ลำดับ + Security + ความมั่นคง - - - AutoTypeSelectDialog - Auto-Type - KeePassXC - Auto-Type - KeePassXC + Access error for config file %1 + มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 - Select entry to Auto-Type: + Icon only - - - BrowserAccessControlDialog - KeePassXC-Browser Confirm Access + Text only - Remember this decision - จำการตัดสินใจนี้ - - - Allow - อนุญาต + Text beside icon + - Deny - ปฏิเสธ + Text under icon + - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. + Follow style - BrowserOptionDialog + ApplicationSettingsWidgetGeneral - Dialog - + Basic Settings + การตั้งค่าพื้นฐาน - This is required for accessing your databases with KeePassXC-Browser + Startup - Enable KeepassXC browser integration - เปิดใช้การผสาน KeepassXC กับเบราว์เซอร์ - - - General - ทั่วไป + Start only a single instance of KeePassXC + - Enable integration for these browsers: - เปิดใช้การผสานกับเบราว์เซอร์เหล่านี้: + Remember last databases + จำฐานข้อมูลล่าสุด - &Google Chrome - &Google Chrome + Remember last key files and security dongles + - &Firefox - &Firefox + Load previous databases on startup + - &Chromium - &Chromium + Minimize window at application startup + ย่อหน้าต่างลงเล็กสุดตอนเริ่มแอป - &Vivaldi - &Vivaldi + File Management + - Show a &notification when credentials are requested - Credentials mean login data requested via browser extension + Safely save database files (may be incompatible with Dropbox, etc) - Re&quest to unlock the database if it is locked + Backup database file before saving - Only entries with the same scheme (http://, https://, ...) are returned. - + Automatically save after every change + บันทึกอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง - &Match URL scheme (e.g., https://...) - + Automatically save on exit + บันทึกอัตโนมัติตอนออก - Only returns the best matches for a specific URL instead of all entries for the whole domain. + Don't mark database as modified for non-data changes (e.g., expanding groups) - &Return only best-matching credentials + Automatically reload the database when modified externally - Sort &matching credentials by title - Credentials mean login data requested via browser extension + Entry Management - Sort matching credentials by &username - Credentials mean login data requested via browser extension + Use group icon on entry creation - &Disconnect all browsers - หยุดการเชื่อมต่อกับทุกเบราว์เซอร์ (&D) + Minimize when copying to clipboard + ย่อหน้าต่างเมื่อคัดลอกไปยังคลิปบอร์ด - Forget all remembered &permissions - ลืมการอนุญาตที่เคยจำไว้ทั้งหมด (&P) + Hide the entry preview panel + - Advanced - ขั้นสูง + General + ทั่วไป - Never &ask before accessing credentials - Credentials mean login data requested via browser extension + Hide toolbar (icons) - Never ask before &updating credentials - Credentials mean login data requested via browser extension + Minimize instead of app exit - Only the selected database has to be connected with a client. - + Show a system tray icon + แสดงไอคอนสำหรับ system tray - Searc&h in all opened databases for matching credentials - Credentials mean login data requested via browser extension + Dark system tray icon - Automatically creating or updating string fields is not supported. + Hide window to system tray when minimized - &Return advanced string fields which start with "KPH: " - + Language + ภาษา - Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - + Auto-Type + Auto-Type - Update &native messaging manifest files at startup + Use entry title to match windows for global Auto-Type - Support a proxy application between KeePassXC and browser extension. + Use entry URL to match windows for global Auto-Type - Use a &proxy application between KeePassXC and browser extension + Always ask before performing Auto-Type - Use a custom proxy location if you installed a proxy manually. + Global Auto-Type shortcut - Use a &custom proxy location - Meant is the proxy for KeePassXC-Browser + Auto-Type typing delay - Browse... - Button for opening file dialog - ดู... + ms + Milliseconds + มิลลิวิ - <b>Warning:</b> The following options can be dangerous! + Auto-Type start delay - Executable Files (*.exe);;All Files (*.*) + Check for updates at application startup - Executable Files (*) + Include pre-releases when checking for updates - Select custom proxy location + Movable toolbar - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + Button style - BrowserService + ApplicationSettingsWidgetSecurity - KeePassXC: New key association request + Timeouts - 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. - + Clear clipboard after + ล้างคลิปบอร์ดหลัง - Save and allow access - + sec + Seconds + วิ - KeePassXC: Overwrite existing key? - KeePassXC: เขียนทับกุญแจที่มีอยู่เดิม? + Lock databases after inactivity of + ล็อกฐานข้อมูลหลังไม่มีการใช้งาน - A shared encryption key with the name "%1" already exists. -Do you want to overwrite it? + min - KeePassXC: Update Entry - KeePassXC: ปรับปรุงรายการ + Forget TouchID after inactivity of + - Do you want to update the information in %1 - %2? - + Convenience + ความสะดวก - KeePassXC: Database locked! - KeePassXC: ฐานข้อมูลถูกล็อก! + Lock databases when session is locked or lid is closed + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. + Forget TouchID when session is locked or lid is closed - KeePassXC: Settings not available! - KeePassXC: ไม่มีการตั้งค่าที่ใช้ได้! + Lock databases after minimizing the window + ล็อกฐานข้อมูลหลังย่อหน้าต่างลงเล็กสุด - The active database does not contain a settings entry. + Re-lock previously locked database after performing Auto-Type - KeePassXC: No keys found - KeePassXC: ไม่พบกุญแจ + Don't require password repeat when it is visible + ไม่ต้องถามรหัสผ่านซ้ำถ้ามองเห็นรหัสผ่านอยู่ - No shared encryption keys found in KeePassXC Settings. + Don't hide passwords when editing them - KeePassXC: Removed keys from database - KeePassXC: กุญแจถูกนำออกจากฐานข้อมูล + Don't use placeholder for empty password fields + - - Successfully removed %n encryption key(s) from KeePassXC settings. - + + Hide passwords in the entry preview panel + - Removing stored permissions… + Hide entry notes by default - Abort - หยุด + Privacy + ความเป็นส่วนตัว - KeePassXC: Removed permissions - KeePassXC: การอนุญาตถูกนำออก - - - Successfully removed permissions from %n entry(s). - - - - KeePassXC: No entry with permissions found! - + Use DuckDuckGo as fallback for downloading website icons + + + + AutoType - The active database does not contain an entry with permissions. + Couldn't find an entry that matches the window title: - - - ChangeMasterKeyWidget - Password - รหัสผ่าน + Auto-Type - KeePassXC + Auto-Type - KeePassXC - Enter password: - ป้อนรหัสผ่าน: + Auto-Type + Auto-Type - Repeat password: - ทวนรหัสผ่าน: + The Syntax of your Auto-Type statement is incorrect! + - &Key file - แฟ้มกุญแจ (&K) + This Auto-Type command contains a very long delay. Do you really want to proceed? + - Browse - ดู + This Auto-Type command contains very slow key presses. Do you really want to proceed? + - Create - สร้าง + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + + + AutoTypeAssociationsModel - Cha&llenge Response - รหัสสอบถาม รหัสตอบกลับ (&L) + Window + หน้าต่าง - Refresh - เรียกใหม่ + Sequence + ลำดับ - Key files - แฟ้มกุญแจ + Default sequence + ลำดับมาตรฐาน + + + AutoTypeMatchModel - All files - ทุกแฟ้ม + Group + กลุ่ม - Create Key File... - สร้างแฟ้มกุญแจ... + Title + หัวเรื่อง - Unable to create Key File : - ไม่สามารถสร้างแฟ้มกุญแจได้ : + Username + ชื่อผู้ใช้ - Select a key file - เลือกแฟ้มกุญแจ + Sequence + ลำดับ + + + AutoTypeSelectDialog - Empty password - รหัสผ่านว่างเปล่า + Auto-Type - KeePassXC + Auto-Type - KeePassXC - Do you really want to use an empty string as password? + Select entry to Auto-Type: + + + BrowserAccessControlDialog - Different passwords supplied. - รหัสผ่านที่ให้มาไม่ตรงกัน + KeePassXC-Browser Confirm Access + - Failed to set %1 as the Key file: -%2 - + Remember this decision + จำการตัดสินใจนี้ - Legacy key file format - + Allow + อนุญาต - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - + 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. - CloneDialog + BrowserEntrySaveDialog - Clone Options - ตัวเลือกการโคลน + KeePassXC-Browser Save Entry + - Append ' - Clone' to title - เติม '- โคลน' ต่อท้ายชื่อ + Ok + - Replace username and password with references - แทนที่ชื่อผู้ใช้และรหัสผ่านด้วยการอ้างอิง + Cancel + ยกเลิก - Copy history - ทำสำเนาประวัติ + You have multiple databases open. +Please select the correct database for saving credentials. + - CsvImportWidget + BrowserOptionDialog - Import CSV fields - นำเข้าฟิลด์ CSV + Dialog + - filename - ชื่อแฟ้ม + This is required for accessing your databases with KeePassXC-Browser + - size, rows, columns - ขนาด, แถว, หลัก + Enable KeepassXC browser integration + เปิดใช้การผสาน KeepassXC กับเบราว์เซอร์ - Encoding - การเข้ารหัส + General + ทั่วไป - Codec - ตัวเข้ารหัส + Enable integration for these browsers: + เปิดใช้การผสานกับเบราว์เซอร์เหล่านี้: - Text is qualified by - ข้อความถูกกำกับด้วย + &Google Chrome + &Google Chrome - Fields are separated by - ฟิลด์ถูกแบ่งด้วย + &Firefox + &Firefox - Comments start with - บันทึกความเห็นเริ่มต้นด้วย + &Chromium + &Chromium - First record has field names - เรคคอร์ดแรกมีชื่อฟิลด์ + &Vivaldi + &Vivaldi - Number of headers line to discard - จำนวนบรรทัดส่วนหัวที่จะไม่สนใจ + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + - Consider '\' an escape character - ให้นับ '\' เป็น escape character + Re&quest to unlock the database if it is locked + - Preview - ดูตัวอย่าง + Only entries with the same scheme (http://, https://, ...) are returned. + - Column layout + &Match URL scheme (e.g., https://...) - Not present in CSV file + Only returns the best matches for a specific URL instead of all entries for the whole domain. - Empty fieldname - ชื่อฟิลด์ว่างเปล่า + &Return only best-matching credentials + - column - หลัก + Sort &matching credentials by title + Credentials mean login data requested via browser extension + - Imported from CSV file - นำเข้าจากแฟ้ม CSV แล้ว + Sort matching credentials by &username + Credentials mean login data requested via browser extension + - Original data: - ข้อมูลต้นฉบับ: + Advanced + ขั้นสูง - Error(s) detected in CSV file ! - พบข้อผิดพลาดในแฟ้ม CSV ! + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + - more messages skipped] - มีข้อความอีกมากที่ถูกข้ามไป] + Never ask before &updating credentials + Credentials mean login data requested via browser extension + - Error - ผิดพลาด + Only the selected database has to be connected with a client. + - CSV import: writer has errors: - - การนำเข้า CSV: ตัวเขียนมีข้อผิดพลาด: - + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + - - - CsvImportWizard - Error - ผิดพลาด + Automatically creating or updating string fields is not supported. + - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ - - - - CsvParserModel - - %n byte(s), - - - - %n row(s), - + &Return advanced string fields which start with "KPH: " + - - %n column(s) - + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + - - - DatabaseOpenWidget - Enter master key - ใส่กุญแจมาสเตอร์ + Update &native messaging manifest files at startup + - Key File: - แฟ้มกุญแจ: + Support a proxy application between KeePassXC and browser extension. + - Password: - รหัสผ่าน: + Use a &proxy application between KeePassXC and browser extension + - Browse - ดู + Use a custom proxy location if you installed a proxy manually. + - Refresh - เรียกใหม่ + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + - Challenge Response: - รหัสสอบถาม รหัสตอบกลับ: + Browse... + Button for opening file dialog + ดู... - Unable to open the database. - ไม่สามารถเปิดฐานข้อมูล + <b>Warning:</b> The following options can be dangerous! + - Can't open key file - ไม่สามารถเปิดแฟ้มกุญแจ + Select custom proxy location + - Legacy key file format + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. - Don't show this warning again - ไม่ต้องแสดงคำเตือนนี้อีก - - - All files - ทุกแฟ้ม + &Tor Browser + - Key files - แฟ้มกุญแจ + <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: + - Select key file - เลือกแฟ้มกุญแจ + Executable Files + - - - DatabaseRepairWidget - Repair database - ซ่อมฐานข้อมูล + All Files + - Error - ผิดพลาด + Do not ask permission for HTTP &Basic Auth + An extra HTTP Basic Auth setting + + + + BrowserService - Can't open key file - ไม่สามารถเปิดแฟ้มกุญแจ + KeePassXC: New key association request + - Unable to open the database. - ไม่สามารถเปิดฐานข้อมูลดังกล่าว + 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. + - Database opened fine. Nothing to do. - ฐานข้อมูลเปิดได้ปกติ ไม่ต้องทำอะไร + Save and allow access + - Success - สำเร็จ + KeePassXC: Overwrite existing key? + KeePassXC: เขียนทับกุญแจที่มีอยู่เดิม? - The database has been successfully repaired -You can now save it. - ฐานข้อมูลดังกล่าวถูกซ่อมสำเร็จแล้ว -ตอนนี้คุณสามารถบันทึกมันได้ + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + - Unable to repair the database. - ไม่สามารถซ่อมฐานข้อมูลดังกล่าว + KeePassXC: Update Entry + KeePassXC: ปรับปรุงรายการ - - - DatabaseSettingsWidget - General - ทั่วไป + Do you want to update the information in %1 - %2? + - Encryption - การเข้ารหัสลับ + Abort + หยุด - Number of rounds too high - Key transformation rounds + Converting attributes to custom data… - 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! + KeePassXC: Converted KeePassHTTP attributes - Understood, keep number + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. - - Cancel - ยกเลิก + + Successfully moved %n keys to custom data. + - Number of rounds too low - Key transformation rounds + KeePassXC: No entry with KeePassHTTP attributes found! - 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! + The active database does not contain an entry with KeePassHTTP attributes. - KDF unchanged + KeePassXC: Legacy browser integration settings detected - Failed to transform key with new KDF parameters; KDF unchanged. + 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. - - MiB - Abbreviation for Mebibytes (KDF settings) - - - - thread(s) - Threads for parallel execution (KDF settings) - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - อัลกอริทึมเข้ารหัสลับ: - + CloneDialog - AES: 256 Bit (default) - AES: 256 บิต (ค่าปริยาย) + Clone Options + ตัวเลือกการโคลน - Twofish: 256 Bit - Twofish: 256 บิต + Append ' - Clone' to title + เติม '- โคลน' ต่อท้ายชื่อ - Key Derivation Function: - + Replace username and password with references + แทนที่ชื่อผู้ใช้และรหัสผ่านด้วยการอ้างอิง - Transform rounds: - รอบเปลี่ยนรูป: + Copy history + ทำสำเนาประวัติ + + + CsvImportWidget - Benchmark 1-second delay - + Import CSV fields + นำเข้าฟิลด์ CSV - Memory Usage: - + filename + ชื่อแฟ้ม - Parallelism: - + size, rows, columns + ขนาด, แถว, หลัก - - - DatabaseSettingsWidgetGeneral - Database Meta Data - เมทาดาทาฐานข้อมูล + Encoding + การเข้ารหัส - Database name: - ชื่อฐานข้อมูล: + Codec + ตัวเข้ารหัส - Database description: - รายละเอียดฐานข้อมูล: + Text is qualified by + ข้อความถูกกำกับด้วย - Default username: - ชื่อผู้ใช้มาตรฐาน: + Fields are separated by + ฟิลด์ถูกแบ่งด้วย - History Settings - การตั้งค่าประวัติ + Comments start with + บันทึกความเห็นเริ่มต้นด้วย - Max. history items: - จำนวนมากสุดของรายการประวัติ: + First record has field names + เรคคอร์ดแรกมีชื่อฟิลด์ - Max. history size: - ขนาดมากสุดของรายการประวัติ: + Number of headers line to discard + จำนวนบรรทัดส่วนหัวที่จะไม่สนใจ - MiB - MiB + Consider '\' an escape character + ให้นับ '\' เป็น escape character - Use recycle bin - ใช้ถังขยะรีไซเคิล + Preview + ดูตัวอย่าง - Additional Database Settings + Column layout - Enable &compression (recommended) + Not present in CSV file - - - DatabaseTabWidget - Root - Root group - รูต + Imported from CSV file + นำเข้าจากแฟ้ม CSV แล้ว - KeePass 2 Database - ฐานข้อมูล KeePass 2 + Original data: + ข้อมูลต้นฉบับ: - All files - ทุกแฟ้ม + Error + ผิดพลาด - Open database - เปิดฐานข้อมูล + Empty fieldname %1 + - File not found! - ไม่พบแฟ้ม! + column %1 + - Unable to open the database. - ไม่สามารถเปิดฐานข้อมูล + Error(s) detected in CSV file! + - - File opened in read only mode. - เปิดแฟ้มแล้วในแบบอ่านอย่างเดียว + + [%n more message(s) skipped] + - Open CSV file - เปิดแฟ้ม CSV + CSV import: writer has errors: +%1 + - - CSV file - แฟ้ม CSV + + + CsvParserModel + + %n column(s) + %n คอลัมน์ - All files (*) - ทุกแฟ้ม () + %1, %2, %3 + file info: bytes, rows, columns + - - Merge database - ผสานฐานข้อมูล + + %n byte(s) + - - Open KeePass 1 database - เปิดฐานข้อมูล KeePass 1 + + %n row(s) + + + + Database - KeePass 1 database - ฐานข้อมูล KeePass 1 + Root + Root group name + รูต - Close? - ปิด? + File %1 does not exist. + - "%1" is in edit mode. -Discard changes and close anyway? - "%1" อยู่ในระหว่าการแก้ไข -ละทิ้งการเปลี่ยนแปลงทั้งหมดและปิดอยู่ดี? + Unable to open file %1. + - Save changes? - บันทึกความเปลี่ยนแปลง? + Error while reading the database: %1 + - "%1" was modified. -Save changes? - "%1" ถูกแก้ไข -บันทึกการเปลี่ยนแปลง? + Could not save, database has no file name. + - Writing the database failed. - การเขียนฐานข้อมูลล้มเหลว + File cannot be written as it is opened in read-only mode. + + + + DatabaseOpenDialog - Passwords - รหัสผ่าน + Unlock Database - KeePassXC + + + + DatabaseOpenWidget - Save database as - บันทึกฐานข้อมูลเป็น + Enter master key + ใส่กุญแจมาสเตอร์ - Export database to CSV file - ส่งออกฐานข้อมูลเป็นแฟ้ม CSV + Key File: + แฟ้มกุญแจ: - Writing the CSV file failed. - การเขียนแฟ้ม CSV ล้มเหลว + Password: + รหัสผ่าน: - New database - ฐานข้อมูลใหม่ + Browse + ดู - locked - ถูกล็อก + Refresh + เรียกใหม่ - Lock database - ล็อกฐานข้อมูล + Challenge Response: + รหัสสอบถาม รหัสตอบกลับ: - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. + Legacy key file format - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - Disable safe saves? - - + 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 + หยุดการเชื่อมต่อกับทุกเบราว์เซอร์ (&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 + 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 + 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 + + + All files + ทุกแฟ้ม + + + Open database + เปิดฐานข้อมูล + + + CSV file + แฟ้ม CSV + + + Merge database + ผสานฐานข้อมูล + + + Open KeePass 1 database + เปิดฐานข้อมูล KeePass 1 + + + KeePass 1 database + ฐานข้อมูล KeePass 1 + + + Export database to CSV file + ส่งออกฐานข้อมูลเป็นแฟ้ม CSV + + + Writing the CSV file failed. + การเขียนแฟ้ม CSV ล้มเหลว + + + 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? + คุณต้องการจะลบรายการ "%1" ให้หายไปตลอดกาลจริงๆ? + + + 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? + คุณต้องการจะลบกลุ่ม "%1" ไปตลอดกาลจริงหรือ? + + + No current database. + ไม่มีฐานข้อมูลขณะนี้ + + + No source database, nothing to do. + ไม่มีฐานข้อมูลต้นทาง ไม่มีงานให้ทำ + + + Search Results (%1) + ผลลัพธ์การค้นหา (%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? + "%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 + + Entry + รายการ + + + Advanced + ขั้นสูง + + + Icon + ไอคอน + + + Auto-Type + 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 สัปดาห์ + + + %n month(s) + %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 + + + + + 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: + 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 + ค้นหา + - 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? + Auto-Type + Auto-Type + + + &Use default Auto-Type sequence of parent group + + + + Set default Auto-Type se&quence - DatabaseWidget + EditWidgetIcons - Searching... - ค้นหา... + &Use default icon + ใช้ไอคอนมาตรฐาน (&U) + + + Use custo&m icon + ใช้ไอคอนที่กำหนดเอง (&M) - Change master key - เปลี่ยนกุญแจมาสเตอร์ + Add custom icon + เพิ่มไอคอนที่กำหนดเอง - Delete entry? - ลบรายการ? + Delete custom icon + ลบไอคอนที่กำหนดเอง - Do you really want to delete the entry "%1" for good? - คุณต้องการจะลบรายการ "%1" ให้หายไปตลอดกาลจริงๆ? + Download favicon + ดาวน์โหลด favicon - Delete entries? - ลบรายการ? + Unable to fetch favicon. + ไม่สามารถดึง favicon ได้ + + + Images + ภาพ + + + All files + ทุกแฟ้ม + + + Custom icon already exists + มีไอคอนที่กำหนดเองอยู่แล้ว - Do you really want to delete %1 entries for good? - คุณต้องการจะลบรายการ %1 รายการให้หายไปตลอดกาลจริงๆ? + Confirm Delete + ยืนยันการลบ - Move entry to recycle bin? + Custom icon successfully downloaded - Do you really want to move entry "%1" to the recycle bin? + Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security - Move entries to recycle bin? - ย้ายรายการไปถังขยะ? + Select Image(s) + - Do you really want to move %n entry(s) to the recycle bin? - คุณต้องการจะย้ายรายการ %1 รายการไปยังถังขยะจริงๆ? + Successfully loaded %1 of %n icon(s) + - Execute command? + 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: + สร้าง: + - Do you really want to execute the following command?<br><br>%1<br> + Modified: + แก้ไข: + + + Accessed: + เข้าถึง: + + + Uuid: + Uuid: + + + Plugin Data - Remember my choice - จำที่ฉันเลือก + Remove + นำออก - Delete group? - ลบกลุ่ม? + Delete plugin data? + - Do you really want to delete the group "%1" for good? - คุณต้องการจะลบกลุ่ม "%1" ไปตลอดกาลจริงหรือ? + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ + Key + - No current database. - ไม่มีฐานข้อมูลขณะนี้ + Value + + + + Entry - No source database, nothing to do. - ไม่มีฐานข้อมูลต้นทาง ไม่มีงานให้ทำ + %1 - Clone + + + + EntryAttachmentsModel - Search Results (%1) - ผลลัพธ์การค้นหา (%1) + Name + ชื่อ - No Results - ไม่มีผลลัพธ์ + Size + ขนาด + + + + EntryAttachmentsWidget + + Form + - File has changed + 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 + ไม่สามารถบันทึกแฟ้มแนบ: +%1 + + + Unable to open attachment: +%1 + ไม่สามารถเปิดแฟ้มแนบ: +%1 + + + Unable to open attachments: +%1 + ไม่สามารถเปิดแฟ้มแนบ: +%1 + + + Confirm remove + + Unable to open file(s): +%1 + + + + + EntryAttributesModel + + Name + ชื่อ + + + + EntryHistoryModel + + Last modified + ถูกแก้ไขครั้งสุดท้าย + + + Title + หัวเรื่อง + + + Username + ชื่อผู้ใช้ + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + อ้างอิง: + + + Group + กลุ่ม + + + Title + หัวเรื่อง + + + Username + ชื่อผู้ใช้ + + + URL + URL + + + Never + ไม่เลย + + + Password + รหัสผ่าน + + + Notes + บันทึก + + + Expires + หมดอายุ + - The database file has changed. Do you want to load the changes? - + Created + สร้าง - Merge Request - ผสานคำร้อง + Modified + - The database file has changed and you have unsaved changes. -Do you want to merge your changes? + Accessed - Could not open the new database file while attempting to autoreload this database. - + Attachments + แฟ้มแนบ - Empty recycle bin? + Yes - Are you sure you want to permanently delete everything from your recycle bin? + TOTP - DetailsWidget + EntryPreviewWidget Generate TOTP Token สร้างโทเคน TOTP @@ -1188,28 +2437,20 @@ Do you want to merge your changes? ทั่วไป - Password - รหัสผ่าน + Username + ชื่อผู้ใช้ - URL - URL + Password + รหัสผ่าน Expiration หมดอายุ - Username - ชื่อผู้ใช้ - - - Autotype - - - - Searching - กำลังค้นหา + URL + URL Attributes @@ -1223,6 +2464,10 @@ Do you want to merge your changes? Notes บันทึก + + Autotype + + Window หน้าต่าง @@ -1231,6 +2476,10 @@ Do you want to merge your changes? Sequence ลำดับ + + Searching + กำลังค้นหา + Search ค้นหา @@ -1248,2377 +2497,2462 @@ Do you want to merge your changes? [ถูกป้องกันอยู่] - Disabled - ปิดใช้ + <b>%1</b>: %2 + attributes line + Enabled เปิดใช้ + + Disabled + ปิดใช้ + + + Share + + - EditEntryWidget + EntryView - Entry - รายการ + Customize View + - Advanced - ขั้นสูง + Hide Usernames + - Icon - ไอคอน + Hide Passwords + - Auto-Type - Auto-Type + Fit to window + - Properties - คุณสมบัติ + Fit to contents + - History - ประวัติ + Reset to defaults + - SSH Agent + Attachments (icon) + + + Group - n/a - ไม่มีข้อมูล + Recycle Bin + ถังขยะ - (encrypted) - (เข้ารหัสลับอยู่) + [empty] + group has no children + + + + GroupModel - Select private key - เลือกกุญแจส่วนตัว + %1 + Template for name without annotation + + + + HostInstaller - File too large to be a private key - แฟ้มใหญ่เกินกว่าจะเป็นกุญแจส่วนตัว + KeePassXC: Cannot save file! + KeePassXC: ไม่สามารถบันทึกแฟ้ม! - Failed to open private key - ผิดพลาดระหว่างการเปิดกุญแจส่วนตัว + Cannot save the native messaging script file. + + + + KMessageWidget - Entry history - ประวัติรายการ + &Close + ปิด (&C) - Add entry - เพิ่มรายการ + Close message + ปิดข้อความ + + + Kdbx3Reader - Edit entry - แก้ไขรายการ + Unable to calculate master key + ไม่สามารถคำนวญกุญแมาสเตอร์ได้ - Different passwords supplied. - รหัสผ่านที่ให้มาไม่ตรงกัน + Unable to issue challenge-response. + - New attribute - คุณสมบัติใหม่ + Wrong key or database file is corrupt. + - Confirm Remove - ยืนยันการนำออก + missing database headers + - Are you sure you want to remove this attribute? + Header doesn't match hash - [PROTECTED] - [ถูกป้องกันอยู่] + Invalid header id size + - Press reveal to view or edit + Invalid header field length - Tomorrow - พรุ่งนี้ + Invalid header data length + - - %n week(s) - %n สัปดาห์ + + + Kdbx3Writer + + Unable to issue challenge-response. + - - %n month(s) - %n เดือน + + Unable to calculate master key + ไม่สามารถคำนวญกุญแมาสเตอร์ได้ + + + Kdbx4Reader - 1 year - 1 ปี + missing database headers + - Apply generated password? + Unable to calculate master key + ไม่สามารถคำนวญกุญแมาสเตอร์ได้ + + + Invalid header checksum size - Do you want to apply the generated password to this entry? + Header SHA256 mismatch - Entry updated successfully. + Wrong key or database file is corrupt. (HMAC mismatch) - - - EditEntryWidgetAdvanced - Additional attributes - คุณสมบัติเพิ่มเติม + Unknown cipher + - Add - เพิ่ม + Invalid header id size + - Remove - นำออก + Invalid header field length + - Edit Name - แก้ไขชื่อ + Invalid header data length + - Protect - ป้องกัน + Failed to open buffer for KDF parameters in header + - Reveal - เปิดเผย + Unsupported key derivation function (KDF) or invalid parameters + - Attachments - แฟ้มแนบ + Legacy header fields found in KDBX4 file. + - Foreground Color: + Invalid inner header id size - Background Color: + Invalid inner header field length - - - EditEntryWidgetAutoType - Enable Auto-Type for this entry + Invalid inner header binary size - Inherit default Auto-Type sequence from the &group + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data - &Use custom Auto-Type sequence: + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data - Window Associations + 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 + - Window title: - หัวเรื่องของหน้าต่าง: + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + - Use a specific sequence for this association: + Invalid variant map field type size + Translation: variant map = data structure for storing meta data - EditEntryWidgetHistory + Kdbx4Writer - Show - แสดง + Invalid symmetric cipher algorithm. + - Restore - เรียกคืน + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + - Delete - ลบ + Unable to calculate master key + ไม่สามารถคำนวญกุญแมาสเตอร์ได้ - Delete all - ลบทั้งหมด + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + - EditEntryWidgetMain + KdbxReader - URL: - URL: + Unsupported cipher + - Password: - รหัสผ่าน: + Invalid compression flags length + - Repeat: - ทำซ้ำ: + Unsupported compression algorithm + - Title: - หัวเรื่อง: + Invalid master seed size + - Notes - บันทึก + Invalid transform seed size + - Presets - ค่าปรับแต่งสำเร็จรูป + Invalid transform rounds size + - Toggle the checkbox to reveal the notes section. + Invalid start bytes size - Username: - ชื่อผู้ใช้: + Invalid random stream id size + - Expires - หมดอายุ + Invalid inner random stream cipher + - - - EditEntryWidgetSSHAgent - Form - + Not a KeePass database. + ไม่ใช่ฐานข้อมูล KeePass - Remove key from agent after + 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. - seconds - วินาที + Unsupported KeePass 2 database version. + - Fingerprint + Invalid cipher uuid length: %1 (length=%2) - Remove key from agent when database is closed/locked + Unable to parse UUID: %1 - Public key - กุญแจสาธารณะ + Failed to read database file. + + + + KdbxXmlReader - Add key to agent when database is opened/unlocked + XML parsing failure: %1 - Comment - ความเห็น + No root group + - Decrypt - ถอดรหัสลับ + Missing icon uuid or data + - n/a - ไม่มีข้อมูล + Missing custom data key or value + - Copy to clipboard - คัดลอกไปยังคลิปบอร์ด: + Multiple group elements + - Private key - กุญแจส่วนตัว + Null group uuid + - External file - แฟ้มภายนอก + Invalid group icon number + - Browse... - Button for opening file dialog - ดู... + Invalid EnableAutoType value + - Attachment - แฟ้มแนบ + Invalid EnableSearching value + - Add to agent + No group uuid found - Remove from agent + Null DeleteObject uuid - Require user confirmation when this key is used + Missing DeletedObject uuid or time - - - EditGroupWidget - Group - กลุ่ม + Null entry uuid + - Icon - ไอคอน + Invalid entry icon number + - Properties - คุณสมบัติ + History element in history entry + - Add group - เพิ่มกลุ่ม + No entry uuid found + - Edit group - แก้ไขกลุ่ม + History element with different uuid + - Enable - เปิดใช้ + Duplicate custom attribute found + - Disable - ปิดใช้ + Entry string key or value missing + - Inherit from parent group (%1) + Duplicate attachment found - - - EditGroupWidgetMain - Name - ชื่อ + Entry binary key or value missing + - Notes - บันทึก + Auto-type association window or sequence missing + - Expires - หมดอายุ + Invalid bool value + - Search - ค้นหา + Invalid date time value + - Auto-Type - Auto-Type + Invalid color value + - &Use default Auto-Type sequence of parent group + Invalid color rgb part - Set default Auto-Type se&quence + Invalid number value - - - EditWidgetIcons - &Use default icon - ใช้ไอคอนมาตรฐาน (&U) + Invalid uuid value + - Use custo&m icon - ใช้ไอคอนที่กำหนดเอง (&M) + Unable to decompress binary + Translator meant is a binary data inside an entry + - Add custom icon - เพิ่มไอคอนที่กำหนดเอง + XML error: +%1 +Line %2, column %3 + + + + KeePass1OpenWidget - Delete custom icon - ลบไอคอนที่กำหนดเอง + Import KeePass1 database + นำเข้าฐานข้อมูล KeePass1 - Download favicon - ดาวน์โหลด favicon + Unable to open the database. + ไม่สามารถเปิดฐานข้อมูลดังกล่าว + + + KeePass1Reader - Unable to fetch favicon. - ไม่สามารถดึง favicon ได้ + Unable to read keyfile. + ไม่สามารถอ่านแฟ้มกุญแจได้ - Hint: You can enable Google as a fallback under Tools>Settings>Security - + Not a KeePass database. + ไม่ใช่ฐานข้อมูล KeePass - Images - ภาพ + Unsupported encryption algorithm. + - All files - ทุกแฟ้ม + Unsupported KeePass database version. + - Select Image - เลือกภาพ + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + - Can't read icon - ไม่สามารถอ่านไอคอน + Invalid number of groups + - Custom icon already exists - มีไอคอนที่กำหนดเองอยู่แล้ว + Invalid number of entries + - Confirm Delete - ยืนยันการลบ + Invalid content hash size + - This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + Invalid transform seed size - - - EditWidgetProperties - Created: - สร้าง: + Invalid number of transform rounds + - Modified: - แก้ไข: + Unable to construct group tree + - Accessed: - เข้าถึง: + Root + รูต - Uuid: - Uuid: + Unable to calculate master key + ไม่สามารถคำนวญกุญแมาสเตอร์ได้ - Plugin Data + Wrong key or database file is corrupt. - Remove - นำออก + Key transformation failed + - Delete plugin data? + Invalid group field type number - Do you really want to delete the selected plugin data? -This may cause the affected plugins to malfunction. + Invalid group field size - Key + Read group field data doesn't match size - Value + Incorrect group id field size - - - Entry - - Clone - Suffix added to cloned entries - - โคลน + Incorrect group creation time field size + - - - EntryAttachmentsModel - Name - ชื่อ + Incorrect group modification time field size + - Size - ขนาด + Incorrect group access time field size + - - - EntryAttachmentsWidget - Form + Incorrect group expiry time field size - Add - เพิ่ม + Incorrect group icon field size + - Remove - นำออก + Incorrect group level field size + - Open - เปิด + Invalid group field type + - Save - บันทึก + Missing group id or level + - Select files - เลือกแฟ้ม - - - Are you sure you want to remove %n attachment(s)? - + Missing entry field type number + - Confirm Remove - ยืนยันการนำออก + Invalid entry field size + - Save attachments - บันทึกแฟ้มแนบ + Read entry field data doesn't match size + - Unable to create directory: -%1 + Invalid entry uuid field size - Are you sure you want to overwrite the existing file "%1" with the attachment? + Invalid entry group id field size - Confirm overwrite - ยืนยันการเขียนทับ + Invalid entry icon field size + - Unable to save attachments: -%1 - ไม่สามารถบันทึกแฟ้มแนบ: -%1 + Invalid entry creation time field size + - Unable to open attachment: -%1 - ไม่สามารถเปิดแฟ้มแนบ: -%1 + Invalid entry modification time field size + - Unable to open attachments: -%1 - ไม่สามารถเปิดแฟ้มแนบ: -%1 + Invalid entry expiry time field size + - Unable to open files: -%1 - ไม่สามารถเปิดแฟ้ม: -%1 + Invalid entry field type + - - - EntryAttributesModel - Name - ชื่อ + unable to seek to content position + - EntryHistoryModel + KeeShare - Last modified - ถูกแก้ไขครั้งสุดท้าย + Disabled share + - Title - หัวเรื่อง + Import from + - Username - ชื่อผู้ใช้ + Export to + - URL - URL + Synchronize with + - EntryModel + KeyComponentWidget - Ref: - Reference abbreviation - อ้างอิง: + Key Component + - Group - กลุ่ม + Key Component Description + - Title - หัวเรื่อง + Cancel + ยกเลิก - Username - ชื่อผู้ใช้ + Key Component set, click to change or remove + - URL - URL + Add %1 + Add a key component + - Never - ไม่เลย + Change %1 + Change a key component + - Password - รหัสผ่าน + Remove %1 + Remove a key component + - Notes - บันทึก + %1 set, click to change or remove + Change or remove a key component + + + + KeyFileEditWidget - Expires - หมดอายุ + Browse + ดู - Created + Generate สร้าง - Modified + Key File - Accessed + <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> - Attachments - แฟ้มแนบ + Legacy key file format + - - - EntryView - Customize View + 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. - Hide Usernames + Error loading the key file '%1' +Message: %2 - Hide Passwords - + Key files + แฟ้มกุญแจ - Fit to window - + All files + ทุกแฟ้ม - Fit to contents - + Create Key File... + สร้างแฟ้มกุญแจ... - Reset to defaults + Error creating key file - Attachments (icon) + Unable to create key file: %1 - - - Group - Recycle Bin - ถังขยะ + Select a key file + เลือกแฟ้มกุญแจ - HostInstaller + MainWindow - KeePassXC: Cannot save file! - KeePassXC: ไม่สามารถบันทึกแฟ้ม! + &Database + ฐานข้อมูล (&D) - Cannot save the native messaging script file. + &Recent databases + ฐานข้อมูลที่เพิ่งใช้ (&R) + + + &Help + ช่วยเหลือ (&H) + + + E&ntries - - - HttpPasswordGeneratorWidget - Length: - ความยาว: + &Groups + กลุ่ม (&G) - Character Types - ชนิดอักขระ + &Tools + เครื่องมือ (&T) - Upper Case Letters - อักษรตัวพิมพ์ใหญ่ + &Quit + ออก (&Q) - A-Z - A-Z + &About + เกี่ยวกับ (&A) - Lower Case Letters - อักษรตัวพิมพ์เล็ก + &Open database... + เปิดฐานข้อมูล (&O)... - a-z - a-z + &Save database + บันทึกฐานข้อมูล (&S) + + + &Close database + ปิดฐานข้อมูล (&C) + + + &Delete entry + ลบรายการ (&D) + + + &Edit group + แก้ไขกลุ่ม (&E) + + + &Delete group + ลบกลุ่ม (&D) - Numbers - ตัวเลข + Sa&ve database as... + บันทึกฐานข้อมูลเป็น (&V)... - 0-9 - 0-9 + Database settings + การตั้งค่าฐานข้อมูล - Special Characters - อักขระพิเศษ + &Clone entry + โคลนรายการ (&C) - /*_& ... - /*_& ... + Copy &username + คัดลอกชื่อผู้ใช้ (&U) - Exclude look-alike characters - ไม่ใช้อักขระที่หน้าตาคล้ายกัน + Copy username to clipboard + คัดลอกชื่อผู้ใช้ไปคลิปบอร์ด - Ensure that the password contains characters from every group - ทำให้แน่ใจว่ารหัสผ่านมีอักขระจากทุกกลุ่ม + Copy password to clipboard + คัดลอกรหัสผ่านไปคลิปบอร์ด - Extended ASCII - + &Settings + การตั้งค่า (&S) - - - KMessageWidget - &Close - ปิด (&C) + Password Generator + ตัวสร้างรหัสผ่าน - Close message - ปิดข้อความ + &Lock databases + ล็อกฐานข้อมูล (&L) - - - Kdbx3Reader - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ + &Title + หัวเรื่อง (&T) - Unable to issue challenge-response. + Copy title to clipboard - Wrong key or database file is corrupt. - + &URL + URL (&U) - - - Kdbx3Writer - Unable to issue challenge-response. + Copy URL to clipboard - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ + &Notes + บันทึก (&N) - - - Kdbx4Reader - missing database headers + Copy notes to clipboard - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ + &Export to CSV file... + ส่งออกไปเป็นแฟ้ม CSV... (&E) - Invalid header checksum size - + Set up TOTP... + ติดตั้ง TOTP... - Header SHA256 mismatch - + Copy &TOTP + คัดลอก &TOTP - Wrong key or database file is corrupt. (HMAC mismatch) - + E&mpty recycle bin + เทถังรีไซเคิลทิ้ง (&M) - Unknown cipher - + Clear history + ล้างประวัติ - Invalid header id size - + Access error for config file %1 + มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 - Invalid header field length - + Settings + ตั้งค่า - Invalid header data length - + Toggle window + สลับหน้าต่าง - Failed to open buffer for KDF parameters in header - + Quit KeePassXC + ออกจาก KeePassXC - Unsupported key derivation function (KDF) or invalid parameters + 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. - Legacy header fields found in KDBX4 file. + &Donate - Invalid inner header id size + Report a &bug - Invalid inner header field length + 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. - Invalid inner header binary size + &Import - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data + Copy att&ribute... - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data + TOTP... - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data + &New database... - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data + Create a new database - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data + &Merge from database... - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data + Merge from another KDBX database - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data + &New entry - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data + Add a new entry - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data + &Edit entry - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data + View or edit entry - Invalid variant map entry type - Translation: variant map = data structure for storing meta data + &New group - Invalid variant map field type size - Translation: variant map = data structure for storing meta data + Add a new group - - - Kdbx4Writer - Invalid symmetric cipher algorithm. + Change master &key... - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher + &Database settings... - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ + Copy &password + - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data + Perform &Auto-Type - - - KdbxReader - Invalid cipher uuid length + Open &URL - Unsupported cipher + KeePass 1 database... - Invalid compression flags length + Import a KeePass 1 database - Unsupported compression algorithm + CSV file... - Invalid master seed size + Import a CSV file - Invalid transform seed size + Show TOTP... - Invalid transform rounds size + Show TOTP QR Code... - Invalid start bytes size + Check for Updates... - Invalid random stream id size + Share entry - Invalid inner random stream cipher + 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 a KeePass database. - ไม่ใช่ฐานข้อมูล KeePass + Check for updates on startup? + - 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. + Would you like KeePassXC to check for updates on startup? - Unsupported KeePass 2 database version. + You can always check for updates manually from the application menu. - KdbxXmlReader + Merger - XML parsing failure: %1 + Creating missing %1 [%2] - No root group + Relocating %1 [%2] - Missing icon uuid or data + Overwriting %1 [%2] - Missing custom data key or value + older entry merged from database "%1" - Multiple group elements + Adding backup for older target %1 [%2] - Null group uuid + Adding backup for older source %1 [%2] - Invalid group icon number + Reapplying older target entry on top of newer source %1 [%2] - Invalid EnableAutoType value + Reapplying older source entry on top of newer target %1 [%2] - Invalid EnableSearching value + Synchronizing from newer source %1 [%2] - No group uuid found + Synchronizing from older source %1 [%2] - Null DeleteObject uuid + Deleting child %1 [%2] - Missing DeletedObject uuid or time + Deleting orphan %1 [%2] - Null entry uuid + Changed deleted objects - Invalid entry icon number + Adding missing icon %1 + + + NewDatabaseWizard - History element in history entry + Create a new KeePassXC database... - No entry uuid found - + Root + Root group + รูต + + + NewDatabaseWizardPage - History element with different uuid + WizardPage - Unable to decrypt entry string + En&cryption Settings - Duplicate custom attribute found + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Entry string key or value missing + Advanced Settings - Duplicate attachment found + Simple Settings + + + NewDatabaseWizardPageEncryption - Entry binary key or value missing + Encryption Settings - Auto-type association window or sequence missing + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + NewDatabaseWizardPageMasterKey - Invalid bool value + Database Master Key - Invalid date time value + A master key known only to you protects your database. + + + NewDatabaseWizardPageMetaData - Invalid color value + General Database Information - Invalid color rgb part + Please fill in the display name and an optional description for your new database: + + + OpenSSHKey - Invalid number value + Invalid key file, expecting an OpenSSH key - Invalid uuid value + PEM boundary mismatch - Unable to decompress binary - Translator meant is a binary data inside an entry + Base64 decoding failed - - - KeePass1OpenWidget - Import KeePass1 database - นำเข้าฐานข้อมูล KeePass1 + Key file way too small. + - Unable to open the database. - ไม่สามารถเปิดฐานข้อมูล + Key file magic header id invalid + - - - KeePass1Reader - Unable to read keyfile. - ไม่สามารถอ่านแฟ้มกุญแจได้ + Found zero keys + - Not a KeePass database. - ไม่ใช่ฐานข้อมูล KeePass + Failed to read public key. + - Unsupported encryption algorithm. + Corrupted key file, reading private key failed - Unsupported KeePass database version. + No private key payload to decrypt - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher + Trying to run KDF without cipher - Invalid number of groups + Passphrase is required to decrypt this key - Invalid number of entries + Key derivation failed, key file corrupted? - Invalid content hash size + Decryption failed, wrong passphrase? - Invalid transform seed size + Unexpected EOF while reading public key - Invalid number of transform rounds + Unexpected EOF while reading private key - Unable to construct group tree + Can't write public key as it is empty - Root - รูต + Unexpected EOF when writing public key + - Unable to calculate master key - ไม่สามารถคำนวญกุญแมาสเตอร์ได้ + Can't write private key as it is empty + - Wrong key or database file is corrupt. + Unexpected EOF when writing private key - Key transformation failed + Unsupported key type: %1 - Invalid group field type number + Unknown cipher: %1 - Invalid group field size + Cipher IV is too short for MD5 kdf - Read group field data doesn't match size + Unknown KDF: %1 - Incorrect group id field size + Unknown key type: %1 + + + PasswordEditWidget - Incorrect group creation time field size - + Enter password: + ป้อนรหัสผ่าน: - Incorrect group modification time field size + Confirm password: - Incorrect group access time field size - + Password + รหัสผ่าน - Incorrect group expiry time field size + <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> - Incorrect group icon field size + Password cannot be empty. - Incorrect group level field size + Passwords do not match. - Invalid group field type + Generate master password + + + PasswordGeneratorWidget - Missing group id or level - + %p% + %p% - Missing entry field type number - + Password: + รหัสผ่าน: - Invalid entry field size - + strength + Password strength + ความแข็งแรง - Read entry field data doesn't match size - + entropy + เอนโทรปี - Invalid entry uuid field size - + Password + รหัสผ่าน - Invalid entry group id field size - + Character Types + ชนิดอักขระ - Invalid entry icon field size - + Upper Case Letters + อักษรตัวพิมพ์ใหญ่ - Invalid entry creation time field size - + Lower Case Letters + อักษรตัวพิมพ์เล็ก - Invalid entry modification time field size - + Numbers + ตัวเลข - Invalid entry expiry time field size - + Special Characters + อักขระพิเศษ - Invalid entry field type + Extended ASCII - - - KeePass2 - AES: 256-bit - AES: 256 บิต + Exclude look-alike characters + ไม่ใช้อักขระที่หน้าตาคล้ายกัน - Twofish: 256-bit - Twofish: 256 บิต + Pick characters from every group + เลือกใช้ตัวอักขระจากทุกกลุ่ม - ChaCha20: 256-bit - ChaCha20: 256 บิต + &Length: + ความยาว (&L): - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Passphrase + วลีรหัสผ่าน - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Wordlist: + รายการคำ: - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – แนะนำ) + Word Separator: + ตัวแบ่งคำ: - - - Main - Existing single-instance lock file is invalid. Launching new instance. - + Copy + คัดลอก - The lock file could not be created. Single-instance mode disabled. - + Accept + ตกลง - Another instance of KeePassXC is already running. - + Close + ปิด - Fatal error while testing the cryptographic functions. - + Entropy: %1 bit + เอนโทรปี: %1 บิต - KeePassXC - Error - KeePassXC - ข้อผิดพลาด + Password Quality: %1 + คุณภาพรหัสผ่าน: %1 - - - MainWindow - &Database - ฐานข้อมูล (&D) + Poor + Password quality + แย่ - &Recent databases - ฐานข้อมูลที่เพิ่งใช้ (&R) + Weak + Password quality + อ่อนแอ - Import - นำเข้า + Good + Password quality + ดี - &Help - ช่วยเหลือ (&H) + Excellent + Password quality + ดีมาก - E&ntries + ExtendedASCII - Copy att&ribute to clipboard + Switch to advanced mode - Time-based one-time password + Advanced + ขั้นสูง + + + Upper Case Letters A to F - &Groups - กลุ่ม (&G) + A-Z + A-Z - &Tools - เครื่องมือ (&T) + Lower Case Letters A to F + - &Quit - ออก (&Q) + a-z + a-z - &About - เกี่ยวกับ (&A) + 0-9 + 0-9 - &Open database... - เปิดฐานข้อมูล (&O)... + Braces + - &Save database - บันทึกฐานข้อมูล (&S) + {[( + - &Close database - ปิดฐานข้อมูล (&C) + Punctuation + - &New database - ฐานข้อมูลใหม่ (&N) + .,:; + - Merge from KeePassX database - ผสานจากฐานข้อมูล KeePassX + Quotes + - &Add new entry - เพิ่มรายการใหม่ (&A) + " ' + - &View/Edit entry - ดูและแก้ไขรายการ (&V) + Math + - &Delete entry - ลบรายการ (&D) + <*+!?= + - &Add new group - เพิ่มกลุ่มใหม่ (&A) + Dashes + - &Edit group - แก้ไขกลุ่ม (&E) + \_|-/ + - &Delete group - ลบกลุ่ม (&D) + Logograms + - Sa&ve database as... - บันทึกฐานข้อมูลเป็น (&V)... + #$%&&@^`~ + - Change &master key... - เปลี่ยนกุญแจมาสเตอร์ (&M) + Switch to simple mode + - &Database settings - การตั้งค่าฐานข้อมูล (&D) + Simple + - Database settings - การตั้งค่าฐานข้อมูล + Character set to exclude from generated password + - &Clone entry - โคลนรายการ (&C) + Do not include: + - &Find - ค้นหา (&F) + Add non-hex letters to "do not include" list + - Copy &username - คัดลอกชื่อผู้ใช้ (&U) + Hex + - Copy username to clipboard - คัดลอกชื่อผู้ใช้ไปคลิปบอร์ด + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - Cop&y password - คัดลอกรหัสผ่าน (&Y) + Word Co&unt: + - Copy password to clipboard - คัดลอกรหัสผ่านไปคลิปบอร์ด + Regenerate + + + + QApplication - &Settings - การตั้งค่า (&S) + KeeShare + + + + QFileDialog - Password Generator - ตัวสร้างรหัสผ่าน + Select + + + + QMessageBox - &Perform Auto-Type + Overwrite - &Open URL - เปิด URL (&O) + Delete + ลบ - &Lock databases - ล็อกฐานข้อมูล (&L) + Move + - &Title - หัวเรื่อง (&T) + Empty + - Copy title to clipboard + Remove + นำออก + + + Skip - &URL - URL (&U) + Disable + ปิดใช้ - Copy URL to clipboard + Merge + + + + + QObject + + Database not opened - &Notes - บันทึก (&N) + Database hash not available + - Copy notes to clipboard + Client public key not received - &Export to CSV file... - ส่งออกไปเป็นแฟ้ม CSV... (&E) + Cannot decrypt message + - Import KeePass 1 database... - นำเข้าฐานข้อมูล KeePass1... + Action cancelled or denied + - Import CSV file... - นำเข้าแฟ้ม CSV... + KeePassXC association failed, try again + - Re&pair database... - ซ่อมฐานข้อมูล... (&P) + Encryption key is not recognized + ไม่รู้จักกุญแจเข้ารหัสลับ - Show TOTP - แสดง TOTP + Incorrect action + การกระทำที่ไม่ถูกต้อง - Set up TOTP... - ติดตั้ง TOTP... + Empty message received + - Copy &TOTP - คัดลอก &TOTP + No URL provided + ไม่มี URL ให้มา - E&mpty recycle bin - เทถังรีไซเคิลทิ้ง (&M) + No logins found + - Clear history - ล้างประวัติ + Unknown error + ความผิดพลาดที่ไม่รู้จัก - Access error for config file %1 - มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 + Add a new entry to a database. + - <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> + Path of the database. - read-only - อ่านอย่างเดียว + Key file of the database. + แฟ้มกุญแจของฐานข้อมูล - Settings - ตั้งค่า + path + - Toggle window - สลับหน้าต่าง + Username for the entry. + - Quit KeePassXC - ออกจาก KeePassXC + username + ชื่อผู้ใช้ - KeePass 2 Database - ฐานข้อมูล KeePass 2 + URL for the entry. + - All files - ทุกแฟ้ม + URL + URL - Open database - เปิดฐานข้อมูล + Prompt for the entry's password. + - Save repaired database - บันทึกฐานข้อมูลที่ซ่อมแล้ว + Generate a password for the entry. + - Writing the database failed. - การเขียนฐานข้อมูลล้มเหลว + Length for the generated password. + - Please touch the button on your YubiKey! - กรุณาแตะปุ่มบน YubiKey ของคุณ! + length + ความยาว - 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. + Path of the entry to add. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key + Copy an entry's password to the clipboard. - PEM boundary mismatch + Path of the entry to clip. + clip = copy to clipboard - Base64 decoding failed + Timeout in seconds before clearing the clipboard. - Key file way too small. + Edit an entry. - Key file magic header id invalid + Title for the entry. - Found zero keys - + title + หัวเรื่อง - Failed to read public key. + Path of the entry to edit. - Corrupted key file, reading private key failed + Estimate the entropy of a password. - No private key payload to decrypt + Password for which to estimate the entropy. - Trying to run KDF without cipher + Perform advanced analysis on the password. - Passphrase is required to decrypt this key - + Extract and print the content of a database. + สกัดและพิมพ์เนื้อหาของฐานข้อมูล - Key derivation failed, key file corrupted? - + Path of the database to extract. + path ของฐานข้อมูลที่จะสกัดเนื้อหา - Decryption failed, wrong passphrase? + Insert password to unlock %1: - Unexpected EOF while reading public key + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. - Unexpected EOF while reading private key + + +Available commands: + - Can't write public key as it is empty - + Name of the command to execute. + ชื่อของคำสั่งที่จะดำเนินการ - Unexpected EOF when writing public key - + List database entries. + แจงรายการฐานข้อมูล - Can't write private key as it is empty + Path of the group to list. Default is / - Unexpected EOF when writing private key + Find entries quickly. - Unsupported key type: %1 - + Search term. + คำค้น - Unknown cipher: %1 + Merge two databases. + ผสานสองฐานข้อมูล + + + Path of the database to merge into. - Cipher IV is too short for MD5 kdf + Path of the database to merge from. - Unknown KDF: %1 + Use the same credentials for both database files. - Unknown key type: %1 + Key file of the database to merge from. - - - OptionDialog - Dialog + Show an entry's information. - This is required for accessing your databases from ChromeIPass or PassIFox + 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. - Enable KeePassHTTP server + attribute - General - ทั่วไป + Name of the entry to show. + ชื่อของรายการที่จะแสดง - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - + NULL device + อุปกรณ์ NULL - Only returns the best matches for a specific URL instead of all entries for the whole domain. + error reading from device - &Return only best matching entries - + malformed string + รูปแบบสตริงไม่ถูกต้อง - Re&quest to unlock the database if it is locked - + missing closing quote + ไม่มีเครื่องหมายคำพูดปิด - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - + Group + กลุ่ม - &Match URL schemes - + Title + หัวเรื่อง - Sort matching entries by &username - + Username + ชื่อผู้ใช้ - Sort &matching entries by title - + Password + รหัสผ่าน - R&emove all shared encryption keys from active database - + Notes + บันทึก - Re&move all stored permissions from entries in active database - + Last Modified + แก้ไขล่าสุด - Password Generator - ตัวสร้างรหัสผ่าน + Created + สร้าง - Advanced - ขั้นสูง + Browser Integration + การทำงานร่วมกับเบราว์เซอร์ - Always allow &access to entries + YubiKey[%1] Challenge Response - Slot %2 - %3 - Always allow &updating entries + Press - Only the selected database has to be connected with a client. + Passive - Searc&h in all opened databases for matching entries + SSH Agent - Automatically creating or updating string fields is not supported. + Generate a new random diceware passphrase. - &Return advanced string fields which start with "KPH: " + Word count for the diceware passphrase. - HTTP Port: - พอร์ต HTTP: + Wordlist for the diceware generator. +[Default: EFF English] + - Default port: 19455 - พอร์ตมาตรฐาน: 19455 + Generate a new random password. + - KeePassXC will listen to this port on 127.0.0.1 + Invalid value for password length %1. - <b>Warning:</b> The following options can be dangerous! + Could not create entry with path %1. - <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> + Enter password for new entry: - Cannot bind to privileged ports + Writing the database failed %1. - Cannot bind to privileged ports below 1024! -Using default port 19455. + Successfully added entry %1. - - - PasswordGeneratorWidget - %p% - %p% + Copy the current TOTP to the clipboard. + - Password: - รหัสผ่าน: + Invalid timeout value %1. + - strength - Password strength - ความแข็งแรง + Entry %1 not found. + - entropy - เอนโทรปี + Entry with path %1 has no TOTP set up. + - Password - รหัสผ่าน + Entry's current TOTP copied to the clipboard! + - Character Types - ชนิดอักขระ + Entry's password copied to the clipboard! + + + + Clearing the clipboard in %1 second(s)... + - Upper Case Letters - อักษรพิมพ์ใหญ่ + Clipboard cleared! + - Lower Case Letters - อักษรตัวพิมพ์เล็ก + Silence password prompt and other secondary outputs. + - Numbers - ตัวเลข + count + CLI parameter + - Special Characters - อักขระพิเศษ + Invalid value for password length: %1 + - Extended ASCII + Could not find entry with path %1. - Exclude look-alike characters - ไม่ใช้อักขระที่หน้าตาคล้ายกัน + Not changing any field for entry %1. + - Pick characters from every group - เลือกใช้ตัวอักขระจากทุกกลุ่ม + Enter new password for entry: + - &Length: - ความยาว (&L): + Writing the database failed: %1 + - Passphrase - วลีรหัสผ่าน + Successfully edited entry %1. + - Wordlist: - รายการคำ: + Length %1 + - Word Count: - จำนวนคำ: + Entropy %1 + - Word Separator: - ตัวแบ่งคำ: + Log10 %1 + - Generate - สร้าง + Multi-word extra bits %1 + - Copy - คัดลอก + Type: Bruteforce + - Accept - ตกลง + Type: Dictionary + - Close - ปิด + Type: Dict+Leet + - Apply - ใช้ + Type: User Words + - Entropy: %1 bit - เอนโทรปี: %1 บิต + Type: User+Leet + - Password Quality: %1 - คุณภาพรหัสผ่าน: %1 + Type: Repeated + - Poor - Password quality - แย่ + Type: Sequence + - Weak - Password quality - อ่อนแอ + Type: Spatial + - Good - Password quality - ดี + Type: Date + - Excellent - Password quality - ดีมาก + Type: Bruteforce(Rep) + - - - QObject - Database not opened + Type: Dictionary(Rep) - Database hash not available + Type: Dict+Leet(Rep) - Client public key not received + Type: User Words(Rep) - Cannot decrypt message + Type: User+Leet(Rep) - Timeout or cannot connect to KeePassXC + Type: Repeated(Rep) - Action cancelled or denied + Type: Sequence(Rep) - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + Type: Spatial(Rep) - KeePassXC association failed, try again + Type: Date(Rep) - Key change was not successful - การเปลี่ยนกุญแจไม่สำเร็จ + Type: Unknown%1 + - Encryption key is not recognized - ไม่รู้จักกุญแจเข้ารหัสลับ + Entropy %1 (%2) + - No saved databases found - ไม่มีฐานข้อมูลที่ถูกบันทึกอยู่ + *** Password length (%1) != sum of length of parts (%2) *** + - Incorrect action - การกระทำที่ไม่ถูกต้อง + Failed to load key file %1: %2 + - Empty message received + File %1 does not exist. - No URL provided - ไม่มี URL ให้มา + Unable to open file %1. + - No logins found + Error while reading the database: +%1 - Unknown error - ความผิดพลาดที่ไม่รู้จัก + Error while parsing the database: +%1 + - Add a new entry to a database. + Length of the generated password - Path of the database. + Use lowercase characters - Key file of the database. - แฟ้มกุญแจของฐานข้อมูล + Use uppercase characters + - path + Use numbers. - Username for the entry. + Use special characters - username - ชื่อผู้ใช้ + Use extended ASCII + - URL for the entry. + Exclude character set - URL - URL + chars + - Prompt for the entry's password. + Exclude similar looking characters - Generate a password for the entry. + Include characters from every selected group - Length for the generated password. + Recursively list the elements of the group. - length - ความยาว + Cannot find group %1. + - Path of the entry to add. + Error reading merge file: +%1 - Copy an entry's password to the clipboard. + Unable to save database to file : %1 - Path of the entry to clip. - clip = copy to clipboard + Unable to save database to file: %1 - Timeout in seconds before clearing the clipboard. + Successfully recycled entry %1. - Edit an entry. + Successfully deleted entry %1. - Title for the entry. + Show the entry's current TOTP. - title - หัวเรื่อง + ERROR: unknown attribute %1. + - Path of the entry to edit. + No program defined for clipboard manipulation - Estimate the entropy of a password. + Unable to start program %1 - Password for which to estimate the entropy. + file empty - Perform advanced analysis on the password. + %1: (row, col) %2,%3 - Extract and print the content of a database. - สกัดและแสดงเนื้อหาของฐานข้อมูล + AES: 256-bit + AES: 256 บิต - Path of the database to extract. - path ของฐานข้อมูลที่จะสกัดเนื้อหา + Twofish: 256-bit + Twofish: 256 บิต - Insert password to unlock %1: + 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 - Failed to load key file %1 : %2 + Invalid Key + TOTP - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. + Message encryption failed. - - -Available commands: - + No groups found - Name of the command to execute. - ชื่อของคำสั่งที่จะดำเนินการ + Create a new database. + - List database entries. - แจงรายการฐานข้อมูล + File %1 already exists. + - Path of the group to list. Default is / + Loading the key file failed - Find entries quickly. + No key is set. Aborting database creation. - Search term. - คำค้น + Failed to save the database: %1. + - Merge two databases. - ผสานสองฐานข้อมูล + Successfully created new database. + - Path of the database to merge into. + Insert password to encrypt database (Press enter to leave blank): - Path of the database to merge from. + Creating KeyFile %1 failed: %2 - Use the same credentials for both database files. + Loading KeyFile %1 failed: %2 - Key file of the database to merge from. + Remove an entry from the database. - Show an entry's information. + Path of the entry to remove. - 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. + Existing single-instance lock file is invalid. Launching new instance. - attribute + The lock file could not be created. Single-instance mode disabled. - Name of the entry to show. - ชื่อของรายการที่จะแสดง + KeePassXC - cross-platform password manager + KeePassXC - แอปจัดการรหัสผ่านข้ามแพลตฟอร์ม - NULL device - อุปกรณ์ NULL + filenames of the password databases to open (*.kdbx) + - error reading from device + path to a custom config file - file empty ! - - แฟ้มว่างเปล่า! - + key file of the database + แฟ้มกุญแจสำหรับฐานข้อมูลดังกล่าว - malformed string - รูปแบบสตริงไม่ถูกต้อง + read password of the database from stdin + - missing closing quote - ไม่มีเครื่องหมายคำพูดปิด + Parent window handle + - Group - กลุ่ม + Another instance of KeePassXC is already running. + - Title - หัวเรื่อง + Fatal error while testing the cryptographic functions. + - Username - ชื่อผู้ใช้ + KeePassXC - Error + KeePassXC - ข้อผิดพลาด - Password - รหัสผ่าน + Database password: + + + + QtIOCompressor - Notes - บันทึก + Internal zlib error when compressing: + - Last Modified - แก้ไขล่าสุด + Error writing to underlying device: + - Created - สร้าง + Error opening underlying device: + - Legacy Browser Integration + Error reading data from underlying device: - Browser Integration - การทำงานร่วมกับเบราว์เซอร์ + Internal zlib error when decompressing: + + + + QtIOCompressor::open - YubiKey[%1] Challenge Response - Slot %2 - %3 + The gzip format not supported in this version of zlib. - Press + Internal zlib error: + ความผิดพลาดภายในของ zlib: + + + + SSHAgent + + Agent connection failed. - Passive + Agent protocol error. - SSH Agent + No agent running, cannot add identity. - Generate a new random diceware passphrase. + No agent running, cannot remove identity. - Word count for the diceware passphrase. + Agent refused this identity. Possible reasons include: - count + The key has already been added. - Wordlist for the diceware generator. -[Default: EFF English] + Restricted lifetime is not supported by the agent (check options). - Generate a new random password. + A confirmation request is not supported by the agent (check options). + + + SearchHelpWidget - Length of the generated password. + Search Help - Use lowercase characters in the generated password. + Search terms are as follows: [modifiers][field:]["]term["] - Use uppercase characters in the generated password. + Every search term must match (ie, logical AND) - Use numbers in the generated password. + Modifiers - Use special characters in the generated password. + exclude term from results - Use extended ASCII in the generated password. + match term exactly - - - QtIOCompressor - Internal zlib error when compressing: + use regex in term - Error writing to underlying device: + Fields - Error opening underlying device: + Term Wildcards - Error reading data from underlying device: + match anything - Internal zlib error when decompressing: + match one - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. + logical OR - Internal zlib error: - ความผิดพลาดภายในของ zlib: + Examples + SearchWidget - - Search... - ค้นหา... - Search ค้นหา @@ -3627,311 +4961,317 @@ Available commands: Clear ล้าง - - Case Sensitive - คำนึงถึงอักษรตัวใหญ่เล็ก - Limit search to selected group จำกัดการค้นไว้เฉพาะในกลุ่มที่เลือก - - - Service - KeePassXC: New key association request + 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. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut - KeePassXC: Overwrite existing key? - KeePassXC: เขียนทับกุญแจที่มีอยู่เดิม? + Case sensitive + + + + SettingsWidgetKeeShare - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? + Active - KeePassXC: Update Entry - KeePassXC: ปรับปรุงรายการ + Allow export + - Do you want to update the information in %1 - %2? + Allow import - KeePassXC: Database locked! - KeePassXC: ฐานข้อมูลถูกล็อก! + Own certificate + - 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: + - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Signer + - KeePassXC: No keys found - KeePassXC: ไม่พบกุญแจ + Key: + กุญแจ: + + + Generate + สร้าง - No shared encryption-keys found in KeePassHttp Settings. + Import + นำเข้า + + + Export - KeePassXC: Settings not available! - KeePassXC: ไม่มีการตั้งค่าที่ใช้ได้! + Imported certificates + - The active database does not contain an entry of KeePassHttp Settings. + Trust - Removing stored permissions... + Ask - Abort - หยุด + Untrust + - KeePassXC: Removed permissions - KeePassXC: การอนุญาตถูกนำออก + Remove + นำออก - - Successfully removed permissions from %n entries. - + + Path + - KeePassXC: No entry with permissions found! + Status - The active database does not contain an entry with permissions. + Fingerprint - - - SettingsWidget - Application Settings - การตั้งค่าแอป + Certificate + - General - ทั่วไป + Trusted + - Security - ความมั่นคง + Untrusted + - Access error for config file %1 - มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 + Unknown + - - - SettingsWidgetGeneral - Basic Settings - การตั้งค่าพื้นฐาน + key.share + Filetype for KeeShare key + - Start only a single instance of KeePassXC + KeeShare key file - Remember last databases - จำฐานข้อมูลล่าสุด + All files + ทุกแฟ้ม - Remember last key files and security dongles + Select path - Load previous databases on startup + Exporting changed certificate - Automatically save on exit - บันทึกอัตโนมัติตอนออก + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Automatically save after every change - บันทึกอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง + %1.%2 + Template for KeeShare key file + + + + ShareObserver - Automatically reload the database when modified externally + Import from container without signature - Minimize when copying to clipboard - ย่อหน้าต่างเมื่อคัดลอกไปยังคลิปบอร์ด + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Minimize window at application startup - ย่อหน้าต่างลงเล็กสุดตอนเริ่มแอป + Import from container with certificate + - Use group icon on entry creation + Do you want to trust %1 with the fingerprint of %2 from %3 - Don't mark database as modified for non-data changes (e.g., expanding groups) + Not this time - Hide the Details view - ซ่อนมุมมองละเอียด + Never + ไม่เลย - Show a system tray icon - แสดงไอคอนสำหรับ system tray + Always + - Hide window to system tray when minimized + Just this time - Hide window to system tray instead of app exit - ซ่อนหน้าต่างไว้ที่ system tray แทนการออกจากแอป + Import from %1 failed (%2) + - Dark system tray icon + Import from %1 successful (%2) - Language - ภาษา + Imported from %1 + - Auto-Type - Auto-Type + Signed share container are not supported - import prevented + - Use entry title to match windows for global Auto-Type + File is not readable - Use entry URL to match windows for global Auto-Type + Invalid sharing container - Always ask before performing Auto-Type + Untrusted import prevented - Global Auto-Type shortcut + Successful signed import - Auto-Type delay - การหน่วง Auto-Type + Unexpected error + - ms - Milliseconds - มิลลิวิ + Unsigned share container are not supported - import prevented + - Startup + Successful unsigned import - File Management + File does not exist - Safely save database files (may be incompatible with Dropbox, etc) + Unknown share container type - Backup database file before saving + Overwriting signed share container is not supported - export prevented - Entry Management + Could not write export container (%1) - General - ทั่วไป + Could not embed signature (%1) + - - - SettingsWidgetSecurity - Timeouts + Could not embed database (%1) - Clear clipboard after - ล้างคลิปบอร์ดหลัง + Overwriting unsigned share container is not supported - export prevented + - sec - Seconds - วิ + Could not write export container + - Lock databases after inactivity of - ล็อกฐานข้อมูลหลังไม่มีการใช้งาน + Unexpected export error occurred + - Convenience - ความสะดวก + Export to %1 failed (%2) + - Lock databases when session is locked or lid is closed + Export to %1 successful (%2) - Lock databases after minimizing the window - ล็อกฐานข้อมูลหลังย่อหน้าต่างลงเล็กสุด + Export to %1 + + + + TotpDialog - Don't require password repeat when it is visible - ไม่ต้องถามรหัสผ่านซ้ำถ้ามองเห็นรหัสผ่านอยู่ + Timed Password + รหัสผ่านกำหนดเวลา - Show passwords in cleartext by default - แสดงรหัสผ่านอย่างเปิดเผยโดยปริยาย + 000000 + 000000 - Hide passwords in the preview panel - + Copy + คัดลอก + + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Hide entry notes by default - + Copy + คัดลอก - Privacy - ความเป็นส่วนตัว + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Use Google as fallback for downloading website icons - ใช้กูเกิลเป็นวิธีสำรองเพื่อดาวน์โหลดไอคอนเว็บไซต์ + There was an error creating the QR code. + - Re-lock previously locked database after performing Auto-Type + Closing in %1 seconds. - 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 หลัก + sec + Seconds + วิ + + + Code size: + ขนาดรหัส: 6 digits 6 หลัก - Code size: - ขนาดรหัส: + 7 digits + - sec - Seconds - วิ + 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. + + + + 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 + - - - UnlockDatabaseWidget - Unlock database - ปลดล็อกฐานข้อมูล + 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 - - Remove an entry from the database. - - - - Path of the database. - - + YubiKeyEditWidget - Path of the entry to remove. - - - - KeePassXC - cross-platform password manager - KeePassXC - แอปจัดการรหัสผ่านข้ามแพลตฟอร์ม + Refresh + เรียกใหม่ - filenames of the password databases to open (*.kdbx) + YubiKey Challenge-Response - path to a custom config file + <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> - key file of the database - แฟ้มกุญแจสำหรับฐานข้อมูลดังกล่าว - - - read password of the database from stdin + No YubiKey detected, please ensure it's plugged in. - Parent window handle + No YubiKey inserted. diff --git a/share/translations/keepassx_tr.ts b/share/translations/keepassx_tr.ts index b10711c9d4..84a331e3d0 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> @@ -38,80 +38,290 @@ Panoya kopyala - Version %1 - - Sürüm %1 - + Project Maintainers: + Proje Sahipleri: + + + 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. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + 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 - Revision: %1 - Düzeltme: %1 + Application Settings + Uygulama Ayarları - Distribution: %1 - Dağıtım: %1 + General + Genel - Libraries: - Kütüphaneler: + Security + Güvenlik - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - İşletim sistemi: %1 -MİB mimarisi: %2 -Çekirdek: %3 %4 + Access error for config file %1 + %1 yapılandırma dosyası için erişim hatası - Enabled extensions: - Etkin eklentiler: + Icon only + Sadece simge - Project Maintainers: - Proje Sahipleri: + Text only + Sadece yazı - 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. + Text beside icon + Simge yanında yazı - Build Type: %1 - - Yapı Tarzı: %1 - + Text under icon + Simge altında yazı + + + Follow style + Takip tarzı - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP Erişim Onayı + Basic Settings + Temel Ayarlar - Remember this decision - Bu kararı hatırla + Startup + Başlangıç - Allow - İzin ver + Start only a single instance of KeePassXC + KeePassXC 'nin yalnızca tek bir örneğini başlat - Deny - Reddet + Remember last databases + Geçmiş veritabanlarını hatırla - %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. + 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ı - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - SSH Aracısı'nı etkinleştir (yeniden başlatma gerektirir) + 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. @@ -362,20 +585,41 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin. <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 (*.*) + Select custom proxy location + Özel proxy konumunu seçin - Executable Files (*) - Yürütülebilir Dosyalar (*) + &Tor Browser + &Tor Tarayıcı - Select custom proxy location - Özel proxy konumunu seçin + <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 + - 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. + 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! + Abort + İptal - 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. + Converting attributes to custom data… + Öznitelikleri özel verilere dönüştürüyor… - KeePassXC: Settings not available! - KeePassXC: Ayarlar mevcut değil! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Dönüştürülmüş KeePassHTTP özellikleri - The active database does not contain a settings entry. - Aktif veritabanı bir ayar girişi içermiyor. + 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 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 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 - - - 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ı. - - - KeePassXC: No entry with permissions found! - KeePassXC: İzinli girdi bulunamadı! - - - The active database does not contain an entry with permissions. - Etkin veritabanı izinli bir giriş içermiyor. - - - - ChangeMasterKeyWidget - - Password - Şifre - - - Enter password: - Şifre gir: - - - Repeat password: - Şifreyi yinele: - - - &Key file - &Anahtar dosyası - - - 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? + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: KeePassHTTP özelliklerine sahip bir giriş bulunamadı! - Different passwords supplied. - Farklı şifreler sağlandı. + The active database does not contain an entry with KeePassHTTP attributes. + Aktif veritabanı KeePassHTTP özelliklerine sahip bir giriş içermiyor. - Failed to set %1 as the Key file: -%2 - %1 anahtar dosyası olarak ayarlanamadı: -%2 + KeePassXC: Legacy browser integration settings detected + KeePassXC: Eski tarayıcı entegrasyon ayarları tespit edildi - Legacy key file format - Eski anahtar dosya biçimi + KeePassXC: Create a new group + - 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. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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: + Özgün veri: - Error(s) detected in CSV file ! - CSV dosyasında hata(lar) tespit edildi ! + Error + Hata - more messages skipped] - daha fazla ileti atlandı] + Empty fieldname %1 + Boş alan adı %1 - Error - Hata + column %1 + sütun %1 - CSV import: writer has errors: - - CSV içe aktarma: yazarda hatalar var: - + Error(s) detected in CSV file! + CSV dosyasında hata(lar) saptandı ! - - - CsvImportWizard - - Error - Hata + + [%n more message(s) skipped] + [%n daha fazla ileti atlandı][%n daha fazla ileti atlandı] - Unable to calculate master key - Ana anahtar hesaplanamıyor + CSV import: writer has errors: +%1 + CSV içe aktarma: yazarken hatalar var: +%1 CsvParserModel - %n byte(s), - %n bayt, %n bayt(lar), + %n column(s) + %n sütun%n sütun + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n satır, %n satır(lar), + %n byte(s) + %n bayt%n bayt - %n column(s) - %n sütun%n sütun(lar) + %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,159 +938,335 @@ 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 + Can't open key file: +%1 + Anahtar dosyası açılamıyor: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Veritabanı açılamıyor. + Passwords + Parolalar + + + DatabaseSettingsDialog - Database opened fine. Nothing to do. - Veritabanı iyi açıldı. Yapılacak bir şey yok. + Advanced Settings + Gelişmiş Ayarlar - Success - Başarılı + General + Genel - The database has been successfully repaired -You can now save it. - Veritabanı başarıyla onarıldı -Artık kaydedebilirsiniz. + Security + Güvenlik - Unable to repair the database. - Veritabanı onarılamıyor. + Master Key + Ana Anahtar - - - DatabaseSettingsWidget - General - Genel + Encryption Settings + Şifreleme Ayarları - Encryption - Şifreleme + Browser Integration + Tarayıcı Tümleşmesi + + + DatabaseSettingsWidgetBrowser - Number of rounds too high - Key transformation rounds - Tur sayısı çok yüksek + KeePassXC-Browser settings + KeePassXC-Tarayıcı ayarları - 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 ile çok yüksek sayıda anahtar dönüştürme turu kullanıyorsunuz. - -Eğer bu sayı ile devam ederseniz, veritabanınızın açılması saatler veya günler (hatta daha uzun) sürebilir! + &Disconnect all browsers + &Tüm tarayıcıları kapatın - Understood, keep number - Anladım, sayı kalsın + Forg&et all site-specific settings on entries + Girdilerde siteye özgü tüm ayarları unut - Cancel - İptal + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + KeePassHTTP niteliklerini &özel verilere taşı - Number of rounds too low - Key transformation rounds - Tur sayısı çok düşük + Stored keys + Saklanan anahtarlar - 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 ile çok düşük sayıda anahtar dönüştürme turu kullanıyorsunuz. - -Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kırılabilir! + Remove + Kaldır - KDF unchanged - KDF değişmedi + Delete the selected key? + Seçili anahtarı silmek istiyor musun? - Failed to transform key with new KDF parameters; KDF unchanged. - Yeni KDF parametreleri ile anahtar dönüştürülemedi; KDF değişmedi. - - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB - - - thread(s) - Threads for parallel execution (KDF settings) - iş parçacıği iş parçacık(ları) + 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. - - - DatabaseSettingsWidgetEncryption - Encryption Algorithm: - Şifreleme Algoritması: + Key + Anahtar - AES: 256 Bit (default) - AES: 256 Bit (varsayılan) + Value + Değer - Twofish: 256 Bit - Twofish: 256 Bit + Enable Browser Integration to access these settings. + Bu ayarlara erişmek için Tarayıcı Tümleşmesini etkinleştirin. - Key Derivation Function: - Anahtar Türetme Fonksiyonu: + Disconnect all browsers + Tüm tarayıcıları kapatın - Transform rounds: - Dönüşüm turları: + 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. - Benchmark 1-second delay - Karşılaştırma 1-saniyelik gecikme + KeePassXC: No keys found + KeePassXC: Anahtar bulunamadı - Memory Usage: - Bellek Kullanımı: + No shared encryption keys found in KeePassXC settings. + KeePassXC ayarlarında paylaşılan şifreleme anahtarı bulunamadı. - Parallelism: - Paralellik: + 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ı. - - - DatabaseSettingsWidgetGeneral - Database Meta Data - Veritabanı Meta Verileri + Forget all site-specific settings on entries + Girdilerde siteye özgü tüm ayarları unut - Database name: - Veritabanı adı: + 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. - Database description: - Veritabanı açıklaması: + 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 + Key transformation rounds + Tur sayısı çok yüksek + + + 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 ile çok yüksek sayıda anahtar dönüştürme turu kullanıyorsunuz. + +Eğer bu sayı ile devam ederseniz, veritabanınızın açılması saatler veya günler (hatta daha uzun) sürebilir! + + + Understood, keep number + Anladım, sayı kalsın + + + Cancel + İptal + + + Number of rounds too low + Key transformation rounds + Tur sayısı çok düşük + + + 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 ile çok düşük sayıda anahtar dönüştürme turu kullanıyorsunuz. + +Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kırılabilir! + + + KDF unchanged + KDF değişmedi + + + Failed to transform key with new KDF parameters; KDF unchanged. + Yeni KDF parametreleri ile anahtar dönüştürülemedi; KDF değişmedi. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MBMB + + + thread(s) + Threads for parallel execution (KDF settings) + iş parçacığıiş parçacığı + + + %1 ms + milliseconds + %1 ms%1 ms + + + %1 s + seconds + %1 s%1 s + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + Veritabanı Meta Verileri + + + Database name: + Veri tabanı adı: + + + Database description: + 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 - KeePass 2 Database - KeePass 2 Veritabanı + Breadcrumb + İçerik Haritası - All files - Bütün dosyalar + Type + Tür - Open database - Veritabanını aç + Path + Yol - File not found! - Dosya bulunamadı! + Last Signer + Son İmzalayan - Unable to open the database. - Veritabanı açılamıyor. + Certificates + Sertifikalar - File opened in read only mode. - Dosya salt okunur modda açıldı. + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - CSV dosyası aç + Add additional protection... + Ek koruma ekle... - CSV file - CSV dosyası + No encryption key added + Şifreleme anahtarı eklenmedi - All files (*) - Bütün dosyalar (*) + You must add at least one encryption key to secure your database! + Veritabanınızı korumak için en az bir şifreleme anahtarı eklemelisiniz! - Merge database - Veritabanını birleştir + No password set + Şifre ayarlanmadı - Open KeePass 1 database - KeePass 1 veritabanı 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? + UYARI! Bir parola belirlemediniz. Parola olmadan bir veritabanı kullanmak kesinlikle önerilmez! + +Parola olmadan devam etmek istediğinize emin misiniz? - KeePass 1 database - KeePass 1 veritabanı + Unknown error + Bilinmeyen hata - Close? - Kapat? + Failed to change master key + Ana anahtar değiştirilemedi + + + DatabaseSettingsWidgetMetaDataSimple - "%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ı? + Database Name: + Veritabanı Adı: - Save changes? - Değişiklikleri kaydet? + Description: + Açıklama: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" değiştirildi. -Değişiklikler kaydedilsin mi? + KeePass 2 Database + KeePass 2 Veri Tabanı - Writing the database failed. - Veritabanına yazma başarısız. + All files + Tüm dosyalar - Passwords - Şifreler + Open database + Veri tabanı aç - Save database as - Veritabanını farklı kaydet + CSV file + CSV dosyası + + + Merge database + Veri tabanı birleştir + + + Open KeePass 1 database + KeePass 1 veri tabanı aç + + + KeePass 1 database + 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? - - Close - Kapat + + 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şı? - General - Genel + File opened in read only mode. + Dosya salt okunur modda açıldı. - Password - Şifre + Lock Database? + Veritabanını Kilitle? - URL - URL + You are editing an entry. Discard changes and lock anyway? + Bir girişi düzenliyorsunuz. Değişiklikleri iptal et ve yine de kilitle? - Expiration - Geçerlilik + "%1" was modified. +Save changes? + "%1" değiştirildi. +Değişiklikler kaydedilsin mi? - Username - Kullanıcı adı + Database was modified. +Save changes? + Veritabanı değiştirildi. +Değişiklikleri kaydet? - Autotype - Oto-yazım + Save changes? + Değişiklikleri kaydet? - Searching - Aranıyor + Could not open the new database file while attempting to autoreload. +Error: %1 + Otomatik yükleme denenirken yeni veritabanı dosyası açılamadı. +Hata: %1 - Attributes - Öznitelikler + Disable safe saves? + Güvenli kaydetme devre dışı? - Attachments - Dosya ekleri + 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? - Notes - Notlar + Writing the database failed. +%1 + Veritabanını yazma başarısız +%1 - Window - Pencere + Passwords + Parolalar - Sequence - Sıra + Save database as + Veritabanını farklı kaydet - Search - Ara + KeePass 2 Database + KeePass 2 Veritabanı - Clear - Temizle + 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? - Never - Asla + Delete group + Kümeyi sil - [PROTECTED] - [KORUMALI] + Move group to recycle bin? + Kümeyi geri dönüşüm kutusuna taşı? - Disabled - Devre dışı + 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? - Enabled - Etkin + Successfully merged the database files. + Veritabanı dosyaları başarıyla birleştirildi. + + + 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,109 +2416,159 @@ This may cause the affected plugins to malfunction. Attachments Ekler - - - EntryView - Customize View - Görünümü Özelleştir + Yes + Evet - Hide Usernames - Kullanıcı Adlarını Gizle + TOTP + TOTP + + + EntryPreviewWidget - Hide Passwords - Parolaları Gizle + Generate TOTP Token + TOTP Jetonu Oluştur - Fit to window - Pencereye sığdır + Close + Kapat - Fit to contents - İçeriklere sığdır + General + Genel - Reset to defaults - Öntanımlılara sıfırla + Username + Kullanıcı adı - Attachments (icon) - Ekler (simge) + Password + Parola - - - Group - Recycle Bin - Geri Dönüşüm Kutusu + Expiration + Geçerlilik - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: Dosya kaydedilemiyor! + URL + URL - Cannot save the native messaging script file. - Yerel mesajlaşma betik dosyası kaydedilemiyor. + Attributes + Öznitelikler - - - HttpPasswordGeneratorWidget - Length: - Uzunluk: + Attachments + Dosya ekleri - Character Types - Karakter Türleri + Notes + Notlar - Upper Case Letters - Büyük Harfler + Autotype + Oto-yazım - A-Z - A-Z + Window + Pencere - Lower Case Letters - Küçük Harfler + Sequence + Sıra - a-z - a-z + Searching + Aranıyor - Numbers - Rakamlar + Search + Ara - 0-9 - 0-9 + Clear + Temizle - Special Characters - Özel Karakterler + Never + Asla - /*_& ... - /*_& ... + [PROTECTED] + [KORUMALI] - Exclude look-alike characters - Benzer karakterleri dışla + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 - Ensure that the password contains characters from every group - Parolanın her kümeden karakter içerdiğine emin ol + Enabled + Etkin - Extended ASCII - Genişletilmiş ASCII + Disabled + Devre dışı + + + Share + Paylaş + + + + EntryView + + Customize View + Görünümü Özelleştir + + + Hide Usernames + Kullanıcı Adlarını Gizle + + + Hide Passwords + Parolaları Gizle + + + Fit to window + Pencereye sığdır + + + Fit to contents + İçeriklere sığdır + + + Reset to defaults + Öntanımlılara sıfırla + + + Attachments (icon) + Ekler (simge) + + + + Group + + Recycle Bin + Geri Dönüşüm Kutusu + + + [empty] + group has no children + [boş] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: Dosya kaydedilemiyor! + + + Cannot save the native messaging script file. + Yerel mesajlaşma betik dosyası kaydedilemiyor. @@ -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,228 +3042,287 @@ 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 - KeePass2 + KeeShare - AES: 256-bit - AES: 256-bit + Disabled share + Engelli paylaşım - Twofish: 256-bit - Twofish: 256-bit + Import from + Şuradan içe aktar - ChaCha20: 256-bit - ChaCha20: 256-bit + Export to + Dışa aktar - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) + Synchronize with + Şununla eşitle - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) + Disabled share %1 + - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – önerilen) + Import from share %1 + - - - Main - 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. + Export to share %1 + - The lock file could not be created. Single-instance mode disabled. - Kilit dosyası oluşturulamadı. Tekil oluşum kipi devre dışı bırakıldı. + Synchronize with share %1 + + + + KeyComponentWidget - Another instance of KeePassXC is already running. - Başka bir KeePassXC oluşumu zaten çalışıyor. + Key Component + Anahtar Bileşen - Fatal error while testing the cryptographic functions. - Kriptografik işlevler sınanırken ölümcül hata. + Key Component Description + Anahtar Bileşen Açıklaması - KeePassXC - Error - KeePassXC - Hata + Cancel + İptal - - - MainWindow - &Database - &Veri tabanı + Key Component set, click to change or remove + Anahtar Bileşen seti, değiştirmek veya kaldırmak için tıkla - &Recent databases - &Son veri tabanları + Add %1 + Add a key component + Ekle %1 - Import - İçe aktar + Change %1 + Change a key component + Değiştir %1 - &Help - &Yardım + Remove %1 + Remove a key component + Kaldır %1 - E&ntries - G&irdiler + %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 + + + KeyFileEditWidget - Copy att&ribute to clipboard - Öznite&liği panoya kopyala + Browse + Gözat - Time-based one-time password - + Generate + Oluştur - &Groups - &Kümeler + Key File + Anahtar Dosyası - &Tools - &Araçlar + <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> - &Quit - &Çık + Legacy key file format + Eski anahtar dosya biçimi - &About - &Hakkında + 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. - &Open database... - &Veri tabanı aç... + Error loading the key file '%1' +Message: %2 + '%1' anahtar dosyası yüklenirken hata +İleti: %2 - &Save database - Veri tabanını k&aydet + Key files + Anahtar dosyaları - &Close database - Veri tabanını &kapat + All files + Bütün dosyalar - &New database - &Yeni veri tabanı + Create Key File... + Anahtar Dosyası Oluştur... - Merge from KeePassX database - KeePassX veri tabanından birleştir + Error creating key file + Anahtar dosyası oluşturulurken hata - &Add new entry - Yeni girdi &ekle + Unable to create key file: %1 + Anahtar dosya oluşturulamıyor: %1 - &View/Edit entry - Girdiyi &göster/düzenle + Select a key file + Bir anahtar dosyası seç - - &Delete entry - Girdiyi &sil + + + MainWindow + + &Database + &Veri tabanı + + + &Recent databases + &Son veri tabanları + + + &Help + &Yardım + + + E&ntries + G&irdiler + + + &Groups + &Kümeler + + + &Tools + &Araçlar + + + &Quit + &Çık - &Add new group - Yeni küme &ekle + &About + &Hakkında + + + &Open database... + &Veri tabanı aç... + + + &Save database + Veri tabanını k&aydet + + + &Close database + Veri tabanını &kapat + + + &Delete entry + Girdiyi &sil &Edit group @@ -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 @@ -2867,794 +3429,1565 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke KeePassXC'den Çık - KeePass 2 Database - KeePass 2 Veri Tabanı + Please touch the button on your YubiKey! + Lütfen YubiKey'inizdeki düğmeye dokunun! - All files - Tüm dosyalar + 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. + UYARI: KeePassXC'nin kararsız inşasını kullanıyorsunuz! +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. - Open database - Veri tabanı aç + &Donate + Bağış - Save repaired database - Onarılan veri tabanını kaydet + Report a &bug + Hata raporla - Writing the database failed. - Veri tabanına yazma başarısız. + 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. - Please touch the button on your YubiKey! - Lütfen YubiKey'inizdeki düğmeye dokunun! + &Import + &İçe aktar - 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. - UYARI: KeePassXC'nin kararsız inşasını kullanıyorsunuz! -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. + Copy att&ribute... + Öznite&liği kopyala... - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Geçersiz anahtar dosyası, OpenSSH anahtarı bekleniyor + TOTP... + TOTP... - PEM boundary mismatch - + &New database... + &Yeni veritabanı... - Base64 decoding failed - Base64 çözme başarısız + Create a new database + Yeni veritabanı oluştur - Key file way too small. - Anahtar dosyası çok küçük. + &Merge from database... + Veritabanından &birleştir ... - Key file magic header id invalid - + Merge from another KDBX database + Başka bir KDBX veritabanından birleştir - Found zero keys - Sıfır anahtar bulundu + &New entry + &Yeni girdi - Failed to read public key. - Genel anahtar okunamadı. + Add a new entry + Yeni girdi ekle - Corrupted key file, reading private key failed - Bozuk anahtar dosyası, özel anahtar okuma başarısız + &Edit entry + &Girdiyi düzenle - No private key payload to decrypt - + View or edit entry + Girdiyi göster ve düzenle - Trying to run KDF without cipher - + &New group + &Yeni küme - Passphrase is required to decrypt this key - + Add a new group + Yeni küme ekle - Key derivation failed, key file corrupted? - + Change master &key... + Ana &anahtarı değiştir... - Decryption failed, wrong passphrase? - + &Database settings... + &Veritabanı ayarları... - Unexpected EOF while reading public key - + Copy &password + Kopyala &parola - Unexpected EOF while reading private key - + Perform &Auto-Type + &Oto-Yazım gerçekleştir - Can't write public key as it is empty - + Open &URL + URL'yi &Aç - Unexpected EOF when writing public key - + KeePass 1 database... + KeePass 1 veritabanı... - Can't write private key as it is empty - + Import a KeePass 1 database + KeePass 1 veritabanını içe aktar - Unexpected EOF when writing private key - + CSV file... + CSV dosyası... - Unsupported key type: %1 - Desteklenmeyen anahtar türü: %1 + Import a CSV file + CSV dosyasını içe aktar - Unknown cipher: %1 - + Show TOTP... + TOTP Göster... - Cipher IV is too short for MD5 kdf - + Show TOTP QR Code... + TOTP QR Kodunu Göster... - Unknown KDF: %1 - + Check for Updates... + Güncellemeleri kontrol et... - Unknown key type: %1 - Bilinmeyen anahtar türü: %1 + Share entry + Girişi paylaş - - - OptionDialog - Dialog - Diyalog + 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. - This is required for accessing your databases from ChromeIPass or PassIFox - Bu, ChromeIPass veya PassIFox'tan veri tabanlarınıza erişirken gereklidir + Check for updates on startup? + Başlangıçta güncellemeleri kontrol et? - Enable KeePassHTTP server - KeePassHTTP sunucusunu etkinleştir + Would you like KeePassXC to check for updates on startup? + KeePassXC'in başlangıçta güncellemeleri kontrol etmesini ister misiniz? - General - Genel + You can always check for updates manually from the application menu. + Güncellemeleri her zaman elle uygulama menüsünden kontrol edebilirsiniz. + + + Merger - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Kimlik bilgisi istendiğinde bildirim g&öster + Creating missing %1 [%2] + Eksik %1 [%2] oluşturuluyor - 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. + Relocating %1 [%2] + %1 taşınıyor [%2] - &Return only best matching entries - Yalnızca en iyi eşleşen girdileri &döndür + Overwriting %1 [%2] + %1 üzerine yazılıyor [%2] - Re&quest to unlock the database if it is locked - Eğer kilitliyse veri tabanını açmayı is&te + older entry merged from database "%1" + eski giriş "%1" veritabanından birleştirildi - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Yalnızca aynı şemalı girdiler (http://, https://, ftp://, ...) döndürülür. + Adding backup for older target %1 [%2] + Eski hedef için yedekleme ekle %1 [%2] - &Match URL schemes - URL şemalarını &eşle + Adding backup for older source %1 [%2] + Eski kaynak için yedekleme ekle %1 [%2] - Sort matching entries by &username - Eşleşen girdileri &kullanıcı adına göre sırala + Reapplying older target entry on top of newer source %1 [%2] + Eski hedef girişini yeni kaynağın üstüne yeniden uygulama %1 [%2] - Sort &matching entries by title - &Eşleşen girdileri başlığa göre sırala + Reapplying older source entry on top of newer target %1 [%2] + Eski kaynak girişini yeni hedefin üstüne yeniden uygulama %1 [%2] - R&emove all shared encryption keys from active database - Paylaşılan tüm anahtarları etkin veri tabanından ka&ldır + Synchronizing from newer source %1 [%2] + Yeni kaynaktan eşitle %1 [%2] - Re&move all stored permissions from entries in active database - Saklanan tüm izinleri etkin veri tabanındaki girdilerden kal&dır + Synchronizing from older source %1 [%2] + Eski kaynaktan eşitle %1 [%2] - Password Generator - Parola Oluşturucu + Deleting child %1 [%2] + Alt girişleri sil %1 [%2] - Advanced - Gelişmiş + Deleting orphan %1 [%2] + Sahipsizleri sil %1 [%2] - Always allow &access to entries - Her zaman girdilere &erişime izin ver + Changed deleted objects + Değiştirilen silinmiş nesneler - Always allow &updating entries - Her zaman girdileri g&üncellemeye izin ver + Adding missing icon %1 + Eksik simge ekle %1 + + + NewDatabaseWizard - Only the selected database has to be connected with a client. - Yalnızca seçilen veri tabanı istemciyle bağlanmış olmalıdır. + Create a new KeePassXC database... + Yeni bir KeePassXC veritabanı oluştur... - Searc&h in all opened databases for matching entries - Eşleşen girdiler için tüm açık veri tabanlarını a&ra + Root + Root group + Kök + + + NewDatabaseWizardPage - Automatically creating or updating string fields is not supported. - Dizge alanlarını kendiliğinden oluşturma ve güncelleme desteklenmiyor. + WizardPage + SayfaSihirbazı - &Return advanced string fields which start with "KPH: " - "KPH: " ile başlayan gelişmiş dizge alanları &döndür + En&cryption Settings + &Şifreleme Ayarları - HTTP Port: - HTTP Bağlantı noktası: + 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. - Default port: 19455 - Öntanımlı bağlantı noktası: 19455 + Advanced Settings + Gelişmiş Ayarlar - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC, 127.0.0.1 üzerinde bu bağlantı noktasını dinleyecek. + Simple Settings + Temel Ayarlar + + + NewDatabaseWizardPageEncryption - <b>Warning:</b> The following options can be dangerous! - <b>Uyarı:</b> Aşağıdaki seçenekler tehlikeli olabilir! + Encryption Settings + Şifreleme Ayarları - <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> + 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 - Cannot bind to privileged ports - + Database Master Key + Veritabanı Ana Anahtar - 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. + A master key known only to you protects your database. + Yalnızca sizin tarafınızdan bilinen bir ana anahtar veritabanınızı korur. - PasswordGeneratorWidget + NewDatabaseWizardPageMetaData - %p% - %%p + General Database Information + Genel Veritabanı Bilgileri - Password: - Parola: + 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 + + Invalid key file, expecting an OpenSSH key + Geçersiz anahtar dosyası, OpenSSH anahtarı bekleniyor - strength - Password strength - güç + PEM boundary mismatch + PEM limitleri uyumsuz - entropy - entropi + Base64 decoding failed + Base64 çözme başarısız - Password - Parola + Key file way too small. + Anahtar dosyası çok küçük. - Character Types - Karakter Türleri + Key file magic header id invalid + Anahtar dosyası sihirli başlık kimliği geçersiz - Upper Case Letters - Büyük Harfler + Found zero keys + Sıfır anahtar bulundu - Lower Case Letters - Küçük Harfler + Failed to read public key. + Genel anahtar okunamadı. - Numbers - Rakamlar + Corrupted key file, reading private key failed + Bozuk anahtar dosyası, özel anahtar okuma başarısız - Special Characters - Özel Karakterler + No private key payload to decrypt + Şifresini çözmek için yüklü özel anahtar yok - Extended ASCII - Genişletilmiş ASCII + Trying to run KDF without cipher + Şifre olmadan Anahtar Türetme İşlevi çalıştırma deneniyor - Exclude look-alike characters - Benzer karakterleri dışla + 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 + Desteklenmeyen anahtar türü: %1 + + + 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 + Bilinmeyen anahtar türü: %1 + + + + PasswordEditWidget + + Enter password: + Parolayı gir: + + + Confirm password: + Parolayı onayla: + + + Password + Parola + + + <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> + + + Passwords do not match. + Parolalar uyuşmuyor. + + + Generate master password + Ana parola oluştur + + + + PasswordGeneratorWidget + + %p% + %%p + + + Password: + Parola: + + + strength + Password strength + güç + + + entropy + entropi + + + Password + Parola + + + Character Types + Karakter Türleri + + + Upper Case Letters + Büyük Harfler + + + Lower Case Letters + Küçük Harfler + + + Numbers + Rakamlar + + + Special Characters + Özel Karakterler + + + Extended ASCII + Genişletilmiş ASCII + + + Exclude look-alike characters + Benzer karakterleri dışla + + + Pick characters from every group + Her kümeden karakter seç + + + &Length: + &Uzunluk: + + + Passphrase + Parola Öbeği + + + Wordlist: + Sözcük listesi: + + + Word Separator: + Sözcük Ayırıcı: + + + Copy + Kopyala + + + Accept + Onayla + + + Close + Kapat + + + Entropy: %1 bit + Entropi: %1 bit + + + Password Quality: %1 + Parola Niteliği: %1 + + + Poor + Password quality + Kötü + + + Weak + Password quality + Zayıf + + + Good + Password quality + İyi + + + Excellent + 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 + Veritabanı açılmadı + + + Database hash not available + Veritabanı karma erişilemez + + + Client public key not received + İstemci genel anahtarı alınmadı + + + Cannot decrypt message + İletinin şifresi çözülemedi + + + Action cancelled or denied + Eylem iptal edildi veya reddedildi + + + KeePassXC association failed, try again + KeePassXC ilişkilendirmesi başarısız, yeniden dene + + + Encryption key is not recognized + Şifreleme anahtarı tanınmadı + + + Incorrect action + Doğru olmayan eylem + + + Empty message received + Boş ileti alındı + + + No URL provided + URL sağlanmadı + + + No logins found + Giriş bulunamadı + + + Unknown error + Bilinmeyen hata + + + Add a new entry to a database. + Veri tabanına yeni girdi ekle. + + + Path of the database. + Veri tabanının yolu. + + + Key file of the database. + Veri tabanının anahtar dosyası. + + + path + yol + + + Username for the entry. + Girdi için kullanıcı adı. + + + username + kullanıcı adı + + + URL for the entry. + Girdi için URL. + + + URL + URL + + + Prompt for the entry's password. + Giriş parolasını sor. + + + Generate a password for the entry. + Girdi için parola oluştur. + + + Length for the generated password. + Oluşturulan parola için uzunluk. + + + length + uzunluk + + + Path of the entry to add. + Eklenecek girdinin yolu. + + + Copy an entry's password to the clipboard. + Girdinin parolasını panoya kopyala. + + + Path of the entry to clip. + clip = copy to clipboard + Girişi kısaltmanın yolu. + + + Timeout in seconds before clearing the clipboard. + Pano temizlenmeden önce geçecek saniye. + + + Edit an entry. + Girdi düzenle. + + + Title for the entry. + Girdi için başlık. + + + title + başlık + + + Path of the entry to edit. + Düzenlenecek girdinin yolu. + + + Estimate the entropy of a password. + Parolanın entropisini ölç. + + + Password for which to estimate the entropy. + Entropisi ölçülecek parola. + + + Perform advanced analysis on the password. + Parola üzerinde gelişmiş inceleme gerçekleştir. + + + Extract and print the content of a database. + Veri tabanının içeriğini çıkar ve yazdır. + + + Path of the database to extract. + Veri tabanının çıkarılacağı yol. + + + Insert password to unlock %1: + %1 kilidini kaldırmak için parola yerleştir: + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + UYARI: Gelecekte desteklenmeyebilecek eski anahtar dosyası +biçimini kullanıyorsunuz. + +Lütfen yeni anahtar dosyası oluşturmayı düşünün. + + + + +Available commands: + + + +Kullanılabilir komutlar: + + + + Name of the command to execute. + Çalıştırılacak komutun adı. + + + List database entries. + Veritabanı girdilerini listele. + + + Path of the group to list. Default is / + Listelenecek kümenin yolu. Öntanımlı: / + + + Find entries quickly. + Hızlıca girdi bul. + + + Search term. + Arama terimi. + + + Merge two databases. + İki veritabanını birleştir. + + + Path of the database to merge into. + Veritabanının nereye birleştirileceği. + + + Path of the database to merge from. + Veritabanının nereden birleştirileceği. + + + Use the same credentials for both database files. + 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. + Gösterilecek girdinin adı. + + + NULL device + NULL aygıtı + + + error reading from device + aygıttan okurken hata + + + malformed string + kusurlu dizge + + + missing closing quote + kapanış tırnak işareti eksik + + + Group + Küme + + + Title + Başlık + + + Username + Kullanıcı adı + + + Password + Parola + + + Notes + Notlar + + + Last Modified + Son değişiklik + + + Created + Oluşturuldu + + + 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 Aracısı + + + Generate a new random diceware passphrase. + Yeni bir rastgele diceware parolası oluştur. + + + Word count for the diceware passphrase. + 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. + + + Invalid value for password length %1. + %1 parola uzunluğu için geçersiz değer. + + + Could not create entry with path %1. + %1 yolu ile giriş oluşturulamadı. + + + Enter password for new entry: + Yeni girdi için parolayı gir: + + + Writing the database failed %1. + Veritabanı yazma %1 başarısız oldu. + + + Successfully added entry %1. + %1 girişi başarıyla eklendi. + + + 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 - Pick characters from every group - Her kümeden karakter seç + Multi-word extra bits %1 + Çok kelimeli ekstra bit %1 - &Length: - &Uzunluk: + Type: Bruteforce + Tür: Zorla - Passphrase - Parola Öbeği + Type: Dictionary + Tür: Sözlük - Wordlist: - Sözcük listesi: + Type: Dict+Leet + Tür: Sözlük+Leet - Word Count: - Sözcük Sayısı: + Type: User Words + Tür: Kullanıcı Sözcükleri - Word Separator: - Sözcük Ayırıcı: + Type: User+Leet + Tür: Kullanıcı+Leet - Generate - Oluştur + Type: Repeated + Tür: Tekrarlanan - Copy - Kopyala + Type: Sequence + Tür: Sıra - Accept - Onayla + Type: Spatial + Tür: Mekansal - Close - Kapat + Type: Date + Tür: Tarih - Apply - Uygula + Type: Bruteforce(Rep) + Tür: Zorla(Rep) - Entropy: %1 bit - Entropi: %1 bit + Type: Dictionary(Rep) + Tür: Sözlük(Rep) - Password Quality: %1 - Parola Niteliği: %1 + Type: Dict+Leet(Rep) + Tür: Sözlük+Leet(Rep) - Poor - Password quality - Kötü + Type: User Words(Rep) + Tür: Kullanıcı Sözcükleri(Rep) - Weak - Password quality - Zayıf + Type: User+Leet(Rep) + Tür: Kullanıcı+Leet(Rep) - Good - Password quality - İyi + Type: Repeated(Rep) + Tür: Tekrarlanan(Rep) - Excellent - Password quality - Harika + Type: Sequence(Rep) + Tür: Sıra(Rep) - - - QObject - Database not opened - Veri tabanı açılmadı + Type: Spatial(Rep) + Tür: Mekansal(Rep) - Database hash not available - + Type: Date(Rep) + Tür: Tarih(Rep) - Client public key not received - İstemci genel anahtarı alınmadı + Type: Unknown%1 + Tür: Bilinmiyor%1 - Cannot decrypt message - İletinin şifresi çözülemedi + Entropy %1 (%2) + Entropi %1 (%2) - Timeout or cannot connect to KeePassXC - Zaman aşımı veya KeePassXC'ye bağlanılamadı + *** Password length (%1) != sum of length of parts (%2) *** + *** Parola uzunluğu (%1) != parçaların uzunluğu toplamı (%2) *** - Action cancelled or denied - Eylem iptal edildi veya reddedildi + Failed to load key file %1: %2 + Anahtar dosyası yüklenemedi %1: %2 - 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? + File %1 does not exist. + %1 dosyası mevcut değil. - KeePassXC association failed, try again - KeePassXC ilişkilendirmesi başarısız, yeniden dene + Unable to open file %1. + %1 dosyası açılamıyor. - Key change was not successful - Anahtar değişimi başarılı değil + Error while reading the database: +%1 + Veritabanını okurken hata +%1 - Encryption key is not recognized - Şifreleme anahtarı tanınmadı + Error while parsing the database: +%1 + Veritabanını ayrıştırırken hata oluştu +%1 - No saved databases found - Kaydedilmiş veri tabanı bulunamadı + Length of the generated password + Oluşturulan parolanın uzunluğu - Incorrect action - Doğru olmayan eylem + Use lowercase characters + Küçük harfli karakterler kullan - Empty message received - Boş ileti alındı + Use uppercase characters + Büyük harfli karakterler kullan - No URL provided - URL sağlanmadı + Use numbers. + Sayıları kullan - No logins found - Giriş bulunamadı + Use special characters + Özel karakterler kullan - Unknown error - Bilinmeyen hata + Use extended ASCII + Genişletilmiş ASCII kullan - Add a new entry to a database. - Veri tabanına yeni girdi ekle. + Exclude character set + Karakter kümesini hariç tut - Path of the database. - Veri tabanının yolu. + chars + karakter - Key file of the database. - Veri tabanının anahtar dosyası. + Exclude similar looking characters + Benzer görünen karakterleri hariç tut - path - yol + Include characters from every selected group + Seçilen her kümedeki karakterleri dahil et - Username for the entry. - Girdi için kullanıcı adı. + Recursively list the elements of the group. + Kümenin ögelerini yinelemeli olarak sıralayın. - username - kullanıcı adı + Cannot find group %1. + % 1 kümesi bulunamıyor. - URL for the entry. - Girdi için URL. + Error reading merge file: +%1 + Birleştirme dosyası okunurken hata: +%1 - URL - URL + Unable to save database to file : %1 + Veritabanı dosyaya kaydedilemedi: %1 - Prompt for the entry's password. - + Unable to save database to file: %1 + Veritabanı dosyaya kaydedilemedi: %1 - Generate a password for the entry. - Girdi için parola oluştur. + Successfully recycled entry %1. + %1 girişi başarıyla geri dönüştürüldü. - Length for the generated password. - Oluşturulan parola için uzunluk. + Successfully deleted entry %1. + %1 girişi başarıyla silindi. - length - uzunluk + Show the entry's current TOTP. + Girişin mevcut TOTP'sini göster. - Path of the entry to add. - Eklenecek girdinin yolu. + ERROR: unknown attribute %1. + HATA: bilinmeyen özellik %1. - Copy an entry's password to the clipboard. - Girdinin parolasını panoya kopyala. + No program defined for clipboard manipulation + Pano manipülasyonu için tanımlanmış bir program yok - Path of the entry to clip. - clip = copy to clipboard - + Unable to start program %1 + Program başlatılamıyor %1 - Timeout in seconds before clearing the clipboard. - Pano temizlenmeden önce geçecek saniye. + file empty + dosya boş - Edit an entry. - Girdi düzenle. + %1: (row, col) %2,%3 + %1: (satır, sütun) %2,%3 - Title for the entry. - Girdi için başlık. + AES: 256-bit + AES: 256-bit - title - başlık + Twofish: 256-bit + Twofish: 256-bit - Path of the entry to edit. - Düzenlenecek girdinin yolu. + ChaCha20: 256-bit + ChaCha20: 256-bit - Estimate the entropy of a password. - Parolanın entropisini ölç + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – önerilen) - Password for which to estimate the entropy. - Entropisi ölçülecek parola. + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Perform advanced analysis on the password. - Parola üzerinde gelişmiş inceleme gerçekleştir. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - Extract and print the content of a database. - Veri tabanının içeriğini çıkar ve yazdır. + Invalid Settings + TOTP + Geçersiz Ayarlar - Path of the database to extract. - Veri tabanının çıkarılacağı yol. + Invalid Key + TOTP + Geçersiz Anahtar - Insert password to unlock %1: - %1 kilidini kaldırmak için parola yerleştir: + Message encryption failed. + Mesaj şifreleme başarısız. - Failed to load key file %1 : %2 - %1 anahtar dosyası yüklenemedi : %2 + No groups found + Hiçbir küme bulunamadı - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - UYARI: Gelecekte desteklenmeyebilecek eski anahtar dosyası -biçimini kullanıyorsunuz. - -Lütfen yeni anahtar dosyası oluşturmayı düşünün. + Create a new database. + Yeni veritabanı oluştur. - - -Available commands: - - - -Kullanılabilir komutlar: - + File %1 already exists. + %1 dosyası zaten var. - Name of the command to execute. - Çalıştırılacak komutun adı. + Loading the key file failed + Anahtar dosyası yüklenemedi - List database entries. - Veri tabanı girdilerini listele. + No key is set. Aborting database creation. + Hiçbir anahtar ayarlanmadı. Veritabanı oluşturma iptal ediliyor. - Path of the group to list. Default is / - Listelenecek kümenin yolu. Öntanımlı: / + Failed to save the database: %1. + Veritabanı kaydedilemedi: %1. - Find entries quickly. - Hızlıca girdi bul. + Successfully created new database. + Yeni veritabanı başarıyla oluşturuldu. - Search term. - Arama terimi. + 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): - Merge two databases. - İki veri tabanını birleştir. + Creating KeyFile %1 failed: %2 + %1 AnahtarDosyası oluşturulamadı: %2 - Path of the database to merge into. - Veri tabanının nereye birleştirileceği. + Loading KeyFile %1 failed: %2 + %1 AnahtarDosyası yüklenemedi:%2 - Path of the database to merge from. - Veri tabanının nereden birleştirileceği. + Remove an entry from the database. + Veritabanından bir girdi kaldır. - Use the same credentials for both database files. - Her iki veri tabanı dosyası için aynı kimliği kullan. + Path of the entry to remove. + Kaldırılacak girdinin yolu. - Key file of the database to merge from. - + 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. - Show an entry's information. - + The lock file could not be created. Single-instance mode disabled. + Kilit dosyası oluşturulamadı. Tekil oluşum kipi devre dışı bırakıldı. - 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. - + KeePassXC - cross-platform password manager + KeePassXC - çapraz platformlu parola yöneticisi - attribute - + filenames of the password databases to open (*.kdbx) + açılacak parola veritabanlarının dosya adları (*.kdbx) - Name of the entry to show. - Gösterilecek girdinin adı. + path to a custom config file + özel yapılandırma dosyası yolu - NULL device - NULL aygıtı + key file of the database + veritabanı'nın anahtar dosyası - error reading from device - aygıttan okurken hata + read password of the database from stdin + veritabanının parolasını stdin'den oku - file empty ! - - dosya boş ! - + Parent window handle + Ana pencere işlemesi - malformed string - kusurlu dizge + Another instance of KeePassXC is already running. + Başka bir KeePassXC oluşumu zaten çalışıyor. - missing closing quote - + Fatal error while testing the cryptographic functions. + Kriptografik işlevler sınanırken ölümcül hata. - Group - Küme + KeePassXC - Error + KeePassXC - Hata - Title - Başlık + Database password: + Veritabanı parolası: - Username - Kullanıcı adı + Cannot create new group + + + + QtIOCompressor - Password - Parola + Internal zlib error when compressing: + Sıkıştırılırken iç zlib hatası: - Notes - Notlar + Error writing to underlying device: + Temel aygıta yazma hatası: - Last Modified - + Error opening underlying device: + Temel aygıtı açma hatası: - Created - Oluşturuldu + Error reading data from underlying device: + Temel aygıttan veri okuma hatası: - Legacy Browser Integration - + Internal zlib error when decompressing: + Sıkıştırma açılırken iç zlib hatası: + + + QtIOCompressor::open - Browser Integration - Tarayıcı Tümleşmesi + The gzip format not supported in this version of zlib. + gzip biçimi zlib'in bu sürümünde desteklenmiyor. - YubiKey[%1] Challenge Response - Slot %2 - %3 - + Internal zlib error: + zlib iç hatası: + + + SSHAgent - Press - + Agent connection failed. + İstemci bağlantısı başarısız. - Passive - + Agent protocol error. + İstemci protokol hatası. - SSH Agent - SSH Ajanı + No agent running, cannot add identity. + Çalışan istemci yok, kimlik ekleyemezsiniz. - Generate a new random diceware passphrase. - + No agent running, cannot remove identity. + Çalışan istemci yok, kimlik silemezsiniz. - Word count for the diceware passphrase. - + Agent refused this identity. Possible reasons include: + İstemci bu kimliği reddetti. Olası nedenler şunlardır: - count - + The key has already been added. + Anahtar zaten eklendi. - Wordlist for the diceware generator. -[Default: EFF English] - + Restricted lifetime is not supported by the agent (check options). + Kısıtlı süre istemci tarafından desteklenmez (seçenekleri kontrol edin). - Generate a new random password. - + A confirmation request is not supported by the agent (check options). + Onay isteği istemci tarafından desteklenmiyor (seçenekleri kontrol edin). + + + SearchHelpWidget - Length of the generated password. - + Search Help + Yardım Ara - Use lowercase characters in the generated password. - + Search terms are as follows: [modifiers][field:]["]term["] + Arama terimleri şunlar gibidir: [değiştiren][alan:]["]terim["] - Use uppercase characters in the generated password. - + Every search term must match (ie, logical AND) + Her arama terimi eşleşmelidir (yani, mantıksal ve) - Use numbers in the generated password. - + Modifiers + Düzenleyen - Use special characters in the generated password. - + exclude term from results + terimi sonuçların dışında tut - Use extended ASCII in the generated password. - + match term exactly + tam eşleşme terimi - - - QtIOCompressor - Internal zlib error when compressing: - Sıkıştırılırken iç zlib hatası: + use regex in term + regex terimini kullan - Error writing to underlying device: - + Fields + Alanlar - Error opening underlying device: - + Term Wildcards + Terim Joker Karakterler - Error reading data from underlying device: - + match anything + hepsiyle eşleştir - Internal zlib error when decompressing: - Sıkıştırma açılırken iç zlib hatası: + match one + birini eşleştir - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - gzip biçimi zlib'in bu sürümünde desteklenmiyor. + logical OR + mantıksal yada - Internal zlib error: - zlib iç hatası: + Examples + Örnekler SearchWidget - - Search... - Ara... - Search Ara @@ -3663,318 +4996,335 @@ 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 + + Search Help + Yardım Ara + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Ara (%1)... + + + Case sensitive + Harfe duyarlı + - Service + SettingsWidgetKeeShare - KeePassXC: New key association request - KeePassXC: Yeni anahtar ilişkilendirme isteği + Active + Aktif - 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. + Allow export + Dışa aktarmaya izin ver - KeePassXC: Overwrite existing key? - KeePassXC: Var olan anahtarın üstüne yaz? + Allow import + İçe aktarmaya izin ver - 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? + Own certificate + Kendi sertifikası - KeePassXC: Update Entry - KeePassXC: Girdi Güncelle + Fingerprint: + Parmak izi: - Do you want to update the information in %1 - %2? - %1 -%2 bilgilerini güncellemek istiyor musun? + Certificate: + Sertifika: - KeePassXC: Database locked! - KeePassXC: Veri tabanı kilitli! + Signer + İmzalayan - 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. + Key: + Anahtar: - KeePassXC: Removed keys from database - KeePassXC: Anahtarlar veri tabanından kaldırıldı + Generate + Oluştur - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + + Import + İçe aktar - KeePassXC: No keys found - KeePassXC: Anahtar bulunamadı + Export + Dışa aktar - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp Ayarlarında paylaşılan şifreleme anahtarı bulunamadı. + Imported certificates + Alınan sertifikalar - KeePassXC: Settings not available! - KeePassXC: Ayarlar kullanılabilir değil! + Trust + Güven - The active database does not contain an entry of KeePassHttp Settings. - Etkin veri tabanı KeePassHttp Ayarlarının girdisini barındırmıyor. + Ask + Sor - Removing stored permissions... - Saklanan izinler kaldırılıyor... + Untrust + Güvenme - Abort - İptal + Remove + Kaldır - KeePassXC: Removed permissions - KeePassXC: Silinen yetkiler + Path + Yol - - Successfully removed permissions from %n entries. - + + Status + Durum - KeePassXC: No entry with permissions found! - KeePassXC: İzinli girdi bulunamadı! + Fingerprint + Parmak izi - The active database does not contain an entry with permissions. - Etkin veri tabanı izinleri olan girdi barındırmıyor. + Certificate + Sertifika - - - SettingsWidget - Application Settings - Uygulama Ayarları + Trusted + Güvenilir - General - Genel + Untrusted + Güvenilmez - Security - Güvenlik + Unknown + Bilinmeyen - Access error for config file %1 - %1 yapılandırma dosyası için erişim hatası + key.share + Filetype for KeeShare key + anahtar.paylaş - - - SettingsWidgetGeneral - Basic Settings - Temel Ayarlar + KeeShare key file + KeeShare anahtar dosyası - Start only a single instance of KeePassXC - Yalnızca tek KeePassXC oluşumu başlat + All files + Bütün dosyalar - Remember last databases - Son veri tabanlarını anımsa + Select path + Yol seç - Remember last key files and security dongles - Son anahtar dosyalarını ve güvenlik aygıtlarını anımsa + Exporting changed certificate + Değişen sertifikayı dışa aktar - Load previous databases on startup - Başlangıçta önceki veri tabanlarını yükle + 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? - Automatically save on exit - Çıkışta kendiliğinden kaydet + Signer: + + + + ShareObserver - Automatically save after every change - Her değişiklik sonrası kendiliğinden kaydet + Import from container without signature + İmzayı kapsayıcıdan içeri aktar - Automatically reload the database when modified externally - Veri tabanı dışarıdan değiştirildiğinde kendiliğinden yeniden yükle + 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? - Minimize when copying to clipboard - Panoya kopyalarken simge durumuna küçült + Import from container with certificate + Sertifikayı kapsayıcıdan içe aktar - Minimize window at application startup - Uygulama başlangıcında pencereyi simge durumuna küçült + Not this time + Bu sefer değil - Use group icon on entry creation - Girdi oluşturmada küme simgesini kullan + Never + Asla - 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 + Always + Daima - Hide the Details view - + Just this time + Sadece bu seferlik - Show a system tray icon - Sistem tepsisi simgesi göster + Import from %1 failed (%2) + % 1'den içe aktarma başarısız (%2) - Hide window to system tray when minimized - Simge durumuna küçültüldüğünde pencereyi sistem tepsisine gizle + Import from %1 successful (%2) + %1'den içe aktarma başarılı (%2) - Hide window to system tray instead of app exit - Uygulamadan çıkmak yerine pencereyi sistem tepsisine gizle + Imported from %1 + %1 den içe aktarıldı - Dark system tray icon - + Signed share container are not supported - import prevented + İmzalı paylaşım kapsayıcısı desteklenmiyor -içeri alma engellendi - Language - Dil + File is not readable + Dosya okunamıyor - Auto-Type - Oto-Yazım + Invalid sharing container + Geçersiz kapsayıcı paylaşımı - Use entry title to match windows for global Auto-Type - + Untrusted import prevented + Güvenilmeyen içe aktarma önlendi - Use entry URL to match windows for global Auto-Type - + Successful signed import + İmzalı içe aktarma başarılır - Always ask before performing Auto-Type - Oto-Yazım gerçekleştirmeden önce her zaman sor + Unexpected error + Beklenmeyen hata - Global Auto-Type shortcut - Küresel Oto-Yazım kısayolu + Unsigned share container are not supported - import prevented + İmzalanmamış paylaşım kapsayıcısı desteklenmiyor -içeri alma engellendi - Auto-Type delay - Oto-Yazım gecikmesi + Successful unsigned import + İmzasız içe aktarma başarılı - ms - Milliseconds - ms + File does not exist + Dosya mevcut değil - Startup - Başlangıç + Unknown share container type + Bilinmeyen kapsayıcı paylaşım türü - File Management - Dosya Yönetimi + Overwriting signed share container is not supported - export prevented + İmzalanmış paylaşım kapsayıcısının üzerine yazma desteklenmiyor -dışa aktarma engellendi - Safely save database files (may be incompatible with Dropbox, etc) - Veri tabanı dosyalarını güvenle kaydet (Dropbox vb. ile uyumsuz olabilir) + Could not write export container (%1) + Dışa aktarma kapsayıcısı (%1) yazılamadı - Backup database file before saving - Kaydetmeden önce veri tabanı dosyasını yedekle + Overwriting unsigned share container is not supported - export prevented + İmzalanmamış paylaşım kapsayıcısının üzerine yazma desteklenmiyor -dışa aktarma engellendi - Entry Management - Girdi Yönetimi + Could not write export container + Dışa aktarma kapsayıcısı yazılamadı - General - Genel + Unexpected export error occurred + Beklenmeyen dışa aktarma hatası oluştu - - - SettingsWidgetSecurity - Timeouts - Zaman Aşımları + Export to %1 failed (%2) + %1'e aktarma başarısız oldu (%2) - Clear clipboard after - Şundan sonra panoyu temizle + Export to %1 successful (%2) + %1’e aktarma başarılı (%2) - sec - Seconds - san + Export to %1 + %1'e aktar - Lock databases after inactivity of - Şu kadar hareketsizlikten sonra veri tabanlarını kilitle + 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 ?} - Convenience - Elverişlilik + Multiple import source path to %1 in %2 + - Lock databases when session is locked or lid is closed - Oturum kilitlendiğinde veya kapak kapandığında veri tabanlarını kilitle + Conflicting export target path %1 in %2 + - Lock databases after minimizing the window - Pencereyi küçülttükten sonra veri tabanlarını kilitle + Could not embed signature: Could not open file to write (%1) + - Don't require password repeat when it is visible - Parola görünür olduğunda yineleme gerektirme + Could not embed signature: Could not write file (%1) + - Show passwords in cleartext by default - Parolaları öntanımlı olarak düz metinde göster + Could not embed database: Could not open file to write (%1) + - Hide passwords in the preview panel + Could not embed database: Could not write file (%1) + + + TotpDialog - Hide entry notes by default - Girdi notlarını öntanımlı olarak gizle + Timed Password + Zamanlı Parola - Privacy - Gizlilik + 000000 + 000000 + + + Copy + Kopyala + + Expires in <b>%n</b> second(s) + <b>%n</b> saniye içinde sona erecek<b>%n</b> saniye içinde sona erecek + + + + TotpExportSettingsDialog - Use Google as fallback for downloading website icons - Web site simgelerini indirmek için Google'ı yedek olarak kullan + Copy + Kopyala - Re-lock previously locked database after performing Auto-Type - + 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. - SetupTotpDialog + TotpSetupDialog Setup TOTP - ZTSP'yi kur + TOTP Kurulum Key: @@ -3982,70 +5332,95 @@ Lütfen seçilen veri tabanının kilidini kaldırın veya kilitli olmayan birin Default RFC 6238 token settings - + Varsayılan RFC 6238 anahtar ayarları Steam token settings - + Steam anahtar ayarları 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. + Custom Settings + Özel Ayarlar Time step: - + Zaman adımı: - 8 digits - 8 hane + sec + Seconds + san + + + Code size: + Kod boyutu: 6 digits 6 hane - Code size: - Kod boyutu: + 7 digits + 7 hane - sec - Seconds - san + 8 digits + 8 hane - TotpDialog + UpdateCheckDialog - Timed Password - Zamanlı Parola + Checking for updates + Güncellemeleri kontrol et - 000000 - 000000 + Checking for updates... + Güncellemeler kontrol ediliyor... - Copy - Kopyala + Close + Kapat - Expires in - Süre bitimi + Update Error! + Güncelleme Hatası! - seconds - saniye + 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! - - - UnlockDatabaseWidget - Unlock database - Veri tabanı kilidini kaldır + 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 - - Remove an entry from the database. - Veri tabanından bir girdi kaldır. - - - Path of the database. - Veri tabanının yolu. - - - Path of the entry to remove. - Kaldırılacak girdinin yolu. - - - KeePassXC - cross-platform password manager - KeePassXC - çapraz platformlu parola yöneticisi - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - açılacak parola veri tabanlarının dosya adları (*.kdbx) + Refresh + Yenile - path to a custom config file - özel yapılandırma dosyası yolu + YubiKey Challenge-Response + YubiKey Challenge-Response - key file of the database - veri tabanının anahtar dosyası + <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> - read password of the database from stdin - veri tabanının parolasını stdin'den oku + No YubiKey detected, please ensure it's plugged in. + Hiçbir YubiKey algılanmadı, lütfen fişe takılı olduğundan emin olun. - 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 e112bb27c9..fbd14999b5 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. @@ -38,80 +38,290 @@ Скопіювати в кишеню - Version %1 - - Версія %1 - + Project Maintainers: + Супровідники проекту: - Revision: %1 - Ревізія: %1 + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Команда KeePassXC щиро дякує debfx за створення первісної версії KeePassX. + + + AgentSettingsWidget - Distribution: %1 - Дистрибутив: %1 + Enable SSH Agent (requires restart) + Увімкнути посередника SSH (вимагає перезапуск) - Libraries: - Бібліотеки: + Use OpenSSH for Windows instead of Pageant + Використовувати OpenSSH для Windows замість Pageant + + + ApplicationSettingsWidget - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Операційна система: %1 -Архітектура ЦП: %2 -Ядро: %3 %4 + Application Settings + Налаштування застосунку - Enabled extensions: - Увімкнені розширення: + General + Загальне - Project Maintainers: - Супровідники проекту: + Security + Безпека - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Команда KeePassXC щиро дякує debfx за створення первісної версії KeePassX. + Access error for config file %1 + Помилка доступу до файлу конфігурації %1 - Build Type: %1 - - Тип збірки: %1 - + Icon only + Лише значок + + + Text only + Лише текст + + + Text beside icon + Текст поруч зі значком + + + Text under icon + Текст під значком + + + Follow style + Наслідувати стиль - AccessControlDialog + ApplicationSettingsWidgetGeneral + + Basic Settings + Базове налаштування + - KeePassXC HTTP Confirm Access - Підтвердити доступ KeePassXC до HTTP + Startup + Запуск - Remember this decision - Запам'ятати цей вибір + Start only a single instance of KeePassXC + Запускати лише один примірник KeePassXC - Allow - Дозволити + Remember last databases + Пам’ятати останні сховища - Deny - Заборонити + Remember last key files and security dongles + Пам'ятати останні файли ключів і механізми захисту - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 запитує доступ до паролів у цих записах. -Дозволити доступ? + 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 + Стиль кнопок - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - Увімкнути посередника SSH (вимагає перезапуск) + 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? - Команда Автозаповнення містить параметри, що надто часто повторюються. Ви впевнені, що хочете продовжити? + Команда Автозаповнення містить надто часто повторювані параметри. Ви дійсно хочете продовжити? @@ -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. @@ -362,20 +585,41 @@ Please select whether you want to allow access. <b>Попередження:</b> ці параметри можуть бути небезпечними! - Executable Files (*.exe);;All Files (*.*) - Виконавчі файли (*.exe);;Всі файли (*.*) + Select custom proxy location + Вибрати власне розташування посередника - Executable Files (*) - Виконавчі файли (*) + &Tor Browser + Переглядач &Tor - Select custom proxy location - Вибрати власне розташування посередника + <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 - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Вибачте, але KeePassXC-Browser поки що не підтримується Snap-версіях. + 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 @@ -417,153 +661,54 @@ Do you want to overwrite it? Бажаєте оновити інформацію у %1 – %2? - KeePassXC: Database locked! - KeePassXC: сховище заблоковане! + Abort + Скасувати - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Чинне сховище заблоковане! -Будь ласка, розблокуйте обране сховище або виберіть інше незаблоковане. + Converting attributes to custom data… + Перетворення атрибутів користувацьких даних… - KeePassXC: Settings not available! - KeePassXC: налаштування недоступні! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Атрибути KeePassHTTP перетворено - The active database does not contain a settings entry. - Поточне сховище не містить запису налаштувань. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Атрибути %1 запису(-ів) успішно перетворені. +%2 ключів переміщено до користувацьких даних. - - KeePassXC: No keys found - KeePassXC: жодного ключа не знайдено + + Successfully moved %n keys to custom data. + %n ключ успішно переміщено до користувацьких даних.%n ключа успішно переміщено до користувацьких даних.%n ключів успішно переміщено до користувацьких даних.%n ключів успішно переміщено до користувацьких даних. - No shared encryption keys found in KeePassXC Settings. - Не знайдено спільних ключів шифрування у налаштуваннях KeePassXC. + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Записів з атрибутами KeePassHTTP не знайдено! - KeePassXC: Removed keys from database - KeePassXC: ключі видалено зі сховища - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Успішно видалено %n шифрувальний ключ з налаштувань KeePassXC.Успішно видалено %n шифрувальні ключа з налаштувань KeePassXC.Успішно видалено %n шифрувальних ключів з налаштувань KeePassXC.Успішно видалено %n шифрувальних ключів з налаштувань KeePassXC. + The active database does not contain an entry with KeePassHTTP attributes. + Поточне сховище не містить запису з атрибутами KeePassHTTP. - Removing stored permissions… - Видалення збережених привілеїв... + KeePassXC: Legacy browser integration settings detected + KeePassXC: знайдено застаріле налаштування сполучення з переглядачами - Abort - Скасувати + KeePassXC: Create a new group + - KeePassXC: Removed permissions - KeePassXC: привілеї видалено - - - Successfully removed permissions from %n entry(s). - Успішно видалено привілеї для %n запису.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів. + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 - Виклик-відповідь - - - 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 файлі знайдено помилку(-ки)! + Error + Помилка - more messages skipped] - решта повідомлень пропущена] + Empty fieldname %1 + Порожня назва поля %1 - Error - Помилка + column %1 + колонка %1 - CSV import: writer has errors: - - Імпорт CSV – помилки записувача: - + Error(s) detected in CSV file! + У файлі CSV знайдено помилки! - - - CsvImportWizard - - Error - Помилка + + [%n more message(s) skipped] + [ще %n повідомлення пропущено][ще %n повідомлення пропущено][ще %n повідомлень пропущено][ще %n повідомлень пропущено] - Unable to calculate master key - Неможливо вирахувати головний ключ + CSV import: writer has errors: +%1 + Імпорт CSV: помилки записувача: +%1 CsvParserModel - %n byte(s), - %n байт,%n byte(s), %n байта, %n байтів, %n байтів, + %n column(s) + %n колонка%n колонки%n колонок%n колонок + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - %n рядок, %n рядка, %n рядків, %n рядків, + %n byte(s) + %n байт%n байти%n байтів%n байтів - %n column(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 - Не вдається відкрити файл-ключ + Can't open key file: +%1 + Не вдається відкрити файл ключа: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - Неможливо відкрити сховище. + Passwords + Паролі + + + + DatabaseSettingsDialog + + Advanced Settings + Розширене налаштування + + + General + Загальні - Database opened fine. Nothing to do. - Сховище відкрито без помилок. Обробка не потрібна. + Security + Безпека - Success - Успішно + Master Key + Головний ключ - The database has been successfully repaired -You can now save it. - Лагодження сховища успішно завершено. -Тепер Ви можете його зберегти. + Encryption Settings + Налаштування шифрування - Unable to repair the database. - Неможливо полагодити сховище. + Browser Integration + Сполучення з переглядачем - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - Загальні + KeePassXC-Browser settings + Налаштування KeePassXC-Browser - Encryption - Шифрування + &Disconnect all browsers + &Від'єднати від усіх переглядачів - Number of rounds too high - Key transformation rounds - Кількість циклів занадто висока + Forg&et all site-specific settings on entries + &Забути особливе налаштування сайтів у всіх записах - 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. - -Якщо Ви залишите таку кількість циклів, відкриття Вашого сховища може тривати кілька годин або днів (чи навіть довше)! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + Перемістити атрибути KeePassHTTP до &користувацьких даних у KeePassXC-переглядачі - Understood, keep number - Зрозуміло, кількість залишено + Stored keys + Збережені ключі - Cancel - Скасувати + Remove + Видалити - Number of rounds too low - Key transformation rounds - Кількість циклів занадто низька + Delete the selected key? + Видалити вибраний ключ? - 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. - -Якщо Ви залишите таку кількість циклів, Ваше сховище буде легко зламати. + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Ви дійсно бажаєте видалити позначений ключ? +Це може пошкодити сполучення з модулем переглядача. - KDF unchanged - ФОК не змінено + Key + Ключ - Failed to transform key with new KDF parameters; KDF unchanged. - Спроба перетворити ключ згідно з новими налаштуваннями ФОК зазнала невдачі; ФОК залишилась без змін + 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. + Ви дійсно бажаєте оновити застаріле налаштування сполучення з переглядачами згідно з найновішими стандартами? +Це необхідно для підтримання сумісності з модулем переглядача. @@ -903,227 +1142,332 @@ If you keep this number, your database may be too easy to crack! Parallelism: Паралельність: - - - DatabaseSettingsWidgetGeneral - Database Meta Data - Метадані сховища + Decryption Time: + Час розшифрування: - Database name: - Назва сховища: + ?? s + ?? с - Database description: - Опис сховища: + Change + Змінити - Default username: - Типове ім’я користувача: + 100 ms + 100 мс - History Settings - Налаштування журналу + 5 s + 5 с - Max. history items: - Макс. записів журналу: + Higher values offer more protection, but opening the database will take longer. + Вищі значення поліпшують захист, але сповільнюють відкривання сховища. - Max. history size: - Макс. розмір журналу: + Database format: + Формат сховища: - MiB - МіБ + This is only important if you need to use your database with other programs. + Це важливо тільки якщо Вам потрібно використовувати Ваше сховище з іншими програмами. - Use recycle bin - Використовувати смітник + KDBX 4.0 (recommended) + KDBX 4.0 (рекомендовано) - Additional Database Settings - Додаткові налаштування сховища + KDBX 3.1 + KDBX 3.1 - Enable &compression (recommended) - Увімкнути стиснення (рекомендовано) + unchanged + Database decryption time is unchanged + без змін - - - DatabaseTabWidget - Root - Root group - Корінь + Number of rounds too high + Key transformation rounds + Кількість циклів надто висока - KeePass 2 Database - Сховище KeePass 2 + 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. + +Якщо Ви залишите таку кількість циклів, відкриття Вашого сховища може тривати кілька годин або днів (чи навіть довше)! - All files - Всі файли + Understood, keep number + Зрозуміло, залишити таку кількість - Open database - Відкрити сховище + Cancel + Скасувати - File not found! - Файл не знайдено! + Number of rounds too low + Key transformation rounds + Кількість циклів надто низька - Unable to open the database. - Неможливо відкрити сховище. + 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. + +Якщо Ви залишите таку кількість циклів, Ваше сховище буде легко зламати! - File opened in read only mode. - Файл відкритий лише для читання. + KDF unchanged + ФОК не змінено - Open CSV file - Відкрити CSV файл + 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 - CSV file - Файл CSV + Database Meta Data + Метадані сховища - All files (*) - Усі файли (*) + Database name: + Назва сховища: - Merge database - Об'єднати сховище + Database description: + Опис сховища: - Open KeePass 1 database - Відкрити сховище KeePass 1 + Default username: + Типове ім’я користувача: - KeePass 1 database - Сховище KeePass 1 + History Settings + Налаштування журналу - Close? - Закрити? + Max. history items: + Макс. записів журналу: - "%1" is in edit mode. -Discard changes and close anyway? - «%1» в режимі редагування. -Відхилити зміни і все одно закрити? + Max. history size: + Макс. розмір журналу: - Save changes? - Зберегти зміни? + MiB + МіБ - "%1" was modified. -Save changes? - «%1» змінено. -Зберегти зміни? + Use recycle bin + Використовувати смітник - Writing the database failed. - Записати сховище не вдалося. + Additional Database Settings + Додаткове налаштування сховища - Passwords - Паролі + Enable &compression (recommended) + Увімкнути стиснення (рекомендовано) + + + DatabaseSettingsWidgetKeeShare - Save database as - Зберегти сховище як + Sharing + Спільне користування - Export database to CSV file - Експортувати сховище у файл CSV + Breadcrumb + Хлібні крихти - Writing the CSV file failed. - Не вдалось записати CSV файл. + Type + Тип - New database - Нове сховище + Path + Шлях + + + Last Signer + Останній підписувач - locked - заблоковано + Certificates + Сертифікати - Lock database - Заблокувати сховище + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Can't lock the database as you are currently editing it. -Please press cancel to finish your changes or discard them. - Неможливо заблокувати сховище, яке Ви зараз редагуєте. -Натисніть «скасувати», щоб завершити зміни або відкинути їх. + Add additional protection... + Поліпшити захист... - This database has been modified. -Do you want to save the database before locking it? -Otherwise your changes are lost. - У сховище було внесено зміни. -Ви хочете зберегти його перед блокуванням? -Інакше внесені зміни буде втрачено. + No encryption key added + Жодного шифрувального ключа не додано - Disable safe saves? - Вимкнути безпечне збереження? + You must add at least one encryption key to secure your 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 не зміг зберегти сховище кілька разів поспіль. Швидше за все це сталося тому, що служба узгодження файлів блокує файл для запису. -Вимкнути безпечне збереження і спробувати знов? + 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 + Зміна головного ключа зазнала невдачі - DatabaseWidget + DatabaseSettingsWidgetMetaDataSimple - Searching... - Шукаю… + Database Name: + Назва сховища: - Change master key - Змінити головний ключ + Description: + Опис: + + + DatabaseTabWidget - Delete entry? - Видалити запис? + KeePass 2 Database + Сховище KeePass 2 - Do you really want to delete the entry "%1" for good? - Ви дійсно хочете остаточно видалити запис «%1»? + All files + Всі файли + + + Open database + Відкрити сховище + + + CSV file + Файл CSV - Delete entries? - Видалити записи? + Merge database + Об'єднати сховище - Do you really want to delete %1 entries for good? - Ви дійсно хочете остаточно видалити %1 записи(-ів)? + Open KeePass 1 database + Відкрити сховище KeePass 1 - Move entry to recycle bin? - Перемістити запис у смітник? + KeePass 1 database + Сховище KeePass 1 - Do you really want to move entry "%1" to the recycle bin? - Ви справді хочете перемістити запис «%1» у смітник? + Export database to CSV file + Експортувати сховище у файл CSV + + + Writing the CSV file failed. + Не вдалось записати CSV файл. + + + 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 + Нове сховище + + + %1 [New Database] + Database tab name modifier + %1 [Нове сховище] + + + %1 [Locked] + Database tab name modifier + %1 [Заблоковане] + + + %1 [Read-only] + Database tab name modifier + %1 [лише читання] + + + + DatabaseWidget + + Searching... + Триває пошук… + + + Do you really want to delete the entry "%1" 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 запис у смітник?Ви дійсно хочете перемістити %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 + + Do you really want to delete %n entry(s) for good? + Ви дійсно хочете остаточно видалити %n запис?Ви дійсно хочете остаточно видалити %n записи?Ви дійсно хочете остаточно видалити %n записів?Ви дійсно хочете остаточно видалити %n записів? + + + Delete entry(s)? + Видалити запис?Видалити записи?Видалити записи?Видалити записи? + + + Move entry(s) to recycle bin? + Перемістити запис у смітник?Перемістити записи в смітник?Перемістити записи в смітник?Перемістити записи в смітник? + - Generate TOTP Token - Створити позначку ТОГ + File opened in read only mode. + Файл відкритий лише для читання. - Close - Закрити + Lock Database? + Заблокувати сховище? - General - Загальні + You are editing an entry. Discard changes and lock anyway? + Ви змінюєте запис. Відкинути зміни і все одно заблокувати? - Password - Пароль + "%1" was modified. +Save changes? + «%1» змінено. +Зберегти зміни? - URL - URL + Database was modified. +Save changes? + Сховище змінено. +Зберегти зміни? - Expiration - Термін чинності + Save changes? + Зберегти зміни? - Username - Ім’я користувача + Could not open the new database file while attempting to autoreload. +Error: %1 + Відкриття нового файлу сховища зазнало невдачі під час автоматичного перевантаження. +Помилка: %1 - Autotype - Автозаповнення + Disable safe saves? + Вимкнути безпечне збереження? - Searching - Шукаю + 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 не зміг зберегти сховище кілька разів поспіль. Швидше за все це сталося тому, що служба узгодження файлів блокує файл для запису. +Вимкнути безпечне збереження і спробувати знов? - Attributes - Атрибути + Writing the database failed. +%1 + Записати сховище не вдалося. +%1 - Attachments - Вкладення + Passwords + Паролі - Notes - Примітки + Save database as + Зберегти сховище як - Window - Вікно + KeePass 2 Database + Сховище KeePass 2 - Sequence - Послідовність + 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 посилань. Бажаєте перезаписати посилання значенням, пропустити запис або все одно видалити? - Search - Пошук + Delete group + Видалити групу - Clear - Очистити + Move group to recycle bin? + Перемістити групу у смітник? - Never - Ніколи + Do you really want to move the group "%1" to the recycle bin? + Ви дійсно хочете перемістити групу «%1» у смітник? - [PROTECTED] - [ЗАХИЩЕНО] + Successfully merged the database files. + Файли сховищ вдало об'єднано. - Disabled - Вимкнено + Database was not modified by merge operation. + Об'єднання не змінило сховище. - Enabled - Увімкнено + 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,116 +2417,166 @@ This may cause the affected plugins to malfunction. Attachments Вкладення + + Yes + Так + + + TOTP + ТОП + - EntryView + EntryPreviewWidget - Customize View - Налаштувати перегляд + Generate TOTP Token + Створити позначку ТОП - Hide Usernames - Ховати імена користувача + Close + Закрити - Hide Passwords - Сховати паролі + General + Загальні - Fit to window - Припасувати до вікна + Username + Ім’я користувача - Fit to contents - Припасувати до вмісту + Password + Пароль - Reset to defaults - Повернути до типових налаштувань + Expiration + Знечинюється - Attachments (icon) - Вкладення (значок) + URL + URL - - - Group - Recycle Bin - Смітник + Attributes + Атрибути - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: неможливо зберегти файл! + Attachments + Вкладення - Cannot save the native messaging script file. - Неможливо зберегти файл сценарію для власного обміну повідомленнями. + Notes + Примітки - - - HttpPasswordGeneratorWidget - Length: - Довжина: + Autotype + Автозаповнення - Character Types - Види символів + Window + Вікно - Upper Case Letters - Великі літери + Sequence + Послідовність - A-Z - A-Z + Searching + Пошук - Lower Case Letters - Малі літери + Search + Пошук - a-z - a-z + Clear + Очистити - Numbers - Цифри + Never + Ніколи - 0-9 - 0-9 + [PROTECTED] + [ЗАХИЩЕНО] - Special Characters - Спеціальні символи + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 - /*_& ... - /*_& ... + Enabled + Увімкнено - Exclude look-alike characters - Виключити неоднозначні символи + Disabled + Вимкнено - Ensure that the password contains characters from every group - Забезпечити входження до пароля символів з кожної групи + Share + Спільне використання + + + EntryView - Extended ASCII - Розширені ASCII + 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 + [порожня] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: неможливо зберегти файл! + + + Cannot save the native messaging script file. + Неможливо зберегти файл сценарію для власного обміну повідомленнями. 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 Хибний тип поля запису + + unable to seek to content position + неможливо знайти позицію вмісту + - KeePass2 + KeeShare - AES: 256-bit - AES: 256-біт + Disabled share + Вимкнуте спільне користування - Twofish: 256-bit - Twofish: 256-біт + Import from + Імпортувати з - ChaCha20: 256-bit - ChaCha20: 256-біт + 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 – рекомендовано) + Import from share %1 + + + + Export to share %1 + + + + Synchronize with share %1 + - Main + KeyComponentWidget - Existing single-instance lock file is invalid. Launching new instance. - Наявний блокувальний файл режиму одного примірника є хибним. Запускаю новий примірник. + Key Component + Складник ключа - The lock file could not be created. Single-instance mode disabled. - Неможливо створити блокувальний файл. Режим одного примірника вимкнено. + Key Component Description + Опис складника ключа - Another instance of KeePassXC is already running. - Інший примірник KeePassXC вже запущений. + Cancel + Скасувати - Fatal error while testing the cryptographic functions. - Невиправна помилка в процесі тестування криптографічних функцій. + Key Component set, click to change or remove + Набір складників ключа, клацніть щоб змінити або видалити - KeePassXC - Error - KeePassXC – помилка + 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 встановлено, клацніть, щоб змінити або видалити - MainWindow + KeyFileEditWidget - &Database - Сховище + Browse + Огляд - &Recent databases - Останні сховища + Generate + Створити - Import - Імпорт + Key File + Файл-ключ - &Help - Довідка + <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> - E&ntries - Записи + Legacy key file format + Застарілий формат файла-ключа - Copy att&ribute to clipboard - Копіювати атрибут до кишені + 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. + Ви використовуєте застарілий формат файла-ключа, підтримку якого +може бути скасовано у майбутньому. + +Будь ласка, перейдіть до налаштування головного ключа і створіть новий файл-ключ. - Time-based one-time password - Тимчасовий одноразовий пароль + Error loading the key file '%1' +Message: %2 + Помилка завантаження файла-ключа '%1' +Повідомлення: %2 - &Groups - Групи + Key files + Файли-ключі - &Tools - Інструменти + All files + Всі файли - &Quit - Вихід + Create Key File... + Створити файл-ключ... - &About - Про KeePassXC + Error creating key file + Помилка створення файла-ключа - &Open database... - Відкрити сховище… + Unable to create key file: %1 + Неможливо створити файл-ключ: %1 - &Save database - Зберігти сховище + Select a key file + Обрати файл-ключ + + + MainWindow - &Close database - Закрити сховище + &Database + &Сховище - &New database - Нове сховище + &Recent databases + &Останні сховища - Merge from KeePassX database - Об'єднати зі сховищем KeePassX + &Help + &Довідка - &Add new entry - Додати новий запис + E&ntries + &Записи - &View/Edit entry - Переглянути/змінити запис + &Groups + &Групи - &Delete entry - Видалити запис + &Tools + &Інструменти - &Add new group - Додати нову групу + &Quit + &Вихід - &Edit group - Змінити групу + &About + &Про KeePassXC - &Delete group - Видалити групу + &Open database... + Від&крити сховище… - Sa&ve database as... - Зберегти сховище як… + &Save database + З&берегти сховище - Change &master key... - Змінити головний ключ… + &Close database + З&акрити сховище - &Database settings - Налаштування сховища + &Delete entry + В&идалити запис - Database settings - Параметри сховища + &Edit group + З&мінити групу - &Clone entry - Клонувати запис + &Delete group + Вида&лити групу - &Find - Знайти + Sa&ve database as... + Зберегти сховище &як… - Copy &username - Копіювати ім'я користувача + Database settings + Налаштування сховища - Copy username to clipboard - Копіювати ім’я користувача в кишеню + &Clone entry + Клон&увати запис + + + Copy &username + Скопі&ювати ім'я користувача - Cop&y password - Копіювати пароль + Copy username to clipboard + Скопіювати ім’я користувача в кишеню 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,1084 +3440,1890 @@ This version is not meant for production use. Зберігайте резервну копію Ваших сховищ через підвищений ризик пошкодження даних. Ця версія не призначена для повсякденного користування. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - Хибний файл ключа. Ключ має бути у форматі OpenSSH. + &Donate + Пожерт&вувати - PEM boundary mismatch - Невідповідність межам PEM + Report a &bug + Повідомит&и про помилку - Base64 decoding failed - Розшифрування Base64 зазнало невдачі + 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. - Key file way too small. - Файл ключа занадто маленький. + &Import + Імпортувати - Key file magic header id invalid - Хибний логічний код файлу ключа + Copy att&ribute... + Скопіювати атрибут... - Found zero keys - Не знайдено жодного ключа + TOTP... + ТОП... - Failed to read public key. - Зчитування відкритого ключа зазнало невдачі. + &New database... + Нове сховище... - Corrupted key file, reading private key failed - Файл ключа пошкоджений, зчитування таємного ключа зазнало невдачі + Create a new database + Створити нове сховище - No private key payload to decrypt - Корисної навантаги таємного ключа не знайдено + &Merge from database... + Об'єднати зі сховищем... - Trying to run KDF without cipher - Пробуємо обчислити ФОК без шифру + Merge from another KDBX database + Об'єднати з іншого сховища KDBX - Passphrase is required to decrypt this key - Для розшифрування цього ключа потрібен пароль + &New entry + Новий запис - Key derivation failed, key file corrupted? - Обчислення ключа зазнало невдачі. Можливо, файл ключа пошкоджений? + Add a new entry + Додати новий запис - Decryption failed, wrong passphrase? - Розшифрувати не вдалося, можливо, через хибний пароль + &Edit entry + Змінити запис - Unexpected EOF while reading public key - Несподіваний кінець файлу під час зчитування відкритого ключа + View or edit entry + Переглянути або змінити запис - Unexpected EOF while reading private key - Несподіваний кінець файлу під час зчитування таємного ключа + &New group + Нова група - Can't write public key as it is empty - Неможливо записати відкритий ключ, оскільки він пустий + Add a new group + Додати нову групу - Unexpected EOF when writing public key - Несподіваний кінець файлу під час запису відкритого ключа + Change master &key... + Змінити головний ключ... - Can't write private key as it is empty - Неможливо записати таємний ключ, оскільки він пустий + &Database settings... + Налаштування сховища... - Unexpected EOF when writing private key - Несподіваний кінець файлу під час запису таємного ключа + Copy &password + Скопіювати пароль - Unsupported key type: %1 - Непідтримуваний вид ключа: %1 + Perform &Auto-Type + Виконати Автозаповнення - Unknown cipher: %1 - Невідомий шифр: %1 + Open &URL + Відкрити URL - Cipher IV is too short for MD5 kdf - Шифр IV занадто короткий для ФОК MD5 + KeePass 1 database... + Сховище KeePass 1... - Unknown KDF: %1 - Невідома ФОК: %1 + Import a KeePass 1 database + Імпортувати сховище KeePass 1 - Unknown key type: %1 - Невідомий тип ключа: %1 + CSV file... + Файл CSV... - - - OptionDialog - Dialog - Діалог + Import a CSV file + Імпортувати файл CSV - This is required for accessing your databases from ChromeIPass or PassIFox - Це необхідно, щоб надати ChromeIPass або PassIFox доступ до вашого сховища + Show TOTP... + Показати ТОП... - Enable KeePassHTTP server - Увімкнути сервер KeePassHTTP + Show TOTP QR Code... + Показати QR-код ТОП... - General - Загальні + Check for Updates... + Перевірити наявність оновлень... - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - Показувати повідомлення, коли надходить запит на реєстраційні дані + Share entry + Спільне використання запису - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Показувати лише найкращі збіги для певного URL замість усіх записів для всієї області. + 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! +Зважайте на можливість деяких вади та незначних проблем, ця версія не призначена для повсякденного користування. - &Return only best matching entries - Показувати лише найкращі збіги + Check for updates on startup? + Перевіряти наявність оновлень під час запуску? - Re&quest to unlock the database if it is locked - Запитувати щодо розблокування сховища, якщо воно заблоковане + Would you like KeePassXC to check for updates on startup? + Ви хочете, щоб KeePassXC перевіряв наявність оновлень під час запуску? - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - Показані тільки записи з такою самою схемою (http://, https://, ftp://, …). + You can always check for updates manually from the application menu. + Ви завжди можете перевірити наявність оновлень з меню застосунку. + + + Merger - &Match URL schemes - Узгодити зі схемами URL + Creating missing %1 [%2] + Створення відсутніх %1 [%2] - Sort matching entries by &username - Сортувати збіги за ім'ям користувача + Relocating %1 [%2] + Переміщення %1 [%2] - Sort &matching entries by title - Сортувати збіги за заголовком + Overwriting %1 [%2] + Перезапис %1 [%2] - R&emove all shared encryption keys from active database - Видалити всі спільні шифрувальні ключі з активного сховища + older entry merged from database "%1" + об'єднано зі старішим записом зі сховища "%1" - Re&move all stored permissions from entries in active database - Видалити всі збережені привілеї для записів у активному сховищу + Adding backup for older target %1 [%2] + Створення резервної копії старішої цілі %1 [%2] - Password Generator - Генератор паролів + Adding backup for older source %1 [%2] + Створення резервної копії старішого джерела %1 [%2] - Advanced - Розширені + Reapplying older target entry on top of newer source %1 [%2] + Накладання старішого цільового запису на новіше джерело %1 [%2] - Always allow &access to entries - Завжди дозволяти доступ до записів + Reapplying older source entry on top of newer target %1 [%2] + Накладання новішого джерельного запису на старішу ціль %1 [%2] - Always allow &updating entries - Завжди дозволяти оновлення записів + Synchronizing from newer source %1 [%2] + Узгодження з новішим джерелом %1 [%2] - Only the selected database has to be connected with a client. - Тільки вибране сховище має бути під'єднаним через клієнта. + Synchronizing from older source %1 [%2] + Узгодження зі старішим джерелом %1 [%2] - Searc&h in all opened databases for matching entries - Шукати збіги у всіх відкритих сховищах + Deleting child %1 [%2] + Видалення нащадка %1 [%2] - Automatically creating or updating string fields is not supported. - Автоматичне створення та оновлення текстових полів не втілене. + Deleting orphan %1 [%2] + Видалення поодинокого об'єкту %1 [%2] - &Return advanced string fields which start with "KPH: " - Показати розширені текстові поля, що починаються з «KPH: » + Changed deleted objects + Змінено видалені об'єкти - HTTP Port: - Шлюз HTTP: + Adding missing icon %1 + Додавання відсутнього значка %1 + + + + NewDatabaseWizard + + Create a new KeePassXC database... + Створити нове сховище KeePassXC... - Default port: 19455 - Типовий шлюз: 19455 + Root + Root group + Корінь + + + NewDatabaseWizardPage - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC чекатиме на сигнали через цей шлюз за адресою 127.0.0.1 + WizardPage + Сторінка майстера налаштування - <b>Warning:</b> The following options can be dangerous! - <b>Попередження:</b> ці параметри можуть бути небезпечними! + En&cryption Settings + Налаштування &шифрування - <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> + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища. - Cannot bind to privileged ports - Неможливо приєднатись до привілейованих шлюзів + Advanced Settings + Розширене налаштування - Cannot bind to privileged ports below 1024! -Using default port 19455. - Неможливо приєднатись до привілейованих шлюзів нижче 1024! -Натомість буде використано шлюз 19455. + Simple Settings + Просте налаштування - PasswordGeneratorWidget + NewDatabaseWizardPageEncryption - %p% - %p% + Encryption Settings + Налаштування шифрування - Password: - Пароль: + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + Тут Ви можете налаштувати шифрування сховища. Не хвилюйтесь, Ви зможете зробити зміни пізніше в параметрах сховища. + + + NewDatabaseWizardPageMasterKey - strength - Password strength - надійність + Database Master Key + Головний ключ сховища - entropy - ентропія + A master key known only to you protects your database. + Відомий тільки Вам головний ключ захищає Ваше сховище. + + + NewDatabaseWizardPageMetaData - Password - Пароль + General Database Information + Загальна інформація про сховище - Character Types + 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 + Хибний логічний код файлу ключа + + + 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 + Непідтримуваний тип ключа: %1 + + + Unknown cipher: %1 + Невідомий шифр: %1 + + + Cipher IV is too short for MD5 kdf + Шифр IV занадто короткий для ФОК MD5 + + + Unknown KDF: %1 + Невідома ФОК: %1 + + + Unknown key type: %1 + Невідомий тип ключа: %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> + <p>Пароль є основним засобом для убезпечення Вашого сховища.</p><p>Найкращі паролі мають бути довгими та унікальними. KeePassXC може створити такий для Вас.</p> + + + Passwords do not match. + Паролі не збігаються. + + + Generate master password + Створити головний пароль + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + Пароль: + + + strength + Password strength + надійність + + + entropy + ентропія + + + Password + Пароль + + + Character Types Види символів - Upper Case Letters - Великі літери + Upper Case Letters + Великі літери + + + Lower Case Letters + Малі літери + + + Numbers + Цифри + + + Special Characters + Спеціальні символи + + + Extended ASCII + Розширені ASCII + + + Exclude look-alike characters + Виключити неоднозначні символи + + + Pick characters from every group + Використати символи з кожної групи + + + &Length: + Довжина: + + + Passphrase + Вираз пароля + + + Wordlist: + Перелік слів: + + + Word Separator: + Розділювач слів: + + + Copy + Скопіювати + + + Accept + Прийняти + + + Close + Закрити + + + Entropy: %1 bit + Ентропія: %1 біт + + + Password Quality: %1 + Якість пароля: %1 + + + 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 + Не залучати літери, що не представляють шистнадцятковий код (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 + + Database not opened + Сховище не відкрите + + + Database hash not available + Контрольна сума сховища недоступна + + + Client public key not received + Відкритий ключ користувача не одержано + + + Cannot decrypt message + Неможливо розшифрувати повідомлення + + + Action cancelled or denied + Дію скасовано або заборонено + + + KeePassXC association failed, try again + Прив'язка KeePassXC зазнала невдачі, спробуйте ще раз + + + Encryption key is not recognized + Шифрувальний ключ не розпізнано + + + Incorrect action + Хибна дія + + + Empty message received + Одержано порожнє повідомлення + + + No URL provided + URL не надано + + + 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 + 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: + Введіть пароль для розблокування %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 + NULL пристрій + + + 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 + YubiKey[%1] виклик-відповідь – гніздо %2 – %3 + + + Press + Натиснути + + + Passive + Пасивне + + + SSH Agent + Посередник SSH + + + Generate a new random diceware passphrase. + Створити новий вираз пароля методом гральних кісток (diceware). + + + Word count for the diceware passphrase. + Кількість слів у виразі пароля. + + + Wordlist for the diceware generator. +[Default: EFF English] + Список слів для генератора паролів методом diceware. +[Типово: англійська версія EFF] + + + Generate a new random password. + Створити новий випадковий пароль. + + + Invalid value for password length %1. + Неправильне значення довжини пароля %1. + + + Could not create entry with path %1. + Неможливо створити запис із шляхом %1. + + + Enter password for new entry: + Введіть пароль для нового запису: + + + Writing the database failed %1. + Записати сховище не вдалося %1. + + + Successfully added entry %1. + Успішно додано запис %1. + + + 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! + Поточний ТОП запису скопійовано до кишені! - Lower Case Letters - Малі літери + Entry's password copied to the clipboard! + Пароль запису скопійовано до кишені! + + + Clearing the clipboard in %1 second(s)... + Очищення кишені через %1 секунду...Очищення кишені через %1 секунди...Очищення кишені через %1 секунд...Очищення кишені через %1 секунд... - Numbers - Цифри + Clipboard cleared! + Кишеню очищено! - Special Characters - Спеціальні символи + Silence password prompt and other secondary outputs. + Тихе запрошення пароля та інші вторинні виводи. - Extended ASCII - Розширені ASCII + count + CLI parameter + кількість - Exclude look-alike characters - Виключити неоднозначні символи + Invalid value for password length: %1 + Хибне значення довжини пароля: %1 - Pick characters from every group - Використати символи з кожної групи + Could not find entry with path %1. + Неможливо знайти запис із шляхом %1. - &Length: - Довжина: + Not changing any field for entry %1. + Поля запису %1 залишаються без змін. - Passphrase - Пароль + Enter new password for entry: + Введіть новий пароль для запису: - Wordlist: - Перелік слів: + Writing the database failed: %1 + Записати сховище не вдалося: %1 - Word Count: - Кількість слів + Successfully edited entry %1. + Успішно змінено запис %1. - Word Separator: - Розділювач слів + Length %1 + Довжина: %1 - Generate - Створити + Entropy %1 + Ентропія: %1 - Copy - Копіювати + Log10 %1 + Log10 %1 - Accept - Прийняти + Multi-word extra bits %1 + Багатословні додаткові біти %1 - Close - Закрити + Type: Bruteforce + Тип: Метод грубої сили - Apply - Застосувати + Type: Dictionary + Тип: Словник - Entropy: %1 bit - Ентропія: %1 біт + Type: Dict+Leet + Тип: Словник+Leet - Password Quality: %1 - Якість пароля: %1 + Type: User Words + Тип: Користувацькі слова - Poor - Password quality - Погана + Type: User+Leet + Тип: Користувач+Leet - Weak - Password quality - Низька + Type: Repeated + Тип: Повторювання - Good - Password quality - Добра + Type: Sequence + Тип: Послідовність - Excellent - Password quality - Відмінна + Type: Spatial + Тип: Просторовий - - - QObject - Database not opened - Сховище не відкрите + Type: Date + Тип: Дата - Database hash not available - Контрольна сума сховища недоступна + Type: Bruteforce(Rep) + Тип: Метод грубої сили (повт.) - Client public key not received - Відкритий ключ користувача не одержано + Type: Dictionary(Rep) + Тип: Словник (повт.) - Cannot decrypt message - Неможливо розшифрувати повідомлення + Type: Dict+Leet(Rep) + Тип: Словник+Leet (повт.) - Timeout or cannot connect to KeePassXC - Перевищено час очікування або неможливо під'єднатися до KeePassXC + Type: User Words(Rep) + Тип: Користувацькі слова (повт.) - Action cancelled or denied - Дію скасовано або заборонено + Type: User+Leet(Rep) + Тип: Користувач+Leet (повт.) - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - Неможливо зашифрувати повідомлення або знайти відкритий ключ. Переконайтеся, що власний обмін повідомленнями у KeePassXC ввімкнено. + Type: Repeated(Rep) + Тип: Повторювання (повт.) - KeePassXC association failed, try again - Прив'язка KeePassXC зазнала невдачі, спробуйте ще раз + Type: Sequence(Rep) + Тип: Послідовність (повт.) - Key change was not successful - Зміна ключа зазнала невдачі + Type: Spatial(Rep) + Тип: Просторовий (повт.) - Encryption key is not recognized - Шифрувальний ключ не розпізнано + Type: Date(Rep) + Тип: Дата (повт.) - No saved databases found - Збережених сховищ не знайдено + Type: Unknown%1 + Тип: Невідомий%1 - Incorrect action - Хибна дія + Entropy %1 (%2) + Ентропія: %1 (%2) - Empty message received - Одержано порожнє повідомлення + *** Password length (%1) != sum of length of parts (%2) *** + *** Довжина пароля (%1) != сума довжин частин (%2) *** - No URL provided - URL не надано + Failed to load key file %1: %2 + Завантаження файла ключа зазнало невдачі %1: %2 - No logins found - Імен користувача не знайдено + File %1 does not exist. + Файл %1 не існує. - Unknown error - Невідома помилка + Unable to open file %1. + Неможливо відкрити файл %1. - Add a new entry to a database. - Додати новий запис до сховища + Error while reading the database: +%1 + Помилка читання сховища: +%1 - Path of the database. - Шлях до сховища. + Error while parsing the database: +%1 + Помилка синтаксичного аналізу сховища: +%1 - Key file of the database. - Файл ключа для сховища. + Length of the generated password + Довжина створюваного пароля - path - шлях + Use lowercase characters + Використовувати малі літери - Username for the entry. - Ім'я користувача для запису. + Use uppercase characters + Використовувати великі літери - username - ім'я користувача + Use numbers. + Використовувати цифри. - URL for the entry. - URL для запису. + Use special characters + Використовувати спеціальні символи - URL - URL + Use extended ASCII + Використовувати розширені ASCII - Prompt for the entry's password. - Запитати введення пароля для запису. + Exclude character set + Виключити набір символів - Generate a password for the entry. - Згенерувати пароль для запису. + chars + символи - Length for the generated password. - Довжина згенерованого пароля. + Exclude similar looking characters + Виключати схожі символи - length - довжина + Include characters from every selected group + Використовувати символи з кожної групи - Path of the entry to add. - Шлях до запису, що треба додати. + Recursively list the elements of the group. + Показувати елементи групи рекурсивно. - Copy an entry's password to the clipboard. - Копіювати пароль запису до буферу обміну. + Cannot find group %1. + Неможливо знайти групу %1. - Path of the entry to clip. - clip = copy to clipboard - Шлях до запису, що треба скопіювати. + Error reading merge file: +%1 + Помилка читання файлу для об'єднання: +%1 - Timeout in seconds before clearing the clipboard. - Час очікування перед очищенням кишені. + Unable to save database to file : %1 + Неможливо зберегти сховище до файлу : %1 - Edit an entry. - Змінити запис + Unable to save database to file: %1 + Неможливо зберегти сховище до файлу: %1 - Title for the entry. - Заголовок запису. + Successfully recycled entry %1. + Успішно видалено запис %1. - title - Заголовок + Successfully deleted entry %1. + Успішно вилучено запис %1. - Path of the entry to edit. - Шлях до запису, що підлягає зміні. + Show the entry's current TOTP. + Показати поточний ТОП запису. - Estimate the entropy of a password. - Обчислити ентропію пароля. + ERROR: unknown attribute %1. + ПОМИЛКА: невідомий атрибут %1. - Password for which to estimate the entropy. - Пароль, для якого обчислюється ентропія. + No program defined for clipboard manipulation + Програма для дій з кишенею не означена - Perform advanced analysis on the password. - Виконати поглиблений аналіз пароля. + Unable to start program %1 + Неможливо запустити програму %1 - Extract and print the content of a database. - Видобути і надрукувати вміст сховища. + file empty + порожній файл - Path of the database to extract. - Шлях до сховища, щоб відкрити. + %1: (row, col) %2,%3 + %1: (рядок, позиція) %2,%3 - Insert password to unlock %1: - Вставте пароль для відкриття %1: + AES: 256-bit + AES: 256-біт + + + Twofish: 256-bit + Twofish: 256-біт - Failed to load key file %1 : %2 - Не вдалося завантажити файл ключа %1 : %2 + ChaCha20: 256-bit + ChaCha20: 256-біт - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Попередження: Ви використовуєте застарілий формат ключа, підтримка якого - може незабаром закінчитись. - - Бажано створити новий файл-ключ. + Argon2 (KDBX 4 – recommended) + Argon2 (KDBX 4 – рекомендовано) - - -Available commands: - - - -Доступні команди: - + AES-KDF (KDBX 4) + AES-KDF (KDBX 4) - Name of the command to execute. - Назва команди до виконання. + AES-KDF (KDBX 3.1) + AES-KDF (KDBX 3.1) - List database entries. - Показати перелік сховищ. + Invalid Settings + TOTP + Хибне налаштування - Path of the group to list. Default is / - Шлях групи. Типовим є / + Invalid Key + TOTP + Хибний ключ - Find entries quickly. - Знаходити записи швидко. + Message encryption failed. + Шифрування повідомлення зазнало невдачі. - Search term. - Слово для пошуку. + No groups found + Жодної групи не знайдено - Merge two databases. - Об'єднати два сховища. + Create a new database. + Створити нове сховище. - Path of the database to merge into. - Шлях до сховища, з яким об'єднати. + File %1 already exists. + Файл %1 вже існує. - Path of the database to merge from. - Шлях до сховища, яке підлягає об'єднанню. + Loading the key file failed + Завантаження ключа зазнало невдачі - Use the same credentials for both database files. - Використовувати ті ж самі реєстраційні дані для обох сховищ. + No key is set. Aborting database creation. + Ключ не встановлено. Створення сховища скасовано. - Key file of the database to merge from. - Файл ключа для сховища, яке підлягає об'єднанню. + Failed to save the database: %1. + Зберегти сховище не вдалося %1. - Show an entry's information. - Показати дані запису. + Successfully created new database. + Нове сховище успішно створено. - 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. - Назви атрибутів для показу. Цей параметр можна вказати кілька разів, тим часом у кожному рядку може бути тільки один примірник у заданому порядку. Якщо атрибути не вказані, буде показано типові атрибути. + Insert password to encrypt database (Press enter to leave blank): + Введіть пароль для шифрування сховища (натисніть Ввід аби залишити пустим): - attribute - атрибут + Creating KeyFile %1 failed: %2 + Створення файла ключа %1 зазнало невдачі: %2 - Name of the entry to show. - Назва запису для показу. + Loading KeyFile %1 failed: %2 + Завантаження файла ключа %1 зазнало невдачі: %2 - NULL device - NULL пристрій + Remove an entry from the database. + Видалити запис зі сховища. - error reading from device - помилка під час зчитування з пристрію + Path of the entry to remove. + Шлях до запису, що підлягає видаленню. - file empty ! - - файл порожній! - + Existing single-instance lock file is invalid. Launching new instance. + Наявний блокувальний файл режиму одного примірника є хибним. Запускаємо новий примірник. - malformed string - хибне рядкове значення + The lock file could not be created. Single-instance mode disabled. + Неможливо створити блокувальний файл. Режим одного примірника вимкнено. - missing closing quote - бракує закривальних лапок + KeePassXC - cross-platform password manager + KeePassXC – багатоплатформний розпорядник паролів - Group - Група + filenames of the password databases to open (*.kdbx) + назви файлів сховищ, які треба відкрити (*.kdbx) - Title - Заголовок + 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 під час стиснення: + + + Error writing to underlying device: + Помилка запису на основний пристрій: + + + Error opening underlying device: + Помилка відкриття основного пристрою: + + + Error reading data from underlying device: + Помилка читання з основного пристрою: + + + Internal zlib error when decompressing: + Внутрішня помилка zlib під час розпакування: + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + Ця версія zlib не підтримує формат gzip. - Username - Ім’я користувача + Internal zlib error: + Внутрішня помилка zlib: + + + SSHAgent - Password - Пароль + Agent connection failed. + Не вдалося з'єднатися з посередником. - Notes - Примітки + Agent protocol error. + Помилка протоколу посередника. - Last Modified - Остання зміна + No agent running, cannot add identity. + Немає запущеного посередника, неможливо додати ключ до в'язки. - Created - Створено + No agent running, cannot remove identity. + Немає запущеного посередника, неможливо видалити ключ із в'язки. - Legacy Browser Integration - Застарілий спосіб інтеграції з браузером + Agent refused this identity. Possible reasons include: + Посередник відхилив цей ключ. Ймовірні причини: - Browser Integration - Інтеграція з браузером + The key has already been added. + Цей ключ вже додано. - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] виклик-відповідь – гніздо %2 – %3 + Restricted lifetime is not supported by the agent (check options). + Обмеження часу не підтримується цим посередником (перевірте налаштування). - Press - Натиснути + A confirmation request is not supported by the agent (check options). + Запит підтвердження не підтримується цим посередником (перевірте налаштування). + + + SearchHelpWidget - Passive - Пасивне + Search Help + Довідка з пошуку - SSH Agent - Посередник SSH + Search terms are as follows: [modifiers][field:]["]term["] + Пошукові терміни мають такий формат: [модифікатори][поле:]["]термін["] - Generate a new random diceware passphrase. - Генерувати новий пароль методом гральних кісток (diceware). + Every search term must match (ie, logical AND) + Всі пошукові терміни повинні співпадати (тобто, логічне І) - Word count for the diceware passphrase. - Кількість слів у паролі. + Modifiers + Модифікатори - count - кількість + exclude term from results + Виключити термін з результатів - Wordlist for the diceware generator. -[Default: EFF English] - Список слів для генератора паролів методом diceware. -[Типово: англійська версія EFF] + match term exactly + лише точні збіги з терміном - Generate a new random password. - Згенерувати новий випадковий пароль. + use regex in term + увімкнути реґулярні вирази у терміні - Length of the generated password. - Довжина генерованого пароля. + Fields + Поля - Use lowercase characters in the generated password. - Використовувати малі літери в генерації пароля. + Term Wildcards + Байдужі символи у термінах - Use uppercase characters in the generated password. - Використовувати великі літери в генерації пароля. + match anything + відповідає будь-якому текстові - Use numbers in the generated password. - Використовувати цифри в генерації пароля. + match one + відповідає одному символові - Use special characters in the generated password. - Використовувати спеціальні символи в генерації пароля. + logical OR + логічне АБО - Use extended ASCII in the generated password. - Використовувати розширений набір ASCII в генерації пароля. + Examples + Приклади - QtIOCompressor - - Internal zlib error when compressing: - Внутрішня помилка zlib при стисненні: - + SearchWidget - Error writing to underlying device: - Помилка запису на основний пристрій: + Search + Пошук - Error opening underlying device: - Помилка відкриття основного пристрою: + Clear + Очистити - Error reading data from underlying device: - Помилка читання з основного пристрою: + Limit search to selected group + Обмежити пошук вибраною групою - Internal zlib error when decompressing: - Внутрішня помилка zlib при розпакуванні: + Search Help + Довідка з пошуку - - - QtIOCompressor::open - The gzip format not supported in this version of zlib. - Формат gzip не підтримується в цій версії zlib. + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + Знайти (%1)... - Internal zlib error: - Внутрішня помилка zlib: + Case sensitive + Враховується регістр - SearchWidget + SettingsWidgetKeeShare - Search... - Знайти... + Active + Активний - Search - Пошук + Allow export + Дозволити експорт - Clear - Очистити + Allow import + Дозволити імпорт - Case Sensitive - Чутливість до регістру + Own certificate + Власний сертифікат - Limit search to selected group - Обмежити пошук вибраною групою + Fingerprint: + Відбиток: - - - Service - KeePassXC: New key association request - KeePassXC: новий запит на прив'язку ключа + Certificate: + Сертифікат: - 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 -надайте унікальну назву та підтвердьте його. + Signer + Підписувач - KeePassXC: Overwrite existing key? - KeePassXC: перезаписати наявний ключ? + Key: + Ключ: - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - Спільний ключ шифрування з назвою «%1» вже існує. -Перезаписати його? + Generate + Створити - KeePassXC: Update Entry - KeePassXC: оновити запис + Import + Імпорт - Do you want to update the information in %1 - %2? - Бажаєте оновити інформацію у %1 – %2? + Export + Експорт - KeePassXC: Database locked! - KeePassXC: сховище заблоковане! + Imported certificates + Імпортовані сертифікати - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - Чинне сховище заблоковане! -Будь ласка, розблокуйте обране сховище або виберіть інше незаблоковане. + Trust + Довірити - 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. + Ask + Запитати - KeePassXC: No keys found - KeePassXC: жодного ключа не знайдено + Untrust + Не довіряти - No shared encryption-keys found in KeePassHttp Settings. - Не знайдено спільних ключів шифрування у налаштуваннях KeePassHttp. + Remove + Видалити - KeePassXC: Settings not available! - KeePassXC: налаштування недоступні! + Path + Шлях - The active database does not contain an entry of KeePassHttp Settings. - Поточне сховище не містить налаштувань KeePassHttp. + Status + Стан - Removing stored permissions... - Видалення збережених привілеїв… + Fingerprint + Відбиток - Abort - Скасувати + Certificate + Сертифікат - KeePassXC: Removed permissions - KeePassXC: привілеї видалено - - - Successfully removed permissions from %n entries. - Успішно видалено привілеї для %n запису.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів. + Trusted + Перевірений - KeePassXC: No entry with permissions found! - KeePassXC: запис з привілеями не знайдено! + Untrusted + Неперевірений - The active database does not contain an entry with permissions. - Поточне сховище не містить записів з привілеями… + Unknown + Невідомий - - - SettingsWidget - Application Settings - Параметри застосунку + key.share + Filetype for KeeShare key + key.share - General - Загальні + KeeShare key file + Файл ключа KeeShare - Security - Безпека + All files + Всі файли - Access error for config file %1 - Помилка доступу до файлу конфігурації %1 + Select path + Вибрати шлях - - - SettingsWidgetGeneral - Basic Settings - Базові налаштування + Exporting changed certificate + Експортування зміненого сертифікату - Start only a single instance of KeePassXC - Запускати лише один примірник KeePassXC + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + Експортований сертифікат не відповідає чинному сертифікатові. Бажаєте експортувати чинний сертифікат? - Remember last databases - Пам’ятати останнє сховище + Signer: + + + + ShareObserver - Remember last key files and security dongles - Пам'ятати останні файли ключів і механізми захисту + Import from container without signature + Імпортування з оболонки без підпису - Load previous databases on startup - Завантажувати попереднє сховище під час запуску + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + Ми не можемо перевірити джерело спільної оболонки, тому що вона не підписана. Ви дійсно хочете імпортувати з %1? - Automatically save on exit - Автоматично зберігати при виході + Import from container with certificate + Імпортування з оболонки, що має сертифікат - Automatically save after every change - Автоматично зберігати після кожної зміни + Not this time + Не зараз - Automatically reload the database when modified externally - Автоматично перезавантажувати сховище після зовнішніх змін + Never + Ніколи - Minimize when copying to clipboard - Згортати при копіюванні до кишені + Always + Завжди - Minimize window at application startup - Згорнути вікно після запуску застосунку + Just this time + Тільки зараз - Use group icon on entry creation - Використовувати для нових записів значок групи + Import from %1 failed (%2) + Імпортування з %1 зазнало невдачі (%2) - Don't mark database as modified for non-data changes (e.g., expanding groups) - Не помічати сховище зміненим після змін, що не стосуються даних (напр. розкриття груп) + Import from %1 successful (%2) + Успішно імпортовано з %1 (%2) - Hide the Details view - Сховати докладний перегляд + Imported from %1 + Імпортовано з %1 - Show a system tray icon - Показувати значок в треї + Signed share container are not supported - import prevented + Підтримання підписаних спільних оболонок відсутнє - імпортування відвернуте - Hide window to system tray when minimized - При згортанні ховати вікно в область системних повідомлень + File is not readable + Файл непридатний до опрацювання - Hide window to system tray instead of app exit - Ховати вікно у системний лоток замість закриття застосунку. + Invalid sharing container + Хибна спільна оболонка - Dark system tray icon - Темний значок у системному лотку + Untrusted import prevented + Неперевірене імпортування відвернуте - Language - Мова + Successful signed import + Успішне підписане імпортування - Auto-Type - Автозаповнення + Unexpected error + Неочікувана помилка - Use entry title to match windows for global Auto-Type - Використовувати заголовок запису для знаходження відповідного вікна у глобальному автозаповненні + Unsigned share container are not supported - import prevented + Підтримання непідписаних спільних оболонок відсутнє – імпортування відвернуте - Use entry URL to match windows for global Auto-Type - Використовувати URL запису для знаходження відповідного вікна у глобальному автозаповненні + Successful unsigned import + Успішне непідписане імпортування - Always ask before performing Auto-Type - Завжди питати перед автозаповненням + File does not exist + Файл не існує - Global Auto-Type shortcut - Глобальні сполучення клавіш для автозаповнення + Unknown share container type + Невідомий тип спільної оболонки - Auto-Type delay - Затримка автозаповнення + Overwriting signed share container is not supported - export prevented + Перезаписування підписаної спільної оболонки не підтримане – експортування відвернуте - ms - Milliseconds - мс + Could not write export container (%1) + Неможливо записати експортну оболонку (%1) - Startup - Запуск + Overwriting unsigned share container is not supported - export prevented + Перезаписування непідписаної спільної оболонки не підтримане – експортування відвернуте - File Management - Керування файлами + Could not write export container + Неможливо записати експортну оболонку - Safely save database files (may be incompatible with Dropbox, etc) - Безпечно зберігати файли сховища (може бути несумісним з Dropbox та ін.) + Unexpected export error occurred + Неочікувана помилка під час експортування - Backup database file before saving - Створювати резервну копію сховища перед збереженням + Export to %1 failed (%2) + Експортування з %1 зазнало невдачі (%2) - Entry Management - Керування записами + Export to %1 successful (%2) + Успішно експортовано %1 (%2) - General - Загальні + Export to %1 + Експортування %1 - - - SettingsWidgetSecurity - Timeouts - Час очикування + Do you want to trust %1 with the fingerprint of %2 from %3? + - Clear clipboard after - Очищати кишеню через + Multiple import source path to %1 in %2 + - sec - Seconds - сек + Conflicting export target path %1 in %2 + - Lock databases after inactivity of - Заблокувати сховище, неактивне протягом + Could not embed signature: Could not open file to write (%1) + - Convenience - Зручність + Could not embed signature: Could not write file (%1) + - Lock databases when session is locked or lid is closed - Блокувати сховища після блокування сесії або закриття кришки пристрою + Could not embed database: Could not open file to write (%1) + - Lock databases after minimizing the window - Заблоковувати сховища після згортання вікна + Could not embed database: Could not write file (%1) + + + + TotpDialog - Don't require password repeat when it is visible - Не запитувати підтвердження пароля, якщо він не приховується + Timed Password + Тимчасовий пароль - Show passwords in cleartext by default - Типово показувати паролі у відкритому вигляді + 000000 + 000000 - Hide passwords in the preview panel - Приховувати паролі у панелі перегляду + Copy + Cкопіювати + + + Expires in <b>%n</b> second(s) + Втрачає чинність через <b>%n</b> секундуВтрачає чинність через <b>%n</b> секундиВтрачає чинність через <b>%n</b> секундВтрачає чинність через <b>%n</b> секунд + + + TotpExportSettingsDialog - Hide entry notes by default - Типово ховати нотатки до запису + Copy + Cкопіювати - Privacy - Приватність + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + УВАГА: Таке налаштування ТОП є нестандартним і може не працювати з іншими автентифікаторами. - Use Google as fallback for downloading website icons - Використовувати Google як запасний варіант для завантаження значків сторінок + There was an error creating the QR code. + Не вдалося створити QR-код. - Re-lock previously locked database after performing Auto-Type - Заблоковувати попередньо заблоковане сховище після завершення автозаповнення + Closing in %1 seconds. + Закриється через %1 секунд. - SetupTotpDialog + TotpSetupDialog Setup TOTP - Встановити ТОГ + Налаштування ТОП Key: @@ -3984,7 +5331,7 @@ Please unlock the selected database or choose another one which is unlocked. Default RFC 6238 token settings - Типові налаштування позначки RFC 6238 + Типове налаштування позначки RFC 6238 Steam token settings @@ -3992,62 +5339,87 @@ 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 цифр + sec + Seconds + сек + + + Code size: + Розмір кодування: 6 digits 6 цифр - Code size: - Розмір кодування: + 7 digits + 7 цифр - sec - Seconds - сек + 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. + Помилка під час видобування інформації щодо оновлення. + + + 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! + Маєте найновішу версію! - - - UnlockDatabaseWidget - Unlock database - Розблокувати сховище + 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 - - Remove an entry from the database. - Видалити запис зі сховища. - - - Path of the database. - Шлях до сховища. - - - Path of the entry to remove. - Шлях до запису, який треба видалити. - - - KeePassXC - cross-platform password manager - KeePassXC – кросплатформний менеджер паролів - + YubiKeyEditWidget - filenames of the password databases to open (*.kdbx) - Назви файлів сховищ, які треба відкрити (*.kdbx) + Refresh + Оновити - path to a custom config file - шлях до власного файла налаштувань + YubiKey Challenge-Response + YubiKey Challenge-Response - key file 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> + <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> - read password of the database from stdin - отримати пароль до сховища із stdin + No YubiKey detected, please ensure it's plugged in. + YubiKey не знайдено, будь ласка, впевніться, що він підключений. - 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 25253c508e..a50530b008 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 @@ -38,79 +38,290 @@ 复制到剪贴板 - Version %1 - - 版本 %1 - + Project Maintainers: + 项目维护者: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + KeePassXC 团队特别感谢 debfx 开发了最初版 KeePassX + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + 启用 SSH 代理(需要重启) + + + Use OpenSSH for Windows instead of Pageant + 使用OpenSSH for Windows而不是Pageant + + + ApplicationSettingsWidget - Revision: %1 - 修订版本:%1 + Application Settings + 应用程序设置 - Distribution: %1 - 发行版: %1 + General + 常规 - Libraries: - 库: + Security + 安全 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - 操作系统:%1 -CPU 架构:%2 -内核:%3 %4 + Access error for config file %1 + 访问配置文件出错 %1 - Enabled extensions: - 已启用的扩展: + Icon only + 仅限图标 - Project Maintainers: - 项目维护者: + Text only + 仅文本 - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - KeePassXC 团队特别感谢 debfx 开发了最初版 KeePassX + Text beside icon + 图标旁边的文字 - Build Type: %1 - - + Text under icon + 图标下的文本 + + + Follow style + 跟随风格 - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP 确认访问 + Basic Settings + 基础设置 - Remember this decision - 记住此选项 + Startup + 启动 - Allow - 允许 + Start only a single instance of KeePassXC + 只启动一个 KeePassXC 实例 - Deny - 拒绝 + Remember last databases + 记住最近的数据库 - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 请求获取这些条目的密码。 -请选择是否允许。 + 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 + 按钮样式 - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - 启用 SSH 代理(需要重启) + 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. @@ -361,20 +585,41 @@ Please select whether you want to allow access. <b>警告:</b> 以下选项可能有危险! - Executable Files (*.exe);;All Files (*.*) - 可执行文件(*.exe);;所有文件(*.*) + Select custom proxy location + 选择自定义代理路径 - Executable Files (*) - 可执行文件(*) + &Tor Browser + &Tor浏览器 - Select custom proxy location - 选择自定义代理路径 + <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 + - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - 非常抱歉,KeePassXC-Browser 当前不支持 Snap 发行包 + 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︰ 数据库被锁定 ! + Abort + 中断 - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 激活的数据库被锁定 ! -请解锁选定的数据库或选择另一已解锁的数据库。 + Converting attributes to custom data… + 将属性转换为自定义数据... - KeePassXC: Settings not available! - KeePassXC︰ 设置不可用 ! + KeePassXC: Converted KeePassHTTP attributes + KeePassXC:转换成KeePassHTTP属性 - The active database does not contain a settings entry. - 当前数据库中不包含设置的条目。 + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + 成功转换了 %1 个条目的属性(s) +将 %2 个密钥移动到自定义数据。 + + + Successfully moved %n keys to custom data. + 已成功将 %n 个密钥移动到自定义数据。 - KeePassXC: No keys found - KeePassXC︰ 未找到键 + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC:找不到KeePassHTTP属性的条目! - No shared encryption keys found in KeePassXC Settings. - + The active database does not contain an entry with KeePassHTTP attributes. + 当前数据库中没有KeePassHTTP属性的条目。 - KeePassXC: Removed keys from database - KeePassXC︰ 从数据库中删除键 - - - Successfully removed %n encryption key(s) from KeePassXC settings. - + KeePassXC: Legacy browser integration settings detected + KeePassXC:检测到旧版浏览器集成设置 - Removing stored permissions… + KeePassXC: Create a new group - 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. - 当前数据库中不包含具有权限的条目。 - - - - 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? - 你确定要使用空密码? - - - 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. - 您使用的是旧式密钥文件格式,将来可能会不再被支持。 - -请考虑生成一个新的密钥文件。 + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 文件 @@ -658,48 +797,89 @@ Please consider generating a new key file. 原始数据: - Error(s) detected in CSV file ! - 在 CSV 文件中检测到错误! + Error + 错误 - more messages skipped] - 更多的信息被跳过 + Empty fieldname %1 + 空字段名 %1 - Error - 错误 + column %1 + 列 %1 - CSV import: writer has errors: - - CSV 导入: 编辑器错误: - + Error(s) detected in CSV file! + 在 CSV 文件中检测到错误(s)! - - - CsvImportWizard - - Error - 错误 + + [%n more message(s) skipped] + [%n 信息(s) 被跳过] - Unable to calculate master key - 无法计算主密码 + CSV import: writer has errors: +%1 + CSV 导入: 编辑器错误: +%1 CsvParserModel - %n byte(s), - + %n column(s) + %n 列 + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 - %n row(s), - + %n byte(s) + %n 字节(s) - %n column(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 - 无法打开密钥文件 + Can't open key file: +%1 + 无法打开密钥文件: +%1 + + + DatabaseSettingWidgetMetaData - Unable to open the database. - 无法打开数据库 + Passwords + 密码 + + + + DatabaseSettingsDialog + + Advanced Settings + 高级设置 + + + General + 常规 - Database opened fine. Nothing to do. - 数据库打开正常。没什么可做的。 + Security + 安全 - Success - 成功 + Master Key + 主密钥 - The database has been successfully repaired -You can now save it. - 数据库已经修复成功 -现在可以保存数据库 + Encryption Settings + 加密设置 - Unable to repair the database. - 无法修复数据库 + Browser Integration + 浏览器配合 - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - 常规 + KeePassXC-Browser settings + KeePassXC-浏览器设置 - Encryption - 加密 + &Disconnect all browsers + 断开与所有浏览器的关联 - Number of rounds too high - Key transformation rounds - + Forg&et all site-specific settings on entries + 取消条目上所有特定于站点的设置 - 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! - + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + 将KeePassHTTP属性移动到KeePassXC-Browser和自定义数据 - Understood, keep number - + Stored keys + 存储密钥 - Cancel - 取消 + Remove + 移除 - Number of rounds too low - Key transformation rounds - + Delete the selected key? + 删除所选密钥? - 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! - + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + 你确定要删除所选的密钥吗? +这可能会影响与浏览器插件的连接。 - KDF unchanged - + Key + 密钥 - Failed to transform key with new KDF parameters; KDF unchanged. - + 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,13 +1139,120 @@ If you keep this number, your database may be too easy to crack! Parallelism: - + 平行运算: - - - DatabaseSettingsWidgetGeneral - Database Meta Data + 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 秒 + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data 数据库元数据 @@ -929,7 +1281,7 @@ If you keep this number, your database may be too easy to crack! MiB - MiB + MiB Use recycle bin @@ -945,91 +1297,112 @@ If you keep this number, your database may be too easy to crack! - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - 根群组 + Sharing + 共享 - KeePass 2 Database - KeePass 2 数据库 + Breadcrumb + 痕迹 - All files - 所有文件 + Type + 类型 - Open database - 打开数据库 + Path + 路径 - File not found! - 找不到文件! + Last Signer + 最后的签名者 - Unable to open the database. - 无法打开数据库 + Certificates + 证书 - File opened in read only mode. - 文件在只读模式下打开。 + > + Breadcrumb separator + > + + + DatabaseSettingsWidgetMasterKey - Open CSV file - 打开 CSV 文件 + Add additional protection... + 添加额外保护...... - CSV file - CSV 文件 + No encryption key added + 没有添加加密密钥 - All files (*) - 所有文件 (*) + You must add at least one encryption key to secure your database! + 您必须添加至少一个加密密钥,才能保护您的数据库! - Merge database - 合并数据库 + No password set + 没有设置密码 - Open KeePass 1 database - 打开 KeePass 1 数据库 + 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? + 警告! 您尚未设置密码。强烈建议不要使用没有密码的数据库! + +您确定要在没有密码的情况下继续吗? - KeePass 1 database - KeePass 1 数据库 + Unknown error + 未知错误 - Close? - 关闭? + Failed to change master key + 无法更改主密钥 + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - 正在编辑 "%1" 。 -仍然要放弃修改并且关闭吗? + Database Name: + 数据库名称: - Save changes? - 保存修改? + Description: + 描述: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - "%1" 已被修改。 -要保存吗? + KeePass 2 Database + KeePass 2 数据库 - Writing the database failed. - 数据库写入失败 + All files + 所有文件 - Passwords - 密码 + Open database + 打开数据库 - Save database as - 数据库另存为 + CSV file + CSV 文件 + + + Merge database + 合并数据库 + + + Open KeePass 1 database + 打开 KeePass 1 数据库 + + + KeePass 1 database + KeePass 1 数据库 Export database to CSV file @@ -1040,39 +1413,41 @@ 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. + 创建的数据库没有密钥或KDF,拒绝保存 +这是一个错误,请向开发人员报告。 - 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 + 选择CSV文件 - 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 + %1 [新建数据库] - 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 [锁定] + + + %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 + + Do you really want to delete %n entry(s) for good? + 你真的想删除 %n 个条目(s)吗? + + + Delete entry(s)? + 删除项目(s)? + + + Move entry(s) to recycle bin? + 移动项目(s)到回收站? + - Generate TOTP Token - 生成 TOTP 令牌 + File opened in read only mode. + 文件在只读模式下打开。 - Close - 关闭 + Lock Database? + 锁定数据库? - General - 常规 + You are editing an entry. Discard changes and lock anyway? + 您正在编辑一个项目。放弃更改和锁定? - Password - 密码 + "%1" was modified. +Save changes? + "%1" 已被修改。 +要保存吗? - URL - 网址 + Database was modified. +Save changes? + 数据库已被修改 +保存更改? - Expiration - 过期时间 + Save changes? + 保存修改? - Username - 用户名 + Could not open the new database file while attempting to autoreload. +Error: %1 + 尝试自动重载时无法打开新的数据库文件 +错误:%1 - Autotype - 自动填充 + Disable safe saves? + 禁用安全保存? - Searching - 搜索 + 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未能多次保存数据库。 这可能是由保存文件锁定的文件同步服务引起的。 +禁用安全保存并重试? - Attributes - 添加属性 + Writing the database failed. +%1 + 写入数据库失败 +%1 - Attachments - 附件 + Passwords + 密码 - Notes - 备注 + Save database as + 数据库另存为 - Window - 窗口 + KeePass 2 Database + KeePass 2 数据库 - Sequence - 顺序 + 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 引用。是否要用值覆盖引用、跳过此项或是否无论如何删除引用? - Search - 搜索 + Delete group + 删除群组 - Clear - 清除 + Move group to recycle bin? + 是否将组移动到回收站? - Never - 从不 + Do you really want to move the group "%1" to the recycle bin? + 是否确实要将组"%1"移动到回收站? - [PROTECTED] - [受保护的内容] + Successfully merged the database files. + 已成功合并数据库文件。 - Disabled - 禁用 + Database was not modified by merge operation. + 合并操作未修改数据库。 - 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,16 +1731,36 @@ Do you want to merge your changes? Entry updated successfully. 项目已成功更新。 - - - EditEntryWidgetAdvanced - Additional attributes - 附加属性 + Entry has unsaved changes + 项目有未保存的更改 - Add - 添加 + New attribute %1 + 添加属性 %1 + + + [PROTECTED] Press reveal to view or edit + [受保护的内容] 点击“揭示”来查看或编辑 + + + %n year(s) + %n 年(s) + + + Confirm Removal + 确认删除 + + + + EditEntryWidgetAdvanced + + Additional attributes + 附加属性 + + + Add + 添加 Remove @@ -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,159 +2398,229 @@ This may cause the affected plugins to malfunction. Created - + 创建 Modified - + 已修改 Accessed - + 已读取 Attachments 附件 - - - EntryView - Customize View - + Yes + - Hide Usernames - + TOTP + TOTP 密码 + + + EntryPreviewWidget - Hide Passwords - + Generate TOTP Token + 生成 TOTP 令牌 - Fit to window - + Close + 关闭 - Fit to contents - + General + 常规 - Reset to defaults - + Username + 用户名 - Attachments (icon) - + Password + 密码 - - - Group - Recycle Bin - 回收站 + Expiration + 过期时间 - - - HostInstaller - KeePassXC: Cannot save file! - + URL + 网址 - Cannot save the native messaging script file. - + Attributes + 添加属性 - - - HttpPasswordGeneratorWidget - Length: - 长度: + Attachments + 附件 - Character Types - 字符类型 + Notes + 备注 - Upper Case Letters - 大写字母 + Autotype + 自动填充 - A-Z - A-Z + Window + 窗口 - Lower Case Letters - 小写字母 + Sequence + 顺序 - a-z - a-z + Searching + 搜索 - Numbers - 数字 + Search + 搜索 - 0-9 - 0-9 + Clear + 清除 - Special Characters - 特殊字符 + Never + 从不 - /*_& ... - /*_& ... + [PROTECTED] + [受保护的内容] - Exclude look-alike characters - 排除相似的字符 + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 - Ensure that the password contains characters from every group - 确保密码包含每一种字符 + Enabled + 启用 - Extended ASCII - 扩展 ASCII + Disabled + 禁用 + + + Share + 共享 - KMessageWidget + EntryView - &Close - 关闭 + Customize View + 自定义视图 - Close message - 关闭信息 + Hide Usernames + 隐藏用户名 - - - Kdbx3Reader - Unable to calculate master key - 无法计算主密码 + Hide Passwords + 隐藏密码 - Unable to issue challenge-response. - 无法发出挑战应答 + Fit to window + 适应窗口 - Wrong key or database file is corrupt. - 密钥错误或数据库损坏 + Fit to contents + 适合内容 - - - Kdbx3Writer - Unable to issue challenge-response. - 无法发出挑战应答 + Reset to defaults + 重置为默认值 - Unable to calculate master key + Attachments (icon) + 附件(图标) + + + + Group + + Recycle Bin + 回收站 + + + [empty] + group has no children + [空] + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC:无法保存文件! + + + 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 + 无效的标头ID大小 + + + Invalid header field length + 无效的标头字段长度 + + + Invalid header data length + 无效的标头数据长度 + + + + Kdbx3Writer + + Unable to issue challenge-response. + 无法发出挑战应答 + + + Unable to calculate master key 无法计算主密码 @@ -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,228 +3036,287 @@ 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 - - - - - KeePass2 - - AES: 256-bit - AES:256位 - - - Twofish: 256-bit - Twofish:256位 + 无效的输入字段类型 - ChaCha20: 256-bit - ChaCha20:256位 + unable to seek to content position + 无法寻求满足的内容 + + + KeeShare - AES-KDF (KDBX 4) - AES-KDF(KDBX 4) + Disabled share + 禁用共享 - AES-KDF (KDBX 3.1) - AES-KDF(KDBX 3.1) + Import from + 从导入 - Argon2 (KDBX 4 – recommended) - Argon2(推荐 KDBX 4) + Export to + 导出到 - - - Main - Existing single-instance lock file is invalid. Launching new instance. - 单实例锁无效,正在重启实例 + Synchronize with + 与同步 - The lock file could not be created. Single-instance mode disabled. - 无法创建锁定文件。 单实例模式已禁用。 + Disabled share %1 + - Another instance of KeePassXC is already running. - 另一个 KeePassXC 实例已在运行 + Import from share %1 + - Fatal error while testing the cryptographic functions. - 在测试加密函数时发生重大错误。 + Export to share %1 + - KeePassXC - Error - KeePassXC - 错误 + Synchronize with share %1 + - MainWindow + KeyComponentWidget - &Database - 数据库(D) + Key Component + 密钥组件 - &Recent databases - 最近的数据库(R) + Key Component Description + 密钥组件描述 - Import - 导入 + Cancel + 取消 - &Help - 帮助(H) + Key Component set, click to change or remove + 密钥组件集,单击以更改或删除 - E&ntries - 项目(N) + Add %1 + Add a key component + 添加 %1 - Copy att&ribute to clipboard - 将属性复制到剪贴板(R) + Change %1 + Change a key component + 更改 %1 - Time-based one-time password - + Remove %1 + Remove a key component + 删除 %1 - &Groups - 群组(G) + %1 set, click to change or remove + Change or remove a key component + %1 设置,单击以更改或删除 + + + KeyFileEditWidget - &Tools - 工具(T) + Browse + 浏览 - &Quit - 退出(Q) + Generate + 生成 - &About - 关于(A) + Key File + 密钥文件 - &Open database... - 打开数据库(O)... + <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> - &Save database - 保存数据库(S) + Legacy key file format + 旧式密钥文件格式 - &Close database - 关闭数据库(C) + 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. + 您正在使用可能成为的旧密钥文件格式 +将来不再支持。 + +请转到主密钥设置并生成新密钥文件。 - &New database - 新建数据库(N) + Error loading the key file '%1' +Message: %2 + 加载密钥文件 '%1' 时出错 +消息: %2 - Merge from KeePassX database - 从 KeePassX 数据库合并 + Key files + 密钥文件 - &Add new entry - 新增项目(A) + All files + 所有文件 + + + Create Key File... + 创建密钥文件... - &View/Edit entry - 浏览/编辑项目(V) + Error creating key file + 创建密钥文件时出错 - &Delete entry - 删除项目(D) + Unable to create key file: %1 + 无法创建密钥文件: %1 + + + Select a key file + 选择密钥文件 + + + + MainWindow + + &Database + 数据库(D) + + + &Recent databases + 最近的数据库(R) + + + &Help + 帮助(H) + + + E&ntries + 项目(N) + + + &Groups + 群组(G) + + + &Tools + 工具(T) + + + &Quit + 退出(Q) + + + &About + 关于(A) + + + &Open database... + 打开数据库(O)... + + + &Save database + 保存数据库(S) + + + &Close database + 关闭数据库(C) - &Add new group - 新增群组(A) + &Delete entry + 删除项目(D) &Edit group @@ -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 设置 @@ -2852,351 +3423,489 @@ This is a one-way migration. You won't be able to open the imported databas 退出 KeePassXC - KeePass 2 Database - KeePass 2 数据库 + Please touch the button on your YubiKey! + 请触摸你 YubiKey 上的按键! - All files - 所有文件 + 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版本! +存在高风险的损坏,维护数据库的备份。 +此版本不适用于生产用途。 - Open database - 打开数据库 + &Donate + &捐助 - Save repaired database - 保存修复后的数据库 + Report a &bug + 报告&错误 - Writing the database failed. - 数据库写入失败 + 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。 - Please touch the button on your YubiKey! - 请触摸你 YubiKey 上的按键! + &Import + &导入 - 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. - + Copy att&ribute... + 复制 att&ribute... - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - + TOTP... + TOTP... - PEM boundary mismatch - + &New database... + &新数据库... - Base64 decoding failed - + Create a new database + 创建一个新数据库 - Key file way too small. - + &Merge from database... + &从数据库中合并... - Key file magic header id invalid - + Merge from another KDBX database + 从另一个KDBX数据库合并 - Found zero keys - + &New entry + &新项目 - Failed to read public key. - + Add a new entry + 添加新项目 - Corrupted key file, reading private key failed - + &Edit entry + &编辑项目 - No private key payload to decrypt - + View or edit entry + 查看或编辑项目 - Trying to run KDF without cipher - + &New group + &新群组 - Passphrase is required to decrypt this key - + Add a new group + 添加一个新群组 - Key derivation failed, key file corrupted? - + Change master &key... + 修改主密钥... - Decryption failed, wrong passphrase? - + &Database settings... + &数据库设置... - Unexpected EOF while reading public key - + Copy &password + 复制 &密码 - Unexpected EOF while reading private key - + Perform &Auto-Type + 执行和自动键入 - Can't write public key as it is empty - + Open &URL + 打开 &URL链接 - Unexpected EOF when writing public key - + KeePass 1 database... + KeePass 1 数据库... - Can't write private key as it is empty - + Import a KeePass 1 database + 导入KeePass 1数据库 - Unexpected EOF when writing private key - + CSV file... + CSV文件... - Unsupported key type: %1 - + Import a CSV file + 导入CSV文件 - Unknown cipher: %1 - + Show TOTP... + 显示 TOTP... - Cipher IV is too short for MD5 kdf - + Show TOTP QR Code... + 显示TOTP 二维码... - Unknown KDF: %1 - + Check for Updates... + 正在检查更新..。 - Unknown key type: %1 - + Share entry + 共享条目 - - - OptionDialog - Dialog - 对话框 + 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的预发行版本! +预计一些错误和小问题, 这个版本并不打算用于生产使用。 - This is required for accessing your databases from ChromeIPass or PassIFox - 通过 ChromelPass 或 PasslFox 访问数据库需要此设置 + Check for updates on startup? + 是否在启动时检查更新? - Enable KeePassHTTP server - 启用 KeePassHTTP 服务 + Would you like KeePassXC to check for updates on startup? + 是否希望KeePassXC在启动时检查更新? - General - 常规 + You can always check for updates manually from the application menu. + 您始终可以从应用程序菜单手动检查更新。 + + + Merger - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - 当请求凭证时显示通知(O) + Creating missing %1 [%2] + 创建缺少 %1 [%2] - Only returns the best matches for a specific URL instead of all entries for the whole domain. - 只返回特定网址的最佳匹配,而不是整个域名的所有条目。 + Relocating %1 [%2] + 重新定位 %1 [%2] - &Return only best matching entries - 只返回最匹配的条目 + Overwriting %1 [%2] + 覆盖 %1 [%2] - Re&quest to unlock the database if it is locked - 数据库锁定时请求解锁(Q) + older entry merged from database "%1" + 从数据库 "%1" 合并的旧项目 - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - 仅返回具有相同协议 (http://, https://, ftp://, ...) 的条目 + Adding backup for older target %1 [%2] + 为旧目标 %1 [%2]添加备份 - &Match URL schemes - 匹配 URL 协议(M) + Adding backup for older source %1 [%2] + 为旧源 %1 添加备份 [%2] - Sort matching entries by &username - 根据用户名排序匹配项(U) + Reapplying older target entry on top of newer source %1 [%2] + 在较新的源 %1 [%2]之上重新应用较旧的目标项目 - Sort &matching entries by title - 根据标题排序匹配项(M) + Reapplying older source entry on top of newer target %1 [%2] + 在较新的目标 %1 [%2]之上重新应用较旧的源项目 - R&emove all shared encryption keys from active database - 移除所有激活数据库共享的加密密钥(E) + Synchronizing from newer source %1 [%2] + 从较新的源 %1 [%2]同步 - Re&move all stored permissions from entries in active database - 从活动数据库的条目中移除已存储的所有权限(M) + Synchronizing from older source %1 [%2] + 从旧资源 %1 [%2]同步 - Password Generator - 密码生成器 + Deleting child %1 [%2] + 删除子项 %1 [%2] - Advanced - 高级 + Deleting orphan %1 [%2] + 删除孤立 %1 [%2] - Always allow &access to entries - 永远允许访问项目(A) + Changed deleted objects + 更改已删除的对象 - Always allow &updating entries - 永远允许更新项目(U) + Adding missing icon %1 + 添加缺少的图标 %1 + + + NewDatabaseWizard - Only the selected database has to be connected with a client. - 只有选定的数据库必须与一个客户端连接。 + Create a new KeePassXC database... + 创建一个新的KeePassXC数据库... - Searc&h in all opened databases for matching entries - 在所有打开的数据库中查找匹配项目(H) + Root + Root group + 根群组 + + + NewDatabaseWizardPage - Automatically creating or updating string fields is not supported. - 不支持自动创建或更新字符串字段。 + WizardPage + 向导页 - &Return advanced string fields which start with "KPH: " - 返回以“KPH:”开头的高级字符串字段(R) + En&cryption Settings + 加密设置 - HTTP Port: - HTTP 端口: + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + 您可以在此处调整数据库加密设置。 不用担心,您可以稍后在数据库设置中更改它们。 - Default port: 19455 - 默认端口:19455 + Advanced Settings + 高级设置 - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC 将监听 127.0.0.1 上的此端口 + Simple Settings + 简单设置 + + + NewDatabaseWizardPageEncryption - <b>Warning:</b> The following options can be dangerous! - <b>警告:</b> 以下选项可能有危险! + Encryption Settings + 加密设置 - <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> + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + 您可以在此处调整数据库加密设置。 不用担心,您可以稍后在数据库设置中更改它们。 + + + NewDatabaseWizardPageMasterKey - Cannot bind to privileged ports - 无法绑定到特权端口 + Database Master Key + 数据库主密钥 - Cannot bind to privileged ports below 1024! -Using default port 19455. - 无法绑定低于 1024 的特权端口 ! -使用默认端口 19455 + A master key known only to you protects your database. + 只有您知道的主密钥才能保护您的数据库。 - PasswordGeneratorWidget + NewDatabaseWizardPageMetaData - %p% - %p% + General Database Information + 一般的数据库信息 - Password: - 密码: + Please fill in the display name and an optional description for your new database: + 请填写新数据库的显示名称和可选说明: + + + OpenSSHKey - strength - Password strength - 强度 + Invalid key file, expecting an OpenSSH key + 无效的密钥文件,需要OpenSSH密钥 - entropy - + PEM boundary mismatch + PEM边界不匹配 - Password - 密码 + Base64 decoding failed + Base64 解码失败 - Character Types - 字符类型 + Key file way too small. + 密钥文件太小了。 - Upper Case Letters - 大写字母 + Key file magic header id invalid + 密钥文件魔术标头ID无效 - Lower Case Letters - 小写字母 + Found zero keys + 找到零密钥 - Numbers - 数字 + Failed to read public key. + 无法读取公钥。 - Special Characters - 特殊字符 + Corrupted key file, reading private key failed + 损坏的密钥文件,读取私钥失败 - Extended ASCII - 扩展 ASCII + No private key payload to decrypt + 私钥中没有载体可解密 - Exclude look-alike characters - 排除相似的字符 + Trying to run KDF without cipher + 尝试运行无加密的 KDF - Pick characters from every group - 包含每一种字符 + Passphrase is required to decrypt this key + 需要密码短语解密此密钥 - &Length: - 长度(L)︰ + Key derivation failed, key file corrupted? + 密钥派生失败,密钥文件已损坏? - Passphrase - 口令 + Decryption failed, wrong passphrase? + 解密失败,错误的密码短语? - Wordlist: - 字符列表: + Unexpected EOF while reading public key + 读取公钥时意外的文件结束 - Word Count: - 字数: + Unexpected EOF while reading private key + 读取私钥时意外的文件结束 - Word Separator: - 字符分隔符: + Can't write public key as it is empty + 无法写公钥,因为它是空的 - Generate - 生成 + Unexpected EOF when writing public key + 编写公钥时意外的文件结束 - Copy - 复制 + Can't write private key as it is empty + 无法写私钥,因为它是空的 - Accept - 接受 + Unexpected EOF when writing private key + 编写私钥时意外的文件结束 - Close - 关闭 + 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 + + + + 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> + <p>密码是保护数据库的主要方法。</p><p>良好的密码长且独特。 KeePassXC可以为您生成一个。</p> + + + Passwords do not match. + 密码不匹配。 + + + Generate master password + 生成主密码 + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + 密码: + + + strength + Password strength + 强度 + + + entropy + + + + Password + 密码 + + + Character Types + 字符类型 + + + Upper Case Letters + 大写字母 + + + Lower Case Letters + 小写字母 + + + Numbers + 数字 + + + Special Characters + 特殊字符 + + + Extended ASCII + 扩展 ASCII + + + Exclude look-alike characters + 排除相似的字符 + + + Pick characters from every group + 包含每一种字符 + + + &Length: + 长度(L): + + + Passphrase + 口令 + + + Wordlist: + 字符列表: + + + Word Separator: + 字符分隔符: + + + Copy + 复制 + + + Accept + 接受 - Apply - 应用 + Close + 关闭 Entropy: %1 bit @@ -3226,369 +3935,924 @@ 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 + 无法解密消息 + + + Action cancelled or denied + 操作被取消或被拒绝 + + + KeePassXC association failed, try again + KeePassXC关联失败,请重试 + + + Encryption key is not recognized + 无法识别加密密钥 + + + Incorrect action + 操作错误 + + + Empty message received + 收到空消息 + + + No URL provided + 没有提供URL + + + 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: + 插入密码以解锁%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 + YubiKey[%1] 挑战应答 - Slot %2 - %3 + + + Press + 按下 + + + Passive + 被动 + + + SSH Agent + SSH 代理 + + + Generate a new random diceware passphrase. + 生成新的随机diceware密码。 + + + Word count for the diceware passphrase. + diceware密码短语的字数。 + + + Wordlist for the diceware generator. +[Default: EFF English] + diceware生成器的词表。 +[默认:EFF英文] + + + Generate a new random password. + 生成一个新的随机密码。 + + + Invalid value for password length %1. + 密码长度 %1 的值无效。 + + + Could not create entry with path %1. + 无法创建路径为 %1 的项目。 + + + Enter password for new entry: + 输入新项目的密码: + + + Writing the database failed %1. + 写入数据库失败 %1 。 + + + Successfully added entry %1. + 成功添加了项目 %1 。 + + + 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 - Client public key not received - + Entropy %1 + 熵 %1 - Cannot decrypt message - + Log10 %1 + Log10 %1 - Timeout or cannot connect to KeePassXC - + Multi-word extra bits %1 + 多字加号位%1 - Action cancelled or denied - + Type: Bruteforce + 类型:暴力 - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - + Type: Dictionary + 类型:字典 - KeePassXC association failed, try again - + Type: Dict+Leet + 类型:字典+名单 - Key change was not successful - + Type: User Words + 类型:用户词 - Encryption key is not recognized - + Type: User+Leet + 类型:用户 + 名单 - No saved databases found - + Type: Repeated + 类型:重复 - Incorrect action - + Type: Sequence + 类型:序列 - Empty message received - + Type: Spatial + 类型:空间 - No URL provided - + Type: Date + 类型:日期 - No logins found - + Type: Bruteforce(Rep) + 类型:暴力破解(重复) - Unknown error - 未知错误 + Type: Dictionary(Rep) + 类型:字典(重复) - Add a new entry to a database. - + Type: Dict+Leet(Rep) + 类型:字典+名单(重复) - Path of the database. - 数据库路径 + Type: User Words(Rep) + 类型:用户词(重复) - Key file of the database. - + Type: User+Leet(Rep) + 类型:用户词+名单(重复) - path - + Type: Repeated(Rep) + 类型:重复(重复) - Username for the entry. - + Type: Sequence(Rep) + 类型:序列(重复) - username - + Type: Spatial(Rep) + 类型:空间(重复) - URL for the entry. - + Type: Date(Rep) + 类型:日期(重复) - URL - 网址 + Type: Unknown%1 + 类型:未知%1 - Prompt for the entry's password. - + Entropy %1 (%2) + 熵 %1 (%2) - Generate a password for the entry. - + *** Password length (%1) != sum of length of parts (%2) *** + *** 密码长度 (%1) != 部件长度之和(%2) *** - Length for the generated password. - + Failed to load key file %1: %2 + 无法加载密钥文件 %1: %2 - length - 长度 + File %1 does not exist. + 文件 %1 不存在。 - Path of the entry to add. - + Unable to open file %1. + 无法打开文件 %1。 - Copy an entry's password to the clipboard. - + Error while reading the database: +%1 + 读取数据库时出错: +%1 - Path of the entry to clip. - clip = copy to clipboard - + Error while parsing the database: +%1 + 解析数据库时出错: +%1 - Timeout in seconds before clearing the clipboard. - + Length of the generated password + 生成密码的长度 - Edit an entry. - + Use lowercase characters + 使用小写字符 - Title for the entry. - + Use uppercase characters + 使用大写字符 - title - 标题 + Use numbers. + 使用数字。 - Path of the entry to edit. - + Use special characters + 使用特殊字符 - Estimate the entropy of a password. - + Use extended ASCII + 使用扩展ASCII - Password for which to estimate the entropy. - + Exclude character set + 排除字符集 - Perform advanced analysis on the password. - + chars + 字符 - Extract and print the content of a database. - 提取并打印数据库内容 + Exclude similar looking characters + 排除相似的字符 - Path of the database to extract. - 将提取的数据库路径 + Include characters from every selected group + 包括每个选定组中的字符 - Insert password to unlock %1: - + Recursively list the elements of the group. + 递归列出组的元素。 - Failed to load key file %1 : %2 - + Cannot find group %1. + 找不到组%1。 - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - + Error reading merge file: +%1 + 读取合并文件时出错: +%1 - - -Available commands: - - + Unable to save database to file : %1 + 无法将数据库保存到文件 : %1 - Name of the command to execute. - 将执行的命令名称 + Unable to save database to file: %1 + 无法将数据库保存到文件: %1 - List database entries. - 列出数据库项目 + Successfully recycled entry %1. + 成功回收了项目%1。 - Path of the group to list. Default is / - 要将列出的群组路径,默认为 / + Successfully deleted entry %1. + 已成功删除项目%1。 - Find entries quickly. - + Show the entry's current TOTP. + 显示当前项目的TOTP。 - Search term. - + ERROR: unknown attribute %1. + 错误:未知属性%1。 - Merge two databases. - 合并两个数据库 + No program defined for clipboard manipulation + 没有为剪贴板操作定义程序 - Path of the database to merge into. - 合并成的数据库路径 + Unable to start program %1 + 无法启动程序 %1 - Path of the database to merge from. - 将合并的数据库路径 + file empty + 文件为空 - Use the same credentials for both database files. - + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 - Key file of the database to merge from. - + AES: 256-bit + AES:256位 - Show an entry's information. - + Twofish: 256-bit + Twofish:256位 - 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. - + ChaCha20: 256-bit + ChaCha20:256位 - attribute - + Argon2 (KDBX 4 – recommended) + Argon2(推荐 KDBX 4) - Name of the entry to show. - 项目名称 + AES-KDF (KDBX 4) + AES-KDF(KDBX 4) - NULL device - 空设备 + AES-KDF (KDBX 3.1) + AES-KDF(KDBX 3.1) - error reading from device - 从设备读取发生错误 + Invalid Settings + TOTP + 无效的设置 - file empty ! - - 文件为空! - + Invalid Key + TOTP + 无效的密钥 - malformed string - 格式不正确的字符串 + Message encryption failed. + 消息加密失败。 - missing closing quote - 缺少后引号 + No groups found + 未找到组 - Group - 群组 + Create a new database. + 创建新数据库。 - Title - 标题 + File %1 already exists. + 文件%1 已存在。 - Username - 用户名 + Loading the key file failed + 加载密钥文件失败 - Password - 密码 + No key is set. Aborting database creation. + 没有设置密钥。正在中止数据库创建。 - Notes - 备注 + Failed to save the database: %1. + 未能保存数据库: %1。 - Last Modified - + Successfully created new database. + 已成功创建新数据库。 - Created - + Insert password to encrypt database (Press enter to leave blank): + 插入密码加密数据库 (按回车键留空): - Legacy Browser Integration - + Creating KeyFile %1 failed: %2 + 创建密钥文件%1失败:%2 - Browser Integration - 浏览器配合 + Loading KeyFile %1 failed: %2 + 加载密钥文件 %1 失败: %2 - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] 挑战应答 - Slot %2 - %3 + Remove an entry from the database. + 从数据库中删除条目。 - Press - 按下 + Path of the entry to remove. + 要删除的条目的路径。 - Passive - 被动 + Existing single-instance lock file is invalid. Launching new instance. + 现有的单实例锁定文件无效。正在启动新实例。 - SSH Agent - SSH 代理 + The lock file could not be created. Single-instance mode disabled. + 无法创建锁定文件。 单实例模式已禁用。 - Generate a new random diceware passphrase. - + KeePassXC - cross-platform password manager + KeePassXC - 跨平台密码管理软件 - Word count for the diceware passphrase. - + filenames of the password databases to open (*.kdbx) + 将打开的密码数据库文件名(*.kdbx) - count - + path to a custom config file + 自定义配置文件路径 - Wordlist for the diceware generator. -[Default: EFF English] - + key file of the database + 数据库密钥文件 - Generate a new random password. - + read password of the database from stdin + 从标准输入读取数据库的密码 - Length of the generated password. - + Parent window handle + 父窗口句柄 - Use lowercase characters in the generated password. - + Another instance of KeePassXC is already running. + 另一个 KeePassXC 实例已在运行。 - Use uppercase characters in the generated password. - + Fatal error while testing the cryptographic functions. + 在测试加密函数时发生重大错误。 - Use numbers in the generated password. - + KeePassXC - Error + KeePassXC - 错误 - Use special characters in the generated password. - + Database password: + 数据库密码: - Use extended ASCII in the generated password. + Cannot create new group @@ -3614,24 +4878,110 @@ Available commands: Internal zlib error when decompressing: 内部函数库 zlib 解压错误: - - - QtIOCompressor::open + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + 当前版本的压缩函数库 zlib 不支援gzip。 + + + 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["] + 搜索字词如下: [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 + 匹配一个 + - The gzip format not supported in this version of zlib. - 当前版本的压缩函数库 zlib 不支援gzip。 + logical OR + 逻辑或 - Internal zlib error: - 内部函数库 zlib 发生错误: + Examples + 例子 SearchWidget - - Search... - 搜索…… - Search 搜索 @@ -3640,315 +4990,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 + 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︰ 从数据库中删除键 - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + Generate + 生成 - KeePassXC: No keys found - KeePassXC︰ 未找到键 + Import + 导入 - No shared encryption-keys found in KeePassHttp Settings. - 没有在 KeePassHttp 设置中找到共享加密密钥。 + Export + 输出 - KeePassXC: Settings not available! - KeePassXC︰ 设置不可用 ! + Imported certificates + 导入的证书 - The active database does not contain an entry of KeePassHttp Settings. - 当前数据库中没有 KeePassHttp 设置的条目。 + Trust + 信任 - Removing stored permissions... - 正在删除存储的权限... + Ask + 询问 - Abort - 中断 + Untrust + 不信任 - KeePassXC: Removed permissions - KeePassXC︰ 已删除的权限 + Remove + 移除 - - Successfully removed permissions from %n entries. - + + Path + 路径 - KeePassXC: No entry with permissions found! - KeePassXC: 未找到权限的条目! + Status + 状态 - The active database does not contain an entry with permissions. - 当前数据库中不包含具有权限的条目。 + Fingerprint + 指纹 - - - SettingsWidget - Application Settings - 应用程序设置 + Certificate + 证书 - General - 常规 + Trusted + 信任 - Security - 安全 + Untrusted + 不可信 - Access error for config file %1 - 访问配置文件出错 %1 + Unknown + 未知 - - - SettingsWidgetGeneral - Basic Settings - 基础设置 + key.share + Filetype for KeeShare key + key.share - Start only a single instance of KeePassXC - 只启动一个 KeePassXC 实例 + KeeShare key file + KeeShare密钥文件 - Remember last databases - 记住最近的数据库 + All files + 所有文件 - Remember last key files and security dongles - 记住上次的密钥文件和安全模块 + Select path + 选择路径 - Load previous databases on startup - 在启动时加载最近的数据库 + Exporting changed certificate + 导出已更改的证书 - Automatically save on exit - 离开后自动保存 + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + 导出的证书与正在使用的证书不同。是否要导出当前证书? - Automatically save after every change - 修改后自动保存 + Signer: + + + + ShareObserver - Automatically reload the database when modified externally - 当外部修改时自动重新加载数据库 + Import from container without signature + 从没有签名的容器导入 - Minimize when copying to clipboard - 复制到剪贴板后最小化 + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + 我们无法验证共享容器的来源, 因为它未签名。是否确实要从%1导入? - Minimize window at application startup - 在应用程序启动时窗口最小化 + Import from container with certificate + 从带有证书的容器导入 - Use group icon on entry creation - 新增项目时使用群组图标 + Not this time + 本次取消 - Don't mark database as modified for non-data changes (e.g., expanding groups) - 不要因非数据的更改而将数据库标记为已修改 (比如增加群组) + Never + 从不 - Hide the Details view - + Always + 总是 - Show a system tray icon - 显示任务栏图标 + Just this time + 现在 - Hide window to system tray when minimized - 将窗口最小化至任务栏 + Import from %1 failed (%2) + 从%1 导入失败 (%2) - Hide window to system tray instead of app exit - 退出时将窗口最小化至任务栏 + Import from %1 successful (%2) + 从%1导入成功 (%2) - Dark system tray icon - + Imported from %1 + 从%1导入 - Language - 语言 + Signed share container are not supported - import prevented + 不支持签名共享容器-导入已防止 - Auto-Type - 自动输入 + File is not readable + 文件不可读 - Use entry title to match windows for global Auto-Type - + Invalid sharing container + 无效的共享容器 - Use entry URL to match windows for global Auto-Type - + Untrusted import prevented + 防止不受信任的导入 - Always ask before performing Auto-Type - 总在执行自动输入前询问 + Successful signed import + 成功导入签名 - Global Auto-Type shortcut - 自动输入全局快捷键 + Unexpected error + 意外错误 - Auto-Type delay - 自动输入延迟 + Unsigned share container are not supported - import prevented + 不支持未签名的共享容器-导入已防止 - ms - Milliseconds - 毫秒 + Successful unsigned import + 未签名成功导入 - Startup - + File does not exist + 文件不存在 - File Management - + Unknown share container type + 未知的共享容器类型 - Safely save database files (may be incompatible with Dropbox, etc) - + Overwriting signed share container is not supported - export prevented + 不支持覆盖签名的共享容器-防止导出 - Backup database file before saving - + Could not write export container (%1) + 无法写入导出容器 (%1) - Entry Management - + Overwriting unsigned share container is not supported - export prevented + 不支持覆盖未签名的共享容器-防止导出 - General - 常规 + Could not write export container + 无法写入导出容器 - - - SettingsWidgetSecurity - Timeouts - 超时 + Unexpected export error occurred + 出现意外的导出错误 - Clear clipboard after - 在多久后清除剪贴板 + Export to %1 failed (%2) + 导出到 %1 失败 (%2) - sec - Seconds - + Export to %1 successful (%2) + 导出到 %1 成功 (%2) - Lock databases after inactivity of - 在多久没有动作之后锁住数据库 + Export to %1 + 导出到%1 - Convenience - 便利性 + Do you want to trust %1 with the fingerprint of %2 from %3? + 是否要信任 %1, 来自 %3 的 %2 的指纹? {1 ?} {2 ?} - Lock databases when session is locked or lid is closed - 系统锁定或盖子合上时锁定数据库 + Multiple import source path to %1 in %2 + - Lock databases after minimizing the window - 在最小化窗口后锁定数据库 + Conflicting export target path %1 in %2 + - Don't require password repeat when it is visible - 可见时不需要重复输入密码 + Could not embed signature: Could not open file to write (%1) + - Show passwords in cleartext by default - 默认以明码显示密码 + Could not embed signature: Could not write file (%1) + - Hide passwords in the preview panel + Could not embed database: Could not open file to write (%1) - Hide entry notes by default + Could not embed database: Could not write file (%1) + + + TotpDialog - Privacy - 隐私 + Timed Password + 动态密码 - Use Google as fallback for downloading website icons - 使用 Google 作为下载网站图标时的备选 + 000000 + 000000 - Re-lock previously locked database after performing Auto-Type - + Copy + 复制 + + + Expires in <b>%n</b> second(s) + 以<b>%n</b>秒到期 + + + + TotpExportSettingsDialog + + 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 秒内关闭。 - SetupTotpDialog + TotpSetupDialog Setup TOTP 设置定时一次性密码 @@ -3959,70 +5326,95 @@ Please unlock the selected database or choose another one which is unlocked. Default RFC 6238 token settings - + 默认RFC 6238令牌设置 Steam token settings - + Steam 令牌设置 Use custom settings 使用自定义设置 - Note: Change these settings only if you know what you are doing. - 注意:除非你知道自己在做什么,否则不要更改这些设置。 + Custom Settings + 自定义设置 Time step: 时间步进: - 8 digits - 8 位数字 + sec + Seconds + + + + Code size: + 口令长度: 6 digits 6 位数字 - Code size: - 口令长度: + 7 digits + 7位数 - sec - Seconds - + 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. + 检索更新信息时出错。 + + + 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下载 - - - UnlockDatabaseWidget - Unlock database - 解锁数据库 + 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 - - Remove an entry from the database. - - - - Path of the database. - 数据库路径 - - - Path of the entry to remove. - - + YubiKeyEditWidget - KeePassXC - cross-platform password manager - KeePassXC - 跨平台密码管理软件 - - - filenames of the password databases to open (*.kdbx) - 将打开的密码数据库文件名(*.kdbx) + Refresh + 刷新 - path to a custom config file - 自定义配置文件路径 + YubiKey Challenge-Response + YubiKey挑战 - 回应 - key file 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> + <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> - read password of the database from stdin - 从标准输入读取数据库的密码 + No YubiKey detected, please ensure it's plugged in. + 没有检测到YubiKey,请确保已插入。 - 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 6e9c7622c4..7c5b5deb0a 100644 --- a/share/translations/keepassx_zh_TW.ts +++ b/share/translations/keepassx_zh_TW.ts @@ -38,79 +38,290 @@ 複製到剪貼簿 - Version %1 - - 版本 %1 - + Project Maintainers: + 專案維護者: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + KeePassXC 團隊特別鳴謝 debfx 開發了原本的 KeePassX + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + 啟用 SSH 代理 (需要重新啟動) + + + Use OpenSSH for Windows instead of Pageant + + + + ApplicationSettingsWidget - Revision: %1 - 修訂:%1 + Application Settings + 應用程式設定 - Distribution: %1 - 散佈:%1 + General + 一般 - Libraries: - 函式庫: + Security + 安全性 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - 作業系統:%1 -處裡器架構:%2 -核心:%3 %4 + Access error for config file %1 + 設定檔存取錯誤:%1 - Enabled extensions: - 已啟用的擴充元件: + Icon only + 只有圖示 - Project Maintainers: - 專案維護者: + Text only + 只有文字 - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - + Text beside icon + 圖示旁有文字 - Build Type: %1 - + Text under icon + 圖示下有文字 + + + Follow style - AccessControlDialog + ApplicationSettingsWidgetGeneral - KeePassXC HTTP Confirm Access - KeePassXC HTTP 存取確認 + Basic Settings + 基本設定 - Remember this decision - 記住此決定 + Startup + 啟動 - Allow - 允許 + Start only a single instance of KeePassXC + 只能啟動單一 KeePassXC 程式 - Deny - 禁止 + Remember last databases + 記住最近的資料庫 - %1 has requested access to passwords for the following item(s). -Please select whether you want to allow access. - %1 要求存取下列項目的密碼。 -請選擇是否允許存取。 + 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 + - AgentSettingsWidget + ApplicationSettingsWidgetSecurity - Enable SSH Agent (requires restart) - 啟用 SSH 代理 (需要重新啟動) + 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 作為下載網站圖示失敗時的備案 @@ -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 進階 @@ -361,19 +584,40 @@ Please select whether you want to allow access. <b>警告:</b>下列選項可能極具風險! - Executable Files (*.exe);;All Files (*.*) - 可執行檔 (* .exe);;所有檔案 (*) + Select custom proxy location + 選擇自訂代理位置 + + + &Tor Browser + - Executable Files (*) - 可執行檔 (*) + <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: + - Select custom proxy location - 選擇自訂代理位置 + Executable Files + 可執行檔案 + + + All Files + 所有檔案 - We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + 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:已移除權限 - - - Successfully removed permissions from %n entry(s). - - - - 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 - 金鑰檔案 (&K) - - - Browse - 瀏覽 - - - Create - 建立 - - - Cha&llenge Response - 挑戰回應 - - - Refresh - 重新整理 - - - Key files - 金鑰檔案 - - - All files - 所有檔案 - - - Create Key File... - 建立金鑰檔案…… + Converting attributes to custom data… + - Unable to create Key File : - 無法建立金鑰檔案: + KeePassXC: Converted KeePassHTTP attributes + - Select a key file - 選擇金鑰檔案 + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + - - Empty password - 清空密碼 + + Successfully moved %n keys to custom data. + - Do you really want to use an empty string as password? - 真的要使用空白密碼? + KeePassXC: No entry with KeePassHTTP attributes found! + - Different passwords supplied. - 填寫的密碼不一致。 + The active database does not contain an entry with KeePassHTTP attributes. + - Failed to set %1 as the Key file: -%2 - 無法將 %1 設為金鑰檔案: -%2 + KeePassXC: Legacy browser integration settings detected + - Legacy key file format - 舊式金鑰檔案格式 + KeePassXC: Create a new group + - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - 你正在使用未來將不再支援的舊式金鑰檔案格式。 - -請考慮產生新的金鑰。 + A request for creating a new group "%1" has been received. +Do you want to create this group? + + - 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 檔匯入 @@ -658,48 +795,88 @@ Please consider generating a new key file. 原始資料: - Error(s) detected in CSV file ! - CSV 檔中檢測到錯誤! + Error + 錯誤 - more messages skipped] - 等訊息已跳過] + Empty fieldname %1 + - Error - 錯誤 + column %1 + - CSV import: writer has errors: - - CSV 匯入:寫入器錯誤: - + Error(s) detected in CSV file! + - - - CsvImportWizard - - Error - 錯誤 + + [%n more message(s) skipped] + - Unable to calculate master key - 無法計算主金鑰 + CSV import: writer has errors: +%1 + CsvParserModel - %n byte(s), - + %n column(s) + %n 列, + + + %1, %2, %3 + file info: bytes, rows, columns + %1,%2,%3 - %n row(s), - + %n byte(s) + %n 位元組 - %n column(s) - + %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,105 +934,169 @@ 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 - 無法開啟金鑰檔案 + Can't open key file: +%1 + + + + DatabaseSettingWidgetMetaData - Unable to open the database. - 無法開啟資料庫。 + Passwords + 密碼 + + + + DatabaseSettingsDialog + + Advanced Settings + + + + General + 一般 - Database opened fine. Nothing to do. - 資料庫正常開啟。什麼都不做。 + Security + 安全性 - Success - 成功 + Master Key + - The database has been successfully repaired -You can now save it. - 資料庫已成功修復,你現在可以直接儲存。 + Encryption Settings + - Unable to repair the database. - 無法開啟資料庫 + Browser Integration + 瀏覽器整合 - DatabaseSettingsWidget + DatabaseSettingsWidgetBrowser - General - 一般 + KeePassXC-Browser settings + - Encryption - 加密 + &Disconnect all browsers + 與所有瀏覽器中斷連線 (&D) - Number of rounds too high - Key transformation rounds - 回合數太高 + Forg&et all site-specific settings on entries + - 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 使用相當高的金鑰轉換回合數。 - -如果仍執意使用此數量,你的資料庫可能需要花費數小時、數天、或是更久的時間才能打開! + Move KeePassHTTP attributes to KeePassXC-Browser &custom data + - Understood, keep number - 了解,仍使用此數量 + Stored keys + - Cancel - 取消 + Remove + 移除 - Number of rounds too low - Key transformation rounds - 回合數太低 + Delete the selected key? + - 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 使用過低的金鑰轉換回合數。 - -如果仍執意使用此數量,你的資料庫可能會變得相當簡單即能破解! + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + - KDF unchanged - KDF 不變 + Key + - Failed to transform key with new KDF parameters; KDF unchanged. - 無法用新的 KDF 參數轉換金鑰;KDF 不變。 + 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 @@ -899,6 +1132,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 + 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) + 執行緒 + + + %1 ms + milliseconds + %1 毫秒 + + + %1 s + seconds + %1 秒 + DatabaseSettingsWidgetGeneral @@ -944,95 +1284,114 @@ If you keep this number, your database may be too easy to crack! Enable &compression (recommended) - 啟用&壓縮 (推薦) + 啟用壓縮 (推薦) (&C) - DatabaseTabWidget + DatabaseSettingsWidgetKeeShare - Root - Root group - + Sharing + - KeePass 2 Database - KeePass 2 資料庫 + Breadcrumb + - All files - 所有檔案 + Type + - Open database - 開啟資料庫 + Path + - File not found! - 找不到檔案! + Last Signer + - Unable to open the database. - 無法開啟資料庫。 + Certificates + - File opened in read only mode. - 已將檔案以唯讀模式開啟。 + > + Breadcrumb separator + + + + DatabaseSettingsWidgetMasterKey - Open CSV file - 開啟 CSV 檔 + Add additional protection... + - CSV file - CSV 檔案 + No encryption key added + - All files (*) - 所有檔案 (*) + You must add at least one encryption key to secure your database! + - Merge database - 合併資料庫 + No password set + - Open KeePass 1 database - 開啟 KeePass 1 資料庫 + 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? + - KeePass 1 database - KeePass 1 資料庫 + Unknown error + 未知的錯誤 - Close? - 關閉? + Failed to change master key + + + + DatabaseSettingsWidgetMetaDataSimple - "%1" is in edit mode. -Discard changes and close anyway? - 「%1」 正在編輯模式中。 -是否要捨棄變更並關閉? + Database Name: + 資料庫名稱: - Save changes? - 儲存修改? + Description: + 描述: + + + DatabaseTabWidget - "%1" was modified. -Save changes? - 「%1」已修改。 -儲存變更? + KeePass 2 Database + KeePass 2 資料庫 - Writing the database failed. - 寫入資料庫失敗。 + All files + 所有檔案 - Passwords - 密碼 + Open database + 開啟資料庫 - Save database as - 資料庫另存為 + CSV file + CSV 檔案 + + + Merge database + 合併資料庫 + + + Open KeePass 1 database + 開啟 KeePass 1 資料庫 + + + KeePass 1 database + KeePass 1 資料庫 Export database to CSV file @@ -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? + - 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. + + + + 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,109 +2395,159 @@ This may cause the affected plugins to malfunction. Attachments 附件 - - - EntryView - Customize View + Yes - Hide Usernames - 隱藏使用者名稱 + TOTP + + + + EntryPreviewWidget - Hide Passwords - 隱藏密碼 + Generate TOTP Token + 產生 TOTP Token - Fit to window - + Close + 關閉 - Fit to contents - + General + 一般 - Reset to defaults - 重設為預設 + Username + 使用者名稱 - Attachments (icon) - + Password + 密碼 - - - Group - Recycle Bin - 回收桶 + Expiration + 過期 - - - HostInstaller - KeePassXC: Cannot save file! - KeePassXC: 無法保存檔案! + URL + 網址 - Cannot save the native messaging script file. - 無法保存 native messaging 指令檔。 + Attributes + 屬性 - - - HttpPasswordGeneratorWidget - Length: - 長度: + Attachments + 附件 - Character Types - 字元類型 + Notes + 附註 - Upper Case Letters - 大寫英文字母 + Autotype + 自動輸入 - A-Z - A-Z + Window + 視窗 - Lower Case Letters - 小寫英文字母 + Sequence + 序列 - a-z - a-z + Searching + 搜尋中 - Numbers - 數字 + Search + 搜尋 - 0-9 - 0-9 + Clear + 清除 - Special Characters - 特殊字元 + Never + 從不 - /*_& ... - /*_& ... + [PROTECTED] + [被保護] - Exclude look-alike characters - 去除相似的字元 + <b>%1</b>: %2 + attributes line + - Ensure that the password contains characters from every group - 確保密碼包含每一組字元 + Enabled + 啟用 - Extended ASCII - 擴展 ASCII 碼 + 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 + + + + + HostInstaller + + KeePassXC: Cannot save file! + KeePassXC: 無法保存檔案! + + + Cannot save the native messaging script file. + 無法保存 native messaging 指令檔。 @@ -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,158 +3108,205 @@ This is a one-way migration. You won't be able to open the imported databas Invalid entry field type 無效的項目欄位類型 + + unable to seek to content position + + - KeePass2 + KeeShare - AES: 256-bit - AES: 256 位元 + Disabled share + - Twofish: 256-bit - Twofish: 256 位元 + Import from + - ChaCha20: 256-bit - ChaCha20: 256 位元 + 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 – 推薦) + Import from share %1 + - - - Main - Existing single-instance lock file is invalid. Launching new instance. - 現有的單實例鎖定檔無效。正在啟動新實例。 + Export to share %1 + - The lock file could not be created. Single-instance mode disabled. - 無法建立鎖定文件。已停用單一實例模式。 + Synchronize with share %1 + + + + KeyComponentWidget - Another instance of KeePassXC is already running. - 其他 KeePassXC 程式正在運行中。 + Key Component + - Fatal error while testing the cryptographic functions. - 測試加密函數時發生重大錯誤。 + Key Component Description + - KeePassXC - Error - KeePassXC - 錯誤 + Cancel + 取消 - - - MainWindow - &Database - 資料庫 (&D) + Key Component set, click to change or remove + - &Recent databases - 最近的資料庫 (&R) + Add %1 + Add a key component + - Import - 匯入 + Change %1 + Change a key component + - &Help - 幫助 (&H) + Remove %1 + Remove a key component + - E&ntries - 項目 (&N) + %1 set, click to change or remove + Change or remove a key component + + + + KeyFileEditWidget - Copy att&ribute to clipboard - 複製屬性到剪貼簿 (&R) + Browse + 瀏覽 - Time-based one-time password - 限時單次密碼 + Generate + 產生 - &Groups - 群組 (&G) + Key File + - &Tools - 工具 (&T) + <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> + - &Quit - 離開 (&Q) + Legacy key file format + 舊式金鑰檔案格式 - &About - 關於 (&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. + - &Open database... - 開啟資料庫…… (&O) + Error loading the key file '%1' +Message: %2 + - &Save database - 儲存資料庫 (&S) + Key files + 金鑰檔案 - &Close database - 關閉資料庫 (&C) + All files + 所有檔案 - &New database - 新的資料庫 (&N) + Create Key File... + 建立金鑰檔案…… - Merge from KeePassX database - 從 KeePassX 資料庫合併 + Error creating key file + - &Add new entry - 新增項目 (&A) + Unable to create key file: %1 + - &View/Edit entry - 檢視/編輯項目 (&V) + Select a key file + 選擇金鑰檔案 + + + MainWindow - &Delete entry - 刪除項目 (&D) + &Database + 資料庫 (&D) - &Add new group - 新增群組 (&A) + &Recent databases + 最近的資料庫 (&R) - &Edit group - 編輯群組 (&E) - + &Help + 幫助 (&H) + - &Delete group - 刪除群組 (&D) + E&ntries + 項目 (&N) - Sa&ve database as... - 將資料庫儲存為…… (&V) + &Groups + 群組 (&G) + + + &Tools + 工具 (&T) + + + &Quit + 離開 (&Q) + + + &About + 關於 (&A) + + + &Open database... + 開啟資料庫…… (&O) + + + &Save database + 儲存資料庫 (&S) + + + &Close database + 關閉資料庫 (&C) + + + &Delete entry + 刪除項目 (&D) + + + &Edit group + 編輯群組 (&E) - Change &master key... - 變更主金鑰…… (&M) + &Delete group + 刪除群組 (&D) - &Database settings - 資料庫設定 (&D) + Sa&ve database as... + 將資料庫儲存為…… (&V) 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,274 +3412,440 @@ This version is not meant for production use. 具有高風險的破壞可能, 請備份你的資料庫. 這個版本不是給一般使用者使用. - - - OpenSSHKey - Invalid key file, expecting an OpenSSH key - 無效的金鑰檔案,預期應是 OpenSSH 金鑰 + &Donate + - PEM boundary mismatch - PEM 邊界數量不對稱 + Report a &bug + - Base64 decoding failed - Base64 解碼失敗 + 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. + - Key file way too small. - 金鑰檔太小。 + &Import + - Key file magic header id invalid - 金鑰檔魔術標頭 id 無效 + Copy att&ribute... + - Found zero keys - 找到零個金鑰 + TOTP... + - Failed to read public key. - 無法讀取公開金鑰。 + &New database... + - Corrupted key file, reading private key failed - 金鑰檔損壞,讀取私密金鑰失敗 + Create a new database + - No private key payload to decrypt - 私密金鑰中沒有載體可解密 + &Merge from database... + - Trying to run KDF without cipher - 嘗試運行無加密的 KDF + Merge from another KDBX database + - Passphrase is required to decrypt this key - 需要密碼短語以解密此金鑰 + &New entry + - Key derivation failed, key file corrupted? - 金鑰衍生失敗,金鑰檔已損壞? + Add a new entry + - Decryption failed, wrong passphrase? - 解密失敗,密碼短語錯誤? + &Edit entry + - Unexpected EOF while reading public key - 讀取公開金鑰時出現意外的檔案結尾 + View or edit entry + - Unexpected EOF while reading private key - 讀取私密金鑰時出現意外的檔案結尾 + &New group + - Can't write public key as it is empty - 無法寫入公開金鑰,因為它是空的 + Add a new group + - Unexpected EOF when writing public key - 編寫公開金鑰時出現意外的檔案結尾 + Change master &key... + - Can't write private key as it is empty - 無法寫入私密金鑰,因為它是空的 + &Database settings... + - Unexpected EOF when writing private key - 編寫私密金鑰時出現意外的檔案結尾 + Copy &password + - Unsupported key type: %1 + Perform &Auto-Type - Unknown cipher: %1 + Open &URL - Cipher IV is too short for MD5 kdf + KeePass 1 database... - Unknown KDF: %1 + Import a KeePass 1 database - Unknown key type: %1 + CSV file... - - - OptionDialog - Dialog - 對話方塊 + Import a CSV file + - This is required for accessing your databases from ChromeIPass or PassIFox - 啟用後才能讓 ChromeIPass 或 PassIFox 存取你的資料庫 + Show TOTP... + - Enable KeePassHTTP server - 啟用 KeePassHTTP 伺服器 + Show TOTP QR Code... + - General - 一般 + Check for Updates... + - Sh&ow a notification when credentials are requested - Credentials mean login data requested via browser extension - 要求認證時顯示通知 (&O) + Share entry + - Only returns the best matches for a specific URL instead of all entries for the whole domain. - 只回傳最佳的網址相符項目而非所有網址相符的項目。(&R) + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + - &Return only best matching entries - 只回傳最佳的相符項目 (&R) + Check for updates on startup? + - Re&quest to unlock the database if it is locked - 若資料庫已鎖定,則請求解鎖 (&Q) + Would you like KeePassXC to check for updates on startup? + - Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - 只顯示相同協定的項目。(http://, https://, ftp://, ...) + You can always check for updates manually from the application menu. + + + + Merger - &Match URL schemes - 符合網址協定 (&M) + Creating missing %1 [%2] + - Sort matching entries by &username - 依使用者名稱排序符合項目 (&U) + Relocating %1 [%2] + - Sort &matching entries by title - 依名稱排序符合項目 (&M) + Overwriting %1 [%2] + - R&emove all shared encryption keys from active database - 從目前的資料庫移除所有共用的加密金鑰 (&E) + older entry merged from database "%1" + - Re&move all stored permissions from entries in active database - 從目前的資料庫項目中移除所有權限。 + Adding backup for older target %1 [%2] + - Password Generator - 密碼產生器 + Adding backup for older source %1 [%2] + - Advanced - 進階 + Reapplying older target entry on top of newer source %1 [%2] + - Always allow &access to entries - 總是允許存取項目 (&A) + Reapplying older source entry on top of newer target %1 [%2] + - Always allow &updating entries - 總是允許更新項目 (&U) + Synchronizing from newer source %1 [%2] + - Only the selected database has to be connected with a client. - 只有所選的資料庫能連接到客戶端。 + Synchronizing from older source %1 [%2] + - Searc&h in all opened databases for matching entries - 在所有開啟的資料庫內搜尋相符的項目 (&H) + Deleting child %1 [%2] + - Automatically creating or updating string fields is not supported. - 不支援自動建立或更新文字欄位。 + Deleting orphan %1 [%2] + - &Return advanced string fields which start with "KPH: " - 回傳 「KPH: 」 起首的進階文字欄位 (&R) + Changed deleted objects + + + + Adding missing icon %1 + + + + NewDatabaseWizard - HTTP Port: - HTTP 埠: + Create a new KeePassXC database... + - Default port: 19455 - 預設埠:19455 + Root + Root group + + + + NewDatabaseWizardPage - KeePassXC will listen to this port on 127.0.0.1 - KeePassXC 會在 127.0.0.1 上監聽此埠 + WizardPage + - <b>Warning:</b> The following options can be dangerous! - <b>警告:</b>下列選項可能極具風險! + En&cryption Settings + - <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> + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + - Cannot bind to privileged ports - 無法綁定到特殊權限埠 + Advanced Settings + - Cannot bind to privileged ports below 1024! -Using default port 19455. - 無法綁定到 1024 以下的特殊權限埠! -將使用預設埠 19455。 + Simple Settings + - PasswordGeneratorWidget + NewDatabaseWizardPageEncryption - %p% - %p% + Encryption Settings + - Password: - 密碼: + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + NewDatabaseWizardPageMasterKey - strength - Password strength - 強度 + Database Master Key + - entropy - entropy + A master key known only to you protects your database. + + + + NewDatabaseWizardPageMetaData - Password - 密碼 + General Database Information + - Character Types - 字元類型 + Please fill in the display name and an optional description for your new database: + + + + OpenSSHKey - Upper Case Letters - 大寫英文字母 + Invalid key file, expecting an OpenSSH key + 無效的金鑰檔案,預期應是 OpenSSH 金鑰 - Lower Case Letters - 小寫英文字母 + PEM boundary mismatch + PEM 邊界數量不對稱 - Numbers - 數字 + Base64 decoding failed + Base64 解碼失敗 - Special Characters - 特殊字元 + Key file way too small. + 金鑰檔太小。 - Extended ASCII - 擴展 ASCII 碼 + 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 + + + + 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> + + + + Passwords do not match. + + + + Generate master password + + + + + PasswordGeneratorWidget + + %p% + %p% + + + Password: + 密碼: + + + strength + Password strength + 強度 + + + entropy + entropy + + + Password + 密碼 + + + Character Types + 字元類型 + + + Upper Case Letters + 大寫英文字母 + + + Lower Case Letters + 小寫英文字母 + + + Numbers + 數字 + + + Special Characters + 特殊字元 + + + Extended ASCII + 擴展 ASCII 碼 Exclude look-alike characters @@ -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,136 +3911,285 @@ Using default port 19455. Password quality 極好 - - - QObject - Database not opened - 資料庫未開啟 + ExtendedASCII + - Database hash not available - 資料庫雜湊不可用 + Switch to advanced mode + - Client public key not received - 未收到用戶端公開金鑰 + Advanced + 進階 - Cannot decrypt message - 無法解密訊息 + Upper Case Letters A to F + - Timeout or cannot connect to KeePassXC - 逾時或無法連接到 KeePassXC + A-Z + A-Z - Action cancelled or denied - 操作被取消或被拒絕 + Lower Case Letters A to F + - Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - 無法加密訊息或未找到公開金鑰。是否在 KeePassXC 中啟用了 native messaging 功能? + a-z + a-z - KeePassXC association failed, try again - KeePassXC 關聯失敗,請重試 + 0-9 + 0-9 - Key change was not successful - 金鑰更改不成功 + Braces + - Encryption key is not recognized - 加密金鑰未被識別 + {[( + - No saved databases found - 找不到已保存的資料庫 + Punctuation + - Incorrect action - 錯誤的操作 + .,:; + - Empty message received - 收到空消息 + Quotes + - No URL provided - 未提供 URL + " ' + - No logins found - 找不到登入資訊 + Math + - Unknown error - 未知的錯誤 + <*+!?= + - Add a new entry to a database. - 新增項目到資料庫 + Dashes + - Path of the database. - 資料庫的路徑。 + \_|-/ + - Key file of the database. - 資料庫的金鑰檔案。 + Logograms + - path - 路徑 + #$%&&@^`~ + - Username for the entry. - 此項目的使用者名稱。 + Switch to simple mode + - username - 使用者名稱 + Simple + - URL for the entry. - 此項目的網址 + Character set to exclude from generated password + - URL - 網址 + Do not include: + - Prompt for the entry's password. - 提示此項目的密碼。 + Add non-hex letters to "do not include" list + - Generate a password for the entry. - 產生此項目的密碼。 + Hex + - Length for the generated password. - 欲產生的密碼長度。 + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + - length - 長度 + Word Co&unt: + - Path of the entry to add. - 欲新增的項目路徑 + Regenerate + + + + QApplication - Copy an entry's password to the clipboard. - 將條目的密碼複製到剪貼簿。 + KeeShare + + + + QFileDialog - Path of the entry to clip. - clip = copy to clipboard - 欲剪輯的項目路徑。 + Select + + + + QMessageBox - Timeout in seconds before clearing the clipboard. + 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 + KeePassXC 關聯失敗,請重試 + + + Encryption key is not recognized + 加密金鑰未被識別 + + + Incorrect action + 錯誤的操作 + + + Empty message received + 收到空消息 + + + No URL provided + 未提供 URL + + + 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. 清除剪貼簿之前保存多久 (秒)。 @@ -3375,597 +4197,1096 @@ Using default port 19455. 編輯項目。 - Title for the entry. - 項目標題。 + Title for the entry. + 項目標題。 + + + title + 標題 + + + Path of the entry to edit. + 欲編輯的項目路徑。 + + + Estimate the entropy of a password. + 估計密碼的 entropy。 + + + Password for which to estimate the entropy. + 用於估計 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: + 插入密碼以解除鎖定 %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 + NULL 裝置 + + + 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 + YubiKey[%1] 挑戰回應 - 插槽 %2 - %3 + + + Press + + + + Passive + 被動 + + + SSH Agent + SSH 代理 + + + 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. + 檔案 %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 + - title - 標題 + Message encryption failed. + - Path of the entry to edit. - 欲編輯的項目路徑。 + No groups found + - Estimate the entropy of a password. - 估計密碼的 entropy。 + Create a new database. + - Password for which to estimate the entropy. - 用於估計 entropy 的密碼。 + File %1 already exists. + - Perform advanced analysis on the password. - 對密碼執行高級分析。 + Loading the key file failed + - Extract and print the content of a database. - 提取與列印資料庫內容。 + No key is set. Aborting database creation. + - Path of the database to extract. - 要提取的資料庫路徑。 + Failed to save the database: %1. + - Insert password to unlock %1: - 插入密碼以解除鎖定 %1: + Successfully created new database. + - Failed to load key file %1 : %2 - 未能載入金鑰檔 %1:%2 + Insert password to encrypt database (Press enter to leave blank): + - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - 警告:你正在使用未來將不再支援的舊式金鑰檔案格式。 - -請考慮產生新的金鑰。 + Creating KeyFile %1 failed: %2 + - - -Available commands: - - - -可用命令: - + Loading KeyFile %1 failed: %2 + - Name of the command to execute. - 要執行的命令的名稱。 + Remove an entry from the database. + 從資料庫中移除項目。 - List database entries. - 列出資料庫項目。 + Path of the entry to remove. + 欲移除的項目路徑。 - Path of the group to list. Default is / - 要列出的群組路徑。預設是 / + Existing single-instance lock file is invalid. Launching new instance. + 現有的單實例鎖定檔無效。正在啟動新實例。 - Find entries quickly. - 快速尋找項目。 + The lock file could not be created. Single-instance mode disabled. + 無法建立鎖定文件。已停用單一實例模式。 - Search term. - 搜尋字詞。 + KeePassXC - cross-platform password manager + KeePassXC - 跨平台的密碼管理工具 - Merge two databases. - 合併兩個資料庫。 + filenames of the password databases to open (*.kdbx) + 欲開啟的密碼資料庫檔名 (*.kdbx) - Path of the database to merge into. - 合併時的目標資料庫路徑。 + path to a custom config file + 自訂設定檔路徑 - Path of the database to merge from. - 合併時的來源資料庫路徑。 + key file of the database + 資料庫的金鑰檔案 - Use the same credentials for both database files. - 對兩個資料庫檔案使用相同的認證。 + read password of the database from stdin + 從 stdin 讀取資料庫密碼 - Key file of the database to merge from. - 用於合併資料庫的金鑰檔案。 + Parent window handle + 父層視窗控制 - Show an entry's information. - 顯示項目資訊。 + Another instance of KeePassXC is already running. + 其他 KeePassXC 程式正在運行中。 - 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. - 欲顯示的屬性名稱。此選項可以多次指定,每個屬性會照順序逐行顯示。如果未指定任何屬性,則會給出預設屬性的摘要。 + Fatal error while testing the cryptographic functions. + 測試加密函數時發生重大錯誤。 - attribute - 屬性 + KeePassXC - Error + KeePassXC - 錯誤 - Name of the entry to show. - 要顯示的項目名稱。 + Database password: + - NULL device - NULL 裝置 + Cannot create new group + + + + QtIOCompressor - error reading from device - 從裝置讀取時出錯 + Internal zlib error when compressing: + 進行壓縮時,內部 zlib 發生錯誤: - file empty ! - - 檔案是空的! - + Error writing to underlying device: + 寫入底層裝置時出錯: - malformed string - 格式不正確的字串 + Error opening underlying device: + 開啟底層裝置時出錯: - missing closing quote - 缺少右引號 + Error reading data from underlying device: + 讀取底層裝置時出錯: - Group - 群組 + Internal zlib error when decompressing: + 進行解壓縮時,內部 zlib 發生錯誤: + + + QtIOCompressor::open - Title - 標題 + The gzip format not supported in this version of zlib. + 此版本的 zlib 不支援 gzip 格式 - Username - 使用者名稱 + Internal zlib error: + 內部 zlib 發生錯誤: + + + SSHAgent - Password - 密碼 + Agent connection failed. + - Notes - 附註 + Agent protocol error. + - Last Modified - 最後編輯 + No agent running, cannot add identity. + - Created - 已建立 + No agent running, cannot remove identity. + - Legacy Browser Integration - 舊式瀏覽器整合 + Agent refused this identity. Possible reasons include: + - Browser Integration - 瀏覽器整合 + The key has already been added. + - YubiKey[%1] Challenge Response - Slot %2 - %3 - YubiKey[%1] 挑戰回應 - 插槽 %2 - %3 + Restricted lifetime is not supported by the agent (check options). + - Press - + A confirmation request is not supported by the agent (check options). + + + + SearchHelpWidget - Passive - 被動 + Search Help + - SSH Agent - SSH 代理 + Search terms are as follows: [modifiers][field:]["]term["] + - Generate a new random diceware passphrase. + Every search term must match (ie, logical AND) - Word count for the diceware passphrase. + Modifiers - count + exclude term from results - Wordlist for the diceware generator. -[Default: EFF English] + match term exactly - Generate a new random password. + use regex in term - Length of the generated password. + Fields - Use lowercase characters in the generated password. + Term Wildcards - Use uppercase characters in the generated password. + match anything - Use numbers in the generated password. + match one - Use special characters in the generated password. + logical OR - Use extended ASCII in the generated password. + Examples - QtIOCompressor + SearchWidget - Internal zlib error when compressing: - 進行壓縮時,內部 zlib 發生錯誤: + Search + 搜尋 - Error writing to underlying device: - 寫入底層裝置時出錯: + Clear + 清除 - Error opening underlying device: - 開啟底層裝置時出錯: + Limit search to selected group + 限制只搜尋選定的群組 - Error reading data from underlying device: - 讀取底層裝置時出錯: + Search Help + - Internal zlib error when decompressing: - 進行解壓縮時,內部 zlib 發生錯誤: + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + 區分大小寫 - QtIOCompressor::open + SettingsWidgetKeeShare - The gzip format not supported in this version of zlib. - 此版本的 zlib 不支援 gzip 格式 + Active + - Internal zlib error: - 內部 zlib 發生錯誤: + Allow export + - - - SearchWidget - Search... - 搜尋…… + Allow import + - Search - 搜尋 + Own certificate + - Clear - 清除 + Fingerprint: + - Case Sensitive - 區分大小寫 + Certificate: + - Limit search to selected group - 限制只搜尋選定的群組 + Signer + - - - Service - 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. - 你已接收到上述金鑰的關聯請求。 -如果你允許透過此金鑰存取你的 KeePassXC 資料庫 -請取一個唯一識別名並按下接受。 + Generate + 產生 - KeePassXC: Overwrite existing key? - KeePassXC:覆蓋現有的金鑰? + Import + 匯入 - A shared encryption-key with the name "%1" already exists. -Do you want to overwrite it? - 已存在名為「%1」的共用加密金鑰。 -進行覆蓋? + Export + - KeePassXC: Update Entry - KeePassXC:更新項目 + Imported certificates + - Do you want to update the information in %1 - %2? - 更新 %1 到 %2 的資訊? + Trust + - KeePassXC: Database locked! - KeePassXC:資料庫已鎖定! + Ask + - The active database is locked! -Please unlock the selected database or choose another one which is unlocked. - 目前的資料庫已鎖定! -請解鎖所選的資料庫或選擇其他已解鎖的資料庫。 + Untrust + - KeePassXC: Removed keys from database - KeePassXC:從資料庫中移除金鑰 - - - Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + Remove + 移除 - KeePassXC: No keys found - KeePassXC:找不到金鑰 + Path + - No shared encryption-keys found in KeePassHttp Settings. - KeePassHttp Settings 中找不到共享加密金鑰。 + Status + - KeePassXC: Settings not available! - KeePassXC:設定不可用! + Fingerprint + 指紋 - The active database does not contain an entry of KeePassHttp Settings. - 目前的資料庫沒有 KeePassHttp Settings 項目。 + Certificate + - Removing stored permissions... - 正在移除所有已儲存的權限…… + Trusted + - Abort - 中止 + Untrusted + - KeePassXC: Removed permissions - KeePassXC:已移除權限 + Unknown + - - Successfully removed permissions from %n entries. - + + key.share + Filetype for KeeShare key + - KeePassXC: No entry with permissions found! - KeePassXC:找不到帶有權限的項目! + KeeShare key file + - The active database does not contain an entry with permissions. - 目前的資料庫中沒有帶有權限的項目。 + All files + 所有檔案 - - - SettingsWidget - Application Settings - 應用程式設定 + Select path + - General - 一般 + Exporting changed certificate + - Security - 安全性 + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + - Access error for config file %1 - 設定檔存取錯誤:%1 + Signer: + - SettingsWidgetGeneral - - Basic Settings - 基本設定 - - - Start only a single instance of KeePassXC - 只能啟動單一 KeePassXC 程式 - + ShareObserver - Remember last databases - 記住最近的資料庫 + Import from container without signature + - Remember last key files and security dongles - 記住最近的金鑰檔案與安全加密狗 + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + - Load previous databases on startup - 啟動時載入之前的資料庫 + Import from container with certificate + - Automatically save on exit - 離開時,自動儲存 + Not this time + - Automatically save after every change - 修改後,自動儲存 + Never + 從不 - Automatically reload the database when modified externally - 當有外部修改時自動重新載入資料庫 + Always + - Minimize when copying to clipboard - 在複製到剪貼簿時最小化 + Just this time + - Minimize window at application startup - 程式啟動時視窗最小化 + Import from %1 failed (%2) + - Use group icon on entry creation - 新增項目時使用群組圖示 + Import from %1 successful (%2) + - Don't mark database as modified for non-data changes (e.g., expanding groups) - 未變更資料時(例如:擴展群組時)不要將資料庫標記為已修改 + Imported from %1 + - Hide the Details view - 隱藏詳細資訊檢視 + Signed share container are not supported - import prevented + - Show a system tray icon - 顯示工作列圖示 + File is not readable + - Hide window to system tray when minimized - 將視窗最小化至工作列 + Invalid sharing container + - Hide window to system tray instead of app exit - 將視窗最小化至工作列而非關閉程式 + Untrusted import prevented + - Dark system tray icon - 深色系統列圖示 + Successful signed import + - Language - 語言 + Unexpected error + - Auto-Type - 自動輸入 + Unsigned share container are not supported - import prevented + - Use entry title to match windows for global Auto-Type - 使用項目標題來匹配全域自動輸入的視窗 + Successful unsigned import + - Use entry URL to match windows for global Auto-Type - 使用項目 URL 來匹配全域自動輸入的視窗 + File does not exist + - Always ask before performing Auto-Type - 在執行自動輸入前始終詢問 + Unknown share container type + - Global Auto-Type shortcut - 全域自動輸入快捷鍵 + Overwriting signed share container is not supported - export prevented + - Auto-Type delay - 自動輸入延遲 + Could not write export container (%1) + - ms - Milliseconds - 毫秒 + Overwriting unsigned share container is not supported - export prevented + - Startup - 啟動 + Could not write export container + - File Management - 檔案管理 + Unexpected export error occurred + - Safely save database files (may be incompatible with Dropbox, etc) + Export to %1 failed (%2) - Backup database file before saving + Export to %1 successful (%2) - Entry Management - 項目管理 + Export to %1 + - General - 一般 + Do you want to trust %1 with the fingerprint of %2 from %3? + - - - SettingsWidgetSecurity - Timeouts - 超時 + Multiple import source path to %1 in %2 + - Clear clipboard after - 多久後清除剪貼簿 + Conflicting export target path %1 in %2 + - sec - Seconds - + Could not embed signature: Could not open file to write (%1) + - Lock databases after inactivity of - 多久沒有動作之後鎖定資料庫 + Could not embed signature: Could not write file (%1) + - Convenience - 便利 + Could not embed database: Could not open file to write (%1) + - Lock databases when session is locked or lid is closed - 當工作階段鎖定或蓋上螢幕時鎖定資料庫 + Could not embed database: Could not write file (%1) + + + + TotpDialog - Lock databases after minimizing the window - 最小化視窗後鎖定資料庫 + Timed Password + 定時型密碼 - Don't require password repeat when it is visible - 顯示密碼時不需要重複輸入密碼 + 000000 + 000000 - Show passwords in cleartext by default - 預設以明碼顯示密碼 + Copy + 複製 - - Hide passwords in the preview panel - 在預覽面板中隱藏密碼 + + Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog - Hide entry notes by default - 預設隱藏項目備註 + Copy + 複製 - Privacy - 隱私 + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + - Use Google as fallback for downloading website icons - 使用 Google 搜尋作為下載網站圖示的備案 + There was an error creating the QR code. + - 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 位數 + sec + Seconds + + + + Code size: + 代碼長度: 6 digits 6 位數 - Code size: - 代碼長度: + 7 digits + - sec - Seconds - + 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. + + + + Please try again later. + - - - UnlockDatabaseWidget - Unlock database - 解鎖資料庫 + 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. - 從資料庫中移除項目。 - - - 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) + Refresh + 重新整理 - path to a custom config file - 自訂設定檔路徑 + YubiKey Challenge-Response + - key file 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> + - read password of the database from stdin - 從 stdin 讀取資料庫密碼 + No YubiKey detected, please ensure it's plugged in. + - 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 0000000000..44ae06a045 --- /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 42221fe4ed..aa025d85cf 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 0000000000..0cec1e4ced 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 a77c8391cc..58ae8c2bae 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 1c1d222a96..205ffa3524 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 0000000000..e64d870418 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 0000000000..af48dcbc55 --- /dev/null +++ b/share/wizard/background-pixmap.svg @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/snapcraft.yaml b/snapcraft.yaml index 612fa2e644..16eb0890d2 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 28a0753e92..110dc606cb 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) - - 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() - - 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") + 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(WITH_XC_TOUCHID) + set_target_properties(${PROGNAME} PROPERTIES + CPACK_BUNDLE_APPLE_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/share/macosx/keepassxc.entitlements") + endif() + + 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() + + 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() - - # 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}) - - 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) - - 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") - - # install CA cert chains - install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs") + 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") + + string(REGEX REPLACE "-.*$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) + + 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) + + 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") + + # 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 d2d33ea531..012dee62c3 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 55adac7d14..f58a1c0c1e 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 @@ class AutoType : public QObject 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 @@ class AutoType : public QObject 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 64dae79623..f9d928f0d8 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 7f0d829c0d..e598b1dcc7 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 96e947a0b8..68cf99be2b 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 @@ class AutoTypePlatformInterface 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 eae9e6ffb4..1449f9e02a 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 e4dba05158..cfa1136713 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 4b36105388..df0483a08a 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") - endif() + 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) + 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() - elseif(APPLE) - add_subdirectory(mac) - elseif(WIN32) - add_subdirectory(windows) - endif() - if(WITH_TESTS) - add_subdirectory(test) - endif() + if(WITH_TESTS) + add_subdirectory(test) + endif() endif() diff --git a/src/autotype/ShortcutWidget.cpp b/src/autotype/ShortcutWidget.cpp index 56a374011d..3dcc669d93 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 ad83f9b0a6..b69425ee14 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 6ef48743b2..d8ee1dc79b 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 d8fcf6d7fb..60cec11447 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 d2c2247841..875c217643 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 @@ class AutoTypePlatformMac : public QObject, public AutoTypePlatformInterface 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 08c5327847..f1c5387f34 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 e2ae7c6929..f8754ef3b5 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 d434c4d34e..a17028b515 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 @@ class AutoTypePlatformTest : public QObject, 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 7ee6f21a80..7681f2ecb8 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 f41fa1b50c..a9cf998dfa 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 bcb610f0fc..59dafcf144 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 6d38a25086..f9dc249fc8 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 @@ class AutoTypeExecutorWin : public AutoTypeExecutor }; #endif // KEEPASSX_AUTOTYPEWINDOWS_H - diff --git a/src/autotype/windows/CMakeLists.txt b/src/autotype/windows/CMakeLists.txt index cc3ad4b448..be74b7aa7d 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 cd5e8acdcd..94a132d40c 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 4f1d9a3d6d..221d2ba7b0 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 @@ class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface 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 7e7f252d72..e41d4a0993 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 55022feb5f..2e73da530c 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 a359710153..ed45ee7fe5 100755 --- a/src/autotype/xcb/keysymmap.py +++ b/src/autotype/xcb/keysymmap.py @@ -39,23 +39,21 @@ 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) - - # 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 - - keysymMap[unicodeVal] = keysym +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 0x0020 <= keysym <= 0x007e or 0x00a0 <= keysym <= 0x00ff: + continue + # ignore unicode | 0x01000000 mappings + elif keysym >= 0x1000000: + continue + + keysymMap[unicodeVal] = keysym keysymMap = collections.OrderedDict(sorted(keysymMap.items(), key=lambda t: t[0])) @@ -64,26 +62,24 @@ */ """) -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("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 7090a4d168..9a10e555f9 --- 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 d2a66ce0d1..4c93a54fc1 --- 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 @@ class BrowserAccessControlDialog : public QDialog 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 78ca53c1e3..1a4cbf5ece --- 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 c4d59d3c91..5351709393 --- 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 @@ class BrowserAction : public QObject 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 @@ public slots: 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 9c47fdd460..083df39459 --- 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 f9052e7de9..1fa3dfe17e --- 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 "BrowserAction.h" #include +#include #include -#include #include -#include -#include "BrowserAction.h" +#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 @@ class BrowserClients 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 36d0c73397..a058b6a05f 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 0ffaf985bd..183c492aa4 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 @@ class BrowserEntryConfig : public QObject 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 0000000000..43d6c0c62c --- /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 0000000000..2e23786359 --- /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 37d477eeeb..5beb6fab8f --- 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 1bc17a278b..dd91f15949 --- 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())); - 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")); + // 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->warningWidget->showMessage(tr("Warning: The following options can be dangerous!"), MessageWidget::Warning); + 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. %3") + .arg("Firefox", + "" + "Google Chrome / Chromium / Vivaldi", + snapInstructions)); + // clang-format on + + 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()); - - 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.setChromeSupport(m_ui->chromeSupport->isChecked()); - settings.setChromiumSupport(m_ui->chromiumSupport->isChecked()); - settings.setFirefoxSupport(m_ui->firefoxSupport->isChecked()); - settings.setVivaldiSupport(m_ui->vivaldiSupport->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->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()); +#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 b562f6c18a..5efb808e52 --- 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 24589c147f..2b32bb9e80 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 80e2ba0516..9c06c24875 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" - - -// 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: "; +#include "gui/MessageBox.h" +#ifdef Q_OS_MACOS +#include "gui/macutils/MacUtils.h" +#endif + +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; - -BrowserService::BrowserService(DatabaseTabWidget* parent) : - m_dbTabWidget(parent), - m_dialogActive(false), - m_bringToFrontRequested(false) +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) + , 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->uuidToHex(); +} + +QJsonArray BrowserService::getChildrenFromGroup(Group* group) +{ + QJsonArray groupList; + + if (!group) { + return groupList; + } + + 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 recycleBin->uuid().toHex(); + return groupList; } -Entry* BrowserService::getConfigEntry(bool create) +QJsonObject BrowserService::getDatabaseGroups() { - Entry* entry = nullptr; - Database* db = getDatabase(); + auto db = getDatabase(); if (!db) { - return nullptr; + return {}; } - 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; + Group* rootGroup = db->rootGroup(); + if (!rootGroup) { + return {}; } - if (entry && entry->group() == db->metadata()->recycleBin()) { - if (!create) { - return nullptr; - } else { - entry->setGroup(db->rootGroup()); - return entry; + 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; } - return entry; + 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)); - } - - Database* db = getDatabase(); + 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)); + } + + 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() -{ - 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() +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; - } - - 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 (entry->hasTotp()) { + res["totp"] = entry->totp(); + } - if (BrowserSettings::supportKphFields()) { + 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 f65f6af595..a8f04262ff 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 ecaf8e23ee..9aab68f7ed --- 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() +void BrowserSettings::updateBinaryPaths(const QString& customProxyLocation) { - return m_passwordGenerator.getbits(); + bool isProxy = supportBrowserProxy(); + m_hostInstaller.updateBinaryPaths(isProxy, customProxyLocation); } -void BrowserSettings::updateBinaryPaths(QString customProxyLocation) +bool BrowserSettings::checkIfProxyExists(QString& path) { - bool isProxy = supportBrowserProxy(); - m_hostInstaller.updateBinaryPaths(isProxy, customProxyLocation); + 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 7047d22b36..b00c75b713 --- 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 61215c181b..10189d931c 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 9b27ab1cf3..08782fa167 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 +#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"; +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) - 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"; + , 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) - 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; + // 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 - -HostInstaller::HostInstaller() { - } +/** + * 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 +{ + 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(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 - } +#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 c3fc856205..ea0c4bd2f7 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 e696af90d0..a6b8d97c0e 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 44a0f1768f..7a099a4ace 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 @@ class NativeMessagingBase : public QObject ~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 7d14c9d30e..5d2383b2b4 --- 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 29096d3110..9ce1dab60b --- 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 2d42ac4ec3..64231736ff 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 e467b42118..76211cdc96 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 5c97299b82..dd9d0b50cd 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 5769249c92..dd0c3d8b51 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 a5126f9997..e59a911a5e 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 886f8ecc71..6e346f25c1 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 e94231236e..65a6169556 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 ef69488889..79d56c360b 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 2ebdd77b9b..b74a312df0 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 0000000000..b8c094f900 --- /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 0000000000..85993eaeb0 --- /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 c71b57d7eb..f113473446 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 61fe724ca9..f439681b7a 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 967ddd8ed6..7954648ce3 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 2c413bea0c..001b5abaf0 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 9a2ab0b0f7..7064963f4f 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 15f9227525..c15fed9b38 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 b48d5a6aa8..be5abb920a 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 2939afddbb..1a4f6288b8 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 eb8fea5e8c..5f0ad98ac7 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 607fc105ce..64ef81623c 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 bdedaf210e..11650d405f 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 98b8b5a452..92ade262bf 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 f803728855..f25ce79af9 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 3677a034df..ae32951b9a 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 6b114bff3c..b0e4cabca4 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.")); + parser.addOption(samePasswordOption); + parser.addOption(Command::KeyFileOption); - 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); + QCommandLineOption keyFileFromOption(QStringList() << "f" + << "key-file-from", + QObject::tr("Key file of the database to merge from."), + QObject::tr("path")); + parser.addOption(keyFileFromOption); - parser.addOption(samePasswordOption); + 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); - - QString errorMessage = db1->saveToFile(args.at(0)); - if (!errorMessage.isEmpty()) { - qCritical("Unable to save database to file : %s", qPrintable(errorMessage)); - return EXIT_FAILURE; + Merger merger(db2.data(), db1.data()); + bool databaseChanged = merger.merge(); + + 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 496c66b869..1f138b65f3 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 64a5976e9a..4663d83ecf 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 5465530eda..fa8bc7bd6e 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 54561b1f7b..9ae3f4d0f6 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 18b6d7049e..32dab7efbd 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 0000000000..d75cb74a95 --- /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 0000000000..2dc116352a --- /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 35e7cce389..344e2b7f7b 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 { + /** + * STDOUT file handle for the CLI. + */ + FILE* STDOUT = stdout; + + /** + * STDERR file handle for the CLI. + */ + FILE* STDERR = stderr; + + /** + * STDIN file handle for the CLI. + */ + FILE* STDIN = stdin; + +/** + * DEVNULL file handle for the CLI. + */ #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; - } + FILE* DEVNULL = fopen("nul", "w"); +#else + FILE* DEVNULL = fopen("/dev/null", "w"); +#endif + + void setStdinEcho(bool enable = true) + { +#ifdef Q_OS_WIN + HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); + DWORD mode; + GetConsoleMode(hIn, &mode); - SetConsoleMode(hIn, mode); + if (enable) { + mode |= ENABLE_ECHO_INPUT; + } else { + mode &= ~ENABLE_ECHO_INPUT; + } + SetConsoleMode(hIn, mode); #else - struct termios t; - tcgetattr(STDIN_FILENO, &t); + struct termios t; + tcgetattr(STDIN_FILENO, &t); - if (enable) { - t.c_lflag |= ECHO; - } else { - t.c_lflag &= ~ECHO; - } + if (enable) { + t.c_lflag |= ECHO; + } else { + t.c_lflag &= ~ECHO; + } - tcsetattr(STDIN_FILENO, TCSANOW, &t); + 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(); + 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 {}; + } + } - return line; -} + /** + * 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 Utils::clipText(const QString& text) -{ + /** + * 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; + 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; - } - - 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())); + 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(); } - clipProcess->waitForBytesWritten(); - clipProcess->closeWriteChannel(); - clipProcess->waitForFinished(); - return clipProcess->exitCode(); -} +} // namespace Utils diff --git a/src/cli/Utils.h b/src/cli/Utils.h index 1f80511833..bb4d8f09a5 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 cd428e1059..22cf88a3ad 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 1462f92b91..b9e3853f27 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); + + Bootstrap::bootstrap(); - QTextStream out(stdout); + 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 9f3952b04c..7d70188616 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 67cab16094..f74d7c738d 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(); -} - -/** - * 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 - -#endif //KEEPASSXC_ASYNCTASK_HPP + /** + * 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)); + } + +}; // namespace AsyncTask + +#endif // KEEPASSXC_ASYNCTASK_HPP diff --git a/src/core/AutoTypeAssociations.cpp b/src/core/AutoTypeAssociations.cpp index 04221733fc..a9ecc0db11 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 31e58cda0d..17d5c3bcd2 100644 --- a/src/core/AutoTypeAssociations.h +++ b/src/core/AutoTypeAssociations.h @@ -46,6 +46,9 @@ class AutoTypeAssociations : public QObject 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 c1faab9e65..13b037bb61 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 0000000000..1950735ae2 --- /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 0000000000..de1a4d8365 --- /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 0000000000..88ac4fb779 --- /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 0000000000..8f81b0961a --- /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 0000000000..12e5029b76 --- /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 0000000000..5124caf6e9 --- /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 614aee0c4a..86ed04e382 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 eb7978622a..ca77e0c0a6 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 @@ Q_OBJECT 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 @@ Q_OBJECT 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 6a963fc454..7e49294814 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 3ab31bf676..d90e8300aa 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 @@ class CsvParser { 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 61ac2980eb..86adae158c 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 3a6b64bce3..d085c94095 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 @@ Q_OBJECT 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 8fe8d04c7f..22484cb808 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,55 +18,335 @@ #include "Database.h" -#include -#include -#include -#include -#include -#include - -#include "cli/Utils.h" +#include "core/Clock.h" #include "core/Group.h" +#include "core/Merger.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" +#include "keys/PasswordKey.h" + +#include +#include +#include +#include +#include +#include -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(metadataModified()), this, SLOT(markAsModified())); + connect(m_timer, SIGNAL(timeout()), SIGNAL(databaseModified())); - 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())); + 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); + + if (m_modified) { + emit databaseDiscarded(); + } +} + +QUuid Database::uuid() const +{ + return m_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) +{ + Q_ASSERT(!m_data.filePath.isEmpty()); + if (m_data.filePath.isEmpty()) { + return false; + } + return open(m_data.filePath, std::move(key), error, readOnly); +} + +/** + * 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 (isInitialized() && m_modified) { + emit databaseDiscarded(); + } + + setEmitModified(false); + + QFile dbFile(filePath); + if (!dbFile.exists()) { + if (error) { + *error = tr("File %1 does not exist.").arg(filePath); + } + return false; + } + + 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; + bool ok = reader.readDatabase(&dbFile, std::move(key), this); + if (reader.hasError()) { + if (error) { + *error = tr("Error while reading the database: %1").arg(reader.errorString()); + } + return false; + } + + setReadOnly(readOnly); + setFilePath(filePath); + dbFile.close(); + + setInitialized(ok); + markAsClean(); + + setEmitModified(true); + return ok; +} + +/** + * 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) +{ + Q_ASSERT(!m_data.filePath.isEmpty()); + if (m_data.filePath.isEmpty()) { + if (error) { + *error = tr("Could not save, database has no file name."); + } + return false; + } + + return save(m_data.filePath, error, atomic, backup); +} + +/** + * Save the database to a file. + * + * This function uses QTemporaryFile instead of QSaveFile due to a bug + * in Qt (https://bugreports.qt.io/browse/QTBUG-57299) that may prevent + * the QSaveFile from renaming itself when using Dropbox, Drive, or OneDrive. + * + * The risk in using QTemporaryFile is that the rename function is not atomic + * and may result in loss of data if there is a crash or power loss at the + * wrong moment. + * + * @param filePath Absolute path of the file to save + * @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(const QString& filePath, QString* error, bool atomic, bool backup) +{ + 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 + if (!writeDatabase(&saveFile, error)) { + return false; + } + + if (backup) { + backupDatabase(filePath); + } + + if (saveFile.commit()) { + // successfully saved database file + setFilePath(filePath); + return true; + } + } + if (error) { + *error = saveFile.errorString(); + } + } else { + QTemporaryFile tempFile; + if (tempFile.open()) { + // write the database to the file + if (!writeDatabase(&tempFile, error)) { + return false; + } + + tempFile.close(); // flush to disk + + if (backup) { + backupDatabase(filePath); + } + + // Delete the original db and move the temp file in place + QFile::remove(filePath); +#ifdef Q_OS_LINUX + // workaround to make this workaround work, see: https://bugreports.qt.io/browse/QTBUG-64008 + if (tempFile.copy(filePath)) { + // successfully saved database file + return true; + } +#else + if (tempFile.rename(filePath)) { + // successfully saved database file + tempFile.setAutoRemove(false); + setFilePath(filePath); + return true; + } +#endif + } + if (error) { + *error = tempFile.errorString(); + } + } + + // Saving failed + return false; +} + +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); + setEmitModified(true); + + if (writer.hasError()) { + // the writer failed + if (error) { + *error = writer.errorString(); + } + return false; + } + + 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. + * + * @param filePath Path to the file to backup + * @return true on success + */ +bool Database::backupDatabase(const QString& filePath) +{ + static auto re = QRegularExpression("(\\.[^.]+)$"); + + auto match = re.match(filePath); + auto backupFilePath = filePath; + backupFilePath = backupFilePath.replace(re, "") + ".old" + match.captured(1); + QFile::remove(backupFilePath); + return QFile::copy(filePath, backupFilePath); +} + +bool Database::isReadOnly() const +{ + return m_data.isReadOnly; +} + +void Database::setReadOnly(bool readOnly) +{ + m_data.isReadOnly = readOnly; +} + +/** + * Returns true if database has been fully decrypted and populated, i.e. if + * it's not just an empty default instance. + * + * @return true if database has been fully initialized + */ +bool Database::isInitialized() const +{ + return m_initialized; +} + +/** + * @param initialized true to mark database as initialized + */ +void Database::setInitialized(bool initialized) +{ + m_initialized = initialized; } Group* Database::rootGroup() @@ -79,10 +359,21 @@ const Group* Database::rootGroup() const return m_rootGroup; } +/** + * 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 Database::setRootGroup(Group* group) { Q_ASSERT(group); + if (isInitialized() && m_modified) { + emit databaseDiscarded(); + } + m_rootGroup = group; m_rootGroup->setParent(this); } @@ -97,111 +388,63 @@ const Metadata* Database::metadata() const return m_metadata; } -Entry* Database::resolveEntry(const Uuid& uuid) +QString Database::filePath() const { - return findEntryRecursive(uuid, m_rootGroup); + return m_data.filePath; } -Entry* Database::resolveEntry(const QString& text, EntryReferenceType referenceType) +void Database::setFilePath(const QString& filePath) { - 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; - } + if (filePath == m_data.filePath) { + return; } - 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; - } + 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); - const QList children = group->children(); - for (Group* child : children) { - Entry* result = findEntryRecursive(text, referenceType, child); - if (result) { - return result; - } - } + emit filePathChanged(oldPath, filePath); +} - return nullptr; +QList Database::deletedObjects() +{ + return m_deletedObjects; } -Group* Database::resolveGroup(const Uuid& uuid) +const QList& Database::deletedObjects() const { - return findGroupRecursive(uuid, m_rootGroup); + return m_deletedObjects; } -Group* Database::findGroupRecursive(const Uuid& uuid, Group* group) +bool Database::containsDeletedObject(const QUuid& uuid) const { - if (group->uuid() == uuid) { - return group; + for (const DeletedObject& currentObject : m_deletedObjects) { + if (currentObject.uuid == uuid) { + return true; + } } + return false; +} - const QList children = group->children(); - for (Group* child : children) { - Group* result = findGroupRecursive(uuid, child); - if (result) { - return result; +bool Database::containsDeletedObject(const DeletedObject& object) const +{ + for (const DeletedObject& currentObject : m_deletedObjects) { + if (currentObject.uuid == object.uuid) { + return true; } } - - return nullptr; + return false; } -QList Database::deletedObjects() +void Database::setDeletedObjects(const QList& delObjs) { - return m_deletedObjects; + if (m_deletedObjects == delObjs) { + return; + } + m_deletedObjects = delObjs; } void Database::addDeletedObject(const DeletedObject& delObj) @@ -210,23 +453,23 @@ void Database::addDeletedObject(const DeletedObject& delObj) m_deletedObjects.append(delObj); } -void Database::addDeletedObject(const Uuid& uuid) +void Database::addDeletedObject(const QUuid& uuid) { DeletedObject delObj; - delObj.deletionTime = QDateTime::currentDateTimeUtc(); + delObj.deletionTime = Clock::currentDateTimeUtc(); delObj.uuid = uuid; addDeletedObject(delObj); } -Uuid Database::cipher() const +const QUuid& Database::cipher() const { return m_data.cipher; } -Database::CompressionAlgorithm Database::compressionAlgo() const +Database::CompressionAlgorithm Database::compressionAlgorithm() const { - return m_data.compressionAlgo; + return m_data.compressionAlgorithm; } QByteArray Database::transformedMasterKey() const @@ -241,34 +484,50 @@ QByteArray Database::challengeResponseKey() const bool Database::challengeMasterSeed(const QByteArray& masterSeed) { - m_data.masterSeed = masterSeed; - return m_data.key.challenge(masterSeed, m_data.challengeResponseKey); + if (m_data.key) { + m_data.masterSeed = masterSeed; + return m_data.key->challenge(masterSeed, m_data.challengeResponseKey); + } + return false; } -void Database::setCipher(const Uuid& cipher) +void Database::setCipher(const QUuid& cipher) { Q_ASSERT(!cipher.isNull()); m_data.cipher = cipher; } -void Database::setCompressionAlgo(Database::CompressionAlgorithm algo) +void Database::setCompressionAlgorithm(Database::CompressionAlgorithm algo) { Q_ASSERT(static_cast(algo) <= CompressionAlgorithmMax); - m_data.compressionAlgo = algo; + m_data.compressionAlgorithm = algo; } /** * Set and transform a new encryption key. * - * @param key key to set and transform + * @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 CompositeKey& key, bool updateChangedTime, bool updateTransformSalt) -{ +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()); @@ -276,7 +535,9 @@ bool Database::setKey(const CompositeKey& key, bool updateChangedTime, bool upda QByteArray oldTransformedMasterKey = m_data.transformedMasterKey; QByteArray transformedMasterKey; - if (!key.transform(*m_data.kdf, transformedMasterKey)) { + if (!transformKey) { + transformedMasterKey = oldTransformedMasterKey; + } else if (!key->transform(*m_data.kdf, transformedMasterKey)) { return false; } @@ -284,11 +545,11 @@ bool Database::setKey(const CompositeKey& key, bool updateChangedTime, bool upda m_data.transformedMasterKey = transformedMasterKey; m_data.hasKey = true; if (updateChangedTime) { - m_metadata->setMasterKeyChanged(QDateTime::currentDateTimeUtc()); + m_metadata->setMasterKeyChanged(Clock::currentDateTimeUtc()); } if (oldTransformedMasterKey != m_data.transformedMasterKey) { - emit modifiedImmediate(); + markAsModified(); } return true; @@ -299,14 +560,14 @@ bool Database::hasKey() const return m_data.hasKey; } -bool Database::verifyKey(const CompositeKey& key) const +bool Database::verifyKey(const QSharedPointer& key) const { Q_ASSERT(hasKey()); if (!m_data.challengeResponseKey.isEmpty()) { QByteArray result; - if (!key.challenge(m_data.masterSeed, result)) { + if (!key->challenge(m_data.masterSeed, result)) { // challenge failed, (YubiKey?) removed? return false; } @@ -317,7 +578,7 @@ bool Database::verifyKey(const CompositeKey& key) const } } - return (m_data.key.rawKey() == key.rawKey()); + return (m_data.key->rawKey() == key->rawKey()); } QVariantMap& Database::publicCustomData() @@ -332,12 +593,13 @@ const QVariantMap& Database::publicCustomData() const 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); @@ -345,6 +607,7 @@ void Database::createRecycleBin() void Database::recycleEntry(Entry* entry) { + Q_ASSERT(!m_data.isReadOnly); if (m_metadata->recycleBinEnabled()) { if (!m_metadata->recycleBin()) { createRecycleBin(); @@ -357,6 +620,7 @@ void Database::recycleEntry(Entry* entry) void Database::recycleGroup(Group* group) { + Q_ASSERT(!m_data.isReadOnly); if (m_metadata->recycleBinEnabled()) { if (!m_metadata->recycleBin()) { createRecycleBin(); @@ -369,6 +633,7 @@ void Database::recycleGroup(Group* 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(); @@ -383,21 +648,6 @@ void Database::emptyRecycleBin() } } -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) { @@ -407,190 +657,67 @@ void Database::setEmitModified(bool value) m_emitModified = value; } - -Uuid Database::uuid() -{ - return m_uuid; -} - -Database* Database::databaseByUuid(const Uuid& uuid) +bool Database::isModified() const { - return m_uuidMap.value(uuid, 0); + return m_modified; } -void Database::startModifiedTimer() +void Database::markAsModified() { - if (!m_emitModified) { + if (isReadOnly()) { return; } - if (m_timer->isActive()) { - m_timer->stop(); + m_modified = true; + if (m_emitModified) { + startModifiedTimer(); } - m_timer->start(150); -} - -const CompositeKey& Database::key() const -{ - return m_data.key; } -Database* Database::openDatabaseFile(QString fileName, CompositeKey key) +void Database::markAsClean() { - - QFile dbFile(fileName); - if (!dbFile.exists()) { - qCritical("File %s does not exist.", qPrintable(fileName)); - return nullptr; - } - if (!dbFile.open(QIODevice::ReadOnly)) { - qCritical("Unable to open file %s.", qPrintable(fileName)); - return nullptr; + bool emitSignal = m_modified; + m_modified = false; + if (emitSignal) { + emit databaseSaved(); } - - KeePass2Reader reader; - Database* db = reader.readDatabase(&dbFile, key); - - if (reader.hasError()) { - qCritical("Error while parsing the database: %s", qPrintable(reader.errorString())); - return nullptr; - } - - return db; } -Database* Database::unlockFromStdin(QString databaseFilename, QString keyFilename) +/** + * @param uuid UUID of the database + * @return pointer to the database or nullptr if no such database exists + */ +Database* Database::databaseByUuid(const QUuid& uuid) { - 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; - } - compositeKey.addKey(fileKey); - } - - return Database::openDatabaseFile(databaseFilename, compositeKey); + return s_uuidMap.value(uuid, nullptr); } /** - * Save the database to a file. - * - * This function uses QTemporaryFile instead of QSaveFile due to a bug - * in Qt (https://bugreports.qt.io/browse/QTBUG-57299) that may prevent - * the QSaveFile from renaming itself when using Dropbox, Drive, or OneDrive. - * - * The risk in using QTemporaryFile is that the rename function is not atomic - * and may result in loss of data if there is a crash or power loss at the - * wrong moment. - * - * @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 filePath file path of the database + * @return pointer to the database or nullptr if the database has not been opened */ -QString Database::saveToFile(QString filePath, bool atomic, bool backup) +Database* Database::databaseByFilePath(const QString& filePath) { - QString error; - 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 (backup) { - backupDatabase(filePath); - } - - if (saveFile.commit()) { - // successfully saved database file - return {}; - } - } - error = saveFile.errorString(); - } else { - QTemporaryFile tempFile; - if (tempFile.open()) { - // write the database to the file - error = writeDatabase(&tempFile); - if (!error.isEmpty()) { - return error; - } - - tempFile.close(); // flush to disk - - if (backup) { - backupDatabase(filePath); - } - - // Delete the original db and move the temp file in place - QFile::remove(filePath); -#ifdef Q_OS_LINUX - // workaround to make this workaround work, see: https://bugreports.qt.io/browse/QTBUG-64008 - if (tempFile.copy(filePath)) { - // successfully saved database file - return {}; - } -#else - if (tempFile.rename(filePath)) { - // successfully saved database file - tempFile.setAutoRemove(false); - return {}; - } -#endif - } - error = tempFile.errorString(); - } - // Saving failed - return error; + return s_filePathMap.value(filePath, nullptr); } -QString Database::writeDatabase(QIODevice* device) +void Database::startModifiedTimer() { - KeePass2Writer writer; - setEmitModified(false); - writer.writeDatabase(device, this); - setEmitModified(true); + Q_ASSERT(!m_data.isReadOnly); - if (writer.hasError()) { - // the writer failed - return writer.errorString(); + if (!m_emitModified) { + return; } - return {}; -} -/** - * Remove the old backup and replace it with a new one - * backups are named .old.kdbx - * - * @param filePath Path to the file to backup - * @return - */ + if (m_timer->isActive()) { + m_timer->stop(); + } + m_timer->start(150); +} -bool Database::backupDatabase(QString filePath) +QSharedPointer Database::key() const { - QString backupFilePath = filePath; - auto re = QRegularExpression("\\.kdbx$|(? Database::kdf() const @@ -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 583ed3cac8..8df2b9317e 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 @@ class Database : public QObject }; 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); + Group* rootGroup(); + const Group* rootGroup() const; + void setRootGroup(Group* group); + QVariantMap& publicCustomData(); + const QVariantMap& publicCustomData() const; + void setPublicCustomData(const QVariantMap& customData); + + void recycleGroup(Group* group); + void recycleEntry(Entry* entry); + void emptyRecycleBin(); QList deletedObjects(); + const QList& deletedObjects() const; void addDeletedObject(const DeletedObject& delObj); - void addDeletedObject(const Uuid& uuid); + void addDeletedObject(const QUuid& uuid); + bool containsDeletedObject(const QUuid& uuid) const; + bool containsDeletedObject(const DeletedObject& uuid) const; + void setDeletedObjects(const QList& delObjs); - Uuid cipher() const; - Database::CompressionAlgorithm compressionAlgo() const; - QSharedPointer kdf() const; - QByteArray transformedMasterKey() const; - const CompositeKey& key() const; + 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); - void setCipher(const Uuid& cipher); - void setCompressionAlgo(Database::CompressionAlgorithm algo); + QSharedPointer kdf() const; void setKdf(QSharedPointer kdf); - bool setKey(const CompositeKey& key, bool updateChangedTime = true, - bool updateTransformSalt = false); - bool hasKey() const; - bool verifyKey(const CompositeKey& key) const; - QVariantMap& publicCustomData(); - const QVariantMap& publicCustomData() const; - void setPublicCustomData(const QVariantMap& customData); - void recycleEntry(Entry* entry); - void recycleGroup(Group* group); - void emptyRecycleBin(); - void setEmitModified(bool value); - void merge(const Database* other); - QString saveToFile(QString filePath, bool atomic = true, bool backup = false); + bool changeKdf(const QSharedPointer& kdf); + QByteArray transformedMasterKey() const; - /** - * Returns a unique id that is only valid as long as the Database exists. - */ - Uuid uuid(); - bool changeKdf(QSharedPointer kdf); + static Database* databaseByUuid(const QUuid& uuid); + static Database* databaseByFilePath(const QString& filePath); - static Database* databaseByUuid(const Uuid& uuid); - static Database* openDatabaseFile(QString fileName, CompositeKey key); - static Database* unlockFromStdin(QString databaseFilename, QString keyFilename = QString("")); +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 @@ class Database : public QObject 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 4e62f79e4d..6219d41f59 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 a1d9480b6a..ecd38fd8ae 100644 --- a/src/core/DatabaseIcons.h +++ b/src/core/DatabaseIcons.h @@ -33,6 +33,8 @@ class DatabaseIcons static const int IconCount; static const int ExpiredIconIndex; + static const int SharedIconIndex; + static const int UnsharedIconIndex; private: DatabaseIcons(); @@ -46,7 +48,8 @@ class DatabaseIcons 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 cd01eb4830..c2d87ee3fe 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())); + if (byteOrder == QSysInfo::LittleEndian) { + return qFromLittleEndian(reinterpret_cast(ba.constData())); + } + return qFromBigEndian(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)); + 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; + if (ba.size() != sizeof(SizedQInt)) { + *ok = false; + return 0; + } + *ok = true; + return bytesToSizedInt(ba, byteOrder); } - *ok = true; - return bytesToSizedInt(ba, byteOrder); -} -template -QByteArray sizedIntToBytes(SizedQInt num, QSysInfo::Endian byteOrder) -{ - QByteArray ba; - ba.resize(sizeof(SizedQInt)); + 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) { + qToLittleEndian(num, reinterpret_cast(ba.data())); + } else { + qToBigEndian(num, reinterpret_cast(ba.data())); + } - return ba; -} + 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()); -} + 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 800de0b06e..2ad73b055b 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 6ddf87dea0..c5f59f2e34 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 @@ class Entry : public QObject 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 @@ class Entry : public QObject 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 @@ class Entry : public QObject 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 @@ class Entry : public QObject 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 @@ class Entry : public QObject 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 @@ class Entry : public QObject 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 slots: 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 4dcc0262ba..49f5198d2f 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 c2fa55b44d..2cb884e778 100644 --- a/src/core/EntryAttachments.h +++ b/src/core/EntryAttachments.h @@ -44,7 +44,7 @@ class EntryAttachments : public QObject 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 772a56611e..80067c5637 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 91cc50879c..2cba13c648 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 @@ class EntryAttributes : public QObject 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 @@ class EntryAttributes : public QObject 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 @@ class EntryAttributes : public QObject 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 deaefa1aa9..f6c67ad502 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 results; +} - return searchResult; +/** + * 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) +{ + parseSearchTerms(searchString); + return repeatEntries(entries); } -QList EntrySearcher::matchEntry(const QString& searchTerm, Entry* entry, - Qt::CaseSensitivity caseSensitivity) +/** + * 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) { - const QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts); - for (const QString& word : wordList) { - if (!wordMatch(word, entry, caseSensitivity)) { - return QList(); + QList results; + for (auto* entry : entries) { + if (searchEntryImpl(entry)) { + results.append(entry); } } + return results; +} - return QList() << entry; +/** + * Set the next search to be case sensitive or not + * + * @param state + */ +void EntrySearcher::setCaseSensitive(bool state) +{ + m_caseSensitive = state; } -bool EntrySearcher::wordMatch(const QString& word, Entry* entry, Qt::CaseSensitivity caseSensitivity) +bool EntrySearcher::isCaseSensitive() { - 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); + return m_caseSensitive; } -bool EntrySearcher::matchGroup(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity) +bool EntrySearcher::searchEntryImpl(Entry* entry) { - const QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts); - for (const QString& word : wordList) { - if (!wordMatch(word, group, caseSensitivity)) { + // 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 da51eebc71..153a0612ee 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 dedb1c8a5b..1dd24b3fbb 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 c6f1907ad7..5b03227076 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 b0f0397e2a..b304b5f141 100644 --- a/src/core/FilePath.h +++ b/src/core/FilePath.h @@ -50,7 +50,8 @@ class FilePath 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 0000000000..64e86c3fa2 --- /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 0000000000..00d6a6c691 --- /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 1cae4b51ed..64570b33bf 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 692672652c..87741ee0cd 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,25 +570,21 @@ 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; - } - } + auto entries = entriesRecursive(); + return QtConcurrent::blockingFiltered(entries, + [entry](const Entry* e) { return e->hasReferencesTo(entry->uuid()); }); +} - entry = findEntryByPath(entryId); - if (entry) { - return entry; +Entry* Group::findEntryByUuid(const QUuid& uuid) const +{ + if (uuid.isNull()) { + return nullptr; } for (Entry* entry : entriesRecursive(false)) { - if (entry->title() == entryId) { + if (entry->uuid() == uuid) { return entry; } } @@ -543,32 +592,83 @@ Entry* Group::findEntry(QString entryId) return nullptr; } -Entry* Group::findEntryByUuid(const Uuid& uuid) +Entry* Group::findEntryByPath(const QString& entryPath) { - Q_ASSERT(!uuid.isNull()); - for (Entry* entry : entriesRecursive(false)) { - if (entry->uuid() == uuid) { - return entry; - } + if (entryPath.isEmpty()) { + return nullptr; } - return nullptr; + // 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, "/"); } -Entry* Group::findEntryByPath(QString entryPath, QString basePath) +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\""); - Q_ASSERT(!entryPath.isNull()); + const QList groups = groupsRecursive(true); - for (Entry* entry : asConst(m_entries)) { - QString currentEntryPath = basePath + entry->title(); - if (entryPath == currentEntryPath || entryPath == QString("/" + currentEntryPath)) { + 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; + } + } + } + + 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 : asConst(m_children)) { - Entry* entry = group->findEntryByPath(entryPath, basePath + group->name() + QString("/")); + 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()); - - QStringList possiblePaths; - possiblePaths << groupPath; - if (!groupPath.startsWith("/")) { - possiblePaths << QString("/" + groupPath); - } - if (!groupPath.endsWith("/")) { - possiblePaths << QString(groupPath + "/"); - } - if (!groupPath.endsWith("/") && !groupPath.endsWith("/")) { - possiblePaths << QString("/" + groupPath + "/"); + if (groupPath.isEmpty()) { + normalizedGroupPath = QString("/"); // root group + } else { + // clang-format off + normalizedGroupPath = (groupPath.startsWith("/") ? "" : "/") + + groupPath + + (groupPath.endsWith("/") ? "" : "/"); + // clang-format on } + return findGroupByPathRecursive(normalizedGroupPath, "/"); +} + +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(); - } - - // 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); - } - + if (uuid.isNull()) { + return nullptr; } - 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 cc923e43b4..4b85692074 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 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 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 }; Q_DECLARE_FLAGS(CloneFlags, CloneFlag) @@ -51,13 +64,17 @@ class Group : public QObject 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 @@ class Group : public QObject 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 @@ class Group : public QObject 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 @@ class Group : public QObject 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 @@ class Group : public QObject void setExpiryTime(const QDateTime& dateTime); void setMergeMode(MergeMode newMode); + bool canUpdateTimeinfo() const; void setUpdateTimeinfo(bool value); Group* parentGroup(); @@ -129,63 +151,54 @@ class Group : public QObject 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 0cfc8f0d44..85c58d2691 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 5687cbb1d0..6f289546fe 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 98dc6f7ab3..ae63ea4e49 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 d471a096a4..f2a71e73f1 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 0000000000..e4cf0f9947 --- /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 0000000000..03a47a27f3 --- /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 9da2f30dc6..45010a4ffe 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 a52cb0a782..01abcb809d 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 @@ class Metadata : public QObject 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 @@ class Metadata : public QObject 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 @@ class Metadata : public QObject 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 @@ class Metadata : public QObject 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 0000000000..d5873ee8d9 --- /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 0000000000..10434c0c2f --- /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 88871eb8cf..f972e0ef20 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 740fb54671..1132582d6d 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); - for (int i = 58; i <= 64; i++) { - group.append(i); - } + passwordGroups.append(group); + } + if (m_classes & Punctuation) { + PasswordGroup group; - for (int i = 91; i <= 96; i++) { - group.append(i); + // .,:; + 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 = 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 15a0dcefe3..7bfdddd694 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 @@ class PasswordGenerator 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 eb78cd6082..2c1ba055a2 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 b4eb81e04f..107d342a6f 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 03eed58adc..5c57861bda 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 72f308f721..ab73a8cf3d 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 dce05de3f9..08e4d1eeec 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 cd36ce9e64..d2bee79b8d 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 b36b9a33aa..9dce17d4d9 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 8ecad17d87..a7c080687f 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 80fa328949..05d01f4ccd 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 6a8380efed..523ae5d0bc 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 0f99b8e65d..d1ed89e30f 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 e2dbdac40f..a5331736cd 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 ec6ebdeec8..9f4faf3a46 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 455c002cd2..de8a37593c 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 @@ class TimeInfo 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 b9e4be8e04..b77a460d4d 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 #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; - - QStringList units = QStringList() << "B" << "KiB" << "MiB" << "GiB"; - int i = 0; - int maxI = units.size() - 1; + 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; + + while ((size >= kibibyte) && (i < maxI)) { + size /= kibibyte; + i++; + } - while ((size >= 1024) && (i < maxI)) { - size /= 1024; - 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 hasChild(const QObject* parent, const QObject* child) -{ - if (!parent || !child) { - return false; - } + bool readFromDevice(QIODevice* device, QByteArray& data, int size) + { + QByteArray buffer; + buffer.resize(size); - 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); -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; + if (readResult == -1) { + return false; + } else { + result.resize(static_cast(readBytes)); + data = result; + return true; } - } 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; + 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; + for (const QByteArray& format : formats) { + for (char codePoint : format) { + if (!QChar(codePoint).isLetterOrNumber()) { + continue; + } } + + formatsStringList.append("*." + QString::fromLatin1(format).toLower()); } - formatsStringList.append("*." + QString::fromLatin1(format).toLower()); + return formatsStringList.join(" "); } - 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; + bool isHex(const QByteArray& ba) + { + for (const unsigned char c : ba) { + if (!std::isxdigit(c)) { + return false; + } } + + return true; } - 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); -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()); - QString base64 = QString::fromLatin1(ba.constData(), ba.size()); - - return regexp.exactMatch(base64); -} + return regexp.exactMatch(base64); + } -void sleep(int ms) -{ - Q_ASSERT(ms >= 0); + void sleep(int ms) + { + Q_ASSERT(ms >= 0); - if (ms == 0) { - return; - } + if (ms == 0) { + return; + } #ifdef Q_OS_WIN - Sleep(uint(ms)); + Sleep(uint(ms)); #else - timespec ts; - ts.tv_sec = ms / 1000; - ts.tv_nsec = (ms % 1000) * 1000 * 1000; - nanosleep(&ts, nullptr); + 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; - do { - timeLeft = ms - timer.elapsed(); - if (timeLeft > 0) { - QCoreApplication::processEvents(QEventLoop::AllEvents, timeLeft); - sleep(10); - } - } while (!timer.hasExpired(ms)); - } -} + void wait(int ms) + { + Q_ASSERT(ms >= 0); -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 (ms == 0) { + return; + } -#if defined(HAVE_PR_SET_DUMPABLE) - success = success && (prctl(PR_SET_DUMPABLE, 0) == 0); -#endif + 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)); + } + } - // Mac OS X -#ifdef HAVE_PT_DENY_ATTACH - success = success && (ptrace(PT_DENY_ATTACH, 0, 0, 0) == 0); -#endif + // Escape common regex symbols except for *, ?, and | + auto regexEscape = QRegularExpression(R"re(([-[\]{}()+.,\\\/^$#]))re"); -#ifdef Q_OS_WIN - success = success && createWindowsDACL(); -#endif + QRegularExpression convertToRegex(const QString& string, bool useWildcards, bool exactMatch, bool caseSensitive) + { + QString pattern = string; - if (!success) { - qWarning("Unable to disable core dumps."); - } -} + // Wildcard support (*, ?, |) + if (useWildcards) { + pattern.replace(regexEscape, "\\\\1"); + pattern.replace("*", ".*"); + pattern.replace("?", "."); + } -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; + // Exact modifier + if (exactMatch) { + pattern = "^" + pattern + "$"; + } -#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; - } + auto regex = QRegularExpression(pattern); + if (!caseSensitive) { + regex.setPatternOptions(QRegularExpression::CaseInsensitiveOption); + } - // 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; + return regex; } - if (!GetTokenInformation( - hToken, - TokenUser, - pTokenUser, - cbBufferSize, - &cbBufferSize - )) { - goto Cleanup; + QString uuidToHex(const QUuid& uuid) + { + return QString::fromLatin1(uuid.toRfc4122().toHex()); } - if (!IsValidSid(pTokenUser->User.Sid)) { - goto Cleanup; + QUuid hexToUuid(const QString& uuid) + { + return QUuid::fromRfc4122(QByteArray::fromHex(uuid.toLatin1())); } - // 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; + Buffer::Buffer() + : raw(nullptr) + , size(0) + { } - if (!InitializeAcl(pACL, cbACL, ACL_REVISION)) { - goto Cleanup; + Buffer::~Buffer() + { + clear(); } - // 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; + void Buffer::clear() + { + if (size > 0) { + free(raw); + } + raw = nullptr; + size = 0; } - // 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 (pTokenUser != nullptr) { - HeapFree(GetProcessHeap(), 0, pTokenUser); - } - if (hToken != nullptr) { - CloseHandle(hToken); + QByteArray Buffer::content() const + { + return QByteArray(reinterpret_cast(raw), size); } -#endif - - return bSuccess; -} } // namespace Tools diff --git a/src/core/Tools.h b/src/core/Tools.h index b6fa49c027..a2c09efe22 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 34bc7c2e6f..595dadfa1d 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 cb32bfdc74..0000000000 --- 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 ecb20e0c36..0000000000 --- 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 7ba78a6b3c..ab97322caf 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 12c6bf7910..07bf5efc94 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 bd312121ab..02f90eb4de 100644 --- a/src/crypto/CryptoHash.h +++ b/src/crypto/CryptoHash.h @@ -34,7 +34,6 @@ class CryptoHash 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 dc0667fae3..4203b6c0c3 100644 --- a/src/crypto/Random.cpp +++ b/src/crypto/Random.cpp @@ -28,7 +28,7 @@ class RandomBackendGcrypt : public RandomBackend 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 038ae7aea7..bdf7b9acaf 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 @@ class Random 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 1ba42a5376..cdb0d1f562 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 0c683d2240..e0e91aff12 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 @@ class SymmetricCipher 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 dd493d2dfc..c8e98cfa42 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 @@ class SymmetricCipherBackend 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 97d53cd839..fb436522d7 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 2436c3be18..2f886999c3 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 @@ class SymmetricCipherGcrypt: public SymmetricCipherBackend 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 @@ class SymmetricCipherGcrypt: public SymmetricCipherBackend 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 8ea6108aa7..8eba85a6f9 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 593b01c248..0b2130cfe7 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 31ee1fa708..84156e6fb9 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 @@ class AesKdf: public Kdf 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 f67c9c1fba..2ae81a6b3e 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 fe62b29539..73b7f85296 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 @@ class Argon2Kdf : public Kdf { 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 e500dbe6f0..b4c4427c82 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 216224a6f3..368fb16f71 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 @@ class Kdf 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 5606c0bf5d..55ad2401b7 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 2b6cbd1065..b585d3abda 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 (!parsePublicHeader(stream)) { + return false; + } + + 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 (!parseHeader(stream, KEY_ZERO)) { + if (!parsePrivateHeader(stream, KEY_ZERO)) { return false; } - QByteArray n,e,d,p,q,dp,dq,qinv; + 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 59f8d4e81e..0a199d3576 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 b9ed236fdb..3ba4c1a818 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 c610101808..6f95039ec1 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 @@ class BinaryStream : QObject 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 0000000000..fdaf68e411 --- /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 4527bfb609..7cabf38c6a 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 e06af2201f..85c288b9f9 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 @@ class OpenSSHKey : QObject 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; + + static const QString TYPE_DSA_PRIVATE; + static const QString TYPE_RSA_PRIVATE; + static const QString TYPE_RSA_PUBLIC; + static const QString TYPE_OPENSSH_PRIVATE; - bool parsePEM(const QByteArray& in, QByteArray& out); + 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 c6bb4d32ee..23b4aeeb68 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 c444afe237..03d5a576f0 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 4040a3505b..e71cf7fa9a 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 84f7db67eb..4fec74718d 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 e629015787..ded7c52dc5 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 c2fefff1be..b2de41f44a 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 8acc198a5b..eb98a470db 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 2919db785a..fbdf865bc0 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 24d4a91427..3afb5bf69a 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 bd671d9c7b..33c0024ede 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 90a8e658ef..c8540245b1 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 36ff6d1970..50b7a72453 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 994cfb7ef8..9a500c3f65 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 @@ Q_DECLARE_TR_FUNCTIONS(KdbxReader) bool saveXml() const; void setSaveXml(bool save); QByteArray xmlData() const; - QByteArray streamKey() const; KeePass2::ProtectedStreamAlgo protectedStreamAlgo() const; protected: @@ -58,19 +57,22 @@ Q_DECLARE_TR_FUNCTIONS(KdbxReader) * @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 @@ Q_DECLARE_TR_FUNCTIONS(KdbxReader) 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 @@ Q_DECLARE_TR_FUNCTIONS(KdbxReader) 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 5aa41766ea..4685797ca6 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 @@ Q_DECLARE_TR_FUNCTIONS(KdbxWriter) QString errorString() const; protected: - /** * Helper method for writing a KDBX header field to a device. * @@ -72,8 +73,8 @@ Q_DECLARE_TR_FUNCTIONS(KdbxWriter) 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 @@ Q_DECLARE_TR_FUNCTIONS(KdbxWriter) QString m_errorStr = ""; }; - -#endif //KEEPASSXC_KDBXWRITER_H +#endif // KEEPASSXC_KDBXWRITER_H diff --git a/src/format/KdbxXmlReader.cpp b/src/format/KdbxXmlReader.cpp index 0eb9e1c673..84d597bdb8 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 500151828b..2ec9c9f668 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 @@ Q_DECLARE_TR_FUNCTIONS(KdbxXmlReader) 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 @@ Q_DECLARE_TR_FUNCTIONS(KdbxXmlReader) 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 a546f3171c..7aa79c47d1 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 e2c5b73c8f..1a367a263d 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 @@ class KdbxXmlWriter 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 @@ class KdbxXmlWriter 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 @@ class KdbxXmlWriter 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 fa220da03c..caddee441f 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 390857075b..e42449358d 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 @@ class KeePass1Key : public CompositeKey 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 e98dd7d1f7..b9ad6ee669 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 @@ class KeePass1Reader 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 @@ class KeePass1Reader 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 9c0355cd41..fbc3930308 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 + +#define UUID_LENGTH 16 -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")); +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 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::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 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 67779121fb..d18db3578e 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 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; - -const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; - -extern const Uuid CIPHER_AES; -extern const Uuid CIPHER_TWOFISH; -extern const Uuid CIPHER_CHACHA20; - -extern const Uuid KDF_AES_KDBX3; -extern const Uuid KDF_AES_KDBX4; -extern const Uuid KDF_ARGON2; - -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 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 InnerHeaderFieldID : quint8 -{ - End = 0, - InnerRandomStreamID = 1, - InnerRandomStreamKey = 2, - Binary = 3 -}; - -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 -}; - -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); - -} // namespace KeePass2 + 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 quint16 VARIANTMAP_VERSION = 0x0100; + constexpr quint16 VARIANTMAP_CRITICAL_MASK = 0xFF00; + + const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; + + extern const QUuid CIPHER_AES128; + extern const QUuid CIPHER_AES256; + extern const QUuid CIPHER_TWOFISH; + extern const QUuid CIPHER_CHACHA20; + + 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 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; + + 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 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 + }; + + 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 #endif // KEEPASSX_KEEPASS2_H diff --git a/src/format/KeePass2RandomStream.cpp b/src/format/KeePass2RandomStream.cpp index 26824b7e5c..2f8c8340d6 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 1e341bacc2..e41f5a5d6c 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 abc7f54e1c..97c361abee 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 1b91223eee..c6c3b0f2b5 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 "KdbxReader.h" #include "core/Database.h" +#include "format/KeePass2.h" #include "keys/CompositeKey.h" -#include "KdbxReader.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 @@ Q_DECLARE_TR_FUNCTIONS(KdbxReader) 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 47ed59dc9d..0000000000 --- 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 325986a33b..0bd2472801 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 f024d4a837..e5b26eaeaf 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 0000000000..470b36a640 --- /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 adfdea0a70..0de79fccc0 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 9d0c1c3559..bd6b2edb99 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 2b274544a4..8bd8ea01f1 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 48cd0d8d70..b79f2c30a9 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 -{ -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 +namespace { -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 1f5759368b..9a3ef756b7 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 slots: 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 30cc11e5ca..90b851bd9e 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" + +#include "touchid/TouchID.h" -class SettingsWidget::ExtraPage +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 27566037d1..ffcfea2be9 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 2d94892f22..798971bfe8 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 da3def8689..344c2b81c9 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 + + + + + + + Don't use placeholder for empty password fields - + - Hide passwords in the preview panel + 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 f091cc2435..c57b19bc03 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 @@ class WindowsCorrectedStyle : public QProxyStyle }; #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 3cf82fd1bb..7873a3d3ef 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 @@ class CategoryListWidget : public QWidget 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 @@ protected slots: Q_DISABLE_COPY(CategoryListWidget) }; - /* =============================================================================================== */ - class CategoryListWidgetDelegate : public QStyledItemDelegate { Q_OBJECT @@ -77,10 +79,9 @@ class CategoryListWidgetDelegate : public QStyledItemDelegate 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 @@ class CategoryListWidgetDelegate : public QStyledItemDelegate Q_DISABLE_COPY(CategoryListWidgetDelegate) }; + +#endif diff --git a/src/gui/ChangeMasterKeyWidget.cpp b/src/gui/ChangeMasterKeyWidget.cpp deleted file mode 100644 index 28a0991db5..0000000000 --- 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 2825d8d554..0000000000 --- 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 693d8ac1d4..0000000000 --- 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 2c0d3d6ed5..a0978bfd4e 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 279ae7f035..2748ba6da3 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 slots: 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 slots: 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 7af5043952..e91df62c73 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 a925bb47aa..5699384649 100644 --- a/src/gui/CloneDialog.h +++ b/src/gui/CloneDialog.h @@ -18,13 +18,14 @@ #ifndef KEEPASSX_CLONEDIALOG_H #define KEEPASSX_CLONEDIALOG_H -#include -#include -#include "core/Entry.h" #include "core/Database.h" +#include "core/Entry.h" #include "gui/DatabaseWidget.h" +#include +#include -namespace Ui { +namespace Ui +{ class CloneDialog; } diff --git a/src/gui/DatabaseOpenDialog.cpp b/src/gui/DatabaseOpenDialog.cpp new file mode 100644 index 0000000000..ff7d46f221 --- /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 0000000000..f2860fccb6 --- /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 d011e8b634..1558466406 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 "crypto/Random.h" +#include "format/KeePass2Reader.h" #include "gui/FileDialog.h" +#include "gui/MainWindow.h" #include "gui/MessageBox.h" -#include "format/KeePass2Reader.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); - return; - } - if (m_db) { - delete m_db; - } + m_db.reset(new Database()); + QString error; QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - m_db = reader.readDatabase(&file, *masterKey); + 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) { +#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 aade111c3a..72f07cfa86 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 @@ class DatabaseOpenWidget : public DialogyWidget 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 dba71d0fac..641d67da0e 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 d3dddf14f1..0000000000 --- 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 79b84f88c9..0000000000 --- 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 b0cae5dbc9..0000000000 --- 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 502bc012c9..0000000000 --- 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 a171a938dd..c908a82ec1 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() } } -void DatabaseTabWidget::newDatabase() +/** + * 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() { - DatabaseManagerStruct dbStruct; - Database* db = new Database(); - db->rootGroup()->setName(tr("Root", "Root group")); - dbStruct.dbWidget = new DatabaseWidget(db, this); + // 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 {}; + } - CompositeKey emptyKey; - db->setKey(emptyKey); + 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 {}; + } - insertDatabase(db, dbStruct); + return db; +} - if (!saveDatabaseAs(db)) { - closeDatabase(db); +void DatabaseTabWidget::newDatabase() +{ + 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); + int tabIndex = indexOf(dbWidget); + if (!dbWidget || tabIndex < 0) { + return false; } -} -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 + QString filePath = dbWidget->database()->filePath(); + if (!dbWidget->close()) { return false; } + + removeTab(tabIndex); + dbWidget->deleteLater(); + toggleTabbar(); + emit databaseClosed(filePath); + return true; } -bool DatabaseTabWidget::closeDatabase(int index) +/** + * 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() { - if (index == -1) { - index = currentIndex(); + while (count() > 0) { + if (!closeDatabaseTab(0)) { + return false; + } } - setCurrentIndex(index); - - return closeDatabase(indexDatabase(index)); -} - -void DatabaseTabWidget::closeDatabaseFromSender() -{ - Q_ASSERT(sender()); - DatabaseWidget* dbWidget = static_cast(sender()); - Database* db = databaseFromDatabaseWidget(dbWidget); - int index = databaseIndex(db); - setCurrentIndex(index); - closeDatabase(db); + 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,270 +388,181 @@ 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; + return !isReadOnly(index) && isModified(index); } -QString DatabaseTabWidget::databasePath(int index) +bool DatabaseTabWidget::hasLockableDatabases() const { - if (index == -1) { - index = currentIndex(); + for (int i = 0, c = count(); i < c; ++i) { + if (!databaseWidgetFromIndex(i)->isLocked()) { + return true; + } } - - return indexDatabaseManagerStruct(index).fileInfo.absoluteFilePath(); + return false; } - -void DatabaseTabWidget::updateTabName(Database* db) +/** + * 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) { - int index = databaseIndex(db); - Q_ASSERT(index != -1); + if (index == -1 || index > count()) { + return ""; + } - const DatabaseManagerStruct& dbStruct = m_dbList.value(db); + auto* dbWidget = databaseWidgetFromIndex(index); + + auto db = dbWidget->database(); + Q_ASSERT(db); + if (!db) { + return ""; + } QString tabName; - if (dbStruct.fileInfo.exists()) { + if (!db->filePath().isEmpty()) { + QFileInfo fileInfo(db->filePath()); + if (db->metadata()->name().isEmpty()) { - tabName = dbStruct.fileInfo.fileName(); + tabName = fileInfo.fileName(); } else { tabName = db->metadata()->name(); } - setTabToolTip(index, dbStruct.fileInfo.absoluteFilePath()); + setTabToolTip(index, fileInfo.absoluteFilePath()); } else { if (db->metadata()->name().isEmpty()) { - tabName = tr("New database"); + tabName = tr("New Database"); } else { - tabName = QString("%1 [%2]").arg(db->metadata()->name(), tr("New database")); + tabName = tr("%1 [New Database]", "Database tab name modifier").arg(db->metadata()->name()); } } - if (dbStruct.dbWidget->currentMode() == DatabaseWidget::LockedMode) { - tabName.append(QString(" [%1]").arg(tr("locked"))); - } - - if (dbStruct.modified) { - tabName.append("*"); + if (dbWidget->isLocked()) { + tabName = tr("%1 [Locked]", "Database tab name modifier").arg(tabName); } - 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(), ""); - } + if (db->isReadOnly()) { + tabName = tr("%1 [Read-only]", "Database tab name modifier").arg(tabName); } -} -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(); - } + if (db->isModified()) { + tabName.append("*"); } - return nullptr; + return tabName; } -DatabaseManagerStruct DatabaseTabWidget::indexDatabaseManagerStruct(int index) +/** + * Update of the given tab index or of the sending + * DatabaseWidget if `index` == -1. + */ +void DatabaseTabWidget::updateTabName(int index) { - QWidget* dbWidget = widget(index); - - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - if (i.value().dbWidget == dbWidget) { - return i.value(); - } + auto* dbWidget = databaseWidgetFromIndex(index); + if (!dbWidget) { + dbWidget = qobject_cast(sender()); } - - return DatabaseManagerStruct(); -} - -Database* DatabaseTabWidget::databaseFromDatabaseWidget(DatabaseWidget* dbWidget) -{ - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - if (i.value().dbWidget == dbWidget) { - return i.key(); - } + Q_ASSERT(dbWidget); + if (!dbWidget) { + return; } - - return nullptr; + index = indexOf(dbWidget); + setTabText(index, tabName(index)); + emit tabNameChanged(); } -void DatabaseTabWidget::insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct) +DatabaseWidget* DatabaseTabWidget::databaseWidgetFromIndex(int index) const { - 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())); + return qobject_cast(widget(index)); } DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget() { - Database* db = indexDatabase(currentIndex()); - if (db) { - return m_dbList[db].dbWidget; - } - else { - return nullptr; - } + return qobject_cast(currentWidget()); } -bool DatabaseTabWidget::hasLockableDatabases() const +void DatabaseTabWidget::lockDatabases() { - 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()) { - return true; + 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); } } - - return false; } -void DatabaseTabWidget::lockDatabases() +/** + * 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) { - 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; - } - - // 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; - } - } + unlockDatabaseInDialog(dbWidget, intent, dbWidget->database()->filePath()); +} - dbWidget->lock(); - // database has changed so we can't use the db variable anymore - updateTabName(dbWidget->database()); +/** + * 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); - emit databaseLocked(dbWidget); +#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(); } /** @@ -748,112 +571,73 @@ void DatabaseTabWidget::lockDatabases() */ 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; - - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - DatabaseWidget::Mode mode = i.value().dbWidget->currentMode(); + QList> unlockedDatabases; - 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 38f9b84748..eda28839a2 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(); - bool hasLockableDatabases() const; + DatabaseWidget* databaseWidgetFromIndex(int index) const; - static const int LastDatabasesCount; + bool isReadOnly(int index = -1) const; + bool canSave(int index = -1) const; + bool isModified(int index = -1) const; + bool hasLockableDatabases() const; 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 69c0e7c815..8728c331f9 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 "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); - - setTabOrder(m_entryView, m_groupView); - - m_mainSplitter->addWidget(m_groupView); - m_mainSplitter->addWidget(rightHandSideWidget); - - m_mainSplitter->setStretchFactor(0, 30); - m_mainSplitter->setStretchFactor(1, 70); +#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 - layout->addWidget(m_mainSplitter); - m_mainWidget->setLayout(mainLayout); + 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_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 (!confirmDeleteEntries(selectedEntries, permanent)) { + return; + } - if (result == QMessageBox::Yes) { - for (Entry* entry : asConst(selectedEntries)) { - delete entry; + // 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; + } } - refreshSearch(); } + + it++; } - 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); + if (permanent) { + for (auto* entry : asConst(selectedEntries)) { + delete entry; } - 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); + } else { + for (auto* entry : asConst(selectedEntries)) { + m_db->recycleEntry(entry); } + } - if (result == QMessageBox::No) { - return; + 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()); } - for (Entry* entry : asConst(selectedEntries)) { - m_db->recycleEntry(entry); + 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(); + 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())); +} - if (!result) { - m_messageWidget->showMessage(tr("Unable to calculate master key"), MessageWidget::Error); - return; - } - } - else if (!m_db->hasKey()) { - emit closeRequest(); +void DatabaseWidget::loadDatabase(bool accepted) +{ + auto* openWidget = qobject_cast(sender()); + Q_ASSERT(openWidget); + if (!openWidget) { return; } - setCurrentWidget(m_mainWidget); -} - -void DatabaseWidget::openDatabase(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); - } - else { - m_fileWatcher.removePath(m_filePath); + 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,160 +970,156 @@ 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::switchToEntryEdit() +void DatabaseWidget::switchToDatabaseSettings() { - Entry* entry = m_entryView->currentEntry(); - - if (!entry) { - return; - } - - switchToEntryEdit(entry, false); + m_databaseSettingDialog->load(m_db); + setCurrentWidget(m_databaseSettingDialog); } -void DatabaseWidget::switchToGroupEdit() +void DatabaseWidget::switchToOpenDatabase() { - Group* group = m_groupView->currentGroup(); - - if (!group) { - return; - } - - switchToGroupEdit(group, false); + switchToOpenDatabase(m_db->filePath()); } -void DatabaseWidget::switchToMasterKeyChange(bool disableCancel) +void DatabaseWidget::switchToOpenDatabase(const QString& filePath) { - m_changeMasterKeyWidget->clearForms(); - m_changeMasterKeyWidget->setCancelEnabled(!disableCancel); - setCurrentWidget(m_changeMasterKeyWidget); - m_importingCsv = false; + updateFilePath(filePath); + m_databaseOpenWidget->load(filePath); + setCurrentWidget(m_databaseOpenWidget); } -void DatabaseWidget::switchToDatabaseSettings() +void DatabaseWidget::switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile) { - m_databaseSettingsWidget->load(m_db); - setCurrentWidget(m_databaseSettingsWidget); + switchToOpenDatabase(filePath); + m_databaseOpenWidget->enterKey(password, keyFile); } -void DatabaseWidget::switchToOpenDatabase(const QString& filePath) +void DatabaseWidget::switchToCsvImport(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); - } + setCurrentWidget(m_csvImportWizard); + m_csvImportWizard->load(filePath, m_db.data()); } -void DatabaseWidget::switchToOpenDatabase(const QString& filePath, const QString& password, - const QString& keyFile) +void DatabaseWidget::csvImportFinished(bool accepted) { - updateFilePath(filePath); - switchToOpenDatabase(filePath); - if (m_databaseOpenWidget) { - m_databaseOpenWidget->enterKey(password, keyFile); - } else if (m_unlockDatabaseWidget) { - m_unlockDatabaseWidget->enterKey(password, keyFile); + if (!accepted) { + emit closeRequest(); + } else { + switchToMainView(); } } -void DatabaseWidget::switchToImportCsv(const QString& filePath) +void DatabaseWidget::switchToImportKeepass1(const QString& filePath) { updateFilePath(filePath); - m_csvImportWizard->load(filePath, m_db); - m_changeMasterKeyWidget->clearForms(); - m_changeMasterKeyWidget->setCancelEnabled(false); - setCurrentWidget(m_changeMasterKeyWidget); - m_importingCsv = true; + m_keepass1OpenWidget->load(filePath); + setCurrentWidget(m_keepass1OpenWidget); } -void DatabaseWidget::switchToOpenMergeDatabase(const QString& filePath) +void DatabaseWidget::switchToEntryEdit() { - m_databaseOpenMergeWidget->clearForms(); - m_databaseOpenMergeWidget->load(filePath); - setCurrentWidget(m_databaseOpenMergeWidget); -} + Entry* entry = m_entryView->currentEntry(); + if (!entry) { + return; + } -void DatabaseWidget::switchToOpenMergeDatabase(const QString& filePath, const QString& password, - const QString& keyFile) -{ - switchToOpenMergeDatabase(filePath); - m_databaseOpenMergeWidget->enterKey(password, keyFile); + switchToEntryEdit(entry, false); } -void DatabaseWidget::switchToImportKeepass1(const QString& filePath) +void DatabaseWidget::switchToGroupEdit() { - updateFilePath(filePath); - m_keepass1OpenWidget->load(filePath); - setCurrentWidget(m_keepass1OpenWidget); + Group* group = m_groupView->currentGroup(); + + if (!group) { + return; + } + + switchToGroupEdit(group, false); } -void DatabaseWidget::databaseModified() +void DatabaseWidget::switchToMasterKeyChange() { - m_databaseModified = true; + switchToDatabaseSettings(); + m_databaseSettingDialog->showMasterKeySettings(); } -void DatabaseWidget::databaseSaved() +void DatabaseWidget::performUnlockDatabase(const QString& password, const QString& keyfile) { - m_databaseModified = false; + if (password.isEmpty() && keyfile.isEmpty()) { + return; + } + + if (!m_db->isInitialized() || isLocked()) { + switchToOpenDatabase(); + m_databaseOpenWidget->enterKey(password, keyfile); + } } -void DatabaseWidget::refreshSearch() { - if (isInSearchMode()) { +void DatabaseWidget::refreshSearch() +{ + 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,61 +1198,94 @@ 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); + if (entry) { + m_previewView->setEntry(entry); + } + + emit entrySelectionChanged(); } -void DatabaseWidget::emitPressedEntry(Entry* currentEntry) +bool DatabaseWidget::canDeleteCurrentGroup() const { - if (!currentEntry) { - // if no entry is pressed, leave in details the last entry - return; - } + bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup(); + return !isRootGroup; +} - emit pressedEntry(currentEntry); +Group* DatabaseWidget::currentGroup() const +{ + return m_groupView->currentGroup(); } -void DatabaseWidget::emitPressedGroup(Group* currentGroup) +void DatabaseWidget::closeEvent(QCloseEvent* event) { - if (!currentGroup) { - // if no group is pressed, leave in details the last group + if (!isLocked() && !lock()) { + event->ignore(); return; } - emit pressedGroup(currentGroup); + event->accept(); } -bool DatabaseWidget::dbHasKey() const +void DatabaseWidget::showEvent(QShowEvent* event) { - return m_db->hasKey(); -} + if (!m_db->isInitialized() || isLocked()) { + switchToOpenDatabase(); + } -bool DatabaseWidget::canDeleteCurrentGroup() const -{ - bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup(); - return !isRootGroup; + event->accept(); } -bool DatabaseWidget::isInSearchMode() const +bool DatabaseWidget::lock() { - return m_entryView->inSearchMode(); -} + if (isLocked()) { + return true; + } -Group* DatabaseWidget::currentGroup() const -{ - return m_groupView->currentGroup(); -} + clipboard()->clearCopiedText(); -void DatabaseWidget::lock() -{ - Q_ASSERT(currentMode() != DatabaseWidget::LockedMode); + 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); - - 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; - } - } - - 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(); + 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 (result == MessageBox::Merge) { + // Merge the old database into the new one + Merger merger(m_db.data(), db.data()); + merger.merge(); } + } - 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) -{ - Group* restoredGroup = nullptr; - const QList groups = m_db->rootGroup()->groupsRecursive(true); - for (Group* group : groups) { - if (group->uuid() == groupUuid) { - restoredGroup = group; - break; +void DatabaseWidget::restoreGroupEntryFocus(const QUuid& groupUuid, const QUuid& entryUuid) +{ + 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(); + } + + 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); + } + } - m_unlockDatabaseDialog->show(); - m_unlockDatabaseDialog->activateWindow(); + 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 464a543ab9..9c2788995a 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 @@ class DatabaseWidget : public QStackedWidget 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; + + QSharedPointer database() const; + + DatabaseWidget::Mode currentMode() const; + bool isLocked() const; + bool isSearchActive() const; + QString getCurrentSearch(); + void refreshSearch(); + + GroupView* groupView(); + EntryView* entryView(); + Group* currentGroup() const; - int addWidget(QWidget* w); - void setCurrentIndex(int index); - void setCurrentWidget(QWidget* widget); - DatabaseWidget::Mode currentMode() const; - void lock(); - void updateFilePath(const QString &filePath); + bool canDeleteCurrentGroup() const; + bool isGroupSelected() const; + bool isRecycleBinSelected() const; int numberOfSelectedEntries() const; + QStringList customEntryAttributes() const; - bool isGroupSelected() const; - bool isInEditMode() 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); - - 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; + void processAutoOpen(); + bool confirmDeleteEntries(QList entries, bool permanent); + + 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 9b89412ea5..5579b30cd0 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 0b1c9b7cb5..bf254e1f58 100644 --- a/src/gui/DatabaseWidgetStateSync.h +++ b/src/gui/DatabaseWidgetStateSync.h @@ -49,7 +49,7 @@ private slots: 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 38906150e0..0000000000 --- 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 d8e05a911b..858d2949b0 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 a19031a8d8..c40cceb756 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 7950fe987e..be7ea01df8 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 8b89f1f8f6..f0d157c496 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 @@ class EditWidget : public DialogyWidget 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 8242c43995..242ae4542f 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; + } + } + + if (!hostIsIp) { + QString secondLevelDomain = getSecondLevelDomain(m_url); + + // Attempt to simply load the favicon.ico file + if (fullyQualifiedDomain != secondLevelDomain) { + m_urlsToTry.append(QUrl(m_url.scheme() + "://" + secondLevelDomain + "/favicon.ico")); + } } - 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"); + // 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); - urlGoogle.setQuery("domain=" + QUrl::toPercentEncoding(secondLevelDomain)); - m_urlsToTry.append(urlGoogle); + 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")); - - QString filename = QFileDialog::getOpenFileName( - this, tr("Select Image"), "", filter); - if (!filename.isEmpty()) { - auto icon = QImage(filename); - if (!icon.isNull()) { - addCustomIcon(QImage(filename)); + if (m_db) { + QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), Tools::imageReaderFilter(), tr("All files")); + + 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 82fcdeeb54..dcff02f565 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 @@ class EditWidgetIcons : public QWidget 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 a06928c469..dbaaf4148a 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 a1fd198d78..30a983e98f 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 @@ class EditWidgetProperties : public QWidget 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 f975626619..fb8ed50304 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 93b4b9f6e9..0fd8826c87 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) { - 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()); + 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->setRawText(QString("\u25cf").repeated(6)); + 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/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 { + // 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(); - } -} - -void DetailsWidget::deleteTotpTimer() -{ - if (m_totpTimer) { - delete m_totpTimer; - } + 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::updateTotpLabel() +void EntryPreviewWidget::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 abec334008..5bfd9dbd65 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 slots: 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 0000000000..8322946bbc --- /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 9f3caf6da2..a003bd5b7c 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 9a57a9218b..eedb691dae 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 @@ class FileDialog 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 bfc3d7d36f..076c427703 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 1c181eae2b..39732c5024 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 868ce44263..1a603bc7a9 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 @@ class CustomIconModel : public QAbstractListModel 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 910f0c91bb..fabc52952c 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 915864241e..834425ec18 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 148dc3d171..4ad18fef5c 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 f6cc2e4bb4..6e3c96af0c 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 @@ class HttpPlugin: public ISettingsPage 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(); - } -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(); + qobject_cast(widget)->saveSettings(); + if (browserSettings()->isEnabled()) { + m_nativeMessagingHost->run(); + } else { + m_nativeMessagingHost->stop(); } + } - void saveSettings(QWidget* widget) override - { - qobject_cast(widget)->saveSettings(); - if (BrowserSettings::isEnabled()) { - m_nativeMessagingHost->run(); - } else { - m_nativeMessagingHost->stop(); - } - } - private: - QSharedPointer m_nativeMessagingHost; +private: + 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(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(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->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->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->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->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->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())); 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); - } -#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())); + m_ui->globalMessageWidget->showMessage(tr("Access error for config file %1").arg(config()->getFileName()), + MessageWidget::Error); } -#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 d23e9b35c5..cd7b1a39bd 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 @@ class MainWindow : public QMainWindow }; 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 @@ public slots: 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 slots: 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 slots: 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 e9eeb9e6bd..004518eec9 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... + + + Import a CSV file - + - Re&pair database... + 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 8b229ce347..95edfdd9e7 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 06e0ce87ec..a564f37450 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 40912b7e99..582baa5ccb 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; - return returnButton; - } + 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}}, + }; } -QMessageBox::StandardButton MessageBox::information(QWidget* parent, - const QString& title, const QString& text, - QMessageBox::StandardButtons buttons, - QMessageBox::StandardButton defaultButton) +QString MessageBox::stdButtonText(QMessageBox::StandardButton button) { - if (m_nextAnswer == QMessageBox::NoButton) { - return QMessageBox::information(parent, title, text, buttons, defaultButton); - } - else { - QMessageBox::StandardButton returnButton = m_nextAnswer; - m_nextAnswer = QMessageBox::NoButton; - return returnButton; - } + QMessageBox buttonHost; + return buttonHost.addButton(button)->text(); } -QMessageBox::StandardButton MessageBox::question(QWidget* parent, - const QString& title, const QString& text, - QMessageBox::StandardButtons buttons, - QMessageBox::StandardButton defaultButton) +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 == QMessageBox::NoButton) { - return QMessageBox::question(parent, title, text, buttons, defaultButton); - } - else { - QMessageBox::StandardButton returnButton = m_nextAnswer; - m_nextAnswer = QMessageBox::NoButton; + 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